private Txn_PODetail MappingPoDetailViewModelToPoDetail(PoDetailViewModel model)
 {
     return(new Txn_PODetail
     {
         PoId = model.PoId,
         ProductName = model.ProductName,
         ProductBrand = model.ProductBrand,
         ProductType = model.ProductType,
         PricePerUnit = model.PricePerUnit,
         ActualPricePerUnit = model.ActualPricePerUnit,
         Amount = model.Amount,
         TotalPrice = model.TotalPrice,
         ActualTotalPrice = model.ActualTotalPrice,
         Tax = model.Tax,
         TransportLocation = model.TransportLocation,
         TransportFee = model.TransportFee,
         ParcelFee = model.ParcelFee,
         ServiceFee = model.ServiceFee,
         OtherFee = model.OtherFee,
         CustomerLead = model.CustomerLead,
         CustomerLeadPercentage = model.CustomerLeadPercentage,
         TotalCost = model.TotalCost,
         Profit = model.Profit,
         ProfitPercentage = model.ProfitPercentage,
         Remark = model.Remark
     });
 }
        public ActionResult Detail(int detailId = 0)
        {
            PoDetailViewModel model      = new PoDetailViewModel();
            PoManager         manager    = new PoManager();
            EmployeeManager   empManager = new EmployeeManager();
            CommissionManager comManager = new CommissionManager();


            if (detailId > 0)
            {
                ViewBag.Action = "Edit";

                int currentProfilerId = 0;
                // if role is not "Able" then has to get profilerId
                if (Helper.UserRole != "1")
                {
                    currentProfilerId = empManager.GetEmployeeDetail(0).ProfileId;
                }
                model = manager.GetPoDetail(detailId);

                if (currentProfilerId.Equals(model.SalesProfileId1) ||
                    currentProfilerId.Equals(model.SalesProfileId2) ||
                    currentProfilerId.Equals(model.SalesProfileId3))
                {
                    model.IsOwner = true;
                }
                else
                {
                    model.IsOwner = false;
                }
            }
            else
            {
                ViewBag.Action       = "New";
                model                = manager.MappingCommissionDetail(model);
                model.IsOwner        = true;
                model.PoDate         = DateTime.UtcNow;
                model.CommissionRate = comManager.GetCommissionRate(false);
            }

            // Set config
            model.CommissionPayRate = Helper.CommissionPayRate;
            model.CommissionForSale = Helper.CommissionForSale;

            // Set Lookup
            List <LookupModel> lookupEmployee = new List <LookupModel> {
                new LookupModel {
                    Key = "-1", Value = "Please select employee"
                }
            };

            lookupEmployee.AddRange(empManager.GetLookup());
            model.LookupEmployee          = lookupEmployee;
            model.LookupProductType       = Helper.LookupProductType;
            model.LookupProductBrand      = Helper.LookupProductBrand;
            model.LookupTransportLocation = Helper.LookupTransportationProvince;
            model.LookupPosition          = Helper.LookupPosition;

            return(View(model));
        }
 private Txn_PO MappingPoDetailViewModelToPo(PoDetailViewModel model)
 {
     return(new Txn_PO
     {
         PoNumber = model.PoNumber,
         PoDate = model.PoDate,
         PoFilePath = model.PoFilePath,
         InvoiceFilePath = model.InvoiceFilePath,
         CustomerName = model.CustomerName,
         Status = model.Status
     });
 }
        public ActionResult Edit(PoDetailViewModel model)
        {
            try
            {
                PoManager manager = new PoManager();
                manager.UpdatePo(model);
            }
            catch (Exception e)
            {
                return(Json(new { Result = false, Message = e.Message }));
            }

            return(Json(new { Result = true, Url = Url.Action("Detail", "Po") + "?detailId=" + model.PoDetailId }));
        }
        public ActionResult New(PoDetailViewModel model)
        {
            try
            {
                PoManager manager = new PoManager();
                manager.CreatePo(model);
            }
            catch (Exception e)
            {
                return(Json(new { Result = false, Message = e.Message }));
            }

            return(Json(new { Result = true, Url = Url.Action("Index", "Po") }));
        }
 private Txn_Commission MappingPoDetailViewModelToCommission(PoDetailViewModel model)
 {
     return(new Txn_Commission
     {
         PoDetailId = model.PoDetailId,
         TotalCommission = model.Commission.TotalCommission,
         CommissionSales = model.Commission.CommissionSales,
         CommissionPM = model.Commission.CommissionPM,
         CommissionApp = model.Commission.CommissionApp,
         CommissionInstall = model.Commission.CommissionInstall,
         CommissionAdmin = model.Commission.CommissionAdmin,
         CommissionOutside = model.Commission.CommissionOutside,
         ConclusionCommission = model.Commission.ConclusionCommission,
         AuditCommission = model.Commission.AuditCommission,
     });
 }
        public void CreatePo(PoDetailViewModel model)
        {
            // If Po number already exists then do not insert
            Txn_PO existPo = _unitOfWork.GetRepository <Txn_PO>().GetQueryable(o => o.PoNumber == model.PoNumber).FirstOrDefault();

            if (existPo != null)
            {
                existPo.CustomerName = model.CustomerName;
                existPo.PoDate       = model.PoDate;
                existPo.Status       = 1;
                _unitOfWork.GetRepository <Txn_PO>().Update(existPo);

                model.PoId = existPo.PoId;
            }
            else
            {
                // Insert Po
                Txn_PO po = MappingPoDetailViewModelToPo(model);
                po.Status = 1;
                _unitOfWork.GetRepository <Txn_PO>().Insert(po);
                _unitOfWork.Execute();

                model.PoId = po.PoId;
            }

            // Insert PoDetail
            Txn_PODetail poDetail = MappingPoDetailViewModelToPoDetail(model);

            poDetail.Status = 1;
            _unitOfWork.GetRepository <Txn_PODetail>().Insert(poDetail);
            _unitOfWork.Execute();

            model.PoDetailId = poDetail.PoDetailId;

            // Insert Commission
            Txn_Commission commission = MappingPoDetailViewModelToCommission(model);

            _unitOfWork.GetRepository <Txn_Commission>().Insert(commission);

            // Insert CommissionDetail
            List <Txn_CommissionDetail> commissionDetail = MappingPoDetailViewModelToCommissionDetail(model);

            _unitOfWork.GetRepository <Txn_CommissionDetail>().Insert(commissionDetail);

            // Execute commission
            _unitOfWork.Execute();
        }
        private PoDetailViewModel MappingCommissionDetailToPoDetailViewModel(List <Txn_CommissionDetail> list, PoDetailViewModel model)
        {
            decimal rateSales, ratePm, rateAppSupport, rateInstallDelivery, rateAdmin, rateOs;

            rateSales = ratePm = rateAppSupport = rateInstallDelivery = rateAdmin = rateOs = decimal.Zero;

            foreach (Txn_CommissionDetail com in list)
            {
                // +++++++++++++++++ Sales +++++++++++++++++ //
                if (com.Position == 1)
                {
                    if (model.SalesProfileId1 <= 0)
                    {
                        rateSales            += com.Rate;
                        model.SalesProfileId1 = com.ProfileId;
                    }
                    else if (model.SalesProfileId2 <= 0)
                    {
                        rateSales            += com.Rate;
                        model.SalesProfileId2 = com.ProfileId;
                    }
                    else if (model.SalesProfileId3 <= 0)
                    {
                        rateSales            += com.Rate;
                        model.SalesProfileId3 = com.ProfileId;
                    }
                }

                // +++++++++++++++++ Product Manager +++++++++++++++++ //
                else if (com.Position == 2)
                {
                    if (model.PmProfileId1 <= 0)
                    {
                        ratePm            += com.Rate;
                        model.PmProfileId1 = com.ProfileId;
                    }
                    else if (model.PmProfileId2 <= 0)
                    {
                        ratePm            += com.Rate;
                        model.PmProfileId2 = com.ProfileId;
                    }
                    else if (model.PmProfileId3 <= 0)
                    {
                        ratePm            += com.Rate;
                        model.PmProfileId3 = com.ProfileId;
                    }
                }

                // +++++++++++++++++ Application/Support +++++++++++++++++ //
                else if (com.Position == 3)
                {
                    if (model.AppSupportProfileId1 <= 0)
                    {
                        rateAppSupport            += com.Rate;
                        model.AppSupportProfileId1 = com.ProfileId;
                    }
                    else if (model.AppSupportProfileId2 <= 0)
                    {
                        rateAppSupport            += com.Rate;
                        model.AppSupportProfileId2 = com.ProfileId;
                    }
                    else if (model.AppSupportProfileId3 <= 0)
                    {
                        rateAppSupport            += com.Rate;
                        model.AppSupportProfileId3 = com.ProfileId;
                    }
                }

                // +++++++++++++++++ Installation/Delivery +++++++++++++++++ //
                else if (com.Position == 4)
                {
                    if (model.InstallDeliveryProfileId1 <= 0)
                    {
                        rateInstallDelivery            += com.Rate;
                        model.InstallDeliveryProfileId1 = com.ProfileId;
                    }
                    else if (model.InstallDeliveryProfileId2 <= 0)
                    {
                        rateInstallDelivery            += com.Rate;
                        model.InstallDeliveryProfileId2 = com.ProfileId;
                    }
                    else if (model.InstallDeliveryProfileId3 <= 0)
                    {
                        rateInstallDelivery            += com.Rate;
                        model.InstallDeliveryProfileId3 = com.ProfileId;
                    }
                }

                // +++++++++++++++++ Admin +++++++++++++++++ //
                else if (com.Position == 5)
                {
                    if (model.AdminProfileId1 <= 0)
                    {
                        rateAdmin            += com.Rate;
                        model.AdminProfileId1 = com.ProfileId;
                    }
                    else if (model.AdminProfileId2 <= 0)
                    {
                        rateAdmin            += com.Rate;
                        model.AdminProfileId2 = com.ProfileId;
                    }
                    else if (model.AdminProfileId3 <= 0)
                    {
                        rateAdmin            += com.Rate;
                        model.AdminProfileId3 = com.ProfileId;
                    }
                }

                // +++++++++++++++++ Outsite +++++++++++++++++ //
                else if (com.Position == 6)
                {
                    if (model.OsProfileId1 <= 0)
                    {
                        rateOs            += com.Rate;
                        model.OsProfileId1 = com.ProfileId;
                    }
                    else if (model.OsProfileId2 <= 0)
                    {
                        rateOs            += com.Rate;
                        model.OsProfileId2 = com.ProfileId;
                    }
                    else if (model.OsProfileId3 <= 0)
                    {
                        rateOs            += com.Rate;
                        model.OsProfileId3 = com.ProfileId;
                    }
                }
            }

            // Add commission rate
            model.CommissionRate = new CommissionRateViewModel();
            model.CommissionRate.SalesPercentage           = rateSales;
            model.CommissionRate.PmPercentage              = ratePm;
            model.CommissionRate.AppSupportPercentage      = rateAppSupport;
            model.CommissionRate.InstallDeliveryPercentage = rateInstallDelivery;
            model.CommissionRate.AdminPercentage           = rateAdmin;
            model.CommissionRate.OsPercentage              = rateOs;

            return(model);
        }
        private List <Txn_CommissionDetail> MappingPoDetailViewModelToCommissionDetail(PoDetailViewModel model)
        {
            List <Txn_CommissionDetail> listCommissionDetail = new List <Txn_CommissionDetail>();

            // +++++++++++++++++ Sales +++++++++++++++++ //
            if (model.CommissionRate.SalesPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listSales = new List <Txn_CommissionDetail>();
                int countSales = 0;
                if (model.SalesProfileId1 > 0)
                {
                    countSales++;
                    listSales.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 1, ProfileId = model.SalesProfileId1
                    });
                }
                if (model.SalesProfileId2 > 0)
                {
                    countSales++;
                    listSales.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 1, ProfileId = model.SalesProfileId2
                    });
                }
                if (model.SalesProfileId3 > 0)
                {
                    countSales++;
                    listSales.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 1, ProfileId = model.SalesProfileId3
                    });
                }

                // Set rate
                decimal rateSales   = model.CommissionRate.SalesPercentage / countSales;
                decimal amountSales = model.Commission.CommissionSales / countSales;
                for (int i = 0; i < listSales.Count; i++)
                {
                    listSales[i].Rate   = rateSales;
                    listSales[i].Amount = amountSales;
                }

                // Add to list
                listCommissionDetail.AddRange(listSales);
            }

            // +++++++++++++++++ Product Manager +++++++++++++++++ //
            if (model.CommissionRate.PmPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listPm = new List <Txn_CommissionDetail>();
                int countPm = 0;
                if (model.PmProfileId1 > 0)
                {
                    countPm++;
                    listPm.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 2, ProfileId = model.PmProfileId1
                    });
                }
                if (model.PmProfileId2 > 0)
                {
                    countPm++;
                    listPm.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 2, ProfileId = model.PmProfileId2
                    });
                }
                if (model.PmProfileId3 > 0)
                {
                    countPm++;
                    listPm.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 2, ProfileId = model.PmProfileId3
                    });
                }

                // Set rate
                decimal sharePm  = model.CommissionRate.PmPercentage / countPm;
                decimal amountPm = model.Commission.CommissionPM / countPm;
                for (int i = 0; i < listPm.Count; i++)
                {
                    listPm[i].Rate   = sharePm;
                    listPm[i].Amount = amountPm;
                }

                // Add to list
                listCommissionDetail.AddRange(listPm);
            }

            // +++++++++++++++++ Application/Support +++++++++++++++++ //
            if (model.CommissionRate.AppSupportPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listAppSupport = new List <Txn_CommissionDetail>();
                int countAppSupport = 0;
                if (model.AppSupportProfileId1 > 0)
                {
                    countAppSupport++;
                    listAppSupport.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 3, ProfileId = model.AppSupportProfileId1
                    });
                }
                if (model.AppSupportProfileId2 > 0)
                {
                    countAppSupport++;
                    listAppSupport.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 3, ProfileId = model.AppSupportProfileId2
                    });
                }
                if (model.AppSupportProfileId3 > 0)
                {
                    countAppSupport++;
                    listAppSupport.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 3, ProfileId = model.AppSupportProfileId3
                    });
                }

                // Set rate
                decimal shareAppSupport  = model.CommissionRate.AppSupportPercentage / countAppSupport;
                decimal amountAppSupport = model.Commission.CommissionApp / countAppSupport;
                for (int i = 0; i < listAppSupport.Count; i++)
                {
                    listAppSupport[i].Rate   = shareAppSupport;
                    listAppSupport[i].Amount = amountAppSupport;
                }

                // Add to list
                listCommissionDetail.AddRange(listAppSupport);
            }

            // +++++++++++++++++ Installation/Delivery +++++++++++++++++ //
            if (model.CommissionRate.InstallDeliveryPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listInstallDelivery = new List <Txn_CommissionDetail>();
                int countInstallDelivery = 0;
                if (model.InstallDeliveryProfileId1 > 0)
                {
                    countInstallDelivery++;
                    listInstallDelivery.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 4, ProfileId = model.InstallDeliveryProfileId1
                    });
                }
                if (model.InstallDeliveryProfileId2 > 0)
                {
                    countInstallDelivery++;
                    listInstallDelivery.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 4, ProfileId = model.InstallDeliveryProfileId2
                    });
                }
                if (model.InstallDeliveryProfileId3 > 0)
                {
                    countInstallDelivery++;
                    listInstallDelivery.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 4, ProfileId = model.InstallDeliveryProfileId3
                    });
                }

                // Set rate
                decimal shareInstallDelivery  = model.CommissionRate.InstallDeliveryPercentage / countInstallDelivery;
                decimal amountInstallDelivery = model.Commission.CommissionInstall / countInstallDelivery;
                for (int i = 0; i < listInstallDelivery.Count; i++)
                {
                    listInstallDelivery[i].Rate   = shareInstallDelivery;
                    listInstallDelivery[i].Amount = amountInstallDelivery;
                }

                // Add to list
                listCommissionDetail.AddRange(listInstallDelivery);
            }

            // +++++++++++++++++ Admin +++++++++++++++++ //
            if (model.CommissionRate.AdminPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listAdmin = new List <Txn_CommissionDetail>();
                int countAdmin = 0;
                if (model.AdminProfileId1 > 0)
                {
                    countAdmin++;
                    listAdmin.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 5, ProfileId = model.AdminProfileId1
                    });
                }
                if (model.AdminProfileId2 > 0)
                {
                    countAdmin++;
                    listAdmin.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 5, ProfileId = model.AdminProfileId2
                    });
                }
                if (model.AdminProfileId3 > 0)
                {
                    countAdmin++;
                    listAdmin.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 5, ProfileId = model.AdminProfileId3
                    });
                }

                // Set rate
                decimal shareAdmin  = model.CommissionRate.AdminPercentage / countAdmin;
                decimal amountAdmin = model.Commission.CommissionAdmin / countAdmin;
                for (int i = 0; i < listAdmin.Count; i++)
                {
                    listAdmin[i].Rate   = shareAdmin;
                    listAdmin[i].Amount = amountAdmin;
                }

                // Add to list
                listCommissionDetail.AddRange(listAdmin);
            }

            // +++++++++++++++++ Outsite +++++++++++++++++ //
            if (model.CommissionRate.OsPercentage > decimal.Zero)
            {
                List <Txn_CommissionDetail> listOs = new List <Txn_CommissionDetail>();
                int countOs = 0;
                if (model.OsProfileId1 > 0)
                {
                    countOs++;
                    listOs.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 6, ProfileId = model.OsProfileId1
                    });
                }
                if (model.OsProfileId2 > 0)
                {
                    countOs++;
                    listOs.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 6, ProfileId = model.OsProfileId2
                    });
                }
                if (model.OsProfileId3 > 0)
                {
                    countOs++;
                    listOs.Add(new Txn_CommissionDetail {
                        PoDetailId = model.PoDetailId, Position = 6, ProfileId = model.OsProfileId3
                    });
                }

                // Set rate
                decimal shareOs  = model.CommissionRate.OsPercentage / countOs;
                decimal amountOs = model.Commission.CommissionOutside / countOs;
                for (int i = 0; i < listOs.Count; i++)
                {
                    listOs[i].Rate   = shareOs;
                    listOs[i].Amount = amountOs;
                }

                // Add to list
                listCommissionDetail.AddRange(listOs);
            }

            return(listCommissionDetail);
        }
