meraproject/module/shop/order/controller.php

191 lines
7.7 KiB
PHP
Raw Normal View History

<?
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);
}
}