-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathLocalPickup.php
More file actions
executable file
·134 lines (113 loc) · 4.75 KB
/
Copy pathLocalPickup.php
File metadata and controls
executable file
·134 lines (113 loc) · 4.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/*
* This file is part of the Thelia package.
* http://www.thelia.net
*
* (c) OpenStudio <info@thelia.net>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
namespace LocalPickup;
use Propel\Runtime\Connection\ConnectionInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator;
use Thelia\Core\Install\Database;
use Thelia\Model\Country;
use Thelia\Model\Message;
use Thelia\Model\MessageQuery;
use Thelia\Model\OrderPostage;
use Thelia\Model\State;
use Thelia\Module\AbstractDeliveryModuleWithState;
/**
* Class LocalPickup.
*
* @author Thelia <info@thelia.net>
*/
class LocalPickup extends AbstractDeliveryModuleWithState
{
public const DOMAIN_NAME = 'localpickup';
public const PRICE_VAR_NAME = 'price';
public const DESCRIPTION_VAR_NAME = 'description';
public const EMAIL_VAR_NAME = 'email';
public const SMS_VAR_NAME = 'sms';
public const EMAIL_CUSTOM_LOCAL_PICKUP = 'email_custom_local_pickup';
public const SMS_CUSTOM_LOCAL_PICKUP = 'sms_custom_local_pickup';
public function getPostage(Country $country, State $state = null): float|\Thelia\Model\OrderPostage
{
$request = $this->getRequest();
$locale = $request->hasSession()
? $request->getSession()->getLang()->getLocale()
: (\Thelia\Model\LangQuery::create()->findOneByByDefault(true)?->getLocale() ?? 'en_US');
return $this->buildOrderPostage(self::getConfigValue(self::PRICE_VAR_NAME, 0), $country, $locale);
}
public function update($currentVersion, $newVersion, ConnectionInterface $con = null): void
{
if (null === MessageQuery::create()->findOneByName(self::EMAIL_CUSTOM_LOCAL_PICKUP)) {
$message = new Message();
$message
->setName(self::EMAIL_CUSTOM_LOCAL_PICKUP)
->setHtmlTemplateFileName('order_shipping.html')
->setHtmlLayoutFileName('')
->setTextTemplateFileName('order_shipping.txt')
->setTextLayoutFileName('')
->setSecured(0)
->setLocale('fr_FR')
->setTitle('Confirmation de vote commande')
->setSubject('Commande à récupérer en magasin')
->setLocale('en_GB')
->setTitle('Order confirmation')
->setSubject('Order to pick up in store')
->setLocale('de_DE')
->setTitle('Bestellbestätigung')
->setSubject('Bestellung im Geschäft abholen')
->save()
;
}
if (null === MessageQuery::create()->findOneByName(self::SMS_CUSTOM_LOCAL_PICKUP)) {
$message = new Message();
$message
->setName(self::SMS_CUSTOM_LOCAL_PICKUP)
->setHtmlTemplateFileName('order_shipping_sms.html')
->save()
;
}
if ($newVersion === '1.2') {
$db = new Database($con);
// Migrate previous price from database to module config
try {
$statement = $db->execute('select price from local_pickup_shipping order by id desc limit 1');
$price = (float) $statement->fetchColumn(0);
self::setConfigValue(self::PRICE_VAR_NAME, $price);
} catch (\Exception $ex) {
// Nothing special
}
}
}
public function isValidDelivery(Country $country, State $state = null): bool
{
return true;
}
public function getDeliveryMode(): string
{
return 'localPickup';
}
public static function configureServices(ServicesConfigurator $servicesConfigurator): void
{
$servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
->exclude([__DIR__.'/I18n/*', __DIR__.'/Config/**/*.php', __DIR__.'/Tests/*', __DIR__.'/LocalPickup.php'])
->autowire(true)
->autoconfigure(true);
}
}