@@ -481,6 +481,10 @@ class DocumentController extends BackendController | |||
$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; | |||
} | |||
} |
@@ -69,7 +69,7 @@ $documentClass = $documentModule->getClass($model); | |||
<?php if ($action == 'update'): ?> | |||
<?= Html::hiddenInput('idDocument', $model->id, ['id' => 'id-document']) ?> | |||
<?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'): ?> | |||
<?= $form->field($model, 'id_user', [ |
@@ -479,6 +479,8 @@ $this->addBreadcrumb($this->getTitle()); | |||
<?= $form->field($model, 'document_invoice_first_reference'); ?> | |||
<?= $form->field($model, 'document_delivery_note_prefix')->hint($hintKeywordsPrefix);; ?> | |||
<?= $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, 'option_invoice_only_based_on_delivery_notes')->dropDownList(Dropdown::noYesChoices()); ?> | |||
<?= $form->field($model, 'option_document_width_logo') |
@@ -145,12 +145,16 @@ if($(selector).length) { | |||
.then(function (response) { | |||
if (response.data.return == 'success') { | |||
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.deliveryNoteUpdateArray = response.data.delivery_note_update_array; | |||
app.ordersCreateArray = response.data.orders_create_array; | |||
app.ordersUpdateArray = response.data.orders_update_array; | |||
} else { | |||
app.document.address = ''; | |||
app.document.name = ''; | |||
} | |||
setTimeout("opendistrib_check_all_checkboxes();", 500); | |||
}); |
@@ -51,4 +51,5 @@ use yii\helpers\Html; | |||
Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | |||
Mot de passe : <strong><?= $password ?></strong></p> | |||
<p>À bientôt.</p> | |||
<p>À bientôt,<br /> | |||
<?= Html::encode($producer->name); ?></p> |
@@ -49,4 +49,5 @@ Voici vos identifiants de connexion : | |||
Identifiant : <?= $user->email; ?> | |||
Mot de passe : <?= $password ?> | |||
À bientôt. | |||
À bientôt, | |||
<?= $producer->name ?> |
@@ -48,4 +48,4 @@ Nous vous confirmons que votre cagnotte vient d'être créditée de <?= Price::f | |||
Votre compte est désormais à <?= Price::format($userProducer->credit); ?>. | |||
À bientôt, | |||
<?= Html::encode($producer->name); ?> | |||
<?= $producer->name; ?> |
@@ -47,4 +47,5 @@ use common\helpers\Price ; | |||
<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> |
@@ -47,4 +47,5 @@ Votre producteur "<?= Html::encode($producer->name); ?>" vous invite à alimente | |||
Voici le montant actuel de votre cagnotte : <?= Price::format($credit); ?> | |||
À bientôt. | |||
À bientôt, | |||
<?= $producer->name ?> |
@@ -50,4 +50,5 @@ use yii\helpers\Html; | |||
<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> | |||
<p>À bientôt.</p> | |||
<p>À bientôt,<br /> | |||
<?= Html::encode($producer->name) ?></p> |
@@ -48,4 +48,5 @@ Votre producteur <?= $producer->name; ?> vient de <?php if($type == Payment::TY | |||
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]) ?>"> | |||
À bientôt | |||
À bientôt, | |||
<?= $producer->name ?> |
@@ -41,12 +41,10 @@ if(is_array($orders) && count($orders)): | |||
<p>Bonjour,</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: ?> | |||
<p>Bonjour,</p> | |||
<p>Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>.</p> | |||
<p>À bientôt.</p> | |||
<?php endif; ?> |
@@ -43,7 +43,7 @@ Bonjour, | |||
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: ?> | |||
@@ -51,6 +51,4 @@ Bonjour, | |||
Vous n'avez aucune commande pour le <?= date('d/m',strtotime($date)) ?>. | |||
À bientôt. | |||
<?php endif; ?> |
@@ -49,4 +49,5 @@ use yii\helpers\Html; | |||
Identifiant : <strong><?= Html::encode($user->email); ?></strong><br /> | |||
Mot de passe : <strong><?= $password ?></strong></p> | |||
<p>À bientôt.</p> | |||
<p>À bientôt,<br /> | |||
<?= Html::encode($producer->name); ?></p> |
@@ -47,4 +47,5 @@ Voici vos nouveaux identifiants de connexion : | |||
Identifiant : <?= $user->email; ?> | |||
Mot de passe : <?= $password ?> | |||
À bientôt. | |||
À bientôt, | |||
<?= $producer->name ?> |
@@ -86,5 +86,5 @@ $pointSaleModule = PointSaleModule::getInstance(); | |||
<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; ?> | |||
À bientôt,<br /> | |||
<?= Html::encode($producer->name); ?> | |||
<p>À bientôt,<br /> | |||
<?= Html::encode($producer->name) ?></p> |
@@ -50,4 +50,4 @@ Vous pouvez retrouver le lien de paiement dans votre historique de commandes : | |||
<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?> | |||
À bientôt, | |||
<?= Html::encode($producer->name); ?> | |||
<?= $producer->name; ?> |
@@ -60,4 +60,4 @@ use yii\helpers\Html; | |||
<?php endif; ?> | |||
<p>À bientôt,<br /> | |||
<?= Yii::$app->parameterBag->get('adminFirstname') ?></p> | |||
<?= Html::encode($producer->name) ?></p> |
@@ -37,6 +37,7 @@ termes. | |||
*/ | |||
use domain\User\User\User; | |||
use yii\helpers\Html; | |||
?> | |||
@@ -62,4 +63,4 @@ Vous pouvez maintenant passer commande chez votre producteur. | |||
<?php endif; ?> | |||
À bientôt, | |||
<?= Yii::$app->parameterBag->get('adminFirstname') ?> | |||
<?= $producer->name ?> |
@@ -0,0 +1,63 @@ | |||
<?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'); | |||
} | |||
} |
@@ -43,14 +43,19 @@ use domain\Order\ProductOrder\ProductOrderSolver; | |||
use domain\PointSale\PointSale\PointSale; | |||
use domain\_\AbstractService; | |||
use domain\_\SolverInterface; | |||
use domain\Producer\Producer\ProducerSolver; | |||
use domain\User\User\User; | |||
use domain\User\User\UserSolver; | |||
class DocumentSolver extends AbstractService implements SolverInterface | |||
{ | |||
protected ProductOrderSolver $productOrderSolver; | |||
protected UserSolver $userSolver; | |||
public function loadDependencies(): void | |||
{ | |||
$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) | |||
@@ -168,7 +173,11 @@ class DocumentSolver extends AbstractService implements SolverInterface | |||
public function getType(DocumentInterface $document): string | |||
{ | |||
$class = $this->getClass($document); | |||
return $this->getTypeStringByClass($class); | |||
} | |||
public function getTypeStringByClass(string $class): string | |||
{ | |||
if ($class == 'Invoice') { | |||
$documentType = 'Facture'; | |||
} elseif ($class == 'DeliveryNote') { | |||
@@ -270,15 +279,31 @@ class DocumentSolver extends AbstractService implements SolverInterface | |||
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 | |||
{ | |||
$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'; |
@@ -311,7 +311,9 @@ class Producer extends ActiveRecordCommon | |||
'option_leave_period_message_display', | |||
'sponsorship_sponsor_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' | |||
], | |||
@@ -554,6 +556,8 @@ class Producer extends ActiveRecordCommon | |||
'sponsorship_sponsor_reward' => 'Récompense parrain', | |||
'option_communicate_email_default_subject' => 'Sujet 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' | |||
]; | |||
} | |||
@@ -220,10 +220,10 @@ class SiteController extends FrontendController | |||
]); | |||
} | |||
/*public function actionSourceCode() | |||
public function actionSourceCode() | |||
{ | |||
return $this->render('source_code'); | |||
}*/ | |||
} | |||
/** | |||
* Liste les producteurs utilisant la plateforme. |
@@ -180,8 +180,8 @@ $adminSettingBag = $settingModule->getAdminSettingBag(); | |||
class="bull">•</span> | |||
<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> | |||
</footer> | |||
</div> |