@@ -445,9 +445,32 @@ class DistributionController extends BackendController | |||
'content' => $content, | |||
// format content from your own css file if needed or use the | |||
// enhanced bootstrap css built by Krajee for mPDF formatting | |||
//'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css', | |||
//'cssFile' => Yii::getAlias('@web/css/distribution/report.css'), | |||
// any css to be embedded if required | |||
//'cssInline' => '.kv-heading-1{font-size:18px}', | |||
'cssInline' => ' | |||
table { | |||
border-spacing : 0px ; | |||
border-collapse : collapse ; | |||
width: 100% ; | |||
} | |||
table tr th, | |||
table tr td { | |||
padding: 0px ; | |||
margin: 0px ; | |||
border: solid 1px #e0e0e0 ; | |||
padding: 3px 8px ; | |||
vertical-align : top; | |||
} | |||
table tr th { | |||
font-size: 13px ; | |||
} | |||
table tr td { | |||
font-size: 13px ; | |||
} | |||
', | |||
// set mPDF properties on the fly | |||
//'options' => ['title' => 'Krajee Report Title'], | |||
// call mPDF methods on the fly | |||
@@ -456,7 +479,7 @@ class DistributionController extends BackendController | |||
'SetFooter' => ['{PAGENO}'], | |||
] | |||
]); | |||
// return the pdf output as per the destination setting | |||
return $pdf->render(); | |||
} |
@@ -342,12 +342,23 @@ class UserController extends BackendController | |||
$mailForm = new MailForm() ; | |||
if ($mailForm->load(Yii::$app->request->post()) && $mailForm->validate()) { | |||
$resultSendEmail = $mailForm->sendEmail($users) ; | |||
if($resultSendEmail) { | |||
$responseSendMail = $mailForm->sendEmail($users) ; | |||
if($responseSendMail->success()) { | |||
Yii::$app->getSession()->setFlash('success', 'Votre email a bien été envoyé.'); | |||
} | |||
else { | |||
Yii::$app->getSession()->setFlash('error', 'Un problème est survenu lors de l\'envoi de votre email.'); | |||
$bodyResponseSendMail = $responseSendMail->getBody() ; | |||
$emailsErrorArray = [] ; | |||
foreach($bodyResponseSendMail['Messages'] as $message) { | |||
if($message['Status'] != 'success') { | |||
$emailsErrorArray[] = $message['To']['Email'] ; | |||
} | |||
} | |||
$messageError = 'Un problème est survenu lors de l\'envoi de votre email.' ; | |||
if(count($emailsErrorArray) > 0) { | |||
$messageError .= '<br />Problème détecté sur les adresses suivantes : '. implode(',', $emailsErrorArray) ; | |||
} | |||
Yii::$app->getSession()->setFlash('error', $messageError); | |||
} | |||
return $this->redirect(['mail','idPointSale' => $idPointSale]); |
@@ -188,13 +188,11 @@ Produits disponibles : | |||
$success = $response->success() ; | |||
if($success) { | |||
return true ; | |||
} | |||
else { | |||
if(!$success) { | |||
Yii::error($response->getBody(), 'Mailjet'); | |||
return false ; | |||
} | |||
return $response ; | |||
} | |||
} |
@@ -52,7 +52,7 @@ foreach ($pointsSaleArray as $pointSale) { | |||
$html .= '<h3>'.$pointSale->name.'</h3>' ; | |||
$colCredit = ($pointSale->credit) ? '<th>Rappel crédit</th>' : '' ; | |||
$html .= '<table class="table table-bordered">' | |||
$html .= '<table class="">' | |||
. '<thead>' | |||
. '<tr>' | |||
. '<th>Client</th>' | |||
@@ -92,13 +92,14 @@ foreach ($pointsSaleArray as $pointSale) { | |||
$add = false; | |||
foreach ($order->productOrder as $productOrder) { | |||
if ($product->id == $productOrder->id_product) { | |||
$strProducts .= $product->name . ' (' .$productOrder->quantity . ' '.Product::strUnit($productOrder->unit, 'wording_short', true).'), '; | |||
$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) - 2).'</td>'; | |||
$html .= '<td>'.substr($strProducts, 0, strlen($strProducts) - 6).'</td>'; | |||
$html .= '<td>'.$order->comment.'</td>'; | |||
if($pointSale->credit) { | |||
@@ -137,12 +138,13 @@ foreach ($pointsSaleArray as $pointSale) { | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders, false, $unit); | |||
if ($quantity) { | |||
$strProducts .= $product->name . ' (' .$quantity . ' '.Product::strUnit($unit, 'wording_short', true).'), '; | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$strProducts .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
} | |||
$strProducts = substr($strProducts, 0, strlen($strProducts) - 2) ; | |||
$strProducts = substr($strProducts, 0, strlen($strProducts) - 6) ; | |||
$html .= '<td>'.$strProducts.'</td><td></td>' ; | |||
if($pointSale->credit) { | |||
@@ -156,7 +158,7 @@ foreach ($pointsSaleArray as $pointSale) { | |||
// par point de vente | |||
$html .= '<h3>Points de vente</h3>' ; | |||
$html .= '<table class="table table-bordered">' | |||
$html .= '<table class="">' | |||
. '<thead>' | |||
. '<tr>' | |||
. '<th>Point de vente</th>' | |||
@@ -176,12 +178,13 @@ foreach ($pointsSaleArray as $pointSale) | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders, false, $unit); | |||
if ($quantity) { | |||
$html .= $product->name . ' (' .$quantity . ' '.Product::strUnit($unit, 'wording_short', true).'), '; | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$html .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
} | |||
$html = substr($html, 0, strlen($html) - 2) ; | |||
$html = substr($html, 0, strlen($html) - 6) ; | |||
$html .= '</td><td>'.number_format($pointSale->revenues, 2).' €</td></tr>' ; | |||
$revenues += $pointSale->revenues ; | |||
@@ -195,12 +198,13 @@ foreach ($productsArray as $product) { | |||
foreach(Product::$unitsArray as $unit => $dataUnit) { | |||
$quantity = Order::getProductQuantity($product->id, $ordersArray, false, $unit); | |||
if ($quantity) { | |||
$html .= $product->name . ' (' .$quantity . ' '.Product::strUnit($unit, 'wording_short', true).'), '; | |||
$theUnit = (Product::strUnit($unit, 'wording_short', true) == 'p.') ? '' : ' '.Product::strUnit($unit, 'wording_short', true) ; | |||
$html .= $product->name . ' (' .$quantity .$theUnit.')<br />'; | |||
} | |||
} | |||
} | |||
$html = substr($html, 0, strlen($html) - 2) ; | |||
$html = substr($html, 0, strlen($html) - 6) ; | |||
$html .= '</td><td><strong>'.number_format($revenues, 2).' €</strong></td></tr>' ; | |||
@@ -162,7 +162,7 @@ $this->render('_menu',[ | |||
}, | |||
'delete' => function($url, $model) { | |||
return Html::a('<span class="glyphicon glyphicon-trash"></span>', Yii::$app->urlManager->createUrl(array_merge(['user/delete','id' => $model->id], Yii::$app->getRequest()->getQueryParams())), [ | |||
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default' | |||
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default btn-confirm-delete' | |||
]); | |||
} | |||
], |
@@ -0,0 +1,41 @@ | |||
@charset "UTF-8"; | |||
/** | |||
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. | |||
*/ | |||
/* line 39, ../../sass/distribution/report.scss */ | |||
table.table tr td { | |||
border: solid 1px #e0e0e0; | |||
padding: 2px; | |||
} |
@@ -42,6 +42,7 @@ $(document).ready(function() { | |||
opendistrib_tooltip() ; | |||
opendistrib_ordre_produits() ; | |||
opendistrib_products() ; | |||
opendistrib_confirm_delete() ; | |||
}) ; | |||
var UrlManager = { | |||
@@ -54,6 +55,15 @@ var UrlManager = { | |||
} | |||
}; | |||
function opendistrib_confirm_delete() { | |||
$('.btn-confirm-delete').click(function(event) { | |||
if(!confirm('Souhaitez-vous vraiment supprimer cette entrée ?')) { | |||
event.stopPropagation() ; | |||
return false ; | |||
} | |||
}) ; | |||
} | |||
function opendistrib_products() { | |||
if($('.product-create').size() || $('.product-update').size()) { | |||
opendistrib_products_event_unit(false) ; |
@@ -0,0 +1,45 @@ | |||
/** | |||
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. | |||
*/ | |||
table.table { | |||
tr { | |||
td { | |||
border: solid 1px #e0e0e0 ; | |||
padding: 2px ; | |||
} | |||
} | |||
} | |||