1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
tarif.php
См. документацию.
1<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
2//http://www.russianpost.ru/rp/servise/ru/home/finuslug/cybermoney_russia
3
4include(GetLangFileName(dirname(__FILE__)."/", "/tarif.php"));
5
7{
8 /* required inhereted methods */
9 public static function getPrice(&$arPaySystem, $orderPrice, $deliveryPrice, $buyerLocationId)
10 {
11 if(!isset($arPaySystem["PSA_TARIF"]) || $arPaySystem["PSA_TARIF"] == '')
12 return 0;
13
14 $result = 0;
15 $arLoc = CSaleLocation::GetByID($buyerLocationId);
16 $regId = $arLoc["REGION_ID"];
17 $arTarifs = self::extractFromField($arPaySystem["PSA_TARIF"]);
18 $arTarif = isset($arTarifs[$regId]) ? $arTarifs[$regId] : $arTarifs[0];
19 $fullPrice = $orderPrice + $deliveryPrice;
20
21 if($fullPrice <= 1000)
22 $tarifNum = "0";
23 elseif($fullPrice <= 5000)
24 $tarifNum = "1";
25 elseif($fullPrice <= 20000)
26 $tarifNum = "2";
27 elseif($fullPrice <= 500000)
28 $tarifNum = "3";
29
30 if (isset($tarifNum))
31 {
32 $percent = 0;
33 if ($arTarif["TARIFS"][$tarifNum]["UPPER_SUMM"] < $orderPrice)
34 $percent = floatval($arTarif["TARIFS"][$tarifNum]["PERCENT"]) * floatval($orderPrice) / 100;
35 $result = floatval($arTarif["TARIFS"][$tarifNum]["FIX"]) + $percent;
36 }
37
38 return round($result, 0);
39 }
40
41 public static function getValues($psId = false, $persId = false)
42 {
43 $arResult = array();
44
45 //get saved
46 if(intval($psId) > 0)
47 {
49 array(),
50 array("PAY_SYSTEM_ID" => $psId, "PERSON_TYPE_ID" => $persId)
51 );
52 if ($arPSAction = $dbPSAction->Fetch())
53 {
54 $arResult = self::extractFromField($arPSAction["TARIF"]);
55 }
56 }
57
58 //or get default
59 if(empty($arResult))
60 {
62 'ps_payment_forward_calc_tarifs',
63 array('CSalePaySystemTarifPFC', 'getAllCMTarifsFromCsv')
64 );
65
66 }
67
68 return $arResult;
69 }
70
71 public static function extractFromField($strFieldContent)
72 {
74 $arTarifs = parent::extractFromField($strFieldContent);
75 $arTarifs = ($arTarifs) ?: array();
76 $arRegIds = array_keys($arTarifs);
77 $regNames = @CSaleLocation::GetRegionsNamesByIds($arRegIds);
78
79 $arResult[0]["TARIFS"] = self::getTarifArrayCSV($arTarifs[0]);
80 $arResult[0]["REG_NAME"] = GetMessage('SPFPCT_TARIF_DEFAULT');
81
82 foreach ($regNames as $regId => $regName)
83 {
84 $assocTarif = self::getTarifArrayCSV($arTarifs[$regId]);
85 if ($assocTarif)
86 {
87 $arResult[$regId]["TARIFS"] = $assocTarif;
88 $arResult[$regId]["REG_NAME"] = $regName;
89 }
90 }
91
92 return $arResult;
93 }
94
95 public static function prepareToField($arTarif)
96 {
97 $arResult = array();
98
99 if(is_array($arTarif))
100 {
101 foreach ($arTarif as $tarifId => $value)
102 {
103 if($tarifId == "REG_NEW" && $value > 0)
104 {
105 for ($i=0; $i<=11; $i++)
106 $arResult[$value][] = 0;
107
108 continue;
109 }
110
111 $arTarifId = explode('_', $tarifId);
112
113 if(isset($arTarifId[2]))
114 $regionId = $arTarifId[2];
115
116 $arResult[$regionId][] = $value;
117 }
118 }
119 return parent::prepareToField($arResult);
120 }
121
122 public static function getStructure($psId, $persId)
123 {
124 $arResult = array();
125
126 $arShopLocation = CSaleHelper::getShopLocation();
127
128 $arCmTarifs = self::getValues($psId, $persId);
129
130 foreach ($arCmTarifs as $regionId => $arRegInfo)
131 {
132
133 $arResult[$regionId.'REG_ID'] = array(
134 'TYPE' => 'TEXT_CENTERED',
135 'TITLE' => $arRegInfo["REG_NAME"],
136 'BLOCK_HIDEABLE' => 'Y',
137 'BLOCK_LENGTH' => 4,
138 );
139
140 if($regionId != 0)
141 $arResult[$regionId.'REG_ID']['BLOCK_DELETABLE'] = 'Y';
142
143 self::setTarifConfig(
144 'TARIF_1_'.$regionId,
145 GetMessage('SPFPCT_LESS_1K'),
146 $arRegInfo["TARIFS"][0],
147 $arResult);
148
149 self::setTarifConfig(
150 'TARIF_2_'.$regionId,
151 GetMessage('SPFPCT_LESS_5K'),
152 $arRegInfo["TARIFS"][1],
153 $arResult);
154
155 self::setTarifConfig(
156 'TARIF_3_'.$regionId,
157 GetMessage('SPFPCT_LESS_20K'),
158 $arRegInfo["TARIFS"][2],
159 $arResult);
160
161 self::setTarifConfig(
162 'TARIF_4_'.$regionId,
163 GetMessage('SPFPCT_LESS_500K'),
164 $arRegInfo["TARIFS"][3],
165 $arResult);
166 }
167
168 $arRegions = self::getRegionsList();
169 $arResult['REG_NEW'] = array(
170 'TYPE' => 'DROPDOWN',
171 'TITLE' => GetMessage('SPFPCT_ADD_REGION'),
172 'VALUES' => $arRegions,
173 'ONCHANGE' => "document.forms['pay_sys_form'].elements['apply'].click();"
174 );
175
176 return $arResult;
177 }
178
179 private static function getRegionsList()
180 {
181 $arResult = array(0 => GetMessage('SPFPCT_CHOOSE_REGION'));
182
184 while ($arReg = $dbReg->Fetch())
185 $arResult[$arReg["ID"]] = $arReg["NAME"];
186
187 return $arResult;
188 }
189
190 public static function checkCompability(&$arOrder, $orderPrice, $deliveryPrice, $buyerLocationId)
191 {
192 $maxSumm = 500000;
193 $fullPrice = $orderPrice+$deliveryPrice;
194
195 return ($fullPrice <= $maxSumm);
196 }
197
198 private static function setTarifConfig($tarifId, $tarifTitle, $arTarifs, &$arConfig)
199 {
200 $arConfig[$tarifId.'_NAME'] = array(
201 'TYPE' => 'MULTI_CONTROL_STRING',
202 'MCS_ID' => $tarifId,
203 'TITLE' => $tarifTitle,
204 );
205
206 $arConfig[$tarifId.'_FIX'] = array(
207 'TYPE' => 'STRING',
208 'MCS_ID' => $tarifId,
209 'POST_TEXT' => ' '.GetMessage('SPFPCT_RUB').' ',
210 'SIZE' => 4,
211 'VALUE' => $arTarifs['FIX']
212 );
213
214 $arConfig[$tarifId.'_PERCENT'] = array(
215 'TYPE' => 'STRING',
216 'MCS_ID' => $tarifId,
217 'PRE_TEXT' => ' + ',
218 'POST_TEXT' => ' % ',
219 'SIZE' => 3,
220 'VALUE' => $arTarifs['PERCENT']
221 );
222
223 $arConfig[$tarifId.'_UPPER_SUMM'] = array(
224 'TYPE' => 'STRING',
225 'MCS_ID' => $tarifId,
226 'PRE_TEXT' => ' '.GetMessage('SPFPCT_SUMM_MORE').' ',
227 'POST_TEXT' => ' '.GetMessage('SPFPCT_RUB').' ',
228 'SIZE' => 7,
229 'VALUE' => $arTarifs['UPPER_SUMM']
230 );
231 }
232
233 private static function getTarifArrayCSV($arTarifs)
234 {
235 $arResult = array();
236
237 if(is_array($arTarifs) && count($arTarifs) == 12)
238 {
239 for($i = 0; $i < 4; $i++)
240 {
241 $arResult[] = array(
242 "FIX" => $arTarifs[$i*3],
243 "PERCENT" => $arTarifs[$i*3+1],
244 "UPPER_SUMM" => $arTarifs[$i*3+2]
245 );
246 }
247 }
248
249 return $arResult;
250 }
251
252 public static function getCMTarifsByRegionFromCsv($regionNameLang)
253 {
254 if(trim($regionNameLang) == '')
255 return false;
256
257 $csvFile = CSaleHelper::getCsvObject(__DIR__.'/ru/cm_tarif.csv');
258
259 $COL_REG_NAME = 0;
260 $arTarifs = array();
261 $arTarifs = $csvFile->Fetch();
262
263 while ($arRes = $csvFile->Fetch())
264 {
265 if(mb_strtoupper(trim($regionNameLang)) === $arRes[$COL_REG_NAME])
266 {
267 $arTarifs = $arRes;
268 break;
269 }
270 }
271
272 $arTarifsResult = self::getTarifArrayCSV($arTarifs);
273
274 return $arTarifsResult;
275 }
276
277 public static function getAllCMTarifsFromCsv()
278 {
279 $csvFile = CSaleHelper::getCsvObject(__DIR__.'/ru/cm_tarif.csv');
280 $arTarifs = array();
281 $regNames = array();
282 $arResult = array();
283
284 while ($arRes = $csvFile->Fetch())
285 {
286 $arRegName = array_shift($arRes);
287 $arTarifs[$arRegName] = $arRes;
288
289 if($arRegName != 'default')
290 $regNames[] = $arRegName;
291 }
292
293 if(isset($arTarifs['default']))
294 {
295 $arResult[0] = array(
296 "TARIFS" => self::getTarifArrayCSV($arTarifs['default']),
297 "REG_NAME" => GetMessage('SPFPCT_TARIF_DEFAULT')
298 );
299 }
300
301 $regInfo = CSaleLocation::GetRegionsIdsByNames($regNames);
302
303 foreach ($regInfo as $regName => $regId)
304 {
305 $assocTarif = self::getTarifArrayCSV($arTarifs[$regName]);
306
307 $arResult[$regInfo[$regName]]["TARIFS"] = $assocTarif;
308 $arResult[$regInfo[$regName]]["REG_NAME"] = $regName;
309 }
310
311 return $arResult;
312 }
313}
314
315$PSTarifClassName = 'CSalePaySystemTarifPFC';
316?>
$arResult
Определения generate_coupon.php:16
static GetRegionsNamesByIds($arIds, $lang=LANGUAGE_ID)
Определения location.php:3105
static GetRegionsIdsByNames($arRegNames, $countryId=false)
Определения location.php:2972
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения pay_system_action.php:528
static getCsvObject($filePath)
Определения helper.php:379
static getShopLocation($siteId=false)
Определения helper.php:364
static getOptionOrImportValues($optName, $importFuncName=false, $arFuncParams=array(), $siteId="")
Определения helper.php:261
static GetByID($primary, $strLang=LANGUAGE_ID)
Определения location.php:118
static GetRegionList($arOrder=Array("NAME_LANG"=>"ASC"), $arFilter=Array(), $strLang=LANGUAGE_ID)
Определения location.php:261
Определения tarif.php:7
static getValues($psId=false, $persId=false)
Определения tarif.php:41
static getStructure($psId, $persId)
Определения tarif.php:122
static getAllCMTarifsFromCsv()
Определения tarif.php:277
static checkCompability(&$arOrder, $orderPrice, $deliveryPrice, $buyerLocationId)
Определения tarif.php:190
static getPrice(&$arPaySystem, $orderPrice, $deliveryPrice, $buyerLocationId)
Определения tarif.php:9
static getCMTarifsByRegionFromCsv($regionNameLang)
Определения tarif.php:252
static prepareToField($arTarif)
Определения tarif.php:95
static extractFromField($strFieldContent)
Определения tarif.php:71
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
GetMessage($name, $aReplace=null)
Определения tools.php:3397
GetLangFileName($before, $after, $lang=false)
Определения tools.php:3428
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
die
Определения quickway.php:367
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$arRes
Определения options.php:104
$PSTarifClassName
Определения tarif.php:315