$json['orders_update_array'] = $document ? $this->initOrdersArray($orderModule->findOrdersByUserAndDeliveryNote($user, $document)) : []; | $json['orders_update_array'] = $document ? $this->initOrdersArray($orderModule->findOrdersByUserAndDeliveryNote($user, $document)) : []; | ||||
} | } | ||||
if ($typeAction == 'create' && ($classDocument == 'Invoice' || $classDocument == 'DeliveryNote')) { | |||||
$json['name'] = $documentModule->getSolver()->getDefaultName($classDocument, $user); | |||||
} | |||||
return $json; | return $json; | ||||
} | } | ||||
} | } |
<?php if ($action == 'update'): ?> | <?php if ($action == 'update'): ?> | ||||
<?= Html::hiddenInput('idDocument', $model->id, ['id' => 'id-document']) ?> | <?= Html::hiddenInput('idDocument', $model->id, ['id' => 'id-document']) ?> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<?= $form->field($model, 'name')->label('Nom du document') ?> | |||||
<?= $form->field($model, 'name')->textInput(['v-model' => 'document.name'])->label('Nom du document') ?> | |||||
<?php if ($action == 'update'): ?> | <?php if ($action == 'update'): ?> | ||||
<?= $form->field($model, 'id_user', [ | <?= $form->field($model, 'id_user', [ |
<?= $form->field($model, 'document_invoice_first_reference'); ?> | <?= $form->field($model, 'document_invoice_first_reference'); ?> | ||||
<?= $form->field($model, 'document_delivery_note_prefix')->hint($hintKeywordsPrefix);; ?> | <?= $form->field($model, 'document_delivery_note_prefix')->hint($hintKeywordsPrefix);; ?> | ||||
<?= $form->field($model, 'document_delivery_note_first_reference'); ?> | <?= $form->field($model, 'document_delivery_note_first_reference'); ?> | ||||
<?= $form->field($model, 'option_document_default_naming')->dropDownList(Dropdown::noYesChoices()); ?> | |||||
<?= $form->field($model, 'option_document_name_as_filename')->dropDownList(Dropdown::noYesChoices()); ?> | |||||
<?= $form->field($model, 'delivery_note_automatic_validation')->dropDownList(Dropdown::noYesChoices()); ?> | <?= $form->field($model, 'delivery_note_automatic_validation')->dropDownList(Dropdown::noYesChoices()); ?> | ||||
<?= $form->field($model, 'option_invoice_only_based_on_delivery_notes')->dropDownList(Dropdown::noYesChoices()); ?> | <?= $form->field($model, 'option_invoice_only_based_on_delivery_notes')->dropDownList(Dropdown::noYesChoices()); ?> | ||||
<?= $form->field($model, 'option_document_width_logo') | <?= $form->field($model, 'option_document_width_logo') |
.then(function (response) { | .then(function (response) { | ||||
if (response.data.return == 'success') { | if (response.data.return == 'success') { | ||||
Vue.set(app.document, 'address', response.data.address); | Vue.set(app.document, 'address', response.data.address); | ||||
if(response.data.name) { | |||||
Vue.set(app.document, 'name', response.data.name); | |||||
} | |||||
app.deliveryNoteCreateArray = response.data.delivery_note_create_array; | app.deliveryNoteCreateArray = response.data.delivery_note_create_array; | ||||
app.deliveryNoteUpdateArray = response.data.delivery_note_update_array; | app.deliveryNoteUpdateArray = response.data.delivery_note_update_array; | ||||
app.ordersCreateArray = response.data.orders_create_array; | app.ordersCreateArray = response.data.orders_create_array; | ||||
app.ordersUpdateArray = response.data.orders_update_array; | app.ordersUpdateArray = response.data.orders_update_array; | ||||
} else { | } else { | ||||
app.document.address = ''; | app.document.address = ''; | ||||
app.document.name = ''; | |||||
} | } | ||||
setTimeout("opendistrib_check_all_checkboxes();", 500); | setTimeout("opendistrib_check_all_checkboxes();", 500); | ||||
}); | }); |
Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | ||||
Mot de passe : <strong><?= $password ?></strong></p> | Mot de passe : <strong><?= $password ?></strong></p> | ||||
<p>À bientôt.</p> | |||||
<p>À bientôt,<br /> | |||||
<?= Html::encode($producer->name); ?></p> |
Identifiant : <?= $user->email; ?> | Identifiant : <?= $user->email; ?> | ||||
Mot de passe : <?= $password ?> | Mot de passe : <?= $password ?> | ||||
À bientôt. | |||||
À bientôt, | |||||
<?= $producer->name ?> |
Votre compte est désormais à <?= Price::format($userProducer->credit); ?>. | Votre compte est désormais à <?= Price::format($userProducer->credit); ?>. | ||||
À bientôt, | À bientôt, | ||||
<?= Html::encode($producer->name); ?> | |||||
<?= $producer->name; ?> |
<p>Voici le montant actuel de votre cagnotte : <strong><?= Price::format($credit); ?></strong></p> | <p>Voici le montant actuel de votre cagnotte : <strong><?= Price::format($credit); ?></strong></p> | ||||
<p>À bientôt.</p> | |||||
<p>À bientôt,<br /> | |||||
<?= Html::encode($producer->name) ?></p> |
Voici le montant actuel de votre cagnotte : <?= Price::format($credit); ?> | Voici le montant actuel de votre cagnotte : <?= Price::format($credit); ?> | ||||
À bientôt. | |||||
À bientôt, | |||||
<?= $producer->name ?> |
<p>Votre compte est désormais à <strong><?= Price::format($credit); ?></strong><br /> | <p>Votre compte est désormais à <strong><?= Price::format($credit); ?></strong><br /> | ||||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?>">Cliquez ici</a> pour voir l'historique de votre cagnotte.</p> | <a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?>">Cliquez ici</a> pour voir l'historique de votre cagnotte.</p> | ||||
<p>À bientôt.</p> | |||||
<p>À bientôt,<br /> | |||||
<?= Html::encode($producer->name) ?></p> |
Votre compte est désormais à : <?= Price::format($credit); ?>. | Votre compte est désormais à : <?= Price::format($credit); ?>. | ||||
Suivez ce lien pour voir l'historique de votre cagnotte : <?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?>"> | Suivez ce lien pour voir l'historique de votre cagnotte : <?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?>"> | ||||
À bientôt | |||||
À bientôt, | |||||
<?= $producer->name ?> |
<p>Bonjour,</p> | <p>Bonjour,</p> | ||||
<p>Voici en pièce jointe le récapitulatif des <?= count($orders) ?> commandes du <?= date('d/m',strtotime($date)) ?>.</p> | <p>Voici en pièce jointe le récapitulatif des <?= count($orders) ?> commandes du <?= date('d/m',strtotime($date)) ?>.</p> | ||||
<p>À bientôt.</p> | |||||
<?php else: ?> | <?php else: ?> | ||||
<p>Bonjour,</p> | <p>Bonjour,</p> | ||||
<p>Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>.</p> | <p>Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>.</p> | ||||
<p>À bientôt.</p> | |||||
<?php endif; ?> | <?php endif; ?> |
Voici en pièce jointe le récapitulatif des <?= count($orders) ?> commandes du <?= date('d/m',strtotime($date)) ?>. | Voici en pièce jointe le récapitulatif des <?= count($orders) ?> commandes du <?= date('d/m',strtotime($date)) ?>. | ||||
À bientôt. | |||||
Bonne réception | |||||
<?php else: ?> | <?php else: ?> | ||||
Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>. | Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>. | ||||
À bientôt. | |||||
<?php endif; ?> | <?php endif; ?> |
Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | ||||
Mot de passe : <strong><?= $password ?></strong></p> | Mot de passe : <strong><?= $password ?></strong></p> | ||||
<p>À bientôt.</p> | |||||
<p>À bientôt,<br /> | |||||
<?= Html::encode($producer->name); ?></p> |
Identifiant : <?= $user->email; ?> | Identifiant : <?= $user->email; ?> | ||||
Mot de passe : <?= $password ?> | Mot de passe : <?= $password ?> | ||||
À bientôt. | |||||
À bientôt, | |||||
<?= $producer->name ?> |
<p>Retrouvez à tout moment votre commande dans l'espace de votre producteur via l'onglet <a href="<?= Yii::$app->urlManager->createAbsoluteUrl('order/history') ?>">Mes commandes</a>.</p> | <p>Retrouvez à tout moment votre commande dans l'espace de votre producteur via l'onglet <a href="<?= Yii::$app->urlManager->createAbsoluteUrl('order/history') ?>">Mes commandes</a>.</p> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
À bientôt,<br /> | |||||
<?= Html::encode($producer->name); ?> | |||||
<p>À bientôt,<br /> | |||||
<?= Html::encode($producer->name) ?></p> |
<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?> | <?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?> | ||||
À bientôt, | À bientôt, | ||||
<?= Html::encode($producer->name); ?> | |||||
<?= $producer->name; ?> |
<?php endif; ?> | <?php endif; ?> | ||||
<p>À bientôt,<br /> | <p>À bientôt,<br /> | ||||
<?= Yii::$app->parameterBag->get('adminFirstname') ?></p> | |||||
<?= Html::encode($producer->name) ?></p> |
*/ | */ | ||||
use domain\User\User\User; | use domain\User\User\User; | ||||
use yii\helpers\Html; | |||||
?> | ?> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
À bientôt, | À bientôt, | ||||
<?= Yii::$app->parameterBag->get('adminFirstname') ?> | |||||
<?= $producer->name ?> |
<?php | |||||
/** | |||||
Copyright Guillaume Bourgeois (2024) | |||||
contact@souke.fr | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
use yii\db\Migration; | |||||
use yii\db\Schema; | |||||
/** | |||||
* Class m240923_093142_add_column_producer_option_document_naming | |||||
*/ | |||||
class m240923_093142_add_column_producer_option_document_naming extends Migration | |||||
{ | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
public function safeUp() | |||||
{ | |||||
$this->addColumn('producer', 'option_document_default_naming', Schema::TYPE_BOOLEAN); | |||||
$this->addColumn('producer', 'option_document_name_as_filename', Schema::TYPE_BOOLEAN); | |||||
} | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
public function safeDown() | |||||
{ | |||||
$this->dropColumn('producer', 'option_document_default_naming'); | |||||
$this->dropColumn('producer', 'option_document_name_as_filename'); | |||||
} | |||||
} |
use domain\PointSale\PointSale\PointSale; | use domain\PointSale\PointSale\PointSale; | ||||
use domain\_\AbstractService; | use domain\_\AbstractService; | ||||
use domain\_\SolverInterface; | use domain\_\SolverInterface; | ||||
use domain\Producer\Producer\ProducerSolver; | |||||
use domain\User\User\User; | |||||
use domain\User\User\UserSolver; | |||||
class DocumentSolver extends AbstractService implements SolverInterface | class DocumentSolver extends AbstractService implements SolverInterface | ||||
{ | { | ||||
protected ProductOrderSolver $productOrderSolver; | protected ProductOrderSolver $productOrderSolver; | ||||
protected UserSolver $userSolver; | |||||
public function loadDependencies(): void | public function loadDependencies(): void | ||||
{ | { | ||||
$this->productOrderSolver = $this->loadService(ProductOrderSolver::class); | $this->productOrderSolver = $this->loadService(ProductOrderSolver::class); | ||||
$this->userSolver = $this->loadService(UserSolver::class); | |||||
} | } | ||||
public function getAmount(DocumentInterface $document, string $type = Order::AMOUNT_TOTAL, bool $format = false) | public function getAmount(DocumentInterface $document, string $type = Order::AMOUNT_TOTAL, bool $format = false) | ||||
public function getType(DocumentInterface $document): string | public function getType(DocumentInterface $document): string | ||||
{ | { | ||||
$class = $this->getClass($document); | $class = $this->getClass($document); | ||||
return $this->getTypeStringByClass($class); | |||||
} | |||||
public function getTypeStringByClass(string $class): string | |||||
{ | |||||
if ($class == 'Invoice') { | if ($class == 'Invoice') { | ||||
$documentType = 'Facture'; | $documentType = 'Facture'; | ||||
} elseif ($class == 'DeliveryNote') { | } elseif ($class == 'DeliveryNote') { | ||||
return '@app/web/pdf/' . $document->id_producer . '/'; | return '@app/web/pdf/' . $document->id_producer . '/'; | ||||
} | } | ||||
public function getDefaultName(string $documentClass, User $user): string | |||||
{ | |||||
$dateLastMonth = new \DateTime('last month'); | |||||
return $this->getTypeStringByClass($documentClass) | |||||
. ' '.$this->userSolver->getUsername($user) | |||||
.' '.ucfirst(strftime('%B', $dateLastMonth->getTimestamp())) | |||||
.' '.$dateLastMonth->format('Y'); | |||||
} | |||||
public function getFilename(DocumentInterface $document): string | public function getFilename(DocumentInterface $document): string | ||||
{ | { | ||||
$filename = $this->getType($document) . '-'; | |||||
$optionDocumentNameAsFilename = $document->producer->option_document_name_as_filename; | |||||
if($this->isStatusValid($document)) { | |||||
$filename .= $document->reference; | |||||
if($optionDocumentNameAsFilename) { | |||||
$filename = preg_replace("/[^a-zA-Z0-9_]+/", "", str_replace(' ', '_', $document->name)); | |||||
} | } | ||||
elseif($this->isStatusDraft($document)) { | |||||
$filename .= 'Brouillon-'.$document->id; | |||||
else { | |||||
$filename = $this->getType($document) . '-'; | |||||
if($this->isStatusValid($document)) { | |||||
$filename .= $document->reference; | |||||
} | |||||
elseif($this->isStatusDraft($document)) { | |||||
$filename .= 'Brouillon-'.$document->id; | |||||
} | |||||
} | } | ||||
$filename .= '.pdf'; | $filename .= '.pdf'; |
'option_leave_period_message_display', | 'option_leave_period_message_display', | ||||
'sponsorship_sponsor_reward', | 'sponsorship_sponsor_reward', | ||||
'sponsorship_godson_reward', | 'sponsorship_godson_reward', | ||||
'export_shopping_cart_labels_pdf_in_cart_label_specific_format' | |||||
'export_shopping_cart_labels_pdf_in_cart_label_specific_format', | |||||
'option_document_default_naming', | |||||
'option_document_name_as_filename' | |||||
], | ], | ||||
'boolean' | 'boolean' | ||||
], | ], | ||||
'sponsorship_sponsor_reward' => 'Récompense parrain', | 'sponsorship_sponsor_reward' => 'Récompense parrain', | ||||
'option_communicate_email_default_subject' => 'Sujet par défaut', | 'option_communicate_email_default_subject' => 'Sujet par défaut', | ||||
'option_communicate_email_default_message' => 'Message par défaut', | 'option_communicate_email_default_message' => 'Message par défaut', | ||||
'option_document_default_naming' => 'Nommage par défaut à la création (TypeDocument Nom Mois Année)', | |||||
'option_document_name_as_filename' => 'Utiliser le nom du document comme nom de fichier lors du téléchargement' | |||||
]; | ]; | ||||
} | } | ||||
]); | ]); | ||||
} | } | ||||
/*public function actionSourceCode() | |||||
public function actionSourceCode() | |||||
{ | { | ||||
return $this->render('source_code'); | return $this->render('source_code'); | ||||
}*/ | |||||
} | |||||
/** | /** | ||||
* Liste les producteurs utilisant la plateforme. | * Liste les producteurs utilisant la plateforme. |
class="bull">•</span> | class="bull">•</span> | ||||
<a href="<?php echo $this->getUrlManager()->createUrl('site/cgv'); ?>">Conditions générales de service</a> | <a href="<?php echo $this->getUrlManager()->createUrl('site/cgv'); ?>">Conditions générales de service</a> | ||||
<!--<span class="bull">•</span> | |||||
<a href="<?php echo $this->getUrlManager()->createUrl('site/source-code'); ?>">Code source</a>--> | |||||
<span class="bull">•</span> | |||||
<a href="<?php echo $this->getUrlManager()->createUrl('site/source-code'); ?>">Code source</a> | |||||
</div> | </div> | ||||
</footer> | </footer> | ||||
</div> | </div> |