up to sf 7

This commit is contained in:
Tykayn 2025-02-09 16:45:35 +01:00 committed by tykayn
parent a39b6239b0
commit 501795a8fa
16586 changed files with 19384005 additions and 0 deletions

View file

@ -0,0 +1,26 @@
{% verbatim %}
<div id="choice-categories" class="choice-categories well" ng-if="categories.length">
<h2>
<i class="fa-eye fa"></i>
Visibilité des
{{ categories.length - categoriesVisibleCount() }} /
{{ categories.length }} catégories
</h2>
<div ng-repeat="c in categories">
<div class="btn btn-block"
ng-class="{'btn-success': !c.hidden}"
ng-click="c.hidden = !c.hidden">
{{ c.name }}
<span ng-if="c.hidden">(caché)</span>
</div>
</div>
</div>
<div class="well" ng-if="!categories.length">
<i class="fa fa-info"></i>
Aucune catégorie enregistrée
</div>
{% endverbatim %}

View file

@ -0,0 +1,64 @@
{% verbatim %}
<div class="current-selling">
<hr>
<form>
<div class="new-display">
<div class="row">
</div>
<div class="row">
<div class="col-xs-12 col-sm-6">
<button class="btn btn-warning btn-remove-all marged-v" ng-click="removeAll()" ng-disable="!CurrentSellingTotal()">
<i class="fa fa-trash"></i> enlever tout
</button>
</div>
</div>
<div ng-repeat="group in activeSellingFiltered track by $index">
<div class="row">
<div class="col-xs-2">
<span class="btn btn-warning remove-item"
ng-click="removeGroupeProducts(group.groupId)">
<i class="fa fa-trash"></i>
</span>
</div>
<div class="col-xs-10">
<input class="group-name" type="text" ng-model="group.name">
</div>
</div>
<div class="row">
<div class="col-xs-7 col-xs-offset-2 ">
<span ng-if="group.count > 1">
<strong>
{{group.unitPrice}}
€ </strong>
</span>
<span class="badge badge-default" ng-if="group.count">
<i class="fa fa-times"></i> {{group.count}}
</span>
</div>
<div class="col-xs-3 text-right">
<strong>
{{group.totalPrice}}
€ </strong>
</div>
</div>
</div>
</div>
<hr>
{% endverbatim %}
{% include 'logged/angular/totals.html.twig' %}
{% include 'logged/angular/validate-button.html.twig' %}
{% include 'logged/angular/pause-selling.html.twig' %}
</form>
</div>
</div>

View file

@ -0,0 +1,40 @@
{% verbatim %}
<div class="horizontal-land">
<div class="super-large" style="min-width: {{(1+categories.length) * 400}}px">
<div class="category-listing one-category col-xs-12 col-sm-4 " ng-repeat="c in categories"
ng-if="! c.hidden">
<h2 ng-class="{'hidden':c.hidden}" class="title">
{{ c.name }}
</h2>
<div class="product-listing" >
<span ng-repeat="p in c.products track by p.id"
class="product-box"
>
<button class="product-button text-left" ng-class="{ 'active' : p.enabled}" ng-click="addProduct( p )">
<img class="product-image" src="{{p.image}}" alt="image" ng-if="p.image.length">
<span class="product-name">
{{ p.name }}
</span>
<span class="badge">
{{ p.price }}
</span>
<span class="badge badge-default" ng-if="show_config.stock_count">
{{ p.stockCount }}
</span>
<span class="badge badge-success" ng-if="show_config.sold">
<i class="fa fa-tick"></i>
{{ countProductsSoldForActiveFestival[p.id] }}
</span>
</button>
<button class="express-button" ng-if="show_config.expressSelling" ng-click="expressSell(p)" title="achat express sans compléter les infos du client">
<i class="fa fa-shopping-cart"></i>
</button>
</span>
</div>
</div>
</div>
</div>
{% endverbatim %}

View file