Пример #10
0
        public PoDetailViewModel MappingCommissionDetail(PoDetailViewModel model)
        {
            UserManager userManager             = new UserManager();
            List <UserDetailViewModel> userList = userManager.GetUserDetailList();

            int profileIdOfCurrentUser = userList.Where(o => o.UserId == int.Parse(Helper.UserId)).Select(o => o.ProfileId).FirstOrDefault();

            model.SalesProfileId1 = profileIdOfCurrentUser;

            foreach (UserDetailViewModel user in userList)
            {
                if (user.ProfileId != profileIdOfCurrentUser)
                {
                    // Sales
                    //if (user.Position == 1)
                    //{
                    //    if (model.SalesProfileId1 <= 0) model.SalesProfileId1 = user.ProfileId;
                    //    else if (model.SalesProfileId2 <= 0) model.SalesProfileId2 = user.ProfileId;
                    //    else if (model.SalesProfileId3 <= 0) model.SalesProfileId3 = user.ProfileId;
                    //}

                    // Product Manager
                    if (user.Position == 2)
                    {
                        if (model.PmProfileId1 <= 0)
                        {
                            model.PmProfileId1 = user.ProfileId;
                        }
                        else if (model.PmProfileId2 <= 0)
                        {
                            model.PmProfileId2 = user.ProfileId;
                        }
                        else if (model.PmProfileId3 <= 0)
                        {
                            model.PmProfileId3 = user.ProfileId;
                        }
                    }

                    // Application/Support
                    if (user.Position == 3)
                    {
                        if (model.AppSupportProfileId1 <= 0)
                        {
                            model.AppSupportProfileId1 = user.ProfileId;
                        }
                        else if (model.AppSupportProfileId2 <= 0)
                        {
                            model.AppSupportProfileId2 = user.ProfileId;
                        }
                        else if (model.AppSupportProfileId3 <= 0)
                        {
                            model.AppSupportProfileId3 = user.ProfileId;
                        }
                    }

                    // Installation/Delivery
                    if (user.Position == 4)
                    {
                        if (model.InstallDeliveryProfileId1 <= 0)
                        {
                            model.InstallDeliveryProfileId1 = user.ProfileId;
                        }
                        else if (model.InstallDeliveryProfileId2 <= 0)
                        {
                            model.InstallDeliveryProfileId2 = user.ProfileId;
                        }
                        else if (model.InstallDeliveryProfileId3 <= 0)
                        {
                            model.InstallDeliveryProfileId3 = user.ProfileId;
                        }
                    }

                    // Admin
                    if (user.Position == 5)
                    {
                        if (model.AdminProfileId1 <= 0)
                        {
                            model.AdminProfileId1 = user.ProfileId;
                        }
                        else if (model.AdminProfileId2 <= 0)
                        {
                            model.AdminProfileId2 = user.ProfileId;
                        }
                        else if (model.AdminProfileId3 <= 0)
                        {
                            model.AdminProfileId3 = user.ProfileId;
                        }
                    }

                    // Outsite Lead
                    if (user.Position == 6)
                    {
                        if (model.OsProfileId1 <= 0)
                        {
                            model.OsProfileId1 = user.ProfileId;
                        }
                        else if (model.OsProfileId2 <= 0)
                        {
                            model.OsProfileId2 = user.ProfileId;
                        }
                        else if (model.OsProfileId3 <= 0)
                        {
                            model.OsProfileId3 = user.ProfileId;
                        }
                    }
                }
            }

            return(model);
        }
Пример #11
0
        public void UpdatePo(PoDetailViewModel model)
        {
            // PO
            IRepository <Txn_PO> repoPo = _unitOfWork.GetRepository <Txn_PO>();
            Txn_PO po = repoPo.GetQueryable(o => o.PoId == model.PoId).FirstOrDefault();

            if (po != null)
            {
                po.PoNumber        = model.PoNumber;
                po.PoDate          = model.PoDate;
                po.PoFilePath      = model.PoFilePath;
                po.InvoiceFilePath = model.InvoiceFilePath;
                po.CustomerName    = model.CustomerName;
                repoPo.Update(po);
            }

            // PO Detail
            IRepository <Txn_PODetail> repoPoDetail = _unitOfWork.GetRepository <Txn_PODetail>();
            Txn_PODetail poDetail = repoPoDetail.GetQueryable(o => o.PoDetailId == model.PoDetailId).FirstOrDefault();

            if (poDetail != null)
            {
                //poDetail.PoId = model.PoId;
                poDetail.ProductName        = model.ProductName;
                poDetail.ProductBrand       = model.ProductBrand;
                poDetail.ProductType        = model.ProductType;
                poDetail.PricePerUnit       = model.PricePerUnit;
                poDetail.ActualPricePerUnit = model.ActualPricePerUnit;
                poDetail.Amount             = model.Amount;
                poDetail.TotalPrice         = model.TotalPrice;
                poDetail.ActualTotalPrice   = model.ActualTotalPrice;
                poDetail.Tax = model.Tax;
                poDetail.TransportLocation      = model.TransportLocation;
                poDetail.TransportFee           = model.TransportFee;
                poDetail.ParcelFee              = model.ParcelFee;
                poDetail.ServiceFee             = model.ServiceFee;
                poDetail.OtherFee               = model.OtherFee;
                poDetail.CustomerLead           = model.CustomerLead;
                poDetail.CustomerLeadPercentage = model.CustomerLeadPercentage;
                poDetail.TotalCost              = model.TotalCost;
                poDetail.Profit           = model.Profit;
                poDetail.ProfitPercentage = model.ProfitPercentage;
                poDetail.Remark           = model.Remark;
                repoPoDetail.Update(poDetail);
            }

            // Commission
            IRepository <Txn_Commission> repoCommission = _unitOfWork.GetRepository <Txn_Commission>();
            Txn_Commission commission = repoCommission.GetQueryable(o => o.PoDetailId == model.PoDetailId).FirstOrDefault();

            if (commission != null)
            {
                commission.TotalCommission      = model.Commission.TotalCommission;
                commission.CommissionSales      = model.Commission.CommissionSales;
                commission.CommissionPM         = model.Commission.CommissionPM;
                commission.CommissionApp        = model.Commission.CommissionApp;
                commission.CommissionInstall    = model.Commission.CommissionInstall;
                commission.CommissionAdmin      = model.Commission.CommissionAdmin;
                commission.CommissionOutside    = model.Commission.CommissionOutside;
                commission.ConclusionCommission = model.Commission.ConclusionCommission;
                commission.AuditCommission      = model.Commission.AuditCommission;
                repoCommission.Update(commission);
            }

            // CommissionDetail
            IRepository <Txn_CommissionDetail> repoCommissionDetail = _unitOfWork.GetRepository <Txn_CommissionDetail>();
            List <Txn_CommissionDetail>        commissionDetailList = repoCommissionDetail.GetQueryable(o => o.PoDetailId == model.PoDetailId).ToList();

            foreach (Txn_CommissionDetail record in commissionDetailList)
            {
                repoCommissionDetail.Delete(record);
            }
            List <Txn_CommissionDetail> commissionDetail = MappingPoDetailViewModelToCommissionDetail(model);

            _unitOfWork.GetRepository <Txn_CommissionDetail>().Insert(commissionDetail);


            // Commit transaction
            _unitOfWork.Execute();
        }