@@ -450,8 +450,17 @@ class DistributionController extends BackendController | |||
->all(); | |||
if ($type == 'pdf') { | |||
$viewPdf = 'report' ; | |||
$orientationPdf = Pdf::ORIENT_PORTRAIT ; | |||
$producer = GlobalParam::getCurrentProducer() ; | |||
if($producer->slug == 'bourlinguepacotille') { | |||
$viewPdf = 'report-bourlingue' ; | |||
$orientationPdf = Pdf::ORIENT_LANDSCAPE ; | |||
} | |||
// get your HTML raw content without any layouts or scripts | |||
$content = $this->renderPartial('report', [ | |||
$content = $this->renderPartial($viewPdf, [ | |||
'date' => $date, | |||
'distribution' => $distribution, | |||
'selectedProductsArray' => $selectedProductsArray, | |||
@@ -474,7 +483,7 @@ class DistributionController extends BackendController | |||
// A4 paper format | |||
'format' => Pdf::FORMAT_A4, | |||
// portrait orientation | |||
'orientation' => Pdf::ORIENT_PORTRAIT, | |||
'orientation' => $orientationPdf, | |||
// stream to browser inline | |||
'destination' => $destination, | |||
'filename' => Yii::getAlias('@app/web/pdf/Commandes-' . $date . '-' . $idProducer . '.pdf'), |
@@ -118,6 +118,8 @@ class SiteController extends BackendController | |||
public function actionIndex() | |||
{ | |||
// commandes | |||
$optionDashboardNumberDistributions = Producer::getConfig('option_dashboard_number_distributions') ; | |||
$dashboardNumberDistributions = $optionDashboardNumberDistributions ? $optionDashboardNumberDistributions : 3 ; | |||
$distributionsArray = Distribution::find() | |||
->with('order') | |||
->where(['>=', 'distribution.date', date('Y-m-d')]) | |||
@@ -126,7 +128,7 @@ class SiteController extends BackendController | |||
'distribution.active' => 1 | |||
]) | |||
->orderBy('date ASC') | |||
->limit(3) | |||
->limit($dashboardNumberDistributions) | |||
->all(); | |||
// dernières commandes |
@@ -0,0 +1,282 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
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 common\models\Order ; | |||
use common\models\Product ; | |||
$dayWeek = date('w', strtotime($date)); | |||
$dayWeekArray = [0 => 'sunday', 1 => 'monday', 2 => 'tuesday', 3 => 'wednesday', 4 => 'thursday', 5 => 'friday', 6 => 'saturday']; | |||
$fieldInfosPointSale = 'infos_' . $dayWeekArray[$dayWeek]; | |||
$html = '' ; | |||
$count = count($productsArray) ; | |||
$limit = 100 ; | |||
$isBig = $count > $limit ; | |||
// par point de vente | |||
foreach ($pointsSaleArray as $pointSale) { | |||
if (count($pointSale->orders)) { | |||
$html .= '<h3>'.$pointSale->name.'</h3>' ; | |||
$html .= '<table class="">' | |||
. '<thead>' | |||
. '<tr>' | |||
. '<th>Nom / prénom</th>' | |||
. '<th>Téléphone</th>' | |||
. '<th>Mail</th>' | |||
. '<th>Produits</th>' | |||
. ($isBig ? '<th>Produits</th>' : '') | |||
. '<th>Commentaire</th>' | |||
. '<th>Paiement</th>' | |||
. '<th>Moyen de paiement</th>' | |||
. '<th>Montant</th>' | |||
. '</tr>' | |||
. '<tbody>'; | |||
foreach ($pointSale->orders as $order) { | |||
$html .= '<tr>' ; | |||
$strUser = ''; | |||
// username | |||
$strUser = $order->getStrUser() ; | |||
if(strlen($order->comment_point_sale)) | |||
{ | |||
$strUser .= '<br /><em>'.$order->comment_point_sale.'</em>' ; | |||
} | |||
$html .= '<td>'.$strUser.'</td>'; | |||
// téléphone | |||
$html .= '<td>' ; | |||
if (isset($order->user) && strlen($order->user->phone)) { | |||
$html .= $order->user->phone ; | |||
} | |||
$html .= '</td>' ; | |||
$html .= '<td>' ; | |||
if (isset($order->user) && strlen($order->user->email)) { | |||
$html .= $order->user->email ; | |||
} | |||
$html .= '</td>' ; | |||
// produits | |||
$strProducts = ''; | |||
foreach ($productsArray as $product) { | |||
$add = false; | |||
foreach ($order->productOrder as $productOrder) { | |||
if($product->id == $productOrder->id_product) { | |||
$unit = (Product::strUnit($productOrder->unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($productOrder->unit, 'wording_short', true) ; | |||
$strProducts .= $product->name . ' (' .$productOrder->quantity .$unit.')<br />'; | |||
$add = true; | |||
} | |||
} | |||
} | |||
$html .= '<td>'.substr($strProducts, 0, strlen($strProducts) - 6).'</td>'; | |||
if($isBig) { | |||
$html .= '<td></td>' ; | |||
} | |||
// commentaire | |||
$html .= '<td>'.$order->comment.'</td>'; | |||
// paiement | |||
$html .= '<td>' ; | |||
if(isset($order->mean_payment) && strlen($order->mean_payment) > 0) | |||
{ | |||
$html .= 'Payé' ; | |||
} | |||
$html .= '</td>' ; | |||
// moyen de paiement | |||
$html .= '<td>' ; | |||
if(isset($order->mean_payment) && strlen($order->mean_payment) > 0) | |||
{ | |||
if($order->mean_payment == 'cheque') { | |||
$html .= 'Chèque' ; | |||
} | |||
elseif($order->mean_payment == 'money') { | |||
$html .= 'Espèces' ; | |||
} | |||
elseif($order->mean_payment == 'credit') { | |||
$html .= 'Crédit' ; | |||
} | |||
elseif($order->mean_payment == 'credit-card') { | |||
$html .= 'Carte bancaire' ; | |||
} | |||
elseif($order->mean_payment == 'transfer') { | |||
$html .= 'Virement' ; | |||
} | |||
else { | |||
$html .= $order->mean_payment ; | |||
} | |||
} | |||
$html .= '</td>' ; | |||
if($pointSale->credit) { | |||
$credit = '' ; | |||
if(isset($order->user) && $order->user->id) { | |||
$userProducer = UserProducer::searchOne([ | |||
'id_user' => $order->user->id | |||
]); | |||
if($userProducer) { | |||
$credit = number_format($userProducer->credit,2).' €' ; | |||
} | |||
} | |||
$html .= '<td>'.$credit.'</td>' ; | |||
} | |||
$html .= '<td><strong>'.number_format($order->amount_with_tax, 2) . ' € '; | |||
$html .= '</strong></td>' ; | |||
$html .= '</tr>' ; | |||
} | |||
$html .= '<tr><td><strong>Total</strong></td><td></td><td></td>' ; | |||
$strProducts = ''; | |||
$cpt = 0 ; | |||
foreach ($productsArray as $product) { | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders, false, $unit); | |||
if ($quantity) { | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$strProducts .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
if($isBig && $cpt == $limit) { | |||
$strProducts .= '</td><td>' ; | |||
} | |||
$cpt ++ ; | |||
} | |||
$strProducts = substr($strProducts, 0, strlen($strProducts) - 6) ; | |||
$html .= '<td>'.$strProducts.'</td><td></td><td></td><td></td>' ; | |||
if($pointSale->credit) { | |||
$html .= '<td></td>' ; | |||
} | |||
$html .= '<td><strong>'.Price::format($pointSale->revenues_with_tax) . '</strong></td>'; | |||
$html .= '</tbody></table><pagebreak>' ; | |||
} | |||
} | |||
// par point de vente | |||
$html .= '<h3>Points de vente</h3>' ; | |||
$html .= '<table class="">' | |||
. '<thead>' | |||
. '<tr>' | |||
. '<th>Point de vente</th>' | |||
. '<th>Produits</th>' | |||
. ( $isBig ? '<th>Produits</th>' : '') | |||
. '<th>Montant</th>' | |||
. '</tr>' | |||
. '<tbody>'; | |||
$revenues = 0 ; | |||
foreach ($pointsSaleArray as $pointSale) | |||
{ | |||
if (count($pointSale->orders)) | |||
{ | |||
$html .= '<tr><td>'.$pointSale->name.'</td><td>' ; | |||
$cpt = 0 ; | |||
foreach ($productsArray as $product) { | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders, false, $unit); | |||
if ($quantity) { | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$html .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
if($isBig && $cpt == $limit) { | |||
$html .= '</td><td>' ; | |||
} | |||
$cpt ++ ; | |||
} | |||
$html = substr($html, 0, strlen($html) - 6) ; | |||
$html .= '</td><td>'.Price::format($pointSale->revenues_with_tax, 2).'</td></tr>' ; | |||
$revenues += $pointSale->revenues_with_tax ; | |||
} | |||
} | |||
// total | |||
$html .= '<tr><td><strong>Total</strong></td><td>' ; | |||
$cpt = 0 ; | |||
foreach ($productsArray as $product) { | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $ordersArray, false, $unit); | |||
if ($quantity) { | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$html .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
if($isBig && $cpt == $limit) { | |||
$html .= '</td><td>' ; | |||
} | |||
$cpt ++ ; | |||
} | |||
$html = substr($html, 0, strlen($html) - 6) ; | |||
$html .= '</td><td><strong>'.number_format($revenues, 2).' €</strong></td></tr>' ; | |||
$html .= '</tbody></table>' ; | |||
echo $html ; | |||
?> |
@@ -107,6 +107,20 @@ $this->addBreadcrumb($this->getTitle()) ; | |||
Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_WEEK => 'Jours de la semaine', | |||
Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_INCOMING_DISTRIBUTIONS => 'Distributions à venir', | |||
]); ?> | |||
<?= $form->field($model, 'option_dashboard_number_distributions') | |||
->dropDownList([ | |||
3 => '3', | |||
6 => '6', | |||
9 => '9', | |||
12 => '12', | |||
15 => '15', | |||
18 => '18', | |||
21 => '21', | |||
24 => '24', | |||
27 => '27', | |||
30 => '30', | |||
], []); ?> | |||
</div> | |||
</div> | |||
@@ -369,3 +383,4 @@ $this->addBreadcrumb($this->getTitle()) ; | |||
@@ -0,0 +1,58 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
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 common\models\Producer ; | |||
use common\helpers\GlobalParam ; | |||
$producer = GlobalParam::getCurrentProducer() ; | |||
?> | |||
<p>Bonjour,</p> | |||
<p>Une nouvelle commande d'une valeur de <strong><?= $order->getAmountWithTax(Order::AMOUNT_TOTAL, true); ?></strong> vient d'être passée par :</p> | |||
<ul> | |||
<li><strong><?= Html::encode($user->name); ?></strong></li> | |||
<li><?= Html::encode($user->phone); ?></li> | |||
<li><?= Html::encode($user->email); ?></li> | |||
</ul> | |||
<p>Retrait : <strong><?= date('d/m/Y',strtotime($distribution->date)) ?></strong> au point de retrait | |||
<strong><?= Html::encode($pointSale->name) ?></strong><?php if(strlen($pointSale->locality) > 0): ?> situé à <?= Html::encode($pointSale->locality) ?><?php endif ?>.</p> | |||
<p>À bientôt</p> |
@@ -0,0 +1,54 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
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 common\models\Producer ; | |||
use common\helpers\GlobalParam ; | |||
$producer = GlobalParam::getCurrentProducer() ; | |||
?> | |||
Bonjour, | |||
Une nouvelle commande d'une valeur de <?= $order->getAmountWithTax(Order::AMOUNT_TOTAL, true); ?> vient d'être passée par : | |||
- <?= Html::encode($user->name); ?> | |||
- <?= Html::encode($user->phone); ?> | |||
- <?= Html::encode($user->email); ?> | |||
Retrait : <?= date('d/m/Y',strtotime($distribution->date)) ?> au point de retrait <?= Html::encode($pointSale->name) ?><?php if(strlen($pointSale->locality) > 0): ?> situé à <?= Html::encode($pointSale->locality) ?><?php endif ?>. | |||
À bientôt |
@@ -115,7 +115,7 @@ class Producer extends ActiveRecordCommon | |||
[['order_delay', 'order_deadline', 'order_delay_monday', 'order_deadline_monday', 'order_delay_tuesday', 'order_deadline_tuesday', | |||
'order_delay_wednesday', 'order_deadline_wednesday', 'order_delay_thursday', 'order_deadline_thursday', 'order_delay_friday', | |||
'order_deadline_friday', 'order_delay_saturday', 'order_deadline_saturday', 'order_delay_sunday', 'order_deadline_sunday', | |||
'id_tax_rate_default', 'document_quotation_duration'], 'integer'], | |||
'id_tax_rate_default', 'document_quotation_duration', 'option_dashboard_number_distributions'], 'integer'], | |||
[['order_deadline', 'order_deadline_monday', 'order_deadline_tuesday', 'order_deadline_wednesday', | |||
'order_deadline_thursday', 'order_deadline_friday', 'order_deadline_saturday', | |||
'order_deadline_sunday', ], 'in', 'range' => [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]], | |||
@@ -216,6 +216,7 @@ class Producer extends ActiveRecordCommon | |||
'option_payment_info' => 'Informations liées au paiement', | |||
'option_email_confirm' => 'Envoyer un email de confirmation au client', | |||
'option_email_confirm_producer' => 'Envoyer un email de confirmation au producteur', | |||
'option_dashboard_number_distributions' => 'Nombre de distributions affichées sur le tableau de board', | |||
]; | |||
} | |||
@@ -0,0 +1,19 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
class m201116_104905_add_option_dashboard_number_distributions extends Migration | |||
{ | |||
public function safeUp() | |||
{ | |||
$this->addColumn('producer', 'option_dashboard_number_distributions', Schema::TYPE_INTEGER.' DEFAULT 3'); | |||
} | |||
public function safeDown() | |||
{ | |||
$this->dropColumn('producer', 'option_dashboard_number_distributions'); | |||
return false; | |||
} | |||
} |
@@ -442,6 +442,8 @@ class OrderController extends ProducerBaseController | |||
if(Producer::getConfig('option_email_confirm_producer') && $contactProducer && strlen($contactProducer->email)) { | |||
$paramsEmail['to_email'] = $contactProducer->email ; | |||
$paramsEmail['to_name'] = $contactProducer->name ; | |||
$paramsEmail['content_view_text'] = '@common/mail/orderConfirmProducer-text.php' ; | |||
$paramsEmail['content_view_html'] = '@common/mail/orderConfirmProducer-html.php' ; | |||
Mailjet::sendMail($paramsEmail); | |||
} | |||
} |