@ -0,0 +1,30 @@
<!--ok loading done-->
<div id="loaded" ng-if="initLoadDone">
<!--caisse IHM-->
<div id="load_ok">
<div id="listing-products" class="listing-products col-xs-12 col-md-8">
{% include 'logged/angular/messages.html.twig' %}
{% include 'logged/angular/listing-products.html.twig' %}
</div>
<div id="sellings" class="sellings col-xs-12 col-md-4">
<div class="list-sell" ng-class="{'bg-success text-success': sellingOk }">
{% include 'logged/angular/validate-button.html.twig' %}
{% if app.user.products |length %}
{% include 'logged/angular/current.html.twig' %}
{% endif %}
{#{% include 'logged/angular/paused.html.twig' %}#}
</div>
</div>
</div>
<div id="other_time">
{% include 'logged/angular/recent.html.twig' %}
</div>
<div class="col-xs-12 col-md-4 col-md-offset-8">
{% include 'logged/angular/categ-options.html.twig' %}
</div>
</div>

View file

@ -0,0 +1,42 @@
{% verbatim %}
<div id="messages">
<div id="no-categories" class="alert alert-info" ng-if="!categories.length">
<i class="fa fa-info"></i>
Vous n'avez pas encore enregistré de <strong>catégorie de produit</strong>, ajoutez-en donc.
</div>
<div id="no-products" class="alert alert-info" ng-if="!productsFromDB.length">
<i class="fa fa-info"></i>
Vous n'avez pas encore enregistré de <strong>produit</strong>, ajoutez-en donc.
</div>
{% endverbatim %}
<div>
{% if app.user.activeFestival is null %}
<div id="no-products" class="alert alert-info" ng-if="!productsFromDB.length">
<i class="fa fa-info"></i>
Sélectionnez un <strong>festival</strong> pour grouper vos ventes clients par évènement.
</div>
{% endif %}
</div>
{% if not (app.user.products |length) %}
<div class="alert alert-info" ng-if="!productsFromDB.length && initLoadDone">
<i class="fa fa-info"></i>
Créez facilement vos catégories de produits et vos produits juste en écrivant un nom par ligne dans
<a class="link" href="{{ path('import') }}">
<button>
l'interface d'importation simplifiée
</button>
</a>
</div>
<hr>
{% endif %}
{% verbatim %}
<!--end messages warning-->
</div>
{% endverbatim %}

View file

@ -0,0 +1,8 @@
{% verbatim %}
<!--<div class="col">-->
<!--<button class="btn btn-default" id="pause_selling" ng-click="pauseSelling()">-->
<!--<i class="fa fa-clock"></i>-->
<!--Pause-->
<!--</button>-->
<!--</div>-->
{% endverbatim %}

View file

@ -0,0 +1,15 @@
{% verbatim %}
<div class="selling-on-hold">
<h4>
Ventes en pause
</h4>
<ul>
<li ng-repeat="list in pausedSellings track by $index"
ng-click="setBackPausedSelling(list, $index)">
{{ $index }}) {{ list.products.length }} produits, <strong>
{{ sumOfList(list) }}€ </strong>
</li>
</ul>
<hr>
</div>
{% endverbatim %}

View file

@ -0,0 +1,8 @@
<div class="selling-history">
{% verbatim %}
<div ng-repeat="s in recentSelling track by $index">
{{s.id}} )
{{s.amount}}
</div>
{% endverbatim %}
</div>

View file

@ -0,0 +1,33 @@
{% verbatim %}
<div class="">
<div class="row clickable" >
<div class="col-xs-12 col-sm-6 text-right">
<h3 ng-click="setRightAmountPaid()">Total: </h3>
</div>
<div class="col-xs-12 col-sm-6 text-right">
<h3 ng-click="setRightAmountPaid()">
<strong>
{{ CurrentSellingTotal() }}
</strong>€
</h3>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div >
Le client paie:
</div>
<div >
<input class="text-right" type="number" id="paid_amount" ng-model="paidAmount">
</div>
</div>
</div>
<div class="alert alert-success" ng-if="paidAmount && CurrentSellingTotal() - paidAmount <=0">
<h3>Rendu: {{ -1*(CurrentSellingTotal() - paidAmount) }} €</h3>
</div>
<div class="alert alert-warning" ng-if="paidAmount && CurrentSellingTotal() - paidAmount >0">
<h3>il manque: {{ CurrentSellingTotal() - paidAmount }} €</h3>
</div>
</div>
{% endverbatim %}

View file

