示例#1
0
 public virtual void InsertSaleOrderReport(SaleOrderReport saleOrderReport)
 {
     InsertObject(saleOrderReport);
 }
示例#2
0
        public virtual Model.SaleOrder.SaleOrder RecordSaleOrder(
            IList saleItemList,
            float totalAmountInt,
            float totalAmountPaidInt,
            float totalAmountPaidRiel,
            float totalAmountReturnInt,
            Model.Customer.Customer customer,
            bool isReturned,
            string referenceNum,
            float discount,
            float depositAmount,
            bool fromDeposit)
        {
            if (saleItemList == null)
            {
                throw new ArgumentNullException("saleItemList", Resources.MsgInvalidSaleItem);
            }

            var factor = 1;

            if (isReturned)
            {
                factor = -1;
            }

            //SaleOrder
            var saleOrder =
                new Model.SaleOrder.SaleOrder
            {
                SaleOrderDate   = DateTime.Now,
                SaleOrderTypeId = (isReturned ? 1 : 0),
                CustomerId      = customer.CustomerId,
                CashierId       = AppContext.User.UserId,
                DelivererId     = 0,
                Description     = string.Empty,
                PaymentTypeId   = 0,
                CurrencyId      = 0,
                ExchangeRate    = (AppContext.ExchangeRate == null ? 0 : AppContext.ExchangeRate.ExchangeValue),
                AmountSoldInt   = fromDeposit ? totalAmountInt : (totalAmountInt - ((totalAmountInt * discount) / 100)),
                DepositAmount   = depositAmount
            };

            saleOrder.AmountSoldInt *= factor;
            saleOrder.AmountSoldRiel = saleOrder.AmountSoldInt * saleOrder.ExchangeRate;
            if (isReturned)
            {
                saleOrder.AmountPaidInt  = saleOrder.AmountSoldInt;
                saleOrder.AmountPaidRiel = 0;
            }
            else
            {
                saleOrder.AmountPaidInt  = totalAmountPaidInt;
                saleOrder.AmountPaidRiel = totalAmountPaidRiel;
            }
            //saleOrder.AmountReturnInt = saleOrder.AmountPaidInt - saleOrder.AmountSoldInt;
            saleOrder.AmountReturnInt  = totalAmountReturnInt;
            saleOrder.AmountReturnRiel = saleOrder.AmountReturnInt * saleOrder.ExchangeRate;
            saleOrder.Discount         = discount;
            if (customer.FkDiscountCard != null)
            {
                saleOrder.DiscountTypeId = customer.FkDiscountCard.DiscountCardTypeId;
                saleOrder.CardNumber     = customer.FkDiscountCard.CardNumber;
            }
            saleOrder.ReferenceNum = referenceNum;

            //saleOrder.
            InsertSaleOrder(saleOrder);

            //Customer
            var customerService = ServiceFactory.GenerateServiceInstance().GenerateCustomerService();

            if (fromDeposit)
            {
                customer.PurchasedAmount += saleOrder.AmountPaidInt;
                customer.DebtAmount      += saleOrder.AmountPaidInt;
            }
            else
            {
                customer.DebtAmount += saleOrder.AmountReturnInt;
            }
            customerService.CustomerManagement(
                customer,
                Resources.OperationRequestUpdate);

            //localy update SaleOrder
            saleOrder.FkCustomer = customer;

            //Sale item
            var productService = ServiceFactory.GenerateServiceInstance().GenerateProductService();
            var isAllowed      = true;

            foreach (var saleItem in saleItemList.Cast <SaleItem>().Where(saleItem => saleItem.ProductId != 0))
            {
                if (isReturned)
                {
                    saleItem.QtySold *= factor;
                }

                //Product
                productService.UpdateProduct(saleItem);

                //SaleItem
                saleItem.SaleOrderId = saleOrder.SaleOrderId;
                _saleOrderDataAccess.InsertSaleItem(saleItem);

                var saleOrderReport =
                    new SaleOrderReport
                {
                    SaleOrderId     = saleOrder.SaleOrderId,
                    SaleOrderNumber = saleOrder.SaleOrderNumber,
                    SaleOrderDate   = ((DateTime)saleOrder.SaleOrderDate),
                    CustomerId      = customer.CustomerId,
                    CustomerName    = customer.CustomerName,
                    CashierName     = AppContext.User.LogInName,
                    ExchangeRate    = saleOrder.ExchangeRate
                };

                if (isAllowed)
                {
                    saleOrderReport.AmountSoldInt    = saleOrder.AmountSoldInt;
                    saleOrderReport.AmountPaidInt    = saleOrder.AmountPaidInt;
                    saleOrderReport.AmountPaidRiel   = saleOrder.AmountPaidRiel;
                    saleOrderReport.AmountReturnInt  = saleOrder.AmountReturnInt;
                    saleOrderReport.AmountReturnRiel = saleOrder.AmountReturnRiel;
                    saleOrderReport.DiscountTypeId   = saleOrder.DiscountTypeId;
                    saleOrderReport.TotalDiscount    = saleOrder.Discount;
                    saleOrderReport.CardNumber       = saleOrder.CardNumber;
                    saleOrderReport.ReportHeader     = 1;
                    saleOrderReport.DepositAmount    = depositAmount;
                }
                saleOrderReport.SaleItemId   = saleItem.SaleItemId;
                saleOrderReport.ProductId    = saleItem.ProductId;
                saleOrderReport.ReferenceNum = referenceNum;

                if (saleItem.FkProduct != null)
                {
                    saleOrderReport.CategoryStr       = saleItem.FkProduct.CategoryStr;
                    saleOrderReport.PurchaseUnitPrice = saleItem.FkProduct.UnitPriceIn;

                    if (!string.IsNullOrEmpty(saleItem.FkProduct.ProductCode))
                    {
                        var productCode =
                            !string.IsNullOrEmpty(saleItem.FkProduct.ForeignCode) ?
                            saleItem.FkProduct.ForeignCode :
                            string.Empty;
                        productCode = productCode.Replace(",", string.Empty);
                        productCode = productCode.Replace(" ", string.Empty);
                        saleOrderReport.ProductCode =
                            productCode +
                            " (" +
                            (!string.IsNullOrEmpty(saleItem.FkProduct.ProductCode) ?
                             saleItem.FkProduct.ProductCode :
                             string.Empty) +
                            ")";
                        saleOrderReport.ProductName = saleItem.ProductName + " (" + productCode + ")";
                    }
                }

                if (string.IsNullOrEmpty(saleOrderReport.ProductName))
                {
                    saleOrderReport.ProductName = saleItem.ProductName;
                }
                saleOrderReport.UnitPriceIn = saleItem.UnitPriceIn;
                saleOrderReport.Discount    = saleItem.Discount;
                saleOrderReport.QtySold     = saleItem.QtySold;
                saleOrderReport.QtyBonus    = saleItem.QtyBonus;
                //Public Unit Price Out : Unit price after discount
                saleOrderReport.UnitPriceOut = saleItem.PublicUpOut;
                saleOrderReport.SubTotal     = saleItem.PublicUpOut * saleItem.QtySold;

                _saleOrderDataAccess.InsertSaleOrderReport(saleOrderReport);
                isAllowed = false;
            }

            return(saleOrder);
        }
示例#3
0
 public List <SaleOrderReport> GetSaleOrderStandardReport(SaleOrderReport saleOrderReport)
 {
     return(_reportRepository.GetSaleOrderStandardReport(saleOrderReport));
 }