public function load()
 {
     list($startDate, $endDate) = [NGS()->args()->startDate, NGS()->args()->endDate];
     $expenseSaleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull(['cancelled', '=', 0, 'AND', 'is_expense', '=', 1, 'AND', 'order_date', '>=', "'" . $startDate . "'", 'AND', 'order_date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['order_date'], 'DESC');
     $this->addParam('currencies', CurrencyManager::getInstance()->mapDtosById(CurrencyManager::getInstance()->selectAdvance('*', ['active', '=', 1])));
     $this->addParam("expenseSaleOrders", $expenseSaleOrders);
 }
예제 #2
0
 private function prepareLineChartData($startDate, $endDate)
 {
     $begin = new DateTime($startDate);
     $end = (new DateTime($endDate))->modify('+1 day');
     $interval = DateInterval::createFromDateString('1 day');
     $period = new DatePeriod($begin, $interval, $end);
     $ret = [];
     foreach ($period as $dt) {
         $ret[$dt->format("Y-m-d")] = [0, 0, 0];
     }
     $profitSaleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull(['cancelled', '=', 0, 'AND', 'is_expense', '=', 0, 'AND', 'order_date', '>=', "'" . $startDate . "'", 'AND', 'order_date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['order_date'], 'DESC');
     foreach ($profitSaleOrders as $profitSaleOrder) {
         $oDate = new DateTime($profitSaleOrder->getOrderDate());
         $sDate = $oDate->format("Y-m-d");
         $ret[$sDate][0] = $profitSaleOrder->getTotalProfit();
     }
     $expenseSaleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull(['cancelled', '=', 0, 'AND', 'is_expense', '=', 1, 'AND', 'order_date', '>=', "'" . $startDate . "'", 'AND', 'order_date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['order_date'], 'DESC');
     foreach ($expenseSaleOrders as $expenseSaleOrder) {
         $oDate = new DateTime($expenseSaleOrder->getOrderDate());
         $sDate = $oDate->format("Y-m-d");
         $ret[$sDate][1] = $expenseSaleOrder->getTotalAmountInMainCurrency();
     }
     $expensePaymentOrders = PaymentTransactionManager::getInstance()->getPaymentListFull(['cancelled', '=', 0, 'AND', 'is_expense', '=', 1, 'AND', 'date', '>=', "'" . $startDate . "'", 'AND', 'date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['date'], 'DESC');
     foreach ($expensePaymentOrders as $expensePaymentOrder) {
         $oDate = new DateTime($expensePaymentOrder->getDate());
         $sDate = $oDate->format("Y-m-d");
         $ret[$sDate][2] = $expensePaymentOrder->getAmount() * $expensePaymentOrder->getCurrencyRate();
     }
     return $ret;
 }
예제 #3
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $partnerId = intval(NGS()->args()->id);
     $partner = PartnerManager::getInstance()->selectbyPK($partnerId);
     if ($partner) {
         $this->addParam('currencies', CurrencyManager::getInstance()->selectAdvance('*', ['active', '=', 1], null, null, null, null, true));
         $this->addParam('partner', $partner);
         $partnerSaleOrders = SaleOrderManager::mapDtosById(SaleOrderManager::getInstance()->getPartnerSaleOrders($partnerId));
         $partnerPurchaseOrders = PurchaseOrderManager::mapDtosById(PurchaseOrderManager::getInstance()->getPartnerPurchaseOrders($partnerId));
         $partnerPaymentTransactions = PaymentTransactionManager::mapDtosById(PaymentTransactionManager::getInstance()->getPartnerPaymentTransactions($partnerId));
         $partnerBillingTransactions = PaymentTransactionManager::mapDtosById(PaymentTransactionManager::getInstance()->getPartnerBillingTransactions($partnerId));
         $sales = $this->mapByIdAndGivenField('sale_', 'order_date', $partnerSaleOrders);
         $purchases = $this->mapByIdAndGivenField('purchase_', 'order_date', $partnerPurchaseOrders);
         $paments = $this->mapByIdAndGivenField('payment_', 'date', $partnerPaymentTransactions);
         $billings = $this->mapByIdAndGivenField('billing_', 'date', $partnerBillingTransactions);
         $allDeals = $this->mergeAllDeals($sales, $purchases, $paments, $billings, $partnerSaleOrders, $partnerPurchaseOrders, $partnerPaymentTransactions, $partnerBillingTransactions);
         $this->addParam('allDeals', $allDeals);
         $this->addParam('partnerSaleOrders', $partnerSaleOrders);
         $this->addParam('partnerPurchaseOrders', $partnerPurchaseOrders);
         $this->addParam('partnerPaymentTransactions', $partnerPaymentTransactions);
         $this->addParam('partnerBillingTransactions', $partnerBillingTransactions);
     }
 }
예제 #4
0
 public function service()
 {
     set_time_limit(120);
     $updateAllSaleOrderLinesCurrencyRates = SaleOrderManager::getInstance()->updateAllLinesCurrencyRates();
     $updateAllPurchaseOrderLinesCurrencyRates = PurchaseOrderManager::getInstance()->updateAllLinesCurrencyRates();
     $updateAllPaymentOrdersCurrencyRates = PaymentTransactionManager::getInstance()->updateAllOrdersCurrencyRates();
     SaleOrderManager::getInstance()->updateAllOrderLines();
     PurchaseOrderManager::getInstance()->updateAllOrderLines();
     $this->addParam('status', true);
     $this->addParam('total_sale_orders', $updateAllSaleOrderLinesCurrencyRates);
     $this->addParam('total_purchase_orders', $updateAllPurchaseOrderLinesCurrencyRates);
     $this->addParam('total_payment_orders', $updateAllPaymentOrdersCurrencyRates);
 }
예제 #5
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $this->addParam('products', ProductManager::getInstance()->selectAdvance('*', [], ['name']));
     $this->addParam('currencies', CurrencyManager::getInstance()->selectAdvance('*', ['active', '=', 1], ['name']));
     $paymentId = NGS()->args()->id;
     $saleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull(['id', '=', $paymentId]);
     if (!empty($saleOrders)) {
         $saleOrder = $saleOrders[0];
         $this->addParam('saleOrder', $saleOrder);
     }
 }
예제 #6
0
 public function service()
 {
     $startDate = NGS()->args()->startDate;
     $endDate = NGS()->args()->endDate;
     $partnerId = intval(NGS()->args()->partner_id);
     $where = ['cancelled', '=', 0, 'and', 'order_date', '>=', "'{$startDate}'", 'and', 'order_date', '<=', "'{$endDate} 23:59:59'"];
     $partnerDto = null;
     if ($partnerId > 0) {
         $partnerDto = \crm\managers\PartnerManager::getInstance()->selectByPK($partnerId);
         $where = array_merge($where, ['and', 'partner_id', '=', $partnerId]);
     }
     $rows = \crm\managers\SaleOrderManager::getInstance()->getSaleOrdersFull($where, 'order_date', "DESC");
     $this->exportCsv($rows, $startDate, $endDate, $partnerDto);
 }
예제 #7
0
 public function service()
 {
     try {
         list($partnerId, $date, $billingDeadlineDate, $isExpense, $note) = $this->getFormData();
     } catch (RedirectException $exc) {
         $_SESSION['error_message'] = $exc->getMessage();
         $_SESSION['action_request'] = $_REQUEST;
         $this->redirect($exc->getRedirectTo());
     }
     $saleOrderId = SaleOrderManager::getInstance()->createSaleOrder($partnerId, $date, $billingDeadlineDate, $isExpense, $note);
     unset($_SESSION['action_request']);
     $_SESSION['success_message'] = 'Sale Order Successfully created!';
     $this->redirect('sale/' . $saleOrderId);
 }
 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);
 }
예제 #9
0
 public function service()
 {
     if (isset(NGS()->args()->id)) {
         $saleOrderId = NGS()->args()->id;
     } else {
         $_SESSION['error_message'] = 'Sale Order ID is missing';
         $this->redirect('sale/list');
     }
     $saleOrderManager = SaleOrderManager::getInstance();
     $saleOrderManager->delete($saleOrderId);
     $_SESSION['success_message'] = 'Sale Order Successfully deleted!';
     if (strpos($_SERVER['HTTP_REFERER'], 'sale/list') === false) {
         $this->redirect('sale/list');
     } else {
         $this->redirectToReferer();
     }
 }
예제 #10
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $id = intval(NGS()->args()->id);
     $saleOrder = SaleOrderManager::getInstance()->selectByPK($id);
     if ($saleOrder) {
         if (!isset($_SESSION['action_request'])) {
             $_SESSION['action_request'] = ['order_date' => $this->cutSecondsFromDateTime($saleOrder->getOrderDate()), 'billing_deadline' => $saleOrder->getBillingDeadline(), 'partnerId' => $saleOrder->getPartnerId(), 'note' => $saleOrder->getNote(), 'isExpense' => $saleOrder->getIsExpense()];
         }
         $this->addParam("saleOrder", $saleOrder);
         $this->addParam('req', $_SESSION['action_request']);
         unset($_SESSION['action_request']);
         $this->addParam('payment_methods', PaymentMethodManager::getInstance()->selectAdvance('*', ['active', '=', 1], ['name']));
         $this->addParam('partners', PartnerManager::getInstance()->selectAdvance('*', [], ['name']));
         $this->addParam('defaultPaymentMethodId', SettingManager::getInstance()->getSetting('default_payment_method_id'));
     }
 }
예제 #11
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $this->addParam('payment_methods', PaymentMethodManager::getInstance()->selectAdvance('*', ['active', '=', 1], ['name']));
     $this->addParam('partners', PartnerManager::getInstance()->selectAdvance('*', [], ['name']));
     $this->addParam('products', ProductManager::getInstance()->selectAdvance('*', [], ['name']));
     $limit = 100;
     list($where, $offset, $sortByFieldName, $selectedFilterSortByAscDesc) = $this->initFilters($limit);
     $saleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull($where, $sortByFieldName, $selectedFilterSortByAscDesc, $offset, $limit);
     $this->addParam('saleOrders', $saleOrders);
     $count = SaleOrderManager::getInstance()->getLastSelectAdvanceRowsCount();
     if (count($saleOrders) == 0 && $count > 0) {
         $this->redirectIncludedParamsExeptPaging();
     }
     $pagesCount = ceil($count / $limit);
     $this->addParam('pagesCount', $pagesCount);
     $currencyManager = CurrencyManager::getInstance();
     $this->addParam('currencies', $currencyManager->mapDtosById($currencyManager->selectAdvance('*', ['active', '=', 1])));
 }
예제 #12
0
 public function load()
 {
     list($startDate, $endDate) = $this->getFormData();
     $this->addParam('startDate', $startDate);
     $this->addParam('endDate', $endDate);
     $partnerSaleOrders = AdvancedAbstractManager::mapDtosById(SaleOrderManager::getInstance()->getSaleOrdersFull(['cancelled', '=', 0, 'AND', 'order_date', '>=', "'" . $startDate . "'", 'AND', 'order_date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['order_date'], 'DESC'));
     $partnerPurchaseOrders = AdvancedAbstractManager::mapDtosById(PurchaseOrderManager::getInstance()->getPurchaseOrdersFull(['cancelled', '=', 0, 'AND', 'order_date', '>=', "'" . $startDate . "'", 'AND', 'order_date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['order_date'], 'DESC'));
     $partnerPaymentTransactions = AdvancedAbstractManager::mapDtosById(PaymentTransactionManager::getInstance()->getPaymentListFull(['cancelled', '=', 0, 'AND', 'amount', '>', 0, 'AND', 'date', '>=', "'" . $startDate . "'", 'AND', 'date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['date'], 'DESC'));
     $partnerBillingTransactions = AdvancedAbstractManager::mapDtosById(PaymentTransactionManager::getInstance()->getPaymentListFull(['cancelled', '=', 0, 'AND', 'amount', '<', 0, 'AND', 'date', '>=', "'" . $startDate . "'", 'AND', 'date', '<=', "DATE_ADD('{$endDate}' ,INTERVAL 1 DAY)"], ['date'], 'DESC'));
     $sales = $this->mapByIdAndGivenField('sale_', 'order_date', $partnerSaleOrders);
     $purchases = $this->mapByIdAndGivenField('purchase_', 'order_date', $partnerPurchaseOrders);
     $paments = $this->mapByIdAndGivenField('payment_', 'date', $partnerPaymentTransactions);
     $billings = $this->mapByIdAndGivenField('billing_', 'date', $partnerBillingTransactions);
     $allDeals = $this->mergeAllDeals($sales, $purchases, $paments, $billings, $partnerSaleOrders, $partnerPurchaseOrders, $partnerPaymentTransactions, $partnerBillingTransactions);
     $this->addParam('allDeals', $allDeals);
     $this->addParam('partnerSaleOrders', $partnerSaleOrders);
     $this->addParam('partnerPurchaseOrders', $partnerPurchaseOrders);
     $this->addParam('partnerPaymentTransactions', $partnerPaymentTransactions);
     $this->addParam('partnerBillingTransactions', $partnerBillingTransactions);
     $this->addParam('currencies', CurrencyManager::getInstance()->selectAdvance('*', ['active', '=', 1], null, null, null, null, true));
 }
예제 #13
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $this->addParam('products', ProductManager::getInstance()->selectAdvance('*', [], ['name']));
     $this->addParam('currencies', CurrencyManager::getInstance()->selectAdvance('*', ['active', '=', 1], ['name']));
     $paymentId = NGS()->args()->id;
     $saleOrders = SaleOrderManager::getInstance()->getSaleOrdersFull(['id', '=', $paymentId]);
     if (!empty($saleOrders)) {
         $saleOrder = $saleOrders[0];
         $this->addParam('saleOrder', $saleOrder);
     }
     $polSerialNumbersDtos = [];
     $saleOrderLineIds = $this->getSaleOrderLineIds($saleOrders);
     if (!empty($saleOrderLineIds)) {
         $saleOrderLineIdsSql = '(' . implode(',', $saleOrderLineIds) . ')';
         $polSerialNumbersDtos = SaleOrderLineSerialNumberManager::getInstance()->selectAdvance('*', ['line_id', 'IN', $saleOrderLineIdsSql]);
         $polSerialNumbersDtos = $this->mapDtosByLineId($polSerialNumbersDtos);
     }
     $this->addParam("polSerialNumbersDtos", $polSerialNumbersDtos);
 }
예제 #14
0
 public function service()
 {
     if (isset(NGS()->args()->id)) {
         $saleOrderId = NGS()->args()->id;
     } else {
         $_SESSION['error_message'] = 'Sale Order ID is missing';
         $this->redirect('sale/list');
     }
     $saleOrderManager = SaleOrderManager::getInstance();
     $saleOrderDto = $saleOrderManager->selectByPK($saleOrderId);
     if (!isset($saleOrderDto)) {
         $_SESSION['error_message'] = 'Sale Order with ID ' . NGS()->args()->id . ' does not exists.';
         $this->redirect('sale/list');
     }
     if ($saleOrderDto->getCancelled() == 0) {
         $_SESSION['error_message'] = 'Sale Order with ID ' . NGS()->args()->id . ' is not cancelled.';
         $this->redirect('sale/list');
     }
     $saleOrderManager->restoreSaleOrder($saleOrderId);
     $_SESSION['success_message'] = 'Sale Order Successfully restored!';
     $this->redirectToReferer();
 }
예제 #15
0
 public function service()
 {
     if (isset(NGS()->args()->id)) {
         $saleOrderId = NGS()->args()->id;
     } else {
         $_SESSION['error_message'] = 'Sale Order ID is missing';
         $this->redirect('sale/list');
     }
     if (isset(NGS()->args()->non_profit)) {
         $nonProfit = NGS()->args()->non_profit;
     } else {
         $_SESSION['error_message'] = 'Non Profit parameter is missing';
         $this->redirect('sale/' . NGS()->args()->id);
     }
     $saleOrderManager = SaleOrderManager::getInstance();
     $saleOrderDto = $saleOrderManager->selectByPK($saleOrderId);
     if (!isset($saleOrderDto)) {
         $_SESSION['error_message'] = 'Sale Order with ID ' . NGS()->args()->id . ' does not exists.';
         $this->redirect('sale/list');
     }
     $saleOrderManager->setNonProfit($saleOrderId, $nonProfit);
 }
예제 #16
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $partnerId = intval(NGS()->args()->id);
     $partner = PartnerManager::getInstance()->getPartnerFull($partnerId);
     if ($partner) {
         $this->addParam('partner', $partner);
         $partnerSaleOrders = SaleOrderManager::getInstance()->getPartnerSaleOrders($partnerId);
         $partnerPurchaseOrders = PurchaseOrderManager::getInstance()->getPartnerPurchaseOrders($partnerId);
         $partnerPaymentTransactions = PaymentTransactionManager::getInstance()->getPartnerPaymentTransactions($partnerId);
         $partnerBillingTransactions = PaymentTransactionManager::getInstance()->getPartnerBillingTransactions($partnerId);
         $partnerInitialDept = PartnerInitialDeptManager::getInstance()->getPartnerInitialDept($partnerId);
         $this->addParam('partnerSaleOrders', $partnerSaleOrders);
         $this->addParam('partnerPurchaseOrders', $partnerPurchaseOrders);
         $this->addParam('partnerPaymentTransactions', $partnerPaymentTransactions);
         $this->addParam('partnerBillingTransactions', $partnerBillingTransactions);
         $dept = CalculationManager::getInstance()->calculatePartnerDeptBySalePurchaseAndPaymentTransations($partnerSaleOrders, $partnerPurchaseOrders, $partnerPaymentTransactions, $partnerBillingTransactions, $partnerInitialDept);
         $this->addParam('partnerDept', $dept);
         $currencyManager = CurrencyManager::getInstance();
         $this->addParam('currencies', $currencyManager->mapDtosById($currencyManager->selectAdvance('*', ['active', '=', 1], ['name'])));
     }
 }
예제 #17
0
 public function load()
 {
     $this->initErrorMessages();
     $this->initSuccessMessages();
     $limit = 100;
     list($offset, $sortByFieldName, $selectedFilterSortByAscDesc) = $this->initFilters($limit);
     $partnerManager = PartnerManager::getInstance();
     $partners = $partnerManager->selectAdvance('*', [], $sortByFieldName, $selectedFilterSortByAscDesc, $offset, $limit);
     $partnerIds = $partnerManager->getDtosIdsArray($partners);
     $partnersSaleOrdersMappedByPartnerId = [];
     $partnersPurchaseOrdersMappedByPartnerId = [];
     $partnersTransactionsMappedByPartnerId = [];
     $partnersInitialDept = [];
     if (!empty($partnerIds)) {
         $partnersSaleOrdersMappedByPartnerId = SaleOrderManager::getInstance()->getPartnersSaleOrders($partnerIds);
         $partnersPurchaseOrdersMappedByPartnerId = PurchaseOrderManager::getInstance()->getPartnersPurchaseOrders($partnerIds);
         $partnersPaymentTransactionsMappedByPartnerId = PaymentTransactionManager::getInstance()->getPartnersPaymentTransactions($partnerIds);
         $partnersBillingTransactionsMappedByPartnerId = PaymentTransactionManager::getInstance()->getPartnersBillingTransactions($partnerIds);
         $partnersInitialDept = PartnerInitialDeptManager::getInstance()->getPartnersInitialDept($partnerIds);
     }
     $partnersDept = CalculationManager::getInstance()->calculatePartnersDeptBySalePurchaseAndPaymentTransations($partnersSaleOrdersMappedByPartnerId, $partnersPurchaseOrdersMappedByPartnerId, $partnersPaymentTransactionsMappedByPartnerId, $partnersBillingTransactionsMappedByPartnerId, $partnersInitialDept);
     $this->addParam('partnersSaleOrdersMappedByPartnerId', $partnersSaleOrdersMappedByPartnerId);
     $this->addParam('partnersPurchaseOrdersMappedByPartnerId', $partnersPurchaseOrdersMappedByPartnerId);
     $this->addParam('partnersPaymentTransactionsMappedByPartnerId', $partnersPaymentTransactionsMappedByPartnerId);
     $this->addParam('partnersBillingTransactionsMappedByPartnerId', $partnersBillingTransactionsMappedByPartnerId);
     $this->addParam('partnersDept', $partnersDept);
     $this->addParam('partners', $partners);
     $count = PartnerManager::getInstance()->getLastSelectAdvanceRowsCount();
     if (count($partners) == 0 && $count > 0) {
         $this->redirectIncludedParamsExeptPaging();
     }
     $pagesCount = ceil($count / $limit);
     $this->addParam('pagesCount', $pagesCount);
     $currencyManager = CurrencyManager::getInstance();
     $this->addParam('currencies', $currencyManager->mapDtosById($currencyManager->selectAdvance('*', ['active', '=', 1], ['name'])));
 }
예제 #18
0
 public function service()
 {
     if (isset(NGS()->args()->id)) {
         $saleOrderId = NGS()->args()->id;
     } else {
         $_SESSION['error_message'] = 'Sale Order ID is missing';
         $this->redirect('sale/list');
     }
     $saleOrderManager = SaleOrderManager::getInstance();
     $saleOrderDto = $saleOrderManager->selectByPK($saleOrderId);
     if (!isset($saleOrderDto)) {
         $_SESSION['error_message'] = 'Sale Order with ID ' . NGS()->args()->id . ' does not exists.';
         $this->redirect('sale/list');
     }
     if ($saleOrderDto->getCancelled() == 1) {
         $_SESSION['error_message'] = 'Sale Order with ID ' . NGS()->args()->id . ' is already cancelled.';
         $this->redirect('sale/list');
     }
     $note = NGS()->args()->note;
     $saleOrderManager->cancelSaleOrder($saleOrderId, $note);
     $_SESSION['success_message'] = 'Sale Order Successfully cancelled!';
     $saleOrderManager->updateAllDependingSaleOrderLines($saleOrderId);
     $this->redirectToReferer();
 }
예제 #19
0
 public function updateAllDependingSaleOrderLines($purchaseOrderId)
 {
     $productsIds = $this->getProductsIdsInOrder($purchaseOrderId);
     SaleOrderManager::getInstance()->updateAllOrderLinesThatContainsProducts($productsIds);
 }
예제 #20
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;
 }
예제 #21
0
 public function calculatePartnerDeptBySalePurchaseAndPaymentTransations($id)
 {
     $partnerSaleOrders = SaleOrderManager::getInstance()->getPartnerSaleOrders($id);
     $partnerPurchaseOrders = PurchaseOrderManager::getInstance()->getPartnerPurchaseOrders($id);
     $partnerPaymentTransactions = PaymentTransactionManager::getInstance()->getPartnerPaymentTransactions($id);
     $partnerBillingTransactions = PaymentTransactionManager::getInstance()->getPartnerBillingTransactions($id);
     $partnerInitialDept = PartnerInitialDeptManager::getInstance()->getPartnerInitialDept($id);
     return CalculationManager::getInstance()->calculatePartnerDeptBySalePurchaseAndPaymentTransations($partnerSaleOrders, $partnerPurchaseOrders, $partnerPaymentTransactions, $partnerBillingTransactions, $partnerInitialDept);
 }
예제 #22
0
 public function getProductsSaleOrders($productIds)
 {
     $soLines = [];
     if (!empty($productIds)) {
         $soLines = $this->mapper->getNonCancelledProductsSaleOrders($productIds);
     }
     $soIdsMappedByProductId = [];
     $allSaleOrdersIds = [];
     foreach ($soLines as $sol) {
         $soIdsMappedByProductId[$sol->getProductId()][] = $sol->getSaleOrderId();
         $allSaleOrdersIds[] = intval($sol->getSaleOrderId());
     }
     $allSaleOrdersIds = array_unique($allSaleOrdersIds);
     $saleOrdersMappedById = [];
     if (!empty($allSaleOrdersIds)) {
         $idsSql = '(' . implode(',', $allSaleOrdersIds) . ')';
         $saleOrdersMappedById = SaleOrderManager::getInstance()->selectAdvance('*', ['id', 'IN', $idsSql], null, null, null, null, true);
     }
     foreach ($soIdsMappedByProductId as &$r) {
         $r = array_unique($r);
     }
     $ret = [];
     foreach ($productIds as $productId) {
         if (!array_key_exists($productId, $soIdsMappedByProductId)) {
             $soIdsMappedByProductId[$productId] = [];
         }
         $ret[$productId] = [];
         foreach ($soIdsMappedByProductId[$productId] as $soId) {
             $ret[$productId][] = $saleOrdersMappedById[$soId];
         }
     }
     return $ret;
 }
예제 #23
0
 private function getPurchaseOrdersDatesMappedBySN($pol_searial_numbers)
 {
     $snMappedByPolIds = [];
     foreach ($pol_searial_numbers as $pol_searial_number) {
         $snMappedByPolIds[$pol_searial_number->getLineId()][] = $pol_searial_number->getSerialNumber();
     }
     $polDtos = PurchaseOrderLineManager::getInstance()->selectByPKs(array_keys($snMappedByPolIds));
     $poIdsMappedByPolId = $this->getPoIdsMappedByPolIds($polDtos);
     $poDtos = PurchaseOrderManager::getInstance()->getPurchaseOrdersFull($where = ['id', 'in', '(' . implode(',', array_unique(array_values($poIdsMappedByPolId))), ')']);
     $poDtosMappedByID = SaleOrderManager::mapDtosById($poDtos);
     $ret = [];
     foreach ($poIdsMappedByPolId as $polId => $poId) {
         foreach ($snMappedByPolIds[$polId] as $sn) {
             if (isset($poDtosMappedByID[$poId])) {
                 $ret[$sn] = [$poDtosMappedByID[$poId]->getOrderDate(), $poDtosMappedByID[$poId]->getPartnerDto()->getName()];
             }
         }
     }
     return $ret;
 }