->all(); | ->all(); | ||||
if ($type == 'pdf') { | 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 | // get your HTML raw content without any layouts or scripts | ||||
$content = $this->renderPartial('report', [ | |||||
$content = $this->renderPartial($viewPdf, [ | |||||
'date' => $date, | 'date' => $date, | ||||
'distribution' => $distribution, | 'distribution' => $distribution, | ||||
'selectedProductsArray' => $selectedProductsArray, | 'selectedProductsArray' => $selectedProductsArray, | ||||
// A4 paper format | // A4 paper format | ||||
'format' => Pdf::FORMAT_A4, | 'format' => Pdf::FORMAT_A4, | ||||
// portrait orientation | // portrait orientation | ||||
'orientation' => Pdf::ORIENT_PORTRAIT, | |||||
'orientation' => $orientationPdf, | |||||
// stream to browser inline | // stream to browser inline | ||||
'destination' => $destination, | 'destination' => $destination, | ||||
'filename' => Yii::getAlias('@app/web/pdf/Commandes-' . $date . '-' . $idProducer . '.pdf'), | 'filename' => Yii::getAlias('@app/web/pdf/Commandes-' . $date . '-' . $idProducer . '.pdf'), |
public function actionIndex() | public function actionIndex() | ||||
{ | { | ||||
// commandes | // commandes | ||||
$optionDashboardNumberDistributions = Producer::getConfig('option_dashboard_number_distributions') ; | |||||
$dashboardNumberDistributions = $optionDashboardNumberDistributions ? $optionDashboardNumberDistributions : 3 ; | |||||
$distributionsArray = Distribution::find() | $distributionsArray = Distribution::find() | ||||
->with('order') | ->with('order') | ||||
->where(['>=', 'distribution.date', date('Y-m-d')]) | ->where(['>=', 'distribution.date', date('Y-m-d')]) | ||||
'distribution.active' => 1 | 'distribution.active' => 1 | ||||
]) | ]) | ||||
->orderBy('date ASC') | ->orderBy('date ASC') | ||||
->limit(3) | |||||
->limit($dashboardNumberDistributions) | |||||
->all(); | ->all(); | ||||
// dernières commandes | // dernières commandes |
<?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 ; | |||||
?> |
Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_WEEK => 'Jours de la semaine', | Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_WEEK => 'Jours de la semaine', | ||||
Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_INCOMING_DISTRIBUTIONS => 'Distributions à venir', | 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> | ||||
</div> | </div> | ||||
<?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> |
<?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 |
[['order_delay', 'order_deadline', 'order_delay_monday', 'order_deadline_monday', 'order_delay_tuesday', 'order_deadline_tuesday', | [['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_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', | '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', 'order_deadline_monday', 'order_deadline_tuesday', 'order_deadline_wednesday', | ||||
'order_deadline_thursday', 'order_deadline_friday', 'order_deadline_saturday', | '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]], | 'order_deadline_sunday', ], 'in', 'range' => [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]], | ||||
'option_payment_info' => 'Informations liées au paiement', | 'option_payment_info' => 'Informations liées au paiement', | ||||
'option_email_confirm' => 'Envoyer un email de confirmation au client', | 'option_email_confirm' => 'Envoyer un email de confirmation au client', | ||||
'option_email_confirm_producer' => 'Envoyer un email de confirmation au producteur', | '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', | |||||
]; | ]; | ||||
} | } | ||||
<?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; | |||||
} | |||||
} |
if(Producer::getConfig('option_email_confirm_producer') && $contactProducer && strlen($contactProducer->email)) { | if(Producer::getConfig('option_email_confirm_producer') && $contactProducer && strlen($contactProducer->email)) { | ||||
$paramsEmail['to_email'] = $contactProducer->email ; | $paramsEmail['to_email'] = $contactProducer->email ; | ||||
$paramsEmail['to_name'] = $contactProducer->name ; | $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); | Mailjet::sendMail($paramsEmail); | ||||
} | } | ||||
} | } |