private function getSaleOrderLineIds($saleOrders) { $lineIds = []; foreach ($saleOrders as $saleOrder) { $saleOrderLineIds = SaleOrderLineManager::getDtosIdsArray($saleOrder->getSaleOrderLinesDtos()); $lineIds = array_merge($lineIds, $saleOrderLineIds); } return $lineIds; }
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); }
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))); }
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); }
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; }
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); }
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; }
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; }
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; }