@ -0,0 +1,13 @@
{% verbatim %}
<button class="btn btn-primary btn-block validate_selling" ng-click="sendForm(event)"
ng-disabled="!paidAmount">
<i class="fa fa-check"></i>
<span ng-if="paidAmount && CurrentSellingTotal() - paidAmount <=0">
Valider
</span>
<span ng-if="paidAmount && CurrentSellingTotal() - paidAmount >0">
<i class="fa fa-warning"></i>
</span>
</button>
{% endverbatim %}

View file

@ -0,0 +1,11 @@
<div class="caisse-main-box">
{% verbatim %}
<div id="not_loaded" ng-if="!initLoadDone">
<div class="well text-center">
<i class="fa fa-refresh fa-spin fa-3x"></i> Chargement en cours de vos produits
</div>
</div>
{% endverbatim %}
{% include 'logged/angular/loaded-caisse.html.twig' %}
</div>

View file

@ -0,0 +1,25 @@
{% verbatim %}
<!-- client actuel infos-->
<div id="client-now" class="client-now padded">
<i class="fa fa-user"></i>
<label for="sellingComment">
Client actuel: {{ activeSelling.length }} produit<span ng-if="activeSelling.length!=1">s</span>
</label>
<button type="button" class="deleter pull-right" ng-click="sellingComment = ''">
<i class="fa fa-times"></i>
</button>
<input type="text"
class="form-control"
aria-label="Note about the client"
id="sellingComment"
aria-describedby="selling-comment"
ng-model="sellingComment"
ng-model-options="{ updateOn: 'keyup' , allowInvalid: true}"
name="sellingComment"
autofocus="autofocus"
placeholder="nom ou commentaire">
</div>
{% endverbatim %}

View file

@ -0,0 +1,38 @@
{% extends 'base.html.twig' %}
{% block body %}
{% verbatim %}
<div id="caisse-now" class=""
ng-app="caisse"
ng-controller="CaisseCtrl as MainCtrl">
<div class="caisse-main row-fluid" >
<div class="col-xs-12 ">
<!-- ligne d'informations-->
{% endverbatim %}
{% include 'logged/listing-options.html.twig' %}
{% include 'logged/festival-infos.html.twig' %}
{# </div>#}
<div class="col-xs-12">
{% include 'logged/customer.html.twig' %}
{% verbatim %}
</div>
<!--états de sauvegarde-->
<div class="selling-ok alert-success alert block" ng-if="sellingOk" ng-click="sellingOk = false">
<i class="fa fa-save"></i>
Sauvegardé! WOHOOOOOO +{{recentSellings[recentSellings.length -1].amount}}
</div>
<div class="selling-ok alert-error alert block" ng-if="sellingError" ng-click="sellingError = false">
<i class="fa fa-warning"></i>
Problème de sauvegarde (pas de réseau ?)
</div>
{% endverbatim %}
{% include 'logged/caisse-main.html.twig' %}
{% verbatim %}
{% endverbatim %}
</div>
{% endblock %}

View file

@ -0,0 +1,25 @@
<div id="festival-current_info">
<a class="btn " href=" {{ path('festival_index') }}">
<i class="fa fa-th-large"></i>
Festival:
{% verbatim %}
{{activeFestival.name}}
</a>
<!-- <input type="text" ng-model="activeFestival.name" placeholder="nom du festival">-->
<!-- <input class="pull-right" type="text" ng-model="activeFestival.commentaire" placeholder="commentaire">-->
<span class="badge" title="fond de caisse + chiffre d'affaire. veillez à vider votre fond de caisse ailleurs lorsqu'il devient trop important, par exemple au dela de 200€" ng-class="{'badge-warning': activeFestival.fondDeCaisseAvant + activeFestival.chiffreAffaire > 200}">
<i class="fa fa-archive"></i>
{{ activeFestival.fondDeCaisseAvant + activeFestival.chiffreAffaire}} €
</span>
<span class="badge badge-success">
CA {{ activeFestival.chiffreAffaire }}
<span ng-if="sellingOk">
<i class="fa fa-check-circle-o"></i>
</span>
</span>
<span class="badge badge-success">
{{ activeFestival.clientsCount }} <i class="fa fa-user"></i>
</span>
{% endverbatim %}
</div>

View file

@ -0,0 +1,75 @@
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<script>
var dataPoints = [
{% for pair in statisticsSoldProducts %}
{
label: "{{ pair.name }}",
x: {{ pair.count }},
y: {{ pair.count }}
},
{% endfor %}
];
var dataPointsChiffreAffaire = [
{% for pair in statisticsSoldProducts %}
{
label: "{{ pair.name }}",
x: {{ pair.value }},
y: {{ pair.value }}
},
{% endfor %}
];
var dataPointsFestivals = [
{% for pair in statisticsFestivals %}
{
label: "{{ pair.name }} {{ pair.date|date('Y-m-d') }} , {{ pair.chiffreAffaire }} €",
y: {{ pair.chiffreAffaire }} ,
countClients : "{{ pair.clients_count }} clients"
},
{% endfor %}
];
console.log(dataPointsFestivals);
var chartFestival = new CanvasJS.Chart("chartContainerstatisticsFestivals", {
title:{
text: "Chiffre d'affaire par festival"
},
animationEnabled: true,
data: [
{
// Change type to "doughnut", "line", "splineArea", etc.
type: "column",
dataPoints: dataPointsFestivals
}
]
});
console.log('dataPointsFestivals', dataPointsFestivals);
chartFestival.render();
var chart = new CanvasJS.Chart("chartContainer", {
title:{
text: "Volume de produits vendus"
},
animationEnabled: true,
data: [
{
// Change type to "doughnut", "line", "splineArea", etc.
type: "pie",
dataPoints: dataPoints
}
]
});
chart.render();
var chartContainerChiffreAffaire = new CanvasJS.Chart("chartContainerChiffreAffaire", {
title:{
text: "Valeur en euros des produits vendus"
},
animationEnabled: true,
data: [
{
// Change type to "doughnut", "line", "splineArea", etc.
type: "pie",
dataPoints: dataPointsChiffreAffaire
}
]
});
chartContainerChiffreAffaire.render();
</script>

View file

@ -0,0 +1,156 @@
{% extends 'base.html.twig' %}
{% block body %}
<div id="wrapper">
<div id="container" class="container">
<div class="row">
<h1>Historique</h1>
</div>
<div class="row">
<div class="col-xs-12">
<div class="sells">
<div class="row">
<div class="col-xs-12 col-sm-4">
<h2>
<i class="fa fa-users"></i>
<span class="chiffre key-figure">
{{ allSellings }}
</span>
Clients
</h2>
</div>
<div class="col-xs-12 col-sm-4">
<h2>
<i class="fa fa-euro"></i>
<span class="chiffre key-figure">
{{ chiffreAffaires }}
</span>
Chiffre d'affaires
</h2>
</div>
<div class="col-xs-12 col-sm-4">
<h2>
<i class="fa fa-shopping-cart"></i>
<span class="chiffre key-figure">
{% if allSellings %}
{{ (chiffreAffaires / (allSellings))|round }}
{% else %}
?
{% endif %}
</span>
€ panier moyen
</h2>
</div>
</div>
<div>
</div>
</div>
</div>
<div class="col-xs-12 ">
<h2>Exporter toutes vos données</h2>
<a class="btn btn-success" href="{{ path('export_all') }}">
<i class="fa fa-file-excel-o fa-3x"></i>
en format csv
</a
><a class="btn btn-success" href="{{ path('export_all_json') }}">
<i class="fa fa-file-code-o fa-3x"></i>
en JSON
</a>
</div>
</div>
<hr>
<h2 class="text-center">Statistiques de ventes </h2>
<div id="chartContainer" style="display: inline-block; height: 300px; width: 49%;"></div>
<div id="chartContainerChiffreAffaire" style="display: inline-block; height: 300px; width: 49%;"></div>
<h2> {{ statisticsFestivals |length }} Festival
{% if statisticsFestivals |length >1 %}
s
{% endif %}</h2>
<div id="chartContainerstatisticsFestivals"
style="display: inline-block; height: 300px; width: 100%;"></div>
</div>
<hr>
<div id="last-sellings">
<div class="row">
<div class="col-xs-12">
<div class="table">
<div class="row-fluid">
<div class="col-xs-12">
<h2>
{{ recentSells |length }} Dernières ventes
</h2>
</div>
</div>
<table class="table table-striped">
<thead>
<tr>
<td>n°</td>
<td>date</td>
<td>commentaire</td>
<td>produits</td>
<td>montant</td>
<td>Actions</td>
</tr>
</thead>
<tbody>
{% for vente in recentSells %}
<tr>
<td> {{ vente.id }}</td>
<td> {{ vente.date |date('Y-m-d H:i:s') }}</td>
<td>{{ vente.comment }}</td>
<td class="text-right">
{% if vente.productsSold |length >1 %}
<strong>
{{ vente.productsSold |length }}
</strong> produits
{% else %}
{% if vente.productsSold and vente.productsSold.0 is defined %}
{{ vente.productsSold.0.name }}
{% endif %}
{% endif %}
</td>
<td class="text-right">
{{ vente.amount }}
</td>
<td>
<a href="{{ path('sellrecord_delete',{id: vente.id }) }}"
class="btn btn-warning pull-right">
<i class="fa fa-trash"></i>
</a>
</td>
</tr> {% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% include ':logged:history-script.html.twig' %}
</div>
{% endblock %}

View file

@ -0,0 +1,39 @@
{% extends 'base.html.twig' %}
{% block body %}
<h1>Importation, création en masse</h1>
<div class="row">
<div class="col-xs-12 ">
{% include 'logged/mass-register.html.twig' %}
</div>
<div class="col-xs-12">
<h2>
Importer votre historique de ventes
</h2>
<div class="alert alert-warning">
<i class="fa fa-warning"></i>
Fonctionnalité en cours de création
</div>
{# 1)#}
{# <a class="btn btn-success" href="{{ asset('modele_import_caisse.csv') }}">#}
{# <i class="fa fa-file-o fa-3x"></i>#}
{# Télécharger le fichier de modèle#}
{# </a>#}
{# <hr>#}
{# 2) Remplir votre modèle avec vos ventes#}
{# <hr>#}
{# 3) à faire#}
{#<form action="{{ path('import') }}" method="post">#}
{#<fieldset>#}
{#Importer votre modèle rempli#}
{#<input disabled type="file" name="fichier_import">#}
{#<input disabled class="btn btn-primary btn-block" type="submit" value="importer votre historique">#}
{#</fieldset>#}
</form>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,48 @@
<div id="festival-listing-options">
{% verbatim %}
<!-- options-->
<div class="row marged-v" ng-if="simpleDisplay">
<button class="btn btn-success" ng-click="toggleSimpleDisplay()">
<i class="fa fa-bars"></i> Affichage simple <i class="fa fa-check-circle"></i>
</button>
</div>
<div class="row marged-v" ng-if="! simpleDisplay">
<div class="col-xs-12 col-md-6" id="main_options">
<button class="btn btn-disabled" ng-click="toggleSimpleDisplay()">
<i class="fa fa-bars"></i> Affichage simple
</button>
<button
title="la vente express vous permet d'enregistrer une vente pour un seul article sans remplir le formulaire de détail"
class="btn"
ng-class="{'btn-success': show_config.expressSelling, 'btn-disabled':! show_config.expressSelling}"
ng-click="show_config.expressSelling = !show_config.expressSelling">
<i class="fa fa-shopping-cart"></i>
vente express
<span ng-if=show_config.show_config.expressSelling>
<i class="fa fa-check-circle"></i></span>
</button>
<button
title="montrer le nombre d'objets restants dans les stocks"
class="btn"
ng-class="{'btn-success': show_config.stock_count, 'btn-disabled':!show_config.stock_count}"
ng-click="show_config.stock_count = !show_config.stock_count">
<i class="fa fa-shopping-cart"></i>
stocks
<span ng-if=show_config.stock_count>
<i class="fa fa-check-circle"></i></span>
</button>
<button
title="montrer le nombre d'objets restants dans les stocks"
class="btn"
ng-class="{'btn-success': show_config.sold, 'btn-disabled':!show_config.sold}"
ng-click="show_config.sold = !show_config.sold">
<i class="fa fa-shopping-cart"></i>
vendus
<span ng-if=show_config.sold>
<i class="fa fa-check-circle"></i>
</span>
</button>
</div>
</div>
{% endverbatim %}
</div>

View file

@ -0,0 +1,49 @@
<div id="mass-register">
<form action="{{ path('mass_create') }}" method="post">
<div class="row">
<div class="col-xs-12 col-sm-6">
<blockquote>
<strong>Vous pouvez copier et adapter cet exemple: </strong>
<pre id="example_mass_import">
catégorie: livre
les moutaines;5€
la laine des moutons;6€
star wars spécial noël;7€
catégorie: poster
super bannière A2;10€
Sébastien Chabal sexy;10€
catégorie: dessin à la demande
dessin A4 crayon;20€
dessin A4 aquarelle;150€
</pre>
<a href="#filling_zone" id="use_example">
<i class="fa fa-arrow-down"></i>
Utiliser l'exemple
</a>
</blockquote>
</div>
<div class="col-xs-12 col-sm-6">
<div class="well" id="filling_zone">
<label for="produits">
<h3>
Créez vos produits et leur catégorie en masse, un par ligne.
</h3>
Séparez le nom du produit de son prix avec un point virgule. vous n'êtes pas obligé de préciser
le symbole € pour le prix. Utilisez une virgule ou un point pour faire des prix à virgule. Si le
nom de catégorie existe déjà, le produit sera associé avec celle-ci.
</label>
<textarea style="width: 100%;" name="produits" id="produits" cols="30" rows="10"
placeholder="catégorie et produits">
catégorie: livre
mon livre ; 5€
</textarea>
<input class="btn btn-primary btn-block" type="submit" value="créer en masse">
</div>
</div>
</div>
</form>
</div>

View file

@ -0,0 +1,8 @@
{% extends 'base.html.twig' %}
{% block body %}
<div id="wrapper">
<h1>Appli angular embarquée</h1>
<script href="{{ asset('/assets/js/build-frontend-submodule/main.js') }}"></script>
<div ng-app="tktest"></div>
</div>
{% endblock %}

View file

@ -0,0 +1,281 @@
{% extends 'base.html.twig' %}
{% block body %}
{% verbatim %}
<div id="wrapper">
<div class="previsionnel"
ng-app="caisse"
ng-controller="previsionnelCtrl as pCtrl"
>
<div class="row">
<div class="col-xs-12 col-lg-6">
<h1>Prévisionnel</h1>
</div>
<div class="col-xs-12 col-lg-6">
<div ng-if="config.initialLoadingDone && config.loading">
<i class="fa fa-spin fa-refresh"></i>
Chargement
</div>
<div ng-if="config.initialLoadingDone && !config.loading">
Modifications sauvegardées
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="config well">
<h2>
Configuration
</h2>
<div class="row">
<div class="col-xs-12 col-sm-6">
<p >
<label for="dispo">
Euros disponibles au départ:
</label>
<input
id="dispo"
class="big-number"
type="number"
ng-model="config.disponibility"
ng-change="save()"
ng-model-options="{ debounce: config.debounceTime }">
<br>
<label for="gains">
Gains moyen par mois:
</label>
<input type="number"
class="big-number"
id="gains"
ng-model="config.averageMonthlyEarnings"
ng-change="save()"
ng-model-options="{ debounce: config.debounceTime }">
</p>
<p>
Gérer délais de paiement
<input type="checkbox" ng-model="config.showDelays">
Gérer répétitions
<input type="checkbox" ng-model="config.showRepeats">
</p>
</div>
<div class="col-xs-12 col-sm-6">
<p>
<strong>
Dépenses mensuelles:
<span class="big-number">
{{ sumMonthlyExpenses() }}
</span>
</strong>
</p>
<p>
<strong>
Bénef mensuel: <span class="big-number">{{ config.averageMonthlyEarnings - sumMonthlyExpenses() }} €</span>
</strong>
</p>
<p>
Crédit mensuel réalisable (33% des gains moyens par mois): {{ config.averageMonthlyEarnings * 0.33 |number }}
</p>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-lg-7 postes">
<h2>
{{expenses.length}} Postes de dépenses mensuelles
<button ng-click="addExpense()">+</button>
</h2>
<p class="desc">
Indiquez les catégories de dépenses mensuelles que vous faites pour faire évoluer la
simulation de budget restant dans plusieurs mois.
</p>
<table class="exepanse-table">
<thead>
<tr>
<td class="padded" >
Nom
</td>
<td class="padded" ng-if="config.showDelays">
débute dans X mois
</td>
<td class="padded" ng-if="config.showRepeats">
mois répétitions
</td>
<td class="padded" ng-if="config.showRepeats">
prix répétitions
</td>
<td class="padded" >
prix mensuel
</td>
<td class="padded" >
prix annuel
</td>
<td class="padded" >
activé
</td>
</tr>
</thead>
<tbody>
</tbody>
<tr ng-repeat="e in expenses ">
<td>
<input type="text" ng-model="e.name" ng-change="save()" ng-model-options="{ debounce: config.debounceTime }">
</td>
<td ng-if="config.showDelays">
<input type="number" ng-model="e.delay" ng-change="save()" ng-model-options="{ debounce: config.debounceTime }">
</td>
<td ng-if="config.showRepeats">
<input type="number" ng-model="e.repeat" ng-change="save()" ng-model-options="{ debounce: config.debounceTime }">
</td>
<td ng-if="config.showRepeats" class="text-right padded">
{{ e.repeat * e.amount }}
</td>
<td>
<input type="number" ng-model="e.amount" ng-change="save()" ng-model-options="{ debounce: config.debounceTime }">
</td>
<td class="text-right padded">
<strong>
{{ e.amount * 12 }}
</strong>
</td>
<td class="padded">
<input type="checkbox" ng-model="e.enabled" ng-change="save()" ng-model-options="{ debounce: config.debounceTime }">
</td>
</tr>
</table>
<div class="well examples-depenses">
<strong>
Exemples de postes de dépenses à ajouter:
</strong>
{% endverbatim %}
{{ "
appartement
mutuelle
transport en commun
assurance voiture
assurance moto
trucs de loisirs divers
gaz
elec
internet
épargne
impots
cottisation URSSAF
resto au boulot
courses
serveur wouaibe
abonnement protonmail VPN
abonnement service audio, vidéo
carburant véhicule
donations
médecin
chat
chien
licorne"|nl2br }}
{% verbatim %}
</div>
</div>
<div class="col-sm-12 col-lg-5">
<h2>Simulation sur {{config.lines}} mois</h2>
<div class="" id="simulationPrevision" style="display: inline-block; height: 300px; width: 90%;">(graphique)</div>
<!--block to insert the graph-->
<div class="well big-number" ng-if="config.monthsBeforeNoMoney && config.monthsBeforeNoMoney <= config.lines">
<i class="fa fa-warning"></i>
Ce sera la dèche dans {{config.monthsBeforeNoMoney}} mois
</div>
<div ng-if=" ! config.monthsBeforeNoMoney" class="bg-success padded">
cool ! votre plan est supportable dans le temps
</div>
<table>
<thead>
<tr >
<td class="padded" >
Month in the future
</td>
<td class="padded" >
date
</td>
<td class="padded" >
Dépenses
</td>
<td class="padded" >
Disponibilité
</td>
</trclass>
</thead>
<tbody>
<tr ng-repeat="line in previsionTable" >
<td>
<div ng-if="line.available > config.warningThershold"
class=" bgsuccess padded ">
{{ $index }}
</div>
<div ng-if="line.available > 0 && line.available < config.warningThershold"
class="bgwarning padded ">
{{ $index }} bientôt la dèche
</div>
<div ng-if="line.available < 0"
class="bgdanger padded ">
{{ $index }} DAMNED pu de pognon!
</div>
</td>
<td>
-
</td>
<td class="text-right ">
{{ line.expense }}
</td>
<td class="text-right"
ngClass="{'bgdanger' : line.available < 0 }">
<strong>
{{ line.available}}
</strong>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!--<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>-->
<script>
var dataPoints = {{graphPointsPrevision}} ;
var chartContainerChiffreAffaire = new CanvasJS.Chart("simulationPrevision", {
title:{
text: "Euros disponibles dans le temps"
},
animationEnabled: true,
data: [
{
// Change type to "doughnut", "line", "splineArea", etc.
type: "splineArea",
dataPoints: dataPoints
}
]
});
chartContainerChiffreAffaire.render();
</script>
{% endverbatim %}
{% endblock %}