Example #1
0
 protected function refreshOrderDataAction()
 {
     $formData = isset($this->request["formData"]) ? $this->request["formData"] : array();
     $additional = isset($this->request["additional"]) ? $this->request["additional"] : array();
     $shipment = null;
     $opResults = new Result();
     //use data from form, don't refresh data from provider
     Admin\OrderEdit::$isTrustProductFormData = true;
     $order = $this->getOrder($formData, $opResults);
     $isStartField = $order->isStartField();
     if ($order->getId() > 0) {
         $order = Admin\OrderEdit::editOrderByFormData($formData, $order, $this->userId, false, array(), $opResults);
     }
     if ($order->getId() <= 0) {
         if (isset($formData['SHIPMENT']) && is_array($formData['SHIPMENT'])) {
             $res = Admin\Blocks\OrderShipment::updateData($order, $formData['SHIPMENT']);
             $res->getErrorMessages();
             $data = $res->getData();
             /** @var \Bitrix\Sale\Shipment $shipment */
             $shipment = array_shift($data['SHIPMENT']);
         }
         if (isset($formData['PAYMENT']) && is_array($formData['PAYMENT'])) {
             $res = Admin\Blocks\OrderPayment::updateData($order, $formData['PAYMENT'], true);
             $res->getErrorMessages();
         }
     }
     if ($isStartField) {
         $hasMeaningfulFields = $order->hasMeaningfulField();
         /** @var Result $r */
         $r = $order->doFinalAction($hasMeaningfulFields);
     }
     $result['PAYABLE'] = $order->getPrice() - $order->getSumPaid();
     $result["BASE_PRICE"] = Admin\Blocks\OrderBasket::getBasePrice($order);
     $data = $this->result->getData();
     if ($shipment) {
         if ($shipment->getField('CUSTOM_PRICE_DELIVERY') == 'Y') {
             $result["CUSTOM_PRICE"] = Admin\Blocks\OrderShipment::getDeliveryPrice($shipment);
         }
         if (!isset($data['SHIPMENT_DATA']['DELIVERY_SERVICE_LIST'])) {
             $deliveryService = Admin\Blocks\OrderShipment::getDeliveryServiceList();
             foreach ($deliveryService as $i => $dlService) {
                 if ($dlService['ID'] <= 0) {
                     continue;
                 }
                 if (!Sale\Delivery\Services\Manager::checkServiceRestriction($dlService['ID'], $shipment, '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite')) {
                     unset($deliveryService[$i]);
                 }
             }
             $deliveryServiceTree = Admin\Blocks\OrderShipment::makeDeliveryServiceTree($deliveryService);
             $result['DELIVERY_SERVICE_LIST'] = Admin\Blocks\OrderShipment::getTemplate($deliveryServiceTree);
             if (!isset($data['SHIPMENT_DATA']['DELIVERY_ERROR'])) {
                 foreach ($deliveryService as $delivery) {
                     if ($shipment->getDeliveryId() == $delivery['ID'] && $delivery['RESTRICTED']) {
                         $result['DELIVERY_ERROR'] = Loc::getMessage('SALE_OA_ERROR_DELIVERY_SERVICE');
                     }
                 }
             }
         }
         if (!isset($data['SHIPMENT_DATA']['PROFILES'])) {
             if ($shipment->getDeliveryId()) {
                 $service = Sale\Delivery\Services\Manager::getService($shipment->getDeliveryId());
                 $parentService = $service->getParentService();
                 if ($parentService && $parentService->canHasProfiles()) {
                     $profiles = Admin\Blocks\OrderShipment::getDeliveryServiceProfiles($parentService->getId());
                     $profiles = Admin\Blocks\OrderShipment::checkProfilesRestriction($profiles, $shipment);
                     $result["PROFILES"] = Admin\Blocks\OrderShipment::getProfileEditControl($profiles);
                     if (!isset($data['SHIPMENT_DATA']['DELIVERY_ERROR'])) {
                         foreach ($profiles as $profile) {
                             if ($shipment->getDeliveryId() == $profile['ID'] && !$profile['RESTRICTED']) {
                                 $result['DELIVERY_ERROR'] = Loc::getMessage('SALE_OA_ERROR_DELIVERY_SERVICE');
                             }
                         }
                     }
                 }
             }
         }
     }
     $paySystemList = Admin\Blocks\OrderPayment::getPaySystemList($order);
     $result['PAY_SYSTEM_LIST'] = Admin\Blocks\OrderPayment::makePaymentSelectHtmlBody($paySystemList);
     $orderBasket = new Admin\Blocks\OrderBasket($order, "", $this->request["formData"]["BASKET_PREFIX"]);
     $basketPrepareParams = array();
     if (!empty($additional["operation"]) && $additional["operation"] == "PRODUCT_ADD" || $this->request["action"] == "addProductToBasket") {
         $basketPrepareParams["SKIP_SKU_INFO"] = false;
     } else {
         $basketPrepareParams["SKIP_SKU_INFO"] = true;
     }
     $result["BASKET"] = $orderBasket->prepareData($basketPrepareParams);
     // collect info about changed fields
     if ($basketPrepareParams["SKIP_SKU_INFO"] && !empty($formData["PRODUCT"]) && is_array($formData["PRODUCT"])) {
         //prices
         $result["BASKET"]["PRICES_UPDATED"] = array();
         $errors = array();
         $PRECISE = 0.005;
         foreach ($formData["PRODUCT"] as $basketCode => $itemParams) {
             if ($basketCode == "new") {
                 continue;
             }
             if (!isset($result["BASKET"]["ITEMS"][$basketCode]["PRICE"]) || !isset($itemParams["PRICE"])) {
                 $errors[] = "Product price with basket code \"" . $basketCode . "\" not found.";
                 continue;
             }
             if (abs(floatval($result["BASKET"]["ITEMS"][$basketCode]["PRICE"]) - floatval($itemParams["PRICE"])) >= $PRECISE) {
                 $result["BASKET"]["PRICES_UPDATED"][$basketCode] = $result["BASKET"]["ITEMS"][$basketCode]["PRICE"];
             }
         }
         if (!empty($errors)) {
             $this->addResultData("ERROR_PRICE_COMPARING", $errors);
         }
     }
     $resData = $opResults->getData();
     if (!empty($resData["NEW_ITEM_BASKET_CODE"])) {
         $result["BASKET"]["NEW_ITEM_BASKET_CODE"] = $resData["NEW_ITEM_BASKET_CODE"];
     }
     $result['RELATED_PROPS'] = Admin\Blocks\OrderBuyer::getRelPropData($order);
     $result["DISCOUNTS_LIST"] = Admin\OrderEdit::getOrderedDiscounts($order, false);
     if ($order->getBasket()) {
         $result['BASE_PRICE_DELIVERY'] = $result["DISCOUNTS_LIST"]['PRICES']['DELIVERY']['BASE_PRICE'];
     } else {
         $result['BASE_PRICE_DELIVERY'] = $order->getDeliveryPrice();
     }
     $result['BASE_PRICE_DELIVERY'] = roundEx($result['BASE_PRICE_DELIVERY'], SALE_VALUE_PRECISION);
     $result['DELIVERY_PRICE_DISCOUNT'] = roundEx($result["DISCOUNTS_LIST"]['PRICES']['DELIVERY']['PRICE'], SALE_VALUE_PRECISION);
     $result["COUPONS_LIST"] = Admin\OrderEdit::getCouponList($order, false);
     $result["TOTAL_PRICES"] = Admin\OrderEdit::getTotalPrices($order, $orderBasket, false);
     $result["DELIVERY_DISCOUNT"] = $result["TOTAL_PRICES"]["DELIVERY_DISCOUNT"];
     $result = array_merge($result, $order->getFieldValues());
     if (!isset($result["PRICE"])) {
         $result["PRICE"] = 0;
     }
     /* DEMANDED */
     if (isset($additional["demanded"]) && is_array($additional["demanded"])) {
         if (isset($additional["given"]) && is_array($additional["given"])) {
             $result = array_merge($result, $additional["given"]);
         }
         $demanded = $this->getDemandedFields($additional["demanded"], $result, $order);
         $result = array_merge($result, $demanded);
     }
     /* * */
     if (!$opResults->isSuccess()) {
         foreach ($opResults->getErrors() as $error) {
             if ($error->getCode() == "CATALOG_QUANTITY_NOT_ENOGH" || $error->getCode() == "SALE_ORDER_SYSTEM_SHIPMENT_LESS_QUANTITY" || $error->getCode() == "CATALOG_NO_QUANTITY_PRODUCT") {
                 $this->addResultError($error->getMessage());
             }
         }
     }
     $this->addResultData("ORDER_DATA", $result);
 }
