Пример #1
0
        public virtual void CustomerManagement(Model.Customer.Customer customer, string requestCode)
        {
            if (requestCode == null)
            {
                throw new ArgumentException("Request code", "requestCode");
            }

            if (customer == null)
            {
                throw new ArgumentNullException("customer", "Customer");
            }

            if (requestCode == Resources.OperationRequestInsert)
            {
                InsertCustomer(customer);
            }
            else if (requestCode == Resources.OperationRequestDuplicate)
            {
                customer.CustomerId = 0;
                InsertCustomer(customer);
            }
            else if (requestCode == Resources.OperationRequestUpdate)
            {
                UpdateCustomer(customer);
            }
            else
            {
                DeleteCustomer(customer);
            }
        }
Пример #2
0
        private void UpdateCustomer(Model.Customer.Customer customer)
        {
            if (customer == null)
            {
                throw new ArgumentNullException("customer", "Customer");
            }

            _customerDataAccess.UpdateCustomer(customer);
        }
Пример #3
0
        private void InsertCustomer(Model.Customer.Customer customer)
        {
            if (customer == null)
            {
                throw new ArgumentNullException("customer", "Customer");
            }

            //Insert customer
            _customerDataAccess.InsertCustomer(customer);

            //Updating customer code
            customer.CustomerCode =
                StringHelper.Right("00" + DateTime.Now.Year, 2) + "-" +
                StringHelper.Right("00" + DateTime.Now.Month, 2) + "-" +
                customer.CustomerId;
            UpdateCustomer(customer);
        }
Пример #4
0
        private void DeleteCustomer(Model.Customer.Customer customer)
        {
            if (customer == null)
            {
                throw new ArgumentNullException("customer", "Customer");
            }

            int customerId = customer.CustomerId;

            _customerDataAccess.DeleteCustomer(customer);

            IList dCardList = _customerDataAccess.GetDiscountCardsByCustomer(customerId);

            if (dCardList.Count != 0)
            {
                var discountCard = (DiscountCard)dCardList[0];
                discountCard.CustomerId = 0;
                _customerDataAccess.UpdateDiscountCard(discountCard);
            }
        }
 public virtual void DeleteCustomer(Model.Customer.Customer customer)
 {
     DeleteObject(customer);
 }
 public virtual void UpdateCustomer(Model.Customer.Customer customer)
 {
     UpdateObject(customer);
 }
 public virtual void InsertCustomer(Model.Customer.Customer customer)
 {
     InsertObject(customer);
 }
Пример #8
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);
        }
Пример #9
0
        public virtual Model.Deposit.Deposit RecordDeposit(
            IList depositItemList,
            float totalAmountInt,
            float totalAmountPaidInt,
            float totalAmountPaidRiel,
            Model.Customer.Customer customer,
            string referenceNum,
            float discount,
            bool isReturned)
        {
            if (depositItemList == null)
            {
                throw new ArgumentNullException("depositItemList", Resources.ConstDepositItem);
            }

            var factor = 1;

            if (isReturned)
            {
                factor = -1;
            }

            //Deposit
            var deposit =
                new Model.Deposit.Deposit
            {
                DepositDate   = DateTime.Now,
                DepositTypeId = 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 =
                    isReturned ? totalAmountInt : (totalAmountInt - ((totalAmountInt * discount) / 100)),
                AmountPaidInt  = totalAmountPaidInt,
                AmountPaidRiel = totalAmountPaidRiel,
                Discount       = discount
            };

            deposit.AmountReturnInt  = totalAmountPaidInt - deposit.AmountSoldInt;
            deposit.AmountSoldInt   *= factor;
            deposit.AmountPaidInt   *= factor;
            deposit.AmountReturnInt *= factor;
            deposit.AmountSoldRiel   = deposit.AmountSoldInt * deposit.ExchangeRate;
            deposit.AmountReturnRiel = deposit.AmountReturnInt * deposit.ExchangeRate;
            if (customer.FkDiscountCard != null)
            {
                deposit.DiscountTypeId = customer.FkDiscountCard.DiscountCardTypeId;
                deposit.CardNumber     = customer.FkDiscountCard.CardNumber;
            }
            deposit.ReferenceNum = referenceNum;

            //Deposit
            InsertDeposit(deposit);

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

            customer.DebtAmount += deposit.AmountReturnInt;
            if (isReturned)
            {
                customer.PurchasedAmount += deposit.AmountPaidInt;
            }

            customerService.CustomerManagement(
                customer,
                Resources.OperationRequestUpdate);

            //localy update SaleOrder
            deposit.FkCustomer = customer;

            //Deposit item
            if (!isReturned)
            {
                foreach (DepositItem depositItem in depositItemList)
                {
                    if (depositItem.ProductId == 0)
                    {
                        continue;
                    }

                    depositItem.DepositId = deposit.DepositId;
                    _depositDataAccess.InsertDepositItem(depositItem);
                }
            }
            return(deposit);
        }