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; }
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); }
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 !!"); //} }
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()); }
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(); }