Example #2
0
    public static function getView(Order $order, OrderBasket $orderBasket, $selectPayment = null, $selectId = null)
    {
        // prepare data
        $orderId = $order->getId();
        $data = $orderBasket->prepareData();
        $items = $data['ITEMS'];
        $documents = array();
        $itemNo = 0;
        /** @var \Bitrix\Sale\Payment $payment */
        foreach ($order->getPaymentCollection() as $payment) {
            $documents[] = $payment;
        }
        /** @var \Bitrix\Sale\Shipment $shipment */
        foreach ($order->getShipmentCollection() as $shipment) {
            if (!$shipment->isSystem()) {
                if (!$shipment->isCanceled() && $shipment->isShipped()) {
                    /** @var \Bitrix\Sale\ShipmentItem $shipmentItem */
                    foreach ($shipment->getShipmentItemCollection() as $shipmentItem) {
                        $basketItem = $shipmentItem->getBasketItem();
                        if (isset($items[$basketItem->getBasketCode()])) {
                            $item =& $items[$basketItem->getBasketCode()];
                            if ($shippedQuantity =& $item['SHIPPED_QUANTITY']) {
                                $shippedQuantity += (double) $shipmentItem->getField('QUANTITY');
                            } else {
                                $shippedQuantity = (double) $shipmentItem->getField('QUANTITY');
                            }
                        }
                    }
                }
                $documents[] = $shipment;
            }
        }
        unset($item, $shippedQuantity);
        usort($documents, array(__CLASS__, 'sortDocumentsByDate'));
        // render view
        ob_start();
        ?>
		<div class="adm-s-order-table-ddi">
			<table class="adm-s-order-table-ddi-table adm-s-bus-ordertable-option" style="width: 100%;">
				<thead>
				<tr>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_NUMBER');
        ?>
</td>
					<td><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_NAME');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_PROPERTIES');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_PLANNED');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_SHIPPED');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_TO_SHIP');
        ?>
</td>
				</tr>
				</thead>
				<tbody>
					<?php 
        foreach ($items as $item) {
            $properties = '<table style="margin: auto; width: 50%;">';
            if (is_array($item['SKU_PROPS'])) {
                foreach ($item['SKU_PROPS'] as $skuProp) {
                    $properties .= '<tr>';
                    $properties .= '<td style="text-align: left;">' . htmlspecialcharsbx($skuProp['NAME']) . ' : ' . '</td>';
                    if (isset($skuProp['VALUE']['PICT']) && $skuProp['VALUE']['PICT']) {
                        $properties .= '<td><span class="color"><img src="' . $skuProp['VALUE']['PICT'] . '" alt=""></span></td>';
                    } else {
                        $properties .= '<td><span>' . htmlspecialcharsbx($skuProp['VALUE']['NAME']) . '</span></td>';
                    }
                    $properties .= '</tr>';
                }
            }
            $properties .= '</table>';
            if (!($quantity = (double) $item['QUANTITY'])) {
                $quantity = 0;
            }
            if (!($shippedQuantity = $item['SHIPPED_QUANTITY'])) {
                $shippedQuantity = 0;
            }
            ?>
						<tr class="bdb-line">
							<td class="tac"><?php 
            echo ++$itemNo;
            ?>
</td>
							<td style="text-align: left;"><a class="fwb" href="<?php 
            echo $item['EDIT_PAGE_URL'];
            ?>
"><?php 
            echo htmlspecialcharsbx($item['NAME']);
            ?>
</a></td>
							<td class="tac"><?php 
            echo $properties;
            ?>
</td>
							<td class="tac"><?php 
            echo $quantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
							<td class="tac"><?php 
            echo $shippedQuantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
							<td class="tac"><?php 
            echo $quantity - $shippedQuantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
						</tr>
					<?php 
        }
        ?>
					<tr><td colspan="8" style="padding: 16px; background: #f7fafa; text-align: left;" class="fwb"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEMS_QUANTITY') . ': ' . count($items);
        ?>
</td></tr>
				</tbody>
			</table>
			<div class="adm-bus-table-contaier-white caption border" style="margin-top: 25px;">
				<div class="adm-bus-table-caption-white-title"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_DOCUMENTS');
        ?>
:</div>
				<div class="adm-bus-orderdocs-threelist-container">
					<div class="adm-bus-orderdocs-threelist-block-top<?php 
        echo $selectPayment === null ? ' adm-bus-orderdocs-threelist-block-children-open' : '';
        ?>
">
						<div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-order"></div>
						<div class="adm-bus-orderdocs-threelist-block-content">
							<div class="adm-bus-orderdocs-threelist-block-title">
								<a class="adm-bus-orderdocs-threelist-block-title-link fwb" href="/bitrix/admin/sale_order_edit.php?lang=ru&ID=<?php 
        echo $orderId;
        ?>
">
									<?php 
        echo Loc::getMessage('SALE_OANALYSIS_ORDER_TITLE', array('#USER_ID#' => $order->getField('USER_ID'), '#ORDER_ID#' => $orderId));
        ?>
								</a>
							</div>
							<?php 
        self::renderBottomBlocks($order->getField('DATE_INSERT'), $order->getField('RESPONSIBLE_ID'));
        ?>
						</div>
						<div class="clb"></div>
					</div>
					<?php 
        foreach ($documents as $document) {
            $isPayment = $document instanceof Payment;
            $documentId = $document->getId();
            ?>
						<div class="adm-bus-orderdocs-threelist-block-children<?php 
            echo $selectPayment === $isPayment && $selectId == $documentId ? ' adm-bus-orderdocs-threelist-block-children-open' : '';
            ?>
">
							<div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-doc_<?php 
            echo $isPayment ? 'payment' : 'shipping';
            ?>
"></div>
							<div class="adm-bus-orderdocs-threelist-block-content">
								<div class="adm-bus-orderdocs-threelist-block-title">
									<?php 
            if ($isPayment) {
                ?>
										<?php 
                if ($document->isPaid()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-paid"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_PAID');
                    ?>
</span>
										<?php 
                } elseif ($document->isReturn()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_RETURN');
                    ?>
</span>
										<?php 
                }
                ?>
										<a href="/bitrix/admin/sale_order_payment_edit.php?order_id=<?php 
                echo $orderId;
                ?>
&payment_id=<?php 
                echo $documentId;
                ?>
" class="adm-bus-orderdocs-threelist-block-title-link">
											<?php 
                echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_TITLE', array('#SYSTEM_NAME#' => htmlspecialcharsbx($document->getField('PAY_SYSTEM_NAME')), '#PAYMENT_ID#' => $documentId, '#SUM#' => SaleFormatCurrency($document->getField('SUM'), $document->getField('CURRENCY'))));
                ?>
										</a>
									<?php 
            } else {
                /* shipment*/
                ?>
										<?php 
                if ($document->isShipped()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_SHIPPED');
                    ?>
</span>
										<?php 
                } elseif ($document->isCanceled()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-canceled"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_CANCELED');
                    ?>
</span>
										<?php 
                } elseif ($document->isAllowDelivery()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_ALLOWED');
                    ?>
</span>
										<?php 
                }
                ?>
										<a href="/bitrix/admin/sale_order_shipment_edit.php?order_id=<?php 
                echo $orderId;
                ?>
&shipment_id=<?php 
                echo $documentId;
                ?>
"
										   class="adm-bus-orderdocs-threelist-block-title-link<?php 
                echo $document->isCanceled() ? 'adm-bus-orderdocs-threelist-block-title-link-canceled' : '';
                ?>
">
											<?php 
                echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_TITLE', array('#SHIPMENT_ID#' => $documentId, '#ORDER_ID#' => $orderId));
                ?>
										</a>
									<?php 
            }
            ?>
								</div>
								<?php 
            self::renderBottomBlocks($document->getField($isPayment ? 'DATE_BILL' : 'DATE_INSERT'), $document->getField('RESPONSIBLE_ID'));
            ?>
							</div>
							<div class="clb"></div>
						</div>
					<?php 
        }
        ?>
				</div>
			</div>
		</div>
		<?php 
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }
Example #3
0
 public static function getTotalPrices(Order $order, OrderBasket $orderBasket, $needRecalculate = true)
 {
     $result = array('PRICE_TOTAL' => $order->getPrice(), 'TAX_VALUE' => $order->getTaxValue(), 'PRICE_DELIVERY_DISCOUNTED' => $order->getDeliveryPrice(), 'SUM_PAID' => $order->getSumPaid());
     $result["SUM_UNPAID"] = $result["PRICE_TOTAL"] - $result["SUM_PAID"];
     if (!$result["PRICE_DELIVERY_DISCOUNTED"]) {
         $result["PRICE_DELIVERY_DISCOUNTED"] = 0;
     }
     if (!$result["TAX_VALUE"]) {
         $result["TAX_VALUE"] = 0;
     }
     $orderDiscount = $order->getDiscount();
     if ($orderDiscount) {
         $discountsList = self::getDiscountsApplyResult($order, $needRecalculate);
     } else {
         $discountsList = array();
     }
     if (isset($discountsList["PRICES"]["DELIVERY"]["DISCOUNT"])) {
         $result['DELIVERY_DISCOUNT'] = $discountsList["PRICES"]["DELIVERY"]["DISCOUNT"];
     } else {
         $result['DELIVERY_DISCOUNT'] = 0;
     }
     $result['PRICE_DELIVERY'] = $result['PRICE_DELIVERY_DISCOUNTED'] + $result['DELIVERY_DISCOUNT'];
     $basketData = $orderBasket->prepareData(array("DISCOUNTS" => $discountsList));
     $result["PRICE_BASKET_DISCOUNTED"] = $basketData["BASKET_PRICE"];
     $result["PRICE_BASKET"] = $basketData["BASKET_PRICE_BASE"];
     return $result;
 }