protected override Task <ErrorCodes> saveGrid() { var t = base.saveGrid(); if (master != null) { Uniconta.DataModel.Employee emp = master as Uniconta.DataModel.Employee; if (emp != null) { emp.EmpPrices = null; } else { Uniconta.DataModel.EmpPayrollCategory pay = master as Uniconta.DataModel.EmpPayrollCategory; if (pay != null) { pay.Rates = null; } } } return(t); }
public async Task <List <TMJournalLineError> > ValidateLines(List <TMJournalLineClient> lines, DateTime startDate, DateTime endDate, Uniconta.DataModel.Employee employee) { var t = LoadingTask; if (t != null && !t.IsCompleted) { await t; } checkErrors = new List <TMJournalLineError>(); this.employee = employee; var approveDate = employee._TMApproveDate; this.startDate = approveDate >= startDate?approveDate.AddDays(1) : startDate; this.endDate = endDate; string lastProjNo = null; string lastPayroll = null; string lastTaskId = null; foreach (var rec in lines) { rec.ErrorInfo = string.Empty; err = false; if (lastPayroll != rec.PayrollCategory) { lastPayroll = rec.PayrollCategory; payrollCat = (EmpPayrollCategory)payrollCategoryCache.Get(lastPayroll); prCategory = (Uniconta.DataModel.PrCategory)prCategoryCache.Get(payrollCat?._PrCategory); } if (lastProjNo != rec._Project) { lastProjNo = rec._Project; proj = (Uniconta.DataModel.Project)projectCache.Get(lastProjNo); projGroup = (Uniconta.DataModel.ProjectGroup)projectGrpCache.Get(proj?._Group); if (proj != null && comp.ProjectTask && proj.Tasks == null) { await proj.LoadTasks(api); } } if (rec._Project != null && rec._Task != null && lastTaskId != string.Concat(rec._Project, rec._Task)) { lastTaskId = string.Concat(rec._Project, rec._Task); prTask = proj.Tasks != null?proj.Tasks.FirstOrDefault(s => s.Task == rec.Task) : null; } ValidateGeneral(rec); ValidateProject(rec); ValidateTask(rec); ValidateProjectCategory(rec); ValidatePrice(rec); if (!err) { rec.ErrorInfo = VALIDATE_OK; } } return(checkErrors); }
private void CreateBudget() { var cwCreateBjt = new CwCreateUpdateBudget(api); #if !SILVERLIGHT cwCreateBjt.DialogTableId = 2000000074; #endif cwCreateBjt.Closed += async delegate { if (cwCreateBjt.DialogResult == true) { int budgetMethod = 0; DateTime dFromDate = CwCreateUpdateBudget.FromDate; DateTime dToDate = CwCreateUpdateBudget.ToDate; string dEmplNumber = CwCreateUpdateBudget.Employee; string dProjectNumber = CwCreateUpdateBudget.Project; string dBudgetGroup = CwCreateUpdateBudget.Group; string dBudgetComment = CwCreateUpdateBudget.Comment; dBudgetComment = string.IsNullOrEmpty(dBudgetComment) ? Uniconta.ClientTools.Localization.lookup("Budget") : dBudgetComment; // if (string.IsNullOrEmpty(CwCreateUpdateBudget.Group)) { UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("BudgetGroup")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK); return; } if (dFromDate == DateTime.MinValue) { UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("FromDate")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK); return; } if (dToDate == DateTime.MinValue) { UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("ToDate")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK); return; } ErrorCodes res; var master = new List <UnicontaBaseEntity>(); //Delete Budget Lines >> ProjectBudgetGroup budgetGrp = budgetGroupCache.Get(dBudgetGroup); if (budgetGrp._Blocked) { UnicontaMessageBox.Show(string.Format(Uniconta.ClientTools.Localization.lookup("IsBlockedOBJ"), Uniconta.ClientTools.Localization.lookup("Budget")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK); return; } busyIndicator.IsBusy = true; master.Add(budgetGrp); if (!string.IsNullOrEmpty(dEmplNumber)) { master.Add(employeeCache.Get(dEmplNumber)); } if (!string.IsNullOrEmpty(dProjectNumber)) { master.Add(projectCache.Get(dProjectNumber)); } List <PropValuePair> pairLine = new List <PropValuePair>(); pairLine.Add(PropValuePair.GenereteWhereElements(nameof(ProjectBudgetLine._Date), typeof(DateTime), String.Format("{0:d}..{1:d}", dFromDate, dToDate))); var projBudgetLineDelete = await api.Query <ProjectBudgetLine>(master, pairLine); if (projBudgetLineDelete.Length != 0) { res = await api.Delete(projBudgetLineDelete); } //Delete Budget Lines << List <PropValuePair> pairBudget = new List <PropValuePair>(); pairBudget.Add(PropValuePair.GenereteWhereElements(nameof(ProjectBudget._Group), typeof(string), dBudgetGroup)); var projBudgetLst = await api.Query <ProjectBudget>(pairBudget); var dictProjBudget = new Dictionary <string, ProjectBudget>(); foreach (ProjectBudget rec in projBudgetLst) { ProjectBudget projBudget; bool hasValue = dictProjBudget.TryGetValue(string.Concat(rec._Project, dBudgetGroup), out projBudget); if (!hasValue) { dictProjBudget.Add(string.Concat(rec._Project, dBudgetGroup), rec); } } List <PropValuePair> filterTrans = new List <PropValuePair>(); filterTrans.Add(PropValuePair.GenereteWhereElements(nameof(ProjectTrans._Date), typeof(DateTime), String.Format("{0:d}..{1:d}", dFromDate.AddYears(-1), dToDate.AddYears(-1)))); var transTask = api.Query(new ProjectTransPivotClient(), master, filterTrans); var projTransLst = await transTask; var projTransLstEntity = new List <ProjectTransPivotClient>(); //string lastProj = null; string lastPrCat = null; string lastPayrollCat = null; //Uniconta.DataModel.ProjectGroup projGrp = null; Uniconta.DataModel.PrCategory prCat = null; Uniconta.DataModel.EmpPayrollCategory payrollCat = null; foreach (var x in projTransLst) { //if (lastProj != x._Project) //{ // lastProj = x._Project; // var proj = x.ProjectRef; // projGrp = projGroupCache.Get(proj._Group); //} if (lastPrCat != x._PrCategory) { lastPrCat = x._PrCategory; prCat = x.CategoryRef; } if (lastPayrollCat != x._PayrollCategory) { lastPayrollCat = x._PayrollCategory; payrollCat = x.PayrollCategoryRef; } if (prCat != null && payrollCat != null && prCat._CatType == CategoryType.Labour && payrollCat._Unit == ItemUnit.Hours && payrollCat._InternalType == InternalType.None) { projTransLstEntity.Add(x); } } if (projTransLstEntity == null) { busyIndicator.IsBusy = false; UnicontaMessageBox.Show(string.Format(Uniconta.ClientTools.Localization.lookup("RecordsUpdated"), 0, string.Empty), Uniconta.ClientTools.Localization.lookup("Information"), MessageBoxButton.OK); return; } //Only create budget project with transactions var insertLst = new List <UnicontaBaseEntity>(); var grpProject = projTransLstEntity.GroupBy(x => x._Project); foreach (var rec in grpProject) { ProjectBudget projBudget; bool hasValue = dictProjBudget.TryGetValue(string.Concat(rec.Key, dBudgetGroup), out projBudget); if (!hasValue) { insertLst.Add(new ProjectBudget() { _Project = rec.Key, _Group = dBudgetGroup, _Name = dBudgetComment, _Current = true }); } } if (insertLst.Count > 0) { res = await api.Insert(insertLst); //Create new Budget-Header } //Insert new header in dictionary for fast lookup foreach (ProjectBudget rec in insertLst) { ProjectBudget projBudget; bool hasValue = dictProjBudget.TryGetValue(string.Concat(rec._Project, dBudgetGroup), out projBudget); if (!hasValue) { dictProjBudget.Add(string.Concat(rec._Project, dBudgetGroup), rec); } } ProjectBudgetLineLocal projBudgetLine; var dictProjBudgetLine = new Dictionary <int, ProjectBudgetLineLocal>(); foreach (var trans in projTransLstEntity) { if (dictProjBudgetLine.TryGetValue(GetHashCode(trans, budgetMethod), out projBudgetLine)) { projBudgetLine._Qty += trans._Qty; projBudgetLine._CostTotal += trans.Cost; projBudgetLine._CostPrice = projBudgetLine._Qty != 0 ? Math.Round(projBudgetLine._CostTotal / projBudgetLine._Qty, 2) : 0; projBudgetLine._SalesTotal += trans.Sales; projBudgetLine._SalesPrice = projBudgetLine._Qty != 0 ? Math.Round(projBudgetLine._SalesTotal / projBudgetLine._Qty, 2) : 0; } else { ProjectBudget projBudget; bool hasValue = dictProjBudget.TryGetValue(string.Concat(trans._Project, dBudgetGroup), out projBudget); if (hasValue) { projBudgetLine = new ProjectBudgetLineLocal(); projBudgetLine.SetMaster(projBudget); projBudgetLine._Project = trans._Project; projBudgetLine._Qty = trans._Qty; projBudgetLine._CostTotal += trans.Cost; projBudgetLine._CostPrice = projBudgetLine._Qty != 0 ? Math.Round(projBudgetLine._CostTotal / projBudgetLine._Qty, 2) : 0; projBudgetLine._SalesTotal += trans.Sales; projBudgetLine._SalesPrice = projBudgetLine._Qty != 0 ? Math.Round(projBudgetLine._SalesTotal / projBudgetLine._Qty, 2) : 0; projBudgetLine._Date = GetDate(trans._Date, budgetMethod); projBudgetLine._Employee = trans._Employee; projBudgetLine._PayrollCategory = budgetMethod == 0 || budgetMethod == 1 ? trans._PayrollCategory : null; projBudgetLine._PrCategory = trans._PrCategory; projBudgetLine._Text = string.Concat("(", TMJournalLineHelper.GetTimeStamp(), ") ", Uniconta.ClientTools.Localization.lookup("Created")); dictProjBudgetLine.Add(GetHashCode(trans, budgetMethod), projBudgetLine); } } } if (dictProjBudgetLine.Count > 0) { res = await api.Insert(dictProjBudgetLine.Values); localMenu_OnItemClicked("RefreshGrid"); } busyIndicator.IsBusy = false; UnicontaMessageBox.Show(string.Format(Uniconta.ClientTools.Localization.lookup("RecordsUpdated"), dictProjBudgetLine.Count, string.Empty), Uniconta.ClientTools.Localization.lookup("Information"), MessageBoxButton.OK); } }; cwCreateBjt.Show(); }