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.#"))); } } } }
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); }
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); }
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; }; } }
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); } }