Example #1
0
        public static List<dynamic> ExpenseUpdate(DateTime date, float vat, JsonArrayObjects jsonAllocation, JsonArrayObjects jsonExpense)
        {
            DictionaryToDynamicMapper mapperAllocation = new DictionaryToDynamicMapper("InvoiceAllocation");
            var allocation = mapperAllocation.Map(jsonAllocation.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value)));

            var expenses = jsonExpense != null ?
                (new DictionaryToDynamicMapper("InvoiceExpense")).Map(jsonExpense.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value))).ToList() :
                new List<dynamic>();

            #region Capex
            expenses.ForEach(c => c.AmountCAPEX = 0);

            var accounts = DynamicRepository.GetByView("AccountCode", FilterCriteriaSet.And.In(
                allocation.Where(c=>c.capexopex == 0).Select(c => (Guid)c.AccountCodeId).Distinct().ToList(), "Id"));

            foreach (dynamic item in allocation.Where(c => c.CapexOpex == 0))
            {
                int usefulLife = accounts.Where(c => c.Id == item.AccountCodeId).Select(c => c.UsefulLife).FirstOrDefault() ?? 0;
                ExpenseUpdateAddCapex(expenses, item.Amount, vat, date, usefulLife);
            }

            ExpenseRound(expenses, allocation, true);
            #endregion

            #region Opex

            decimal amountOpexAllocation = allocation.Where(c => c.CapexOpex == 1).Sum(c => (decimal)c.Amount);
            ExpenseUpdateSyncOpex(expenses, amountOpexAllocation, date);
            ExpenseRound(expenses, allocation, false);

            #endregion

            expenses.RemoveAll(c => c.Amount == 0 && c.AmountCAPEX == 0);

            return expenses;
        }
Example #2
0
        public static List <dynamic> ExpenseUpdate(DateTime date, float vat, JsonArrayObjects jsonAllocation, JsonArrayObjects jsonExpense)
        {
            DictionaryToDynamicMapper mapperAllocation = new DictionaryToDynamicMapper("InvoiceAllocation");
            var allocation = mapperAllocation.Map(jsonAllocation.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value)));

            var expenses = jsonExpense != null ?
                           (new DictionaryToDynamicMapper("InvoiceExpense")).Map(jsonExpense.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value))).ToList() :
                           new List <dynamic>();

            #region Capex
            expenses.ForEach(c => c.AmountCAPEX = 0);

            var accounts = DynamicRepository.GetByView("AccountCode", FilterCriteriaSet.And.In(
                                                           allocation.Where(c => c.capexopex == 0).Select(c => (Guid)c.AccountCodeId).Distinct().ToList(), "Id"));

            foreach (dynamic item in allocation.Where(c => c.CapexOpex == 0))
            {
                int usefulLife = accounts.Where(c => c.Id == item.AccountCodeId).Select(c => c.UsefulLife).FirstOrDefault() ?? 0;
                ExpenseUpdateAddCapex(expenses, item.Amount, vat, date, usefulLife);
            }

            ExpenseRound(expenses, allocation, true);
            #endregion

            #region Opex

            decimal amountOpexAllocation = allocation.Where(c => c.CapexOpex == 1).Sum(c => (decimal)c.Amount);
            ExpenseUpdateSyncOpex(expenses, amountOpexAllocation, date);
            ExpenseRound(expenses, allocation, false);

            #endregion

            expenses.RemoveAll(c => c.Amount == 0 && c.AmountCAPEX == 0);

            return(expenses);
        }
Example #3
0
        private Contact MapToEntity(Dictionary <string, object> model, Contact contact, IEnumerable <AddedColumn> AddedColumns)
        {
            //try
            //{
            List <AddedColumn> ContactAddedColumns = AddedColumns.Where(t => t.EntityName == typeof(Contact).Name).ToList();
            List <AddedColumn> CompanyAddedColumns = AddedColumns.Where(t => t.EntityName == typeof(Company).Name).ToList();

            contact.Name = model["Name"].ToString();

            foreach (AddedColumn column in ContactAddedColumns)
            {
                try
                {
                    int         index       = contact.AddedColumns.IndexOfName(column.ColumnName);
                    BsonElement bsonElement = new BsonElement(column.ColumnName, (BsonValue)model[column.ColumnName]);
                    if (index >= 0)
                    {
                        contact.AddedColumns.SetElement(index, bsonElement);
                    }
                    else
                    {
                        contact.AddedColumns.Add(bsonElement);
                    }
                }
                catch { }
            }

            JsonArrayObjects companyList = JsonObject.ParseArray(model["Company"].ToString());

            if (companyList.GroupBy(n => n["Name"]).Any(c => c.Count() > 1))
            {
                throw new Exception("Company name field must be unique!");
            }

            //List<Dictionary<string, object>> companies = (List<Dictionary<string, object>>)model["Company"];
            //remove deleted companies
            List <int> CompanyIds = companyList.Select(t => int.Parse(t["ID"] == null ? "0" : t["ID"].ToString())).Distinct().ToList();

            contact.Company.RemoveAll(t => !CompanyIds.Any(c => c == t.ID));

            foreach (JsonObject element in companyList.AsEnumerable())
            {
                Company company;
                company = contact.Company.Where((t, i) => t.ID == int.Parse(element["ID"].ToString())).FirstOrDefault();
                //Handle Added Companies
                if (company == null)
                {
                    company    = new Company();
                    company.ID = _sequence.GetNextSequenceValue(typeof(Company).Name);
                }
                else
                {
                    contact.Company.Remove(company);
                }

                company.Name = (string)element["Name"];
                company.NumberOfEmployees = int.Parse(element["NumberOfEmployees"].ToString());

                foreach (AddedColumn column in CompanyAddedColumns)
                {
                    try
                    {
                        int         index       = company.AddedColumns.IndexOfName(column.ColumnName);
                        BsonElement bsonElement = new BsonElement(column.ColumnName, (BsonValue)element[column.ColumnName]);
                        if (index >= 0)
                        {
                            company.AddedColumns.SetElement(index, bsonElement);
                        }
                        else
                        {
                            company.AddedColumns.Add(bsonElement);
                        }
                    }
                    catch { }
                }
                contact.Company.Add(company);
            }
            return(contact);
            //}
            //catch (Exception ex)
            //{
            //    throw new Exception("Error mapping contact company fields !!");
            //}
        }
Example #4
0
        public static IDictionary <string, object>[] GetAllocations(JsonArrayObjects jsonInvoiceBudgetItems)
        {
            List <dynamic> res = new List <dynamic>();

            var invoiceBudgetItems = jsonInvoiceBudgetItems != null ?
                                     (new DictionaryToDynamicMapper("InvoiceBudgetItem")).Map(jsonInvoiceBudgetItems.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value))).ToList() :
                                     new List <dynamic>();

            if (invoiceBudgetItems.Count > 0)
            {
                var budgetItemIds = invoiceBudgetItems.Select(c => (Guid)c.BudgetItemId).ToList();

                var budgetItems           = DynamicRepository.GetByView("BudgetItem", FilterCriteriaSet.And.In(budgetItemIds, "Id"));
                var budgetItemAllocations = DynamicRepository.GetByView("BudgetItemAllocation", FilterCriteriaSet.And.In(budgetItemIds, "BudgetItemId"));

                var sum = invoiceBudgetItems.Sum(c => (double)c.Amount);

                foreach (dynamic bi in budgetItems)
                {
                    var ibiSum = invoiceBudgetItems.Where(c => c.BudgetItemId == bi.Id).Sum(c => (double)c.Amount);

                    var k = sum != 0 ? (double)ibiSum / sum : 0;
                    foreach (dynamic bia in budgetItemAllocations.Where(c => c.BudgetItemId == bi.Id))
                    {
                        var invoiceAllocation = DynamicRepository.NewByView("InvoiceAllocation");
                        invoiceAllocation.CostCenterId        = bia.CostCenterId;
                        invoiceAllocation.CostCenterId_Code   = bia.CostCenterId_Code;
                        invoiceAllocation.LegalEntityId       = bia.LegalEntityId;
                        invoiceAllocation.LegalEntityId_Name  = bia.LegalEntityId_Name;
                        invoiceAllocation.Weight              = (double)bia.Weight * k;
                        invoiceAllocation.AccountCodeId       = bi.AccountCodeId;
                        invoiceAllocation.AccountCodeId_Name  = bi.AccountCodeId_Name;
                        invoiceAllocation.DetailedProjectCode = bi.DetailedProjectCode;
                        invoiceAllocation.ProjectId           = bi.ProjectId;
                        invoiceAllocation.ProjectId_Code      = bi.ProjectId_Code;
                        invoiceAllocation.ProjectId_Name      = bi.ProjectId_Name;
                        invoiceAllocation.CAPEXOPEX           = bi.CAPEXOPEX;
                        res.Add(invoiceAllocation);
                    }
                }

                for (int i = 0; i < res.Count - 1; i++)
                {
                    var item = res[i];
                    for (int j = i + 1; j < res.Count; j++)
                    {
                        var item2 = res[j];
                        if (item.CostCenterId == item2.CostCenterId &&
                            item.LegalEntityId == item2.LegalEntityId &&
                            item.AccountCodeId == item2.AccountCodeId &&
                            item.ProjectId == item2.ProjectId &&
                            item.DetailedProjectCode == item2.DetailedProjectCode &&
                            item.CAPEXOPEX == item2.CAPEXOPEX)
                        {
                            item.Weight += item2.Weight;
                            res.RemoveAt(j);
                            j--;
                        }
                    }
                }
            }

            foreach (var item in res)
            {
                item.Weight = Math.Round((double)item.Weight, 2);
            }

            var firstItem = res.OrderByDescending(c => (double)c.Weight).FirstOrDefault();

            if (firstItem != null)
            {
                var w = res.Sum(c => (double)c.Weight);
                firstItem.Weight += 100 - Math.Round(w, 2);
            }

            return(res.Select(c => (c as DynamicEntity).Dictionary).ToArray());
        }
Example #5
0
        public static IDictionary<string, object>[] GetAllocations(JsonArrayObjects jsonInvoiceBudgetItems)
        {
            List<dynamic> res = new List<dynamic>();

            var invoiceBudgetItems = jsonInvoiceBudgetItems != null ?
               (new DictionaryToDynamicMapper("InvoiceBudgetItem")).Map(jsonInvoiceBudgetItems.Select(c => c.ToDictionary(k => k.Key, k => (object)k.Value))).ToList() :
               new List<dynamic>();

            if (invoiceBudgetItems.Count > 0)
            {
                var budgetItemIds = invoiceBudgetItems.Select(c=> (Guid)c.BudgetItemId).ToList();

                var budgetItems = DynamicRepository.GetByView("BudgetItem", FilterCriteriaSet.And.In(budgetItemIds, "Id"));
                var budgetItemAllocations = DynamicRepository.GetByView("BudgetItemAllocation", FilterCriteriaSet.And.In(budgetItemIds, "BudgetItemId"));

                var sum = invoiceBudgetItems.Sum(c => (double)c.Amount);

                foreach (dynamic bi in budgetItems)
                {
                    var ibiSum = invoiceBudgetItems.Where(c=>c.BudgetItemId == bi.Id).Sum(c => (double)c.Amount);

                    var k = sum != 0 ? (double)ibiSum / sum : 0;
                    foreach (dynamic bia in budgetItemAllocations.Where(c => c.BudgetItemId == bi.Id))
                    {
                        var invoiceAllocation = DynamicRepository.NewByView("InvoiceAllocation");
                        invoiceAllocation.CostCenterId = bia.CostCenterId;
                        invoiceAllocation.CostCenterId_Code = bia.CostCenterId_Code;
                        invoiceAllocation.LegalEntityId = bia.LegalEntityId;
                        invoiceAllocation.LegalEntityId_Name = bia.LegalEntityId_Name;
                        invoiceAllocation.Weight = (double)bia.Weight * k;
                        invoiceAllocation.AccountCodeId = bi.AccountCodeId;
                        invoiceAllocation.AccountCodeId_Name = bi.AccountCodeId_Name;
                        invoiceAllocation.DetailedProjectCode = bi.DetailedProjectCode;
                        invoiceAllocation.ProjectId = bi.ProjectId;
                        invoiceAllocation.ProjectId_Code = bi.ProjectId_Code;
                        invoiceAllocation.ProjectId_Name = bi.ProjectId_Name;
                        invoiceAllocation.CAPEXOPEX = bi.CAPEXOPEX;
                        res.Add(invoiceAllocation);
                    }
                }

                for (int i = 0; i < res.Count - 1; i++)
                {
                    var item = res[i];
                    for (int j = i + 1; j < res.Count; j++)
                    {
                        var item2 = res[j];
                        if (item.CostCenterId == item2.CostCenterId &&
                            item.LegalEntityId == item2.LegalEntityId &&
                            item.AccountCodeId == item2.AccountCodeId &&
                            item.ProjectId == item2.ProjectId &&
                            item.DetailedProjectCode == item2.DetailedProjectCode &&
                            item.CAPEXOPEX == item2.CAPEXOPEX)
                        {
                            item.Weight += item2.Weight;
                            res.RemoveAt(j);
                            j--;
                        }
                    }
                }
            }

            foreach (var item in res)
                item.Weight = Math.Round((double)item.Weight, 2);

            var firstItem = res.OrderByDescending(c => (double)c.Weight).FirstOrDefault();
            if (firstItem != null)
            {
                var w = res.Sum(c => (double)c.Weight);
                firstItem.Weight += 100 - Math.Round(w, 2);
            }

            return res.Select(c => (c as DynamicEntity).Dictionary).ToArray();
        }