Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        private void UpdatePrices()
        {
            var cwUpdateBjt = new CwCreateUpdateBudget(api, 1);

#if !SILVERLIGHT
            cwUpdateBjt.DialogTableId = 2000000073;
#endif

            cwUpdateBjt.Closed += async delegate
            {
                if (cwUpdateBjt.DialogResult == true)
                {
                    DateTime dFromDateUpd   = CwCreateUpdateBudget.FromDate;
                    DateTime dToDateUpd     = CwCreateUpdateBudget.ToDate;
                    string   dEmplNumber    = CwCreateUpdateBudget.Employee;
                    string   dProject       = CwCreateUpdateBudget.Project;
                    string   dBudgetGroup   = CwCreateUpdateBudget.Group;
                    string   dBudgetComment = CwCreateUpdateBudget.Comment;

                    if (string.IsNullOrEmpty(CwCreateUpdateBudget.Group))
                    {
                        UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("BudgetGroup")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK);
                        return;
                    }

                    if (dFromDateUpd == DateTime.MinValue)
                    {
                        UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("FromDate")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK);
                        return;
                    }

                    if (dToDateUpd == DateTime.MinValue)
                    {
                        UnicontaMessageBox.Show(FieldCannotBeEmpty(Uniconta.ClientTools.Localization.lookup("ToDate")), Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.OK);
                        return;
                    }

                    var master = new List <UnicontaBaseEntity>();
                    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;
                    }

                    master.Add(budgetGrp);

                    busyIndicator.IsBusy = true;


                    if (!string.IsNullOrEmpty(dEmplNumber))
                    {
                        master.Add(employeeCache.Get(dEmplNumber));
                    }

                    if (!string.IsNullOrEmpty(dProject))
                    {
                        master.Add(projectCache.Get(dProject));
                    }

                    List <PropValuePair> pairTrans = new List <PropValuePair>();
                    pairTrans.Add(PropValuePair.GenereteWhereElements(nameof(ProjectBudgetLineClient._Date), typeof(DateTime), String.Format("{0:d}..{1:d}", dFromDateUpd, dToDateUpd)));

                    var empPriceLst = await api.Query <EmpPayrollCategoryEmployeeClient>(master, pairTrans);

                    var budgetLineLst = await api.Query <ProjectBudgetLineClient>(master, pairTrans);

                    var cntUpdate = 0;
                    var tmHelper  = new TMJournalLineHelper(api);
                    foreach (var rec in budgetLineLst)
                    {
                        cntUpdate++;
                        var prices = tmHelper.GetEmplPrice(empPriceLst, payrollCache, projGroupCache, employeeCache?.Get(rec._Employee), projectCache.Get(rec._Project), rec._Date, rec._PayrollCategory);
                        rec._CostPrice  = prices.Item1;
                        rec._SalesPrice = prices.Item2;
                        rec._Text       = string.Concat("(", TMJournalLineHelper.GetTimeStamp(), ") ", Uniconta.ClientTools.Localization.lookup("PriceUpdate"));
                    }

                    ErrorCodes res;
                    if (cntUpdate > 0)
                    {
                        res = await api.Update(budgetLineLst);
                    }

                    busyIndicator.IsBusy = false;

                    UnicontaMessageBox.Show(string.Format(Uniconta.ClientTools.Localization.lookup("RecordsUpdated"), cntUpdate, string.Empty), Uniconta.ClientTools.Localization.lookup("Information"), MessageBoxButton.OK);
                }
            };
            cwUpdateBjt.Show();
        }