コード例 #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;
        }