Overview
Comment:Invoice module: document comment field added
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | invoice_module
Files: files | file ages | folders
SHA3-256: 15b1a9df323748b4e266decb8087131371fd6d9158c8a7e24a9317bc2a530ce0
User & Date: alinaar on 2023-03-24 17:54:07
Other Links: branch diff | manifest | tags
Context
2023-03-24
17:54
Invoice module: document comment field added Leaf check-in: 15b1a9df32 user: alinaar tags: invoice_module
17:02
Invoice module: document key generation fixed check-in: 96c36cdcb0 user: alinaar tags: invoice_module
Changes

Modified src/modules/invoice/action.html from [d23a5681cc] to [b146933bc8].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{{#restrict section="accounting" level="write"}}

{{* ==================== Header ==================== *}}

{{:admin_header title="Devis et factures" current="acc" custom_css="./include/style.css"}}
{{:include file='./include/constants.tpl' keep='DRAFT_STATUS, AWAITING_STATUS, VALIDATED_STATUS, REJECTED_STATUS, PAID_STATUS, DOCUMENT_TYPES, CANCELLED_LABEL, TYPE_LABELS, STATUS_LABELS, INVOICE_STATUS_LABELS, QUOTATION_TYPE, INVOICE_TYPE, VERSION'}}

{{if $_GET.action === 'sign' || $_POST.signing_submit || $_GET.action === 'delete' || $_POST.reject_submit || $_POST.validate_submit || $_POST.mark_as_paid_submit || $_POST.cancel_submit || $_POST.duplicate_submit || $_POST.status_update_button}}
	{{:include file='./include/modification.controller.tpl' keep='check_errors'}}
{{elseif $_GET.id === null}}
	<p class="error block">Aucun document séléctionné.</p>
{{/if}}

{{#load id=$_GET.id|intval}}








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{{#restrict section="accounting" level="write"}}

{{* ==================== Header ==================== *}}

{{:admin_header title="Devis et factures" current="acc" custom_css="./include/style.css"}}
{{:include file='./include/constants.tpl' keep='DRAFT_STATUS, AWAITING_STATUS, VALIDATED_STATUS, REJECTED_STATUS, PAID_STATUS, DOCUMENT_TYPES, CANCELLED_LABEL, TYPE_LABELS, STATUS_LABELS, INVOICE_STATUS_LABELS, QUOTATION_TYPE, INVOICE_TYPE, VERSION'}}

{{if $_GET.action === 'sign' || $_POST.signing_submit || $_GET.action === 'delete' || $_POST.reject_submit || $_POST.validate_submit || $_POST.mark_as_paid_submit || $_POST.cancel_submit || $_POST.duplicate_submit || $_POST.edit_comment_submit || $_POST.status_update_button}}
	{{:include file='./include/modification.controller.tpl' keep='check_errors'}}
{{elseif $_GET.id === null}}
	<p class="error block">Aucun document séléctionné.</p>
{{/if}}

{{#load id=$_GET.id|intval}}

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

	{{elseif $_GET.action === 'ask_mark_as_paid'}}
		<form method="POST" action="">
			<fieldset>
				<legend><h2>Marquer la facture comme payée</h2></legend>
				{{if !$check_errors}}<p class="error block">Marquer la facture comme payée est définitif. Vous ne pourrez pas rétablir la facture comme "en attente de paiement".<br />Il sera néanmoins possible d''annuler la facture.</p>{{/if}}
				{{:input type="date" name="date" label="Date du paiement" default=$now required=true}}
				{{:input type="textarea" name="comment" label="Remarque" required=false cols="50" rows="4"}}
				{{:input type="list" name="transaction" label="Écriture correspondante" target="./transaction_selector.inc.tpl" can_delete=true required=false}}
				{{:button type="submit" name="mark_as_paid_submit" label="Marquer comme payée" shape="check" class="main"}}
			</fieldset>
		</form>

	{{elseif $_GET.action === 'ask_cancelling'}}
		<form method="POST" action="">







|







86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

	{{elseif $_GET.action === 'ask_mark_as_paid'}}
		<form method="POST" action="">
			<fieldset>
				<legend><h2>Marquer la facture comme payée</h2></legend>
				{{if !$check_errors}}<p class="error block">Marquer la facture comme payée est définitif. Vous ne pourrez pas rétablir la facture comme "en attente de paiement".<br />Il sera néanmoins possible d''annuler la facture.</p>{{/if}}
				{{:input type="date" name="date" label="Date du paiement" default=$now required=true}}
				{{:input type="textarea" name="payment_comment" label="Remarque" required=false cols="50" rows="4"}}
				{{:input type="list" name="transaction" label="Écriture correspondante" target="./transaction_selector.inc.tpl" can_delete=true required=false}}
				{{:button type="submit" name="mark_as_paid_submit" label="Marquer comme payée" shape="check" class="main"}}
			</fieldset>
		</form>

	{{elseif $_GET.action === 'ask_cancelling'}}
		<form method="POST" action="">
110
111
112
113
114
115
116










117
118
119
120
121
122
123
124
125
126
		<form method="POST" action="">
			<fieldset>
				<legend><h2>Dupliquer {{if $type === $INVOICE_TYPE}}la{{else}}le{{/if}} {{$label}} n° {{$key}} ?</h2></legend>
				{{:include file='./include/document_summary.html'}}
				{{:button type="submit" name="duplicate_submit" label="Dupliquer" shape="check" class="main"}}
			</fieldset>
		</form>










	{{/if}}
{{else}}
	<p class="error block">Document séléctionné invalide.</p>
{{/load}}

{{:admin_footer}}

{{else}}
	{{:error message="Seuls les membres avec accès en écriture à la comptabilité peuvent visualiser cette page."}}
{{/restrict}}







>
>
>
>
>
>
>
>
>
>










110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
		<form method="POST" action="">
			<fieldset>
				<legend><h2>Dupliquer {{if $type === $INVOICE_TYPE}}la{{else}}le{{/if}} {{$label}} n° {{$key}} ?</h2></legend>
				{{:include file='./include/document_summary.html'}}
				{{:button type="submit" name="duplicate_submit" label="Dupliquer" shape="check" class="main"}}
			</fieldset>
		</form>
	
	{{elseif $_GET.action === 'edit_comment'}}
		<form method="POST" action="">
			<fieldset>
				<legend><h2>Éditer les remarques</h2></legend>
				{{:include file='./include/document_summary.html'}}
				{{:input type="textarea" name="comment" label="Remarques internes" default=$comment help="Ne seront pas affichées sur le document." required=false cols="50" rows="4"}}
				{{:button type="submit" name="edit_comment_submit" label="Mettre à jour" class="main"}}
			</fieldset>
		</form>
	{{/if}}
{{else}}
	<p class="error block">Document séléctionné invalide.</p>
{{/load}}

{{:admin_footer}}

{{else}}
	{{:error message="Seuls les membres avec accès en écriture à la comptabilité peuvent visualiser cette page."}}
{{/restrict}}

Modified src/modules/invoice/details.html from [c2d61f01b2] to [79c5c63591].

190
191
192
193
194
195
196
197














198
199
200
201
202
203
204
					<li>
						Texte d'introduction :
						<p>{{$introduction_text|escape|nl2br}}</p>
					</li>
				{{/if}}
			</ul>
		</fieldset>
		














		{{if $payment_text || $extra_text}}
			<fieldset>
				<legend><h2>Infos complémentaires</h2></legend>
				{{if $payment_text}}<p>{{$payment_text|escape|nl2br}}</p>{{/if}}
				{{if $extra_text}}<p>{{$extra_text|escape|nl2br}}</p>{{/if}}
			</fieldset>
		{{/if}}







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>







190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
					<li>
						Texte d'introduction :
						<p>{{$introduction_text|escape|nl2br}}</p>
					</li>
				{{/if}}
			</ul>
		</fieldset>

		<form method="POST" action="{{"action.html?id=%d&show=%s&action=edit_comment"|args:$id:$type}}">
			<fieldset>
				<legend>
					<h2>Remarques internes{{if $comment}}{{:button type="submit" title="Éditer les remarques" shape="edit" name="edit_comment_button"}}{{/if}}</h2>
				</legend>
				{{if $comment}}
					<p>{{$comment|escape|nl2br}}</p>
				{{else}}
					<p class="infos">Aucune.</p>
					<p>{{:button type="submit" label="Ajouter des remarques" shape="plus" name="edit_comment_button"}}</p>
				{{/if}}
			</fieldset>
		</form>

		{{if $payment_text || $extra_text}}
			<fieldset>
				<legend><h2>Infos complémentaires</h2></legend>
				{{if $payment_text}}<p>{{$payment_text|escape|nl2br}}</p>{{/if}}
				{{if $extra_text}}<p>{{$extra_text|escape|nl2br}}</p>{{/if}}
			</fieldset>
		{{/if}}

Modified src/modules/invoice/edit.html from [93e88f5d71] to [26ac4e5789].

89
90
91
92
93
94
95

96
97
98
99
100
101
102

	{{if !$_POST.org_contact}}
		{{:assign var='check_errors.' value="Le contact est obligatoire."}}
	{{/if}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Contact trop long" check_value=$_POST.org_contact check_max=256}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Instructions de paiement trop longues" check_value=$_POST.payment_text check_max=512}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Informations complémentaires trop longues" check_value=$_POST.extra_text check_max=1024}}


	{{#foreach from=$_POST.items key='index' item='item'}}
		{{if $item.name === ''}}{{:assign var='check_errors.' value="Le nom de l'article est requis."}}{{/if}}
		{{:assign var='unit_price' value=$item.unit_price|replace:',':'.'}}
		{{:assign var='quantity' value=$item.quantity|replace:',':'.'}}
		{{if $unit_price < 0 || $unit_price != $unit_price|floatval|strval}} {{* Hack to check the data is a number *}}
			{{:assign var='check_errors.' value='Le prix saisi pour "%s" est invalide.'|args:$item.name}}







>







89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

	{{if !$_POST.org_contact}}
		{{:assign var='check_errors.' value="Le contact est obligatoire."}}
	{{/if}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Contact trop long" check_value=$_POST.org_contact check_max=256}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Instructions de paiement trop longues" check_value=$_POST.payment_text check_max=512}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Informations complémentaires trop longues" check_value=$_POST.extra_text check_max=1024}}
	{{:include file='./include/check_max_length.tpl' keep='check_errors' check_label="Remarques trop longues" check_value=$_POST.comment check_max=1024}}

	{{#foreach from=$_POST.items key='index' item='item'}}
		{{if $item.name === ''}}{{:assign var='check_errors.' value="Le nom de l'article est requis."}}{{/if}}
		{{:assign var='unit_price' value=$item.unit_price|replace:',':'.'}}
		{{:assign var='quantity' value=$item.quantity|replace:',':'.'}}
		{{if $unit_price < 0 || $unit_price != $unit_price|floatval|strval}} {{* Hack to check the data is a number *}}
			{{:assign var='check_errors.' value='Le prix saisi pour "%s" est invalide.'|args:$item.name}}
192
193
194
195
196
197
198

199
200
201
202
203
204
205
			org_contact=$_POST.org_contact
			author_id=$logged_user.id|intval
			last_modification_date=$now|atom_date
			signing_place=$_POST.signing_place
			signing_date=$signing_date
			payment_text=$_POST.payment_text
			extra_text=$_POST.extra_text

			module_version=$VERSION
		}}

		{{if !$document}}
			{{:http redirect="./index.html?ok=1"}}
		{{else}}
			{{:http redirect="./index.html?ok=2"}}







>







193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
			org_contact=$_POST.org_contact
			author_id=$logged_user.id|intval
			last_modification_date=$now|atom_date
			signing_place=$_POST.signing_place
			signing_date=$signing_date
			payment_text=$_POST.payment_text
			extra_text=$_POST.extra_text
			comment=$_POST.comment
			module_version=$VERSION
		}}

		{{if !$document}}
			{{:http redirect="./index.html?ok=1"}}
		{{else}}
			{{:http redirect="./index.html?ok=2"}}
259
260
261
262
263
264
265



266
267
268
269
270
271
272
			<li>{{:input type="text" name="subject" label="Intitulé" source=$document placeholder="ex : Devis pour une location de barnum" required=true}}</li>
			<li>{{:input type="date" name="date" label="Date du devis" source=$document placeholder="" required=true}}</li>
			<li>{{:input type="date" name="deadline" label="Échéance pour validation" source=$document placeholder="" required=false}}</li>
			<li>{{:input type="text" name="org_contact" label="Contact" source=$document default=$org_contact_default required=true}}</li>
			<li>
				{{:input type="textarea" name="introduction_text" label="Texte d'introduction" source=$document default=$introduction_text_default placeholder="ex : Formule de politesse." help=$introduction_text_helper required=false cols="50" rows="4"}}
			</li>



		</ul>
	</fieldset>

	{{:assign items=$document.items}}
	{{:include file='./include/item_list.tpl'}}

	{{if $module.config.payment_text || $module.config.extra_text}}







>
>
>







261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
			<li>{{:input type="text" name="subject" label="Intitulé" source=$document placeholder="ex : Devis pour une location de barnum" required=true}}</li>
			<li>{{:input type="date" name="date" label="Date du devis" source=$document placeholder="" required=true}}</li>
			<li>{{:input type="date" name="deadline" label="Échéance pour validation" source=$document placeholder="" required=false}}</li>
			<li>{{:input type="text" name="org_contact" label="Contact" source=$document default=$org_contact_default required=true}}</li>
			<li>
				{{:input type="textarea" name="introduction_text" label="Texte d'introduction" source=$document default=$introduction_text_default placeholder="ex : Formule de politesse." help=$introduction_text_helper required=false cols="50" rows="4"}}
			</li>
			<li>
				{{:input type="textarea" name="comment" label="Remarques internes" source=$document help="Ne seront pas affichées sur le document." required=false cols="50" rows="4"}}
			</li>
		</ul>
	</fieldset>

	{{:assign items=$document.items}}
	{{:include file='./include/item_list.tpl'}}

	{{if $module.config.payment_text || $module.config.extra_text}}
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
		</fieldset>
	{{/if}}

	<fieldset>
		<legend><h2>Signature du devis</h2></legend>
		<p id="signing_confirmation_p">
			<p class="infos">Ce document restera un brouillon et sera modifiable tant que vous n'aurez pas signé le devis.</p>
			{{:input type="checkbox" name="signing" id="debug" label="Signer le devis" value="1"}}
		</p>
		<p id="signing_warning" class="infos">
			À ne remplir que si vous souhaitez valider immédiatement le devis.
		</p>
		<ul id="signing_inputs">
			<li>{{:input type="text" name="signing_place" label="Lieu de la signature" placeholder="ex : Dijon" source=$document}}</li>
			<li>{{:input type="date" name="signing_date" label="Date de la signature" source=$document}}</li>







|







289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
		</fieldset>
	{{/if}}

	<fieldset>
		<legend><h2>Signature du devis</h2></legend>
		<p id="signing_confirmation_p">
			<p class="infos">Ce document restera un brouillon et sera modifiable tant que vous n'aurez pas signé le devis.</p>
			{{:input type="checkbox" name="signing" label="Signer le devis" value="1"}}
		</p>
		<p id="signing_warning" class="infos">
			À ne remplir que si vous souhaitez valider immédiatement le devis.
		</p>
		<ul id="signing_inputs">
			<li>{{:input type="text" name="signing_place" label="Lieu de la signature" placeholder="ex : Dijon" source=$document}}</li>
			<li>{{:input type="date" name="signing_date" label="Date de la signature" source=$document}}</li>

Modified src/modules/invoice/include/document_list_buttons.html from [97016a6806] to [f869898f30].

49
50
51
52
53
54
55





56
57
58
59
60
61
62
	
	{{#restrict section="accounting" level="write"}}
	<li>
		<form method="POST" action="{{"action.html?id=%d&show=%s&action=ask_duplication"|args:$id:$type}}">
			{{:button type="submit" title="Dupliquer" shape="list-ol" name="duplicate_button"}}
		</form>
	</li>





	{{if !$cancelled}}
		{{if $type === $INVOICE_TYPE}}
			{{:assign button_target_label='la facture'}}
		{{else}}
			{{:assign button_target_label='le devis'}}
		{{/if}}
		<li>







>
>
>
>
>







49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
	
	{{#restrict section="accounting" level="write"}}
	<li>
		<form method="POST" action="{{"action.html?id=%d&show=%s&action=ask_duplication"|args:$id:$type}}">
			{{:button type="submit" title="Dupliquer" shape="list-ol" name="duplicate_button"}}
		</form>
	</li>
	<li>
		<form method="POST" action="{{"action.html?id=%d&show=%s&action=edit_comment"|args:$id:$type}}">
			{{:button type="submit" title="Éditer les remarques" shape="paragraph" name="edit_comment_button"}}
		</form>
	</li>
	{{if !$cancelled}}
		{{if $type === $INVOICE_TYPE}}
			{{:assign button_target_label='la facture'}}
		{{else}}
			{{:assign button_target_label='le devis'}}
		{{/if}}
		<li>

Modified src/modules/invoice/include/modification.controller.tpl from [113f0d132a] to [850a93b334].

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

56
57
58
59
60
61
62
				{{:save id=$_GET.id|intval
					validate_schema="./schema/quotation.json"
					key=$key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_numero=$recipient_member_numero
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$AWAITING_STATUS
					cancelled=$cancelled
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					last_modification_date=$now|atom_date
					signing_place=$_POST.signing_place
					signing_date=$signing_date
					payment_detail=$payment_detail
					extra_info=$extra_info

					module_version=$VERSION
				}}

				{{:http redirect="details.html?id=%d&ok=1"|args:$id}}
			{{/if}}

		{{elseif $_GET.action === 'delete'}}







|

















>







31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
				{{:save id=$_GET.id|intval
					validate_schema="./schema/quotation.json"
					key=$key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$AWAITING_STATUS
					cancelled=$cancelled
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					last_modification_date=$now|atom_date
					signing_place=$_POST.signing_place
					signing_date=$signing_date
					payment_detail=$payment_detail
					extra_info=$extra_info
					comment=$comment
					module_version=$VERSION
				}}

				{{:http redirect="details.html?id=%d&ok=1"|args:$id}}
			{{/if}}

		{{elseif $_GET.action === 'delete'}}
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117

118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148

149
150
151
152
153
154
155
				{{:save assign_new_id='invoice_id'
					validate_schema="./schema/invoice.json"
					key=$invoice_key
					type=$INVOICE_TYPE
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_numero=$recipient_member_numero
					introduction_text=null
					subject=$subject
					date=$now|date:'Y-m-d'
					deadline=null
					status=$AWAITING_STATUS
					cancelled=false
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$logged_user.id|intval
					parent_id=$_GET.id|intval
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$now|date:'Y-m-d'
					validation_date=null
					payment_detail=null
					extra_info=null

					module_version=$VERSION
				}}
			{{/if}}

			{{:save id=$_GET.id|intval
				validate_schema="./schema/quotation.json"
				key=$key
				type=$type
				recipient_business_name=$recipient_business_name
				recipient_address=$recipient_address
				recipient_member_id=$recipient_member_id
				recipient_member_numero=$recipient_member_numero
				introduction_text=$introduction_text
				subject=$subject
				date=$date
				deadline=$deadline
				status=$new_status
				cancelled=$cancelled
				items=$items
				total=$total
				vat_exemption=$vat_exemption
				siret=$siret
				org_contact=$org_contact
				author_id=$author_id
				child_id=$invoice_id|intval
				last_modification_date=$now|atom_date
				signing_place=$signing_place
				signing_date=$signing_date
				validation_date=$validation_date
				payment_detail=$payment_detail
				extra_info=$extra_info

				parent_id=$_GET.id|intval
				module_version=$VERSION
			}}
			{{:http redirect="details.html?id=%d&ok=%d"|args:$id:$redirection_code}}
		{{/if}}
		{{/load}}
	{{/if}}







|



















>











|



















>







92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
				{{:save assign_new_id='invoice_id'
					validate_schema="./schema/invoice.json"
					key=$invoice_key
					type=$INVOICE_TYPE
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=null
					subject=$subject
					date=$now|date:'Y-m-d'
					deadline=null
					status=$AWAITING_STATUS
					cancelled=false
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$logged_user.id|intval
					parent_id=$_GET.id|intval
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$now|date:'Y-m-d'
					validation_date=null
					payment_detail=null
					extra_info=null
					comment=$comment
					module_version=$VERSION
				}}
			{{/if}}

			{{:save id=$_GET.id|intval
				validate_schema="./schema/quotation.json"
				key=$key
				type=$type
				recipient_business_name=$recipient_business_name
				recipient_address=$recipient_address
				recipient_member_id=$recipient_member_id
				recipient_member_number=$recipient_member_number
				introduction_text=$introduction_text
				subject=$subject
				date=$date
				deadline=$deadline
				status=$new_status
				cancelled=$cancelled
				items=$items
				total=$total
				vat_exemption=$vat_exemption
				siret=$siret
				org_contact=$org_contact
				author_id=$author_id
				child_id=$invoice_id|intval
				last_modification_date=$now|atom_date
				signing_place=$signing_place
				signing_date=$signing_date
				validation_date=$validation_date
				payment_detail=$payment_detail
				extra_info=$extra_info
				comment=$comment
				parent_id=$_GET.id|intval
				module_version=$VERSION
			}}
			{{:http redirect="details.html?id=%d&ok=%d"|args:$id:$redirection_code}}
		{{/if}}
		{{/load}}
	{{/if}}
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215

216
217
218
219
220
221
222
		{{:assign var='check_errors.' value="La date du paiement doit être une date."}}
	{{/if}}
	{{if $date < $invoice.date}}
		{{:assign formatted_invoice_date=$invoice.date|date_short}}
		{{:assign var='check_errors.' value="Le paiement doit se situer après la date d'émission de la facture (%s)."|args:$formatted_invoice_date}}
	{{/if}}
	
	{{:include file='./check_max_length.tpl' check_value=$_POST.comment check_max=256 check_label='Remarques trop longues' keep='check_errors'}}

	{{:include file='./shim/array_last_num_key.tpl' keep='transaction_id, check_errors' array=$_POST.transaction name='transaction_id' error_message='Écriture séléctionnée invalide.'}}
	{{#transactions id=$transaction_id|intval}}{{:assign .='transaction'}}{{/transactions}}
	{{if $transaction_id && !$transaction}}
		{{:assign var='check_errors.' value="Transaction sélectionnée invalide."}}
	{{/if}}

	{{if !$check_errors}}
		{{:save id=$invoice.id|intval
			validate_schema="./schema/invoice.json"
			key=$invoice.key
			type=$invoice.type
			recipient_business_name=$invoice.recipient_business_name
			recipient_address=$invoice.recipient_address
			recipient_member_id=$invoice.recipient_member_id
			recipient_member_numero=$invoice.recipient_member_numero
			introduction_text=null
			subject=$invoice.subject
			date=$invoice.date
			deadline=null
			status=$PAID_STATUS
			cancelled=$invoice.cancelled
			items=$invoice.items
			total=$invoice.total
			vat_exemption=$invoice.vat_exemption
			siret=$invoice.siret
			org_contact=$invoice.org_contact
			author_id=$invoice.author_id
			parent_id=$invoice.parent_id
			last_modification_date=$now|atom_date
			signing_place=null
			signing_date=$invoice.signing_date
			validation_date=null
			payment_date=$date
			payment_comment=$_POST.comment
			transaction_id=$transaction.id|intval
			payment_detail=null
			extra_info=null

			module_version=$VERSION
		}}
		{{:http redirect="details.html?id=%d&ok=6&show=invoice"|args:$invoice.id}}
	{{/if}}

{{elseif $_POST.cancel_submit}}
	{{if !$_GET.id}}







|















|


















|



>







173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
		{{:assign var='check_errors.' value="La date du paiement doit être une date."}}
	{{/if}}
	{{if $date < $invoice.date}}
		{{:assign formatted_invoice_date=$invoice.date|date_short}}
		{{:assign var='check_errors.' value="Le paiement doit se situer après la date d'émission de la facture (%s)."|args:$formatted_invoice_date}}
	{{/if}}
	
	{{:include file='./check_max_length.tpl' check_value=$_POST.payment_comment check_max=256 check_label='Remarque trop longue' keep='check_errors'}}

	{{:include file='./shim/array_last_num_key.tpl' keep='transaction_id, check_errors' array=$_POST.transaction name='transaction_id' error_message='Écriture séléctionnée invalide.'}}
	{{#transactions id=$transaction_id|intval}}{{:assign .='transaction'}}{{/transactions}}
	{{if $transaction_id && !$transaction}}
		{{:assign var='check_errors.' value="Transaction sélectionnée invalide."}}
	{{/if}}

	{{if !$check_errors}}
		{{:save id=$invoice.id|intval
			validate_schema="./schema/invoice.json"
			key=$invoice.key
			type=$invoice.type
			recipient_business_name=$invoice.recipient_business_name
			recipient_address=$invoice.recipient_address
			recipient_member_id=$invoice.recipient_member_id
			recipient_member_number=$invoice.recipient_member_number
			introduction_text=null
			subject=$invoice.subject
			date=$invoice.date
			deadline=null
			status=$PAID_STATUS
			cancelled=$invoice.cancelled
			items=$invoice.items
			total=$invoice.total
			vat_exemption=$invoice.vat_exemption
			siret=$invoice.siret
			org_contact=$invoice.org_contact
			author_id=$invoice.author_id
			parent_id=$invoice.parent_id
			last_modification_date=$now|atom_date
			signing_place=null
			signing_date=$invoice.signing_date
			validation_date=null
			payment_date=$date
			payment_comment=$_POST.payment_comment
			transaction_id=$transaction.id|intval
			payment_detail=null
			extra_info=null
			comment=$invoice.comment
			module_version=$VERSION
		}}
		{{:http redirect="details.html?id=%d&ok=6&show=invoice"|args:$invoice.id}}
	{{/if}}

{{elseif $_POST.cancel_submit}}
	{{if !$_GET.id}}
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265

266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296

297
298
299
300
301
302
303
					{{:save id=id|intval
						validate_schema="./schema/invoice.json"
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_numero=$recipient_member_numero
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$status
						cancelled=true
						cancellation_reason=$_POST.reason
						items=$items
						total=$total
						vat_exemption=$vat_exemption
						siret=$siret
						org_contact=$org_contact
						author_id=$author_id
						parent_id=$parent_id
						last_modification_date=$now|atom_date
						signing_place=$signing_place
						signing_date=$signing_date
						validation_date=$validation_date
						payment_date=$payment_date
						payment_comment=$comment
						transaction_id=$transaction_id
						payment_detail=$payment_detail
						extra_info=$extra_info

						module_version=$VERSION
					}}
				{{else}}
					{{:save id=$id|intval
						validate_schema="./schema/quotation.json"
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_numero=$recipient_member_numero
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$status
						cancelled=true
						cancellation_reason=$_POST.reason
						items=$items
						total=$total
						vat_exemption=$vat_exemption
						siret=$siret
						org_contact=$org_contact
						author_id=$author_id
						child_id=$child_id
						last_modification_date=$now|atom_date
						signing_place=$signing_place
						signing_date=$signing_date
						validation_date=$validation_date
						payment_detail=$payment_detail
						extra_info=$extra_info

						parent_id=$parent_id
						module_version=$VERSION
					}}
				{{/if}}
				{{:http redirect="index.html?ok=5&show=%s"|args:$type}}
			{{/if}}
		{{/load}}







|



















|



>










|




















>







239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
					{{:save id=id|intval
						validate_schema="./schema/invoice.json"
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_number=$recipient_member_number
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$status
						cancelled=true
						cancellation_reason=$_POST.reason
						items=$items
						total=$total
						vat_exemption=$vat_exemption
						siret=$siret
						org_contact=$org_contact
						author_id=$author_id
						parent_id=$parent_id
						last_modification_date=$now|atom_date
						signing_place=$signing_place
						signing_date=$signing_date
						validation_date=$validation_date
						payment_date=$payment_date
						payment_comment=$payment_comment
						transaction_id=$transaction_id
						payment_detail=$payment_detail
						extra_info=$extra_info
						comment=$comment
						module_version=$VERSION
					}}
				{{else}}
					{{:save id=$id|intval
						validate_schema="./schema/quotation.json"
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_number=$recipient_member_number
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$status
						cancelled=true
						cancellation_reason=$_POST.reason
						items=$items
						total=$total
						vat_exemption=$vat_exemption
						siret=$siret
						org_contact=$org_contact
						author_id=$author_id
						child_id=$child_id
						last_modification_date=$now|atom_date
						signing_place=$signing_place
						signing_date=$signing_date
						validation_date=$validation_date
						payment_detail=$payment_detail
						extra_info=$extra_info
						comment=$comment
						parent_id=$parent_id
						module_version=$VERSION
					}}
				{{/if}}
				{{:http redirect="index.html?ok=5&show=%s"|args:$type}}
			{{/if}}
		{{/load}}
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
				{{:save
					validate_schema="./schema/invoice.json"
					key=$new_key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_numero=$recipient_member_numero
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$DRAFT_STATUS
					cancelled=false
					items=$items







|







318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
				{{:save
					validate_schema="./schema/invoice.json"
					key=$new_key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$DRAFT_STATUS
					cancelled=false
					items=$items
336
337
338
339
340
341
342

343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372

373
374
375
376
377
378
379















































































380
381
382
383
384
385
386
					signing_date=$signing_date
					validation_date=null
					payment_date=null
					payment_comment=null
					transaction_id=null
					payment_detail=$payment_detail
					extra_info=$extra_info

					module_version=$VERSION
				}}
			{{else}}
				{{:save
					validate_schema="./schema/quotation.json"
					key=$new_key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_numero=$recipient_member_numero
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$DRAFT_STATUS
					cancelled=false
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					child_id=null
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$signing_date
					validation_date=null
					payment_detail=$payment_detail
					extra_info=$extra_info

					parent_id=null
					duplicated_from_id=$id|intval
					module_version=$VERSION
				}}
			{{/if}}
			{{:http redirect="index.html?ok=4"}}
		{{/load}}















































































	{{/if}}
{{/if}}

{{if $_POST.status_update_button}} {{* Only for developers *}}
	{{if !$_POST.id}}
		{{:error message='Aucun devis sélectionné.'}}
	{{else}}







>










|



















>







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
					signing_date=$signing_date
					validation_date=null
					payment_date=null
					payment_comment=null
					transaction_id=null
					payment_detail=$payment_detail
					extra_info=$extra_info
					comment=$comment
					module_version=$VERSION
				}}
			{{else}}
				{{:save
					validate_schema="./schema/quotation.json"
					key=$new_key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$DRAFT_STATUS
					cancelled=false
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					child_id=null
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$signing_date
					validation_date=null
					payment_detail=$payment_detail
					extra_info=$extra_info
					comment=$comment
					parent_id=null
					duplicated_from_id=$id|intval
					module_version=$VERSION
				}}
			{{/if}}
			{{:http redirect="index.html?ok=4"}}
		{{/load}}
	{{/if}}
{{elseif $_POST.edit_comment_submit}}
	{{if !$_GET.id}}
		{{:assign var='check_errors.' value='Aucun document sélectionné.'}}
	{{/if}}
	{{:include file='./check_max_length.tpl' check_value=$_POST.comment check_max=1024 check_label='Remarques trop longues' keep='check_errors'}}
	{{if !$check_errors}}
		{{#load id=$_GET.id}}
			{{if $type === $INVOICE_TYPE}}
				{{:save id=id|intval
					validate_schema="./schema/invoice.json"
					key=$key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$status
					cancelled=$cancelled
					cancellation_reason=$cancellation_reason
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					parent_id=$parent_id
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$signing_date
					validation_date=$validation_date
					payment_date=$payment_date
					payment_comment=$payment_comment
					transaction_id=$transaction_id
					payment_detail=$payment_detail
					extra_info=$extra_info
					comment=$_POST.comment
					module_version=$VERSION
				}}
			{{else}}
				{{:save id=$id|intval
					validate_schema="./schema/quotation.json"
					key=$key
					type=$type
					recipient_business_name=$recipient_business_name
					recipient_address=$recipient_address
					recipient_member_id=$recipient_member_id
					recipient_member_number=$recipient_member_number
					introduction_text=$introduction_text
					subject=$subject
					date=$date
					deadline=$deadline
					status=$status
					cancelled=$cancelled
					cancellation_reason=$cancellation_reason
					items=$items
					total=$total
					vat_exemption=$vat_exemption
					siret=$siret
					org_contact=$org_contact
					author_id=$author_id
					child_id=$child_id
					last_modification_date=$now|atom_date
					signing_place=$signing_place
					signing_date=$signing_date
					validation_date=$validation_date
					payment_detail=$payment_detail
					extra_info=$extra_info
					comment=$_POST.comment
					parent_id=$parent_id
					module_version=$VERSION
				}}
			{{/if}}
			{{:http redirect="index.html?ok=6&show=%s"|args:$type}}
		{{/load}}
	{{/if}}
{{/if}}

{{if $_POST.status_update_button}} {{* Only for developers *}}
	{{if !$_POST.id}}
		{{:error message='Aucun devis sélectionné.'}}
	{{else}}
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
					{{:save id=$id
						validate_schema="./schema/%s.json"|args:$type
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_numero=$recipient_member_numero
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$_POST.status
						cancelled=$cancelled
						items=$items







|







485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
					{{:save id=$id
						validate_schema="./schema/%s.json"|args:$type
						key=$key
						type=$type
						recipient_business_name=$recipient_business_name
						recipient_address=$recipient_address
						recipient_member_id=$recipient_member_id
						recipient_member_number=$recipient_member_number
						introduction_text=$introduction_text
						subject=$subject
						date=$date
						deadline=$deadline
						status=$_POST.status
						cancelled=$cancelled
						items=$items

Modified src/modules/invoice/include/schema/invoice.json from [8e5c0ce55b] to [e5c5d0aaba].

142
143
144
145
146
147
148





149
150
151
152
153
154
155
			"maxLength": 512
		},
		"extra_text": {
			"description": "Informations complémentaires",
			"type": ["string", "null"],
			"maxLength": 1024
		},





		"vat_exemption": {
			"Description": "Mode d'exonération de la TVA",
			"type": "string",
			"enum": ["nonprofit", "profit"]
		},
		"last_modification_date": {
			"description": "Date de la derniète modification",







>
>
>
>
>







142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
			"maxLength": 512
		},
		"extra_text": {
			"description": "Informations complémentaires",
			"type": ["string", "null"],
			"maxLength": 1024
		},
		"comment": {
			"description": "Remarques (ne seront pas affichées sur la facture)",
			"type": ["string", "null"],
			"maxLength": 1024
		},
		"vat_exemption": {
			"Description": "Mode d'exonération de la TVA",
			"type": "string",
			"enum": ["nonprofit", "profit"]
		},
		"last_modification_date": {
			"description": "Date de la derniète modification",

Modified src/modules/invoice/include/schema/quotation.json from [98afb5e561] to [72a29dd02c].

133
134
135
136
137
138
139





140
141
142
143
144
145
146
			"maxLength": 512
		},
		"extra_text": {
			"description": "Informations complémentaires",
			"type": ["string", "null"],
			"maxLength": 1024
		},





		"vat_exemption": {
			"Description": "Mode d'exonération de la TVA",
			"type": "string",
			"enum": ["nonprofit", "profit"]
		},
		"last_modification_date": {
			"description": "Date de la derniète modification",







>
>
>
>
>







133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
			"maxLength": 512
		},
		"extra_text": {
			"description": "Informations complémentaires",
			"type": ["string", "null"],
			"maxLength": 1024
		},
		"comment": {
			"description": "Remarques (ne seront pas affichées sur le devis)",
			"type": ["string", "null"],
			"maxLength": 1024
		},
		"vat_exemption": {
			"Description": "Mode d'exonération de la TVA",
			"type": "string",
			"enum": ["nonprofit", "profit"]
		},
		"last_modification_date": {
			"description": "Date de la derniète modification",

Modified src/modules/invoice/index.html from [c3ef579800] to [988bfd429d].

56
57
58
59
60
61
62


63
64
65
66
67
68
69
		Devis modifié avec succès.
	{{elseif $_GET.ok === '3'}}
		Brouillon supprimé avec succès.
	{{elseif $_GET.ok === '4'}}
		Document dupliqué avec succès.
	{{elseif $_GET.ok === '5'}}
		Document annulé avec succès.


	{{/if}}
	</p>
{{/if}}

{{:assign list_select="key; id AS 'Numéro'; datetime($$.date) AS 'Émission'; $$.deadline AS 'Échéance'; $$.recipient_business_name AS 'Tiers'; $$.subject AS 'Intitulé'; $$.total AS 'Montant'; $$.status AS 'Statut'"}}
{{:assign list_where="$$.type IN ('quotation', 'invoice') AND %s"|args:$filter}}
{{:assign list_order=1}}







>
>







56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
		Devis modifié avec succès.
	{{elseif $_GET.ok === '3'}}
		Brouillon supprimé avec succès.
	{{elseif $_GET.ok === '4'}}
		Document dupliqué avec succès.
	{{elseif $_GET.ok === '5'}}
		Document annulé avec succès.
	{{elseif $_GET.ok === '6'}}
		Remarques éditées avec succès.
	{{/if}}
	</p>
{{/if}}

{{:assign list_select="key; id AS 'Numéro'; datetime($$.date) AS 'Émission'; $$.deadline AS 'Échéance'; $$.recipient_business_name AS 'Tiers'; $$.subject AS 'Intitulé'; $$.total AS 'Montant'; $$.status AS 'Statut'"}}
{{:assign list_where="$$.type IN ('quotation', 'invoice') AND %s"|args:$filter}}
{{:assign list_order=1}}