191 lines
7.7 KiB
PHP
191 lines
7.7 KiB
PHP
|
|
<?
|
||
|
|
|
||
|
|
namespace controller\shop\order;
|
||
|
|
|
||
|
|
use ms\ms\structure\eTab;
|
||
|
|
use ms\ms\structure\eTabType;
|
||
|
|
use ms\ms\structure\msControllerTable;
|
||
|
|
use ms\ms\structure\msTo;
|
||
|
|
use shop\Cart;
|
||
|
|
use shop\core\structure\shopControllerTable;
|
||
|
|
use shop\Delivery;
|
||
|
|
use shop\delivery\structure\eShopDeliveryType;
|
||
|
|
use shop\Item;
|
||
|
|
use shop\Order;
|
||
|
|
use shop\order\Blank;
|
||
|
|
use shop\order\Cashback;
|
||
|
|
use shop\Shop;
|
||
|
|
use shop\cart\Item as CartItem;
|
||
|
|
|
||
|
|
class Api extends shopControllerTable {
|
||
|
|
|
||
|
|
static $class = 'shop\Order';
|
||
|
|
|
||
|
|
static function copyByProfile(){
|
||
|
|
if(IF_PROFILE){
|
||
|
|
$C = Order::getByID(intval($_POST['id']));
|
||
|
|
if($C[Order::$PROFILE] == PID){
|
||
|
|
$r = CartItem::select([
|
||
|
|
\Query::WHERE => new \Where(\Where::_operator(CartItem::$CART,'=',$C[Order::$CART]))
|
||
|
|
]);
|
||
|
|
$CART_ID = Cart::getMyCartID();
|
||
|
|
while($l = \DB::fetch($r)){
|
||
|
|
unset($l[CartItem::$ID]);
|
||
|
|
unset($l[CartItem::$CREATED]);
|
||
|
|
unset($l[CartItem::$UPDATED]);
|
||
|
|
$l[CartItem::$CART] = $CART_ID;
|
||
|
|
CartItem::insert($l);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
static function blank(){
|
||
|
|
if(IF_AUTH){
|
||
|
|
if(($ORDER = Order::isMy(intval($_GET['id']))) && ($BLANK = Blank::isMy(intval($_GET['blank']))) ) {
|
||
|
|
echo order::renderBlank($ORDER[Order::$ID],$BLANK[Blank::$ID]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
static function getPrintForm(){
|
||
|
|
$res = [];
|
||
|
|
if(IF_AUTH) {
|
||
|
|
$link_id = '/api/shop.order/blank/?id='.$_POST['id'].'&blank=';
|
||
|
|
$tabs = [
|
||
|
|
[
|
||
|
|
eTab::NAME=>'Бланки',
|
||
|
|
eTab::TYPE=>eTabType::TABLE,
|
||
|
|
eTab::CONTENT=>Blank::getTableData( [
|
||
|
|
\ModuleTable::HIDE_TITLE=>true,
|
||
|
|
\ModuleTable::HIDE_THEAD=>true,
|
||
|
|
\ModuleTable::NO_CHECKBOX=>true,
|
||
|
|
\ModuleTable::COLUMN_RENDER => [
|
||
|
|
Blank::$NAME => [
|
||
|
|
\ModuleTable::COLUMN_RENDER_LINK_ID => $link_id,
|
||
|
|
\ModuleTable::COLUMN_RENDER_LINK_CSS_CLASS => 'link',
|
||
|
|
\ModuleTable::COLUMN_RENDER_LINK_BLANK => true,
|
||
|
|
//ModuleTable::COLUMN_RENDER_LINK_MODAL => true,
|
||
|
|
],
|
||
|
|
],
|
||
|
|
\Query::WHERE=>new \Where(\Where::_operator(Blank::$ACCOUNT,'=',UID))
|
||
|
|
] ),
|
||
|
|
],
|
||
|
|
];
|
||
|
|
$res['tabs'] = $tabs;
|
||
|
|
}
|
||
|
|
echo je($res);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
static function confirm(){
|
||
|
|
|
||
|
|
$res = [];
|
||
|
|
$id = 0;
|
||
|
|
if($cart_id = Cart::getMyCartID()) {
|
||
|
|
|
||
|
|
$shop_id = intval($_POST['shop_id']);
|
||
|
|
$SHOP = Shop::getByID($shop_id);
|
||
|
|
$status_new_id = Shop::getIDOfStatusNew($shop_id);
|
||
|
|
$CART = Cart::getMyCartData();
|
||
|
|
$cart_total = $CART['total'];
|
||
|
|
|
||
|
|
$delivery_id = 0;
|
||
|
|
$delivery_price = 0;
|
||
|
|
$km = 0;
|
||
|
|
$cashback_minus = cfloatval($_POST['cashback']);
|
||
|
|
|
||
|
|
if($_POST['delivery_id']) {
|
||
|
|
$delivery = Delivery::getByID($_POST['delivery_id']);
|
||
|
|
$delivery_id = $delivery[Delivery::$ID];
|
||
|
|
$delivery_price = $delivery[Delivery::$PRICE];
|
||
|
|
if($delivery[Delivery::$TYPE]==eShopDeliveryType::SUBURB) {
|
||
|
|
$km = cfloatval($_POST['km']);
|
||
|
|
$delivery_price += $delivery[Delivery::$KM] * $km;
|
||
|
|
}
|
||
|
|
// Если расчёт происходит на фронтенде
|
||
|
|
if(isset($_POST['dprice']) ) {
|
||
|
|
$delivery_price = cfloatval($_POST['dprice']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$ddate = ($c = $_POST['ddate']) ? $c :'0000-00-00';
|
||
|
|
$ddate = date('Y-m-d',strtotime($ddate));
|
||
|
|
if($ddate<'0000-00-00') $ddate = '0000-00-00';
|
||
|
|
|
||
|
|
|
||
|
|
$order_data = $_POST['data'];
|
||
|
|
$order_data['roistat_visit'] = intval($_COOKIE['roistat_visit']);
|
||
|
|
|
||
|
|
|
||
|
|
$r = Order::insert($o = [
|
||
|
|
Order::$NAME => $_POST['name'],
|
||
|
|
Order::$EMAIL => $_POST['email'],
|
||
|
|
Order::$PHONE => $_POST['phone'],
|
||
|
|
Order::$ADDRESS => $_POST['address'],
|
||
|
|
Order::$KM => $km,
|
||
|
|
Order::$IS_ANONYMOUS => intval($_POST['anonymous']),
|
||
|
|
Order::$UCOMMENT => $_POST['comment'],
|
||
|
|
Order::$DELIVERY_TIME => $_POST['dtime'],
|
||
|
|
Order::$RECEIVER_PHONE => $_POST['receiver_phone'],
|
||
|
|
Order::$RECEIVER_NAME => $_POST['receiver_name'],
|
||
|
|
Order::$DELIVERY_DATE => $ddate,
|
||
|
|
Order::$DELIVERY_ID => $delivery_id,
|
||
|
|
Order::$DELIVERY_PRICE => $delivery_price,
|
||
|
|
Order::$PAYMENT_ID => $_POST['payment_id'],
|
||
|
|
Order::$PROFILE => PID,
|
||
|
|
Order::$CART => $cart_id,
|
||
|
|
Order::$ACCOUNT => \Site::$owner_id,
|
||
|
|
Order::$TO => msTo::SHOP,
|
||
|
|
Order::$OID => $shop_id,
|
||
|
|
Order::$STATUS => $status_new_id,
|
||
|
|
Order::$DATA => je($order_data),
|
||
|
|
]);
|
||
|
|
$ORDER_ID = $id = $r->id;
|
||
|
|
Cart::updateById($cart_id,[Cart::$ORDER=>$id]);
|
||
|
|
if(IF_PROFILE){
|
||
|
|
\Profile::updateById(PID,[\Profile::$CART=>0]);
|
||
|
|
//if($cashback_percent = floatval($SHOP[Shop::$CASHBACK_VALUE])/100){
|
||
|
|
if($cashback_percent = \Site::$theme::getCashbackPercent($ORDER_ID)){
|
||
|
|
// Максимальная сумма, которую можно списать
|
||
|
|
$shop_cashback_max = floatval($SHOP[Shop::$CASHBACK_MAX])/100 * $cart_total;
|
||
|
|
// Сколько списывают
|
||
|
|
|
||
|
|
// если читерят, то не допускаем этого
|
||
|
|
if($cashback_minus<0) $cashback_minus = 0;
|
||
|
|
// Если больше максимального, то уменьшаем
|
||
|
|
if($cashback_minus>$shop_cashback_max) $cashback_minus = $shop_cashback_max;
|
||
|
|
if($cashback_minus > \Profile::$data[\Profile::$CASHBACK]) $cashback_minus = \Profile::$data[\Profile::$CASHBACK];
|
||
|
|
|
||
|
|
// Теперь считаем сколько остаётся после вычета, и то этого считаем кэшбек
|
||
|
|
$cashback_cart_total = $cart_total - $cashback_minus;
|
||
|
|
$cashback_value = $cashback_cart_total * $cashback_percent;
|
||
|
|
|
||
|
|
// Если есть начисления и списания, то заносим их в бд
|
||
|
|
if($cashback_minus) {
|
||
|
|
Cashback::insert([
|
||
|
|
Cashback::$VALUE => -$cashback_minus,
|
||
|
|
Cashback::$ORDER => $ORDER_ID,
|
||
|
|
Cashback::$PROFILE => PID,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
if($cashback_value){
|
||
|
|
Cashback::insert([
|
||
|
|
Cashback::$VALUE => $cashback_value,
|
||
|
|
Cashback::$ORDER => $ORDER_ID,
|
||
|
|
Cashback::$PROFILE => PID,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
\Core::setCookie('cart_'.\Site::$portal_id,null);
|
||
|
|
}
|
||
|
|
$res['id'] = $r->id;
|
||
|
|
//$res['r'] = $r;
|
||
|
|
}
|
||
|
|
echo je($res);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|