Création module PlanificationLivraison pour gérer le stockage en BDD du planning de livraison

This commit is contained in:
2021-02-19 21:03:07 +01:00
parent b688d5e161
commit fa7ef7c6d3
39 changed files with 351 additions and 1698 deletions

View File

@@ -33,7 +33,6 @@
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="id_area" required="true" type="INTEGER" />
<column name="day" required="true" type="INTEGER" />
<column name="begin_time" required="true" type="TIME" />
<column name="end_time" required="true" type="TIME" />

View File

@@ -5,6 +5,7 @@ return array(
'Add a new city' => 'Rajouter une commune',
'Add a new delivery day' => 'Ajouter un jour de livraison',
'Area name' => 'Nom du secteur',
'Choose this day' => 'Choisissez ce jour',
'Cities' => 'Communes desservies',
'City' => 'Commune',
'Create a delivery day' => 'Créer un nouveau jour de livraison',
@@ -25,12 +26,14 @@ return array(
'Modify a delivery day' => 'Modifier un jour de livraison',
'Module name' => 'Livraison à domicile',
'My areas' => 'Mes secteurs de livraison',
'Next delivery day' => 'Prochain jour de livraison',
'Please select a delivery day' => 'Veuillez choisir un jour de livraison',
'Remove this city' => 'Retirer cette commune',
'Save' => 'Sauvegarder',
'Schedule' => 'Horaires de livraison',
'There is no city delivered in this area' => 'Aucune commune desservie dans ce secteur',
'There is no schedule for this area' => 'Aucune livraison actuellement sur ce secteur',
'Title of config view' => 'Module LivraisonParSecteurs - Configuration',
'Title of config view' => 'Module LivraisonParSecteurs - Confiwguration',
'Zipcode' => 'Code postal',
'Monday' => 'Lundi',
'Tuesday' => 'Mardi',

View File

@@ -2,6 +2,7 @@
namespace LivraisonParSecteurs;
use DateInterval;
use LivraisonParSecteurs\Model\LpsAreaCityQuery;
use LivraisonParSecteurs\Model\LpsAreaQuery;
use Propel\Runtime\Connection\ConnectionInterface;
@@ -9,6 +10,7 @@ use Propel\Runtime\Propel;
use Thelia\Core\Translation\Translator;
use Thelia\Install\Database;
use Thelia\Model\AddressQuery;
use Thelia\Model\ConfigQuery;
use Thelia\Model\Country;
use Thelia\Model\OrderPostage;
use Thelia\Module\AbstractDeliveryModule;
@@ -20,6 +22,7 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
/** @var string */
const DOMAIN_NAME = 'livraisonparsecteurs';
const MESSAGE_DOMAIN = "livraisonparsecteurs";
const VARIABLE_MINIMUM_DELAY = 'minimum_delay_before_order';
/**
@@ -107,4 +110,37 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
else
return $days[$int];
}
static public function calculateRelativeDate($baseDay)
{
$minimumDelayBeforeOrder = ConfigQuery::read(LivraisonParSecteurs::VARIABLE_MINIMUM_DELAY);
$date = new \DateTime();
$date->add(new DateInterval('P'. $minimumDelayBeforeOrder . 'D'));
switch ($baseDay) {
case 0 :
$nextPossibleDay = $date->modify('next monday');
break;
case 1 :
$nextPossibleDay = $date->modify('next tuesday');
break;
case 2 :
$nextPossibleDay = $date->modify('next wednesday');
break;
case 3 :
$nextPossibleDay = $date->modify('next thursday');
break;
case 4 :
$nextPossibleDay = $date->modify('next friday');
break;
case 5 :
$nextPossibleDay = $date->modify('next saturday');
break;
case 6 :
$nextPossibleDay = $date->modify('next sunday');
break;
}
return $nextPossibleDay;
}
}

View File

@@ -38,6 +38,7 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
->set("DAY_LABEL", LivraisonParSecteurs::getDayLabel($lps_area_schedule->getDay()))
->set("BEGIN", $lps_area_schedule->getBeginTime())
->set("END", $lps_area_schedule->getEndTime())
->set("CALCULATED_DAY", LivraisonParSecteurs::calculateRelativeDate($lps_area_schedule->getDay())->format("d/m"))
;
$loopResult->addRow($loopResultRow);
}
@@ -66,4 +67,5 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
return $area->orderByDay()->orderByBeginTime();
}
}

View File

@@ -5,17 +5,15 @@
<div class="row">
<div class="col-sm-4">
<label for="livraisonparsecteurs">
{form name="thelia.order.delivery"}
{form_field field='delivery-module'}
<label for="delivery-method_{$module_id}">
<input type="radio" delivery-mode="lps" name="{$name}" id="delivery-method_{$module_id}" value="{$module_id}">
<strong>{intl l="Module name" d="livraisonparsecteurs"}</strong>
<br>
</label>
{/form_field}
{/form}
{form name="thelia.order.delivery"}
{form_field field='delivery-module'}
<label for="delivery-method_{$module_id}">
<input type="radio" delivery-mode="lps" name="{$name}" id="delivery-method_{$module_id}" value="{$module_id}">
<strong>{intl l="Module name" d="livraisonparsecteurs"}</strong>
<br>
</label>
{/form_field}
{/form}
</div>
<div class="col-sm-4">
<div class="price text-right">
@@ -33,16 +31,16 @@
<div class="table-responsive">
<table class="table table-striped table-condensed">
<thead>
<th style="text-align: center">{intl l='Delivery day' d='livraisonparsecteurs'}</th>
<th style="text-align: center">{intl l='Next delivery day' d='livraisonparsecteurs'}</th>
<th style="text-align: center">{intl l='Schedule' d='livraisonparsecteurs'}</th>
<th style="text-align: center">{intl l='Choose this day' d='livraisonparsecteurs'}</th>
</thead>
<tbody>
{loop type="lps_area_schedule" name="area-schedule" area_id={$area_id}}
<tr>
<td style="padding:10px; text-align: center">{$DAY_LABEL}</td>
<td style="padding:10px; text-align: center">{format_date date=$BEGIN format="H:i"} / {format_date date=$END format="H:i"}</td>
<td style="padding:10px; text-align: center"><input type="radio" id="choosen-day" name="checkbox-delivery-day"/></td>
<td style="padding:10px; text-align: center">{$DAY_LABEL} {$CALCULATED_DAY}</td>
<td style="padding:10px; text-align: center">{format_date date=$BEGIN format="H:i"} à {format_date date=$END format="H:i"}</td>
<td style="padding:10px; text-align: center"><input type="radio" name="lps-choosen-day" value="{$ID}" /></td>
</tr>
{/loop}
</tbody>
@@ -59,11 +57,13 @@
<script>
// Masquer par défaut les options du mode LPS
$(document).ready(function(){
$("#delivery-module-38").html($('#lps_ui').html());
$('#select-delivery-day').slideUp('fast');
});
// Gestion du pliage/dépliage du mode LPS
$('input[type=radio]').click(function() {
if ($('[delivery-mode=lps]').is(':checked')) {
$('#select-delivery-day').slideDown('fast');
@@ -72,4 +72,15 @@
}
});
//
$("#form-cart-delivery").off('submit').submit(function(ev) {
if ($('[delivery-mode=lps]').is(':checked')
&&
$('input[name=lps-choosen-day]:checked').length === 0) {
alert("{intl l='Please select a delivery day' d='livraisonparsecteurs' js=1}");
ev.preventDefault();
}
});
</script>