Ejemplo n.º 1
0
 private function getSaleOrderLineIds($saleOrders)
 {
     $lineIds = [];
     foreach ($saleOrders as $saleOrder) {
         $saleOrderLineIds = SaleOrderLineManager::getDtosIdsArray($saleOrder->getSaleOrderLinesDtos());
         $lineIds = array_merge($lineIds, $saleOrderLineIds);
     }
     return $lineIds;
 }
Ejemplo n.º 2
0
 public function load()
 {
     $productsQuantity = WarehouseManager::getInstance()->getAllProductsQuantity();
     $products = ProductManager::getInstance()->getProductListFull([], 'name', 'ASC');
     $productIds = ProductManager::getDtosIdsArray($products);
     $productsPurchaseOrders = PurchaseOrderLineManager::getInstance()->getProductsPurchaseOrders($productIds);
     $productsSaleOrders = SaleOrderLineManager::getInstance()->getProductsSaleOrders($productIds);
     $this->addParam('products', $products);
     $this->addParam('productsQuantity', $productsQuantity);
     $this->addParam('productsPurchaseOrder', $productsPurchaseOrders);
     $this->addParam('productsSaleOrder', $productsSaleOrders);
 }
Ejemplo n.º 3
0
 public function load()
 {
     list($startDate, $endDate) = $this->getFormData();
     $this->addParam('startDate', $startDate);
     $this->addParam('endDate', $endDate);
     $profit = SaleOrderLineManager::getInstance()->getTotalProfitSumInNonCancelledSaleOrders($startDate, $endDate);
     $expenseSaleOrderLineRowDtos = SaleOrderLineManager::getInstance()->getAllNonCancelledExpenseSaleOrders($startDate, $endDate);
     $expensePaymentDtos = PaymentTransactionManager::getInstance()->getAllNonCancelledExpensePayments($startDate, $endDate);
     list($saleExpensesInMainCurrency, $paymentExpensesInMainCurrency) = $this->calculateTotalExpense($expenseSaleOrderLineRowDtos, $expensePaymentDtos);
     $profitIncludedExpensed = $profit - $saleExpensesInMainCurrency - $paymentExpensesInMainCurrency;
     $this->addParam("profit", round($profitIncludedExpensed, 2));
     $this->addParam("chartData", json_encode(['profit_without_expenses' => $profit, 'payment_expenses' => $paymentExpensesInMainCurrency, 'sale_expenses' => $saleExpensesInMainCurrency]));
     $this->addParam("lineChartData", json_encode($this->prepareLineChartData($startDate, $endDate)));
 }
Ejemplo n.º 4
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $productId = NGS()->args()->id;
     $products = ProductManager::getInstance()->getProductListFull(['id', '=', $productId]);
     if (!empty($products)) {
         $productSaleQuantity = SaleOrderLineManager::getInstance()->getProductCountInNonCancelledSaleOrders($productId);
         $productPurchaseQuantity = PurchaseOrderLineManager::getInstance()->getProductCountInNonCancelledPurchaseOrders($productId);
         $productQuantity = $productPurchaseQuantity - $productSaleQuantity;
         $product = $products[0];
         $this->addParam('product', $product);
         $this->addParam('productQuantity', $productQuantity);
     }
 }
 public function service()
 {
     if (!isset(NGS()->args()->sale_order_id)) {
         $_SESSION['error_message'] = 'Sale Order ID is missing';
         $this->redirect('sale/list');
     }
     $saleOrderId = intval(NGS()->args()->sale_order_id);
     try {
         SaleOrderLineManager::getInstance()->startTransaction();
         if (isset(NGS()->args()->lines)) {
             $jsonLinesArray = NGS()->args()->lines;
             $linesIdsToNotDelete = [];
             if (!empty($jsonLinesArray)) {
                 foreach ($jsonLinesArray as $jsonLine) {
                     $line = json_decode($jsonLine);
                     if (isset($line->line_id)) {
                         $linesIdsToNotDelete[] = $line->line_id;
                         SaleOrderLineManager::getInstance()->updateSaleOrderLine($saleOrderId, $line->line_id, $line->product_id, $line->quantity, $line->unit_price, $line->currency_id);
                     } else {
                         $newLineId = SaleOrderLineManager::getInstance()->createSaleOrderLine($saleOrderId, $line->product_id, $line->quantity, $line->unit_price, $line->currency_id);
                         $linesIdsToNotDelete[] = $newLineId;
                     }
                 }
             }
             SaleOrderLineManager::getInstance()->deleteWhereIdNotIdIds($saleOrderId, $linesIdsToNotDelete);
         } else {
             SaleOrderLineManager::getInstance()->deleteByField('sale_order_id', $saleOrderId);
         }
         SaleOrderManager::getInstance()->updateAllDependingSaleOrderLines($saleOrderId);
         SaleOrderManager::getInstance()->commitTransaction();
     } catch (InsufficientProductException $exc) {
         SaleOrderManager::getInstance()->rollbackTransaction();
         $product = \crm\managers\ProductManager::getInstance()->selectByPK($exc->getProductId());
         $productInfo = $product->getId();
         if (isset($product)) {
             $productInfo = $product->getName() . " (" . $product->getId() . ")";
         }
         $_SESSION['error_message'] = "Insufficient Product: " . $productInfo;
         $this->redirect('sale/' . $saleOrderId);
     } catch (Exception $exc) {
         SaleOrderManager::getInstance()->rollbackTransaction();
         $_SESSION['error_message'] = $exc->getMessage();
         $this->redirect('sale/' . $saleOrderId);
     }
     $this->redirect('sale/warranty/' . $saleOrderId);
 }
Ejemplo n.º 6
0
 public function deletePartnerFull($partnerId)
 {
     $saleOrderDtosMappedById = SaleOrderManager::getInstance()->selectAdvance('id', ['partner_id', '=', $partnerId], null, null, null, null, true);
     $purchaseOrderDtosMappedById = PurchaseOrderManager::getInstance()->selectAdvance('id', ['partner_id', '=', $partnerId], null, null, null, null, true);
     if (!empty($saleOrderDtosMappedById)) {
         $sqlSaleOrderIds = '(' . implode(',', array_keys($saleOrderDtosMappedById)) . ')';
         SaleOrderLineManager::getInstance()->deleteAdvance(['sale_order_id', 'in', $sqlSaleOrderIds]);
     }
     if (!empty($purchaseOrderDtosMappedById)) {
         $sqlPurchaseOrderIds = '(' . implode(',', array_keys($purchaseOrderDtosMappedById)) . ')';
         PurchaseOrderLineManager::getInstance()->deleteAdvance(['purchase_order_id', 'in', $sqlPurchaseOrderIds]);
     }
     SaleOrderManager::getInstance()->deleteByField('partner_id', $partnerId);
     PurchaseOrderManager::getInstance()->deleteByField('partner_id', $partnerId);
     PaymentTransactionManager::getInstance()->deleteByField('partner_id', $partnerId);
     PartnerManager::getInstance()->deleteByPK($partnerId);
     return true;
 }
Ejemplo n.º 7
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $limit = 100;
     list($offset, $sortByFieldName, $selectedFilterSortByAscDesc) = $this->initFilters($limit);
     $products = ProductManager::getInstance()->getProductListFull([], $sortByFieldName, $selectedFilterSortByAscDesc, $offset, $limit);
     $productIds = ProductManager::getDtosIdsArray($products);
     $productsPurchaseOrder = PurchaseOrderLineManager::getInstance()->getProductsPurchaseOrders($productIds);
     $productsSaleOrder = SaleOrderLineManager::getInstance()->getProductsSaleOrders($productIds);
     $this->addParam('productsPurchaseOrder', $productsPurchaseOrder);
     $this->addParam('productsSaleOrder', $productsSaleOrder);
     $this->addParam('products', $products);
     $count = ProductManager::getInstance()->getLastSelectAdvanceRowsCount();
     if (count($products) == 0 && $count > 0) {
         $this->redirectIncludedParamsExeptPaging();
     }
     $pagesCount = ceil($count / $limit);
     $this->addParam('pagesCount', $pagesCount);
 }
Ejemplo n.º 8
0
 public function calculateProductCost($productId, $productSaleQty, $saleOrderId = 0)
 {
     $date = null;
     if ($saleOrderId > 0) {
         $so = SaleOrderManager::getInstance()->selectByPK($saleOrderId);
         if (!$so) {
             throw new NgsErrorException('Sale Order does not exist! id: ' . $saleOrderId);
         }
         $date = $so->getOrderDate();
     }
     $this->calculationProductId = $productId;
     $productPurchaseOrderLines = PurchaseOrderLineManager::getInstance()->getNonCancelledProductPurchaseOrders($productId, $date);
     $productPurchaseOrderLines = $this->mapDtosById($productPurchaseOrderLines);
     $productSaleOrderLines = SaleOrderLineManager::getInstance()->getNonCancelledProductSaleOrders($productId, $saleOrderId, $date);
     $productPurchaseOrderLines = $this->subtracPurchaseOrderLinesByProductSaleOrders($productPurchaseOrderLines, $productSaleOrderLines);
     $ret = $this->removePurchaseOrderLinesQuantityByProductSale($productPurchaseOrderLines, $productSaleQty, $date);
     return $ret;
 }
Ejemplo n.º 9
0
 private function getSaleOrdersDatesMappedBySN($sol_searial_numbers)
 {
     $snMappedBySolIds = [];
     foreach ($sol_searial_numbers as $sol_searial_number) {
         $snMappedBySolIds[$sol_searial_number->getLineId()][] = $sol_searial_number->getSerialNumber();
     }
     $solDtos = SaleOrderLineManager::getInstance()->selectByPKs(array_keys($snMappedBySolIds));
     $soIdsMappedBySolId = $this->getSoIdsMappedBySolIds($solDtos);
     $soDtos = SaleOrderManager::getInstance()->getSaleOrdersFull($where = ['id', 'in', '(' . implode(',', array_unique(array_values($soIdsMappedBySolId))), ')']);
     $soDtosMappedByID = SaleOrderManager::mapDtosById($soDtos);
     $ret = [];
     foreach ($soIdsMappedBySolId as $solId => $soId) {
         foreach ($snMappedBySolIds[$solId] as $sn) {
             if (isset($soDtosMappedByID[$soId])) {
                 $ret[$sn] = [$soDtosMappedByID[$soId]->getOrderDate(), $soDtosMappedByID[$soId]->getPartnerDto()->getName()];
             }
         }
     }
     return $ret;
 }
Ejemplo n.º 10
0
 public function getSaleOrdersFull($where = [], $orderByFieldsArray = null, $orderByAscDesc = "ASC", $offset = null, $limit = null)
 {
     $rows = $this->selectAdvance('*', $where, $orderByFieldsArray, $orderByAscDesc, $offset, $limit);
     $partnerIds = array();
     $saleOrderIds = array();
     foreach ($rows as $row) {
         $partnerIds[] = intval($row->getPartnerId());
         $saleOrderIds[] = intval($row->getId());
     }
     $partnerIds = array_unique($partnerIds);
     $saleOrderIds = array_unique($saleOrderIds);
     $partnerDtos = PartnerManager::getInstance()->selectByPKs($partnerIds, true);
     $saleOrderLinesDtos = [];
     if (!empty($saleOrderIds)) {
         $saleOrderLinesDtos = SaleOrderLineManager::getInstance()->getSaleOrderLinesFull(['sale_order_id', 'in', '(' . implode(',', $saleOrderIds) . ')']);
         $amount = [];
         $amountInMainCurrency = [];
         $profits = [];
         foreach ($saleOrderLinesDtos as $saleOrderLine) {
             $saleOrderId = intval($saleOrderLine->getSaleOrderId());
             $currencyId = intval($saleOrderLine->getCurrencyId());
             $currencyRate = floatval($saleOrderLine->getCurrencyRate());
             $unitPrice = floatval($saleOrderLine->getUnitPrice());
             $quantity = floatval($saleOrderLine->getQuantity());
             $profit = floatval($saleOrderLine->getTotalProfit());
             if (!array_key_exists($saleOrderId, $amount)) {
                 $amount[$saleOrderId] = [];
             }
             if (!array_key_exists($saleOrderId, $amountInMainCurrency)) {
                 $amountInMainCurrency[$saleOrderId] = 0;
             }
             if (!array_key_exists($currencyId, $amount[$saleOrderId])) {
                 $amount[$saleOrderId][$currencyId] = 0;
             }
             $amount[$saleOrderId][$currencyId] += $unitPrice * $quantity;
             $amountInMainCurrency[$saleOrderId] += $unitPrice * $quantity * $currencyRate;
             if (!array_key_exists($saleOrderId, $profits)) {
                 $profits[$saleOrderId] = 0;
             }
             $profits[$saleOrderId] += $profit;
         }
     }
     if (!empty($saleOrderIds)) {
         $saleOrderLinesDtosMappedBySaleOrderId = $this->mapSaleOrderLinesBySaleOrderId($saleOrderLinesDtos);
         foreach ($saleOrderIds as $saleOrderId) {
             if (!array_key_exists($saleOrderId, $saleOrderLinesDtosMappedBySaleOrderId)) {
                 $saleOrderLinesDtosMappedBySaleOrderId[$saleOrderId] = [];
             }
             if (!array_key_exists($saleOrderId, $amount)) {
                 $amount[$saleOrderId] = [];
             }
             if (!array_key_exists($saleOrderId, $amountInMainCurrency)) {
                 $amountInMainCurrency[$saleOrderId] = 0;
             }
             if (!array_key_exists($saleOrderId, $profits)) {
                 $profits[$saleOrderId] = 0;
             }
         }
     }
     foreach ($rows as $row) {
         $saleOrderId = intval($row->getId());
         $row->setPartnerDto($partnerDtos[intval($row->getPartnerId())]);
         $row->setSaleOrderLinesDtos($saleOrderLinesDtosMappedBySaleOrderId[$saleOrderId]);
         $row->setTotalAmount($amount[$saleOrderId]);
         $row->setTotalAmountInMainCurrency($amountInMainCurrency[$saleOrderId]);
         $row->setTotalProfit($profits[$saleOrderId]);
     }
     return $rows;
 }