Пример #1
0
        private static void CheckBudget(TblContractHeader newRow, TblContractHeader oldRow, List <Tuple <int, int> > budgetAmount,
                                        List <Tuple <int?, decimal> > contractsAmount)
        {
            foreach (var item in budgetAmount)
            {
                var     contractsTotal = contractsAmount.Where(c => c.Item1 == item.Item1).Sum(c => c.Item2);
                var     newRowTotal    = newRow.TblContractDetails.Where(c => c.TblLkpBrandSection == item.Item1).Sum(c => c.Total);
                decimal oldRowTotal    = 0;
                if (oldRow != null)
                {
                    oldRowTotal = oldRow.TblContractDetails.Where(c => c.TblLkpBrandSection == item.Item1).Sum(c => c.Total);
                }

                if (oldRow != null)
                {
                    if (item.Item2 < (contractsTotal + newRowTotal - oldRowTotal))
                    {
                        throw new InvalidOperationException(string.Format(
                                                                @"Amount must be within brand section budget brand section budget : {0} used : {1} required : {2}",
                                                                item.Item2.ToString("0.#"), contractsTotal.ToString("0.#"), (newRowTotal - oldRowTotal).ToString("0.#")));
                    }
                    else
                    if (item.Item2 < (contractsTotal + newRowTotal))
                    {
                        throw new InvalidOperationException(string.Format(
                                                                @"Amount must be within brand section budget brand section budget : {0} used : {1} required : {2}",
                                                                item.Item2.ToString("0.#"), contractsTotal.ToString("0.#"), newRowTotal.ToString("0.#")));
                    }
                }
            }
        }
Пример #2
0
        private int DeleteContractHeader(TblContractHeader row)
        {
            using (var context = new WorkFlowManagerDBEntities())
            {
                var oldRow = (from e in context.TblContractHeaders
                              where e.Iserial == row.Iserial
                              select e).SingleOrDefault();
                if (oldRow != null)
                {
                    context.DeleteObject(oldRow);
                }

                context.SaveChanges();
            }
            return(row.Iserial);
        }
Пример #3
0
        private static List <Tuple <int, int> > CalculateBudget(TblContractHeader newRow, WorkFlowManagerDBEntities context)
        {
            List <Tuple <int, int> > budgetAmount = new List <Tuple <int, int> >();
            var newSeason    = context.TblLkpSeasons.FirstOrDefault(s => s.Iserial == newRow.TblLkpSeason);
            var budgetSeason = context.TblLkpSeasons.FirstOrDefault(s =>
                                                                    s.ShortCode == newSeason.ShortCode && s.IsMaster == true);
            var sections = newRow.TblContractDetails.Select(d => d.TblLkpBrandSection ?? 0).Distinct();

            budgetAmount = context.TblPurchaseBudgetDetails.Where(r =>
                                                                  r.Brand == newRow.BrandCode && r.TblLkpSeason == budgetSeason.Iserial &&
                                                                  sections.Any(d => d == r.TblLkpBrandSection)).ToList()
                           .Select(r => new Tuple <int, int>(r.TblLkpBrandSection, r.Amount)).ToList();
            //if (budget != null)
            //    budgetAmount = budget.Amount;
            return(budgetAmount);
        }
Пример #4
0
        public SearchContractHeaderViewModel()
        {
            if (!IsDesignTime)
            {
                Glclient = new GlServiceClient();

                MainRowList     = new ObservableCollection <TblContractHeader>();
                SelectedMainRow = new TblContractHeader();

                Glclient.GetTblContractHeaderForChequeCompleted += (s, sv) =>
                {
                    foreach (var row in sv.Result.OrderByDescending(w => w.Iserial))
                    {
                        MainRowList.Add(row);
                    }
                    Loading = false;
                };
            }
        }
Пример #5
0
        private TblContractHeader UpdateOrInsertContractHeader(TblContractHeader newRow, int index, int userIserial, out int outindex, string company)
        {
            throw new Exception("Save Contracts On Stitch");

            outindex = index;
            using (var context = new WorkFlowManagerDBEntities())
            {
                try
                {
                    newRow.TblRetailOrderProductionType1 = null;
                    newRow.TblSubContractor1             = null;
                    newRow.TblLkpSeason1       = null;
                    newRow.TblLkpBrandSection1 = null;
                    var brandCode = newRow.BrandCode;
                    var report    = context.TblBrandContractReports.FirstOrDefault(bcr => bcr.BrandCode == brandCode);
                    if (report != null)
                    {
                        newRow.ContractReport = report.ReportName;
                    }
                    var oldRow = context.TblContractHeaders.FirstOrDefault(th => th.Iserial == newRow.Iserial);
                    newRow.Amount = newRow.TblContractDetails.Sum(r => r.Total);



                    var budgetAmount = CalculateBudget(newRow, context);

                    var contractsAmount = context.TblContractDetails
                                          .Include(nameof(TblContractDetail.TblContractHeader1)).Where(r =>
                                                                                                       r.TblContractHeader1.BrandCode == newRow.BrandCode && r.TblLkpBrandSection == newRow.TblLkpBrandSection &&
                                                                                                       r.TblContractHeader1.TblLkpSeason == newRow.TblLkpSeason).ToList()
                                          .Select(r => new Tuple <int?, decimal>(r.TblLkpBrandSection,
                                                                                 r.TblContractHeader1.TblRetailOrderProductionType == 1 ?
                                                                                 (r.Qty * r.Cost) : r.TblContractHeader1.TblRetailOrderProductionType == 2 ?
                                                                                 (r.Qty * (r.Cost - r.AccCost)) : r.TblContractHeader1.TblRetailOrderProductionType == 3 ?
                                                                                 (r.Qty * (r.Cost - r.AccCost - r.FabricCost)) : (r.Qty * r.Cost)
                                                                                 )).GroupBy(r => r.Item1).Select(r => new Tuple <int?, decimal>(r.Key, r.Sum(d => d.Item2))).ToList();

                    var tblContractDetail = new List <TblContractDetail>();
                    newRow.TblContractDetails.ToArray().ForEach(d => tblContractDetail.Add(d));
                    if (oldRow != null)// الهيدر موجود قبل كده
                    {
                        CheckBudget(newRow, oldRow, budgetAmount, contractsAmount);

                        if (!oldRow.Approved && newRow.Approved)// كده لسه معموله ابروف
                        {
                            newRow.ApproveDate = DateTime.Now;
                            newRow.ApprovedBy  = userIserial;
                        }
                        foreach (var item in newRow.TblContractDetails.ToArray())
                        {
                            // هشوف بقى الى اتعدل والجديد
                            int temp;
                            //headeriserial = item.TblContractHeader;
                            item.TblContractHeader1 = null;
                            item.TblContractHeader  = newRow.Iserial;
                            UpdateOrInsertContractDetail(item, userIserial, 1, out temp);
                            item.TblContractHeader1Reference = null;
                        }
                        foreach (var item in newRow.TblContractPaymentByPeriods.ToArray())
                        {
                            // هشوف بقى الى اتعدل والجديد
                            int temp;
                            item.TblContractHeader1 = null;
                            item.TblContractHeader  = newRow.Iserial;
                            UpdateOrInsertContractPaymentDetail(item, userIserial, 1, out temp);
                            item.TblContractHeader1Reference = null;
                        }
                        //context.Entry(oldRow).CurrentValues.SetValues(newRow);
                        var result = SharedOperation.GenericUpdate(oldRow, newRow, context);
                        if (result.Count() > 0)
                        {
                            newRow.LastChangeUser = userIserial;
                            newRow.LastChangeDate = DateTime.Now;
                        }
                    }
                    else// الهيدر ده جديد
                    {
                        CheckBudget(newRow, null, budgetAmount, contractsAmount);

                        var seqTo  = 443;//context.tblChainSetups.FirstOrDefault(s => s.sGlobalSettingCode == "ContractApproveEmailTo");
                        var seqRow = context.TblSequenceProductions.FirstOrDefault(x => x.Iserial == seqTo);
                        newRow.Code = SharedOperation.HandelSequence(seqRow);
                        if (newRow.Approved)// كده معموله ابروف
                        {
                            newRow.ApproveDate = DateTime.Now;
                            newRow.ApprovedBy  = userIserial;
                        }
                        newRow.TblContractDetails.ForEach(cd => {
                            cd.TblColor1 = null; cd.TblSalesOrderColor1 = null;
                            cd.CreatedBy = userIserial; cd.CreationDate = DateTime.Now;
                        });
                        newRow.TblContractPaymentByPeriods.ForEach(cd => {
                            cd.CreatedBy = userIserial; cd.CreationDate = DateTime.Now;
                        });

                        if (newRow.TblContractDetails.FirstOrDefault() != null)
                        {
                            newRow.TblLkpBrandSection = newRow.TblContractDetails.FirstOrDefault().TblLkpBrandSection;
                        }

                        //   newRow.TblLkpBrandSection = null;
                        newRow.CreatedBy      = userIserial;
                        newRow.CreationDate   = DateTime.Now;
                        newRow.LastChangeDate = DateTime.Now;
                        newRow.LastChangeUser = userIserial;

                        context.TblContractHeaders.AddObject(newRow);
                    }
                    context.SaveChanges();
                }
                catch (Exception ex) { throw ex; }
                TblContractHeader rowTemp = newRow.Clone();
                try
                {
                    if (newRow.Approved)
                    {
                        try
                        {
                            var emailTo      = context.tblChainSetups.FirstOrDefault(s => s.sGlobalSettingCode == "ContractApproveEmailTo");
                            var emailFrom    = context.tblChainSetups.FirstOrDefault(s => s.sGlobalSettingCode == "ContractApproveEmailFrom");
                            var emailBody    = context.tblChainSetups.FirstOrDefault(s => s.sGlobalSettingCode == "ContractApproveEmailBody");
                            var emailSubject = context.tblChainSetups.FirstOrDefault(s => s.sGlobalSettingCode == "ContractApproveEmailSubject");
                            if (emailTo != null && emailFrom != null && emailBody != null &&
                                emailSubject != null &&
                                //!emailTo.sSetupValue.Split(';').Any(e => !SharedOperation.IsValidEmail(e)) &&
                                SharedOperation.IsValidEmail(emailFrom.sSetupValue))
                            {
                                string storeMail = emailTo.sSetupValue;
                                SharedOperation.SendEmail(null, emailFrom.sSetupValue,
                                                          emailTo.sSetupValue.Split(';').ToList(), string.Format(emailSubject.sSetupValue,
                                                                                                                 newRow.Code), string.Format(emailBody.sSetupValue, newRow.Code));
                            }
                        }
                        catch (Exception ex) { }
                    }
                    foreach (var item in GetContractDetail(0, int.MaxValue, newRow.Iserial))
                    {
                        var tblContractDetail = item.Clone();
                        tblContractDetail.TblLkpBrandSection1 = item.TblLkpBrandSection1;
                        tblContractDetail.TblSalesOrderColor1 = item.TblSalesOrderColor1;
                        rowTemp.TblContractDetails.Add(tblContractDetail);
                    }
                    foreach (var item in GetContractPaymentDetail(0, int.MaxValue, newRow.Iserial))
                    {
                        var tblContractPaymentByPeriod = item.Clone();
                        rowTemp.TblContractPaymentByPeriods.Add(tblContractPaymentByPeriod);
                    }
                    using (var db = new ccnewEntities(SharedOperation.GetSqlConnectionString(company)))
                    {
                        rowTemp.Supplier = db.TBLsuppliers.FirstOrDefault(s => s.Iserial == newRow.SupplierIserial);
                        rowTemp.Currency = db.TblCurrencyTests.FirstOrDefault(c => c.Iserial == rowTemp.TblCurrency);
                    }
                }
                catch { }
                return(rowTemp);
            }
        }