public HttpResponseMessage Post(HttpRequestMessage request, ExpenseListViewCriteria criteria) { return(CreateHttpResponse(request, () => { HttpResponseMessage response = null; // Force params // Approved SyncStatusId criteria.SyncStatusId = 3; // Not exported criteria.Exported = 2; // GetAll criteria.Size = -1; SearchResultViewModel <ExpenseDto> expenseList = this.expenseAppService.Search(criteria); SearchResultViewModel <ExportExpenseDto> exportExpenseList = Mapper.Map <SearchResultViewModel <ExpenseDto>, SearchResultViewModel <ExportExpenseDto> >(expenseList); string connectionStringsConfigPath = HttpContext.Current.Server.MapPath("~/ConnectionStrings.config"); XElement doc = XElement.Load($"{connectionStringsConfigPath}"); string reportsContextConnectionString = doc.Descendants("add") .Where(x => (string)x.Attribute("name") == "ReportsContext") .Select(x => (string)x.Attribute("connectionString")) .FirstOrDefault(); using (SqlConnection connection = new SqlConnection(reportsContextConnectionString ?? throw new InvalidOperationException("No se pudo establecer la conexión a la base de datos."))) { const string ProviderAccountNumberQuery = @"SELECT CONVERT(int,PVMPRH_NROCTA) from PVMPRH where @ProveedorId = PVMPRH_NRODOC"; List <long> providersNotExported = new List <long>(); List <KeyValuePair <long, int> > existingProviders = new List <KeyValuePair <long, int> >(); long expensesExported = 0; long expensesNotExported = 0; DateTime CurrentDate = DateTime.Today; foreach (ExportExpenseDto expense in exportExpenseList.Results) { Int32 providerAccountNumber = 0; if (existingProviders.All(x => x.Key != expense.Provider.Cuit)) { SqlCommand command = new SqlCommand(ProviderAccountNumberQuery, connection); command.Parameters.AddWithValue("@ProveedorId", expense.Provider.Cuit); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try { if (reader.Read()) { providerAccountNumber = reader.GetInt32(0); if (providerAccountNumber != 0) { existingProviders.Insert(0, new KeyValuePair <long, int>(expense.Provider.Cuit, providerAccountNumber)); } } } catch (Exception e) { Console.WriteLine(e.Message); } finally { reader.Close(); command.Dispose(); connection.Close(); } } else { providerAccountNumber = existingProviders.Where(x => x.Key == expense.Provider.Cuit).Select(x => x.Value).FirstOrDefault(); } if (providerAccountNumber != 0) { bool SIN_IVA = expense.Aliquot.Description == "SIN IVA"; string userCompanyGroupForExpense = expense.User.UserCompanyGroups.Where(x => x.Company.Id == expense.CompanyId). Select(x => x.UserGroup.Code + x.Company.Id). FirstOrDefault(); var stringifiedproviderAccountNumber = providerAccountNumber.ToString(); ReceiptHeader header = new ReceiptHeader() { SAR_CORMVH_IDENTI = expense.Id.ToString(), SAR_CORMVH_CIRCOM = SIN_IVA ? CIRCOM.SIN_IVA : CIRCOM.IVA, SAR_CORMVH_CIRAPL = SIN_IVA ? CIRCOM.SIN_IVA : CIRCOM.IVA, SAR_CORMVH_CODEMP = "AL0" + expense.CompanyId, SAR_CORMVH_CODORI = expense.Receipt, SAR_CORMVH_CMPRAD = "N/A", SAR_CORMVH_STATUS = 'N', SAR_CORMVH_FCHMOV = CurrentDate, SAR_CORMVH_NROCTA = stringifiedproviderAccountNumber.PadLeft(6) }; receiptHeaderContext.Add(header); var hasNotTaxesConcepts = Math.Abs(double.Parse(expense.NotTaxedConcepts)) > 0; ReceiptItem itemDefault = new ReceiptItem() { SAR_CORMVI_IDENTI = expense.Id.ToString(), SAR_CORMVI_TIPORI = expense.Category.Code, SAR_CORMVI_CANTID = 1, SAR_CORMVI_ARTORI = expense.CompanyId + expense.Category.Code + userCompanyGroupForExpense + "G", SAR_CORMVI_NROITM = 1, SAR_CORMVI_PRECIO = SIN_IVA ? expense.Total : expense.NetValue, SAR_CORMVI_NROAPL = null, SAR_CORMVI_ITMAPL = null }; receiptItemContext.Add(itemDefault); CreateDistribution(expense.Id, itemDefault.SAR_CORMVI_NROITM, expense.CompanyId, expense.User.Id_Erp); D_Concepts Debe_concepts_default = new D_Concepts() { SAR_CORMVI08_IDENTI = expense.Id, SAR_CORMVI08_IMPORT = expense.Total }; debeConceptsRepository.Add(Debe_concepts_default); H_Concepts Haber_concepts_default = new H_Concepts() { SAR_CORMVI09_IDENTI = expense.Id, SAR_CORMVI09_CODCPT = expense.CompanyId + (expense.Payment.Description == "Efectivo" ? "E" : "T"), SAR_CORMVI09_IMPORT = expense.Total }; haberConceptsRepository.Add(Haber_concepts_default); if (hasNotTaxesConcepts) { ReceiptItem secondLine = itemDefault.Clone(); secondLine.SAR_CORMVI_NROITM = 2; secondLine.SAR_CORMVI_PRECIO = expense.NotTaxedConcepts; secondLine.SAR_CORMVI_ARTORI = secondLine.SAR_CORMVI_ARTORI.Remove(secondLine.SAR_CORMVI_ARTORI.Length - 1, 1) + "N"; receiptItemContext.Add(secondLine); CreateDistribution(expense.Id, secondLine.SAR_CORMVI_NROITM, expense.CompanyId, expense.User.Id_Erp); } string aliquotValue = expense.Aliquot.Value.ToString(CultureInfo.InvariantCulture); if (!SIN_IVA) { TaxesDetails taxDetails = new TaxesDetails() { SAR_CORMVI07_IDENTI = expense.Id.ToString(), SAR_CORMVI07_CODCPT = GetCODPT(aliquotValue), SAR_CORMVI07_INGRES = expense.NetValue, SAR_CORMVI07_IMPGRA = expense.NetValue, SAR_CORMVI07_PORCEN = aliquotValue, SAR_CORMVI07_NROITM = 1 }; taxesDetailsRepository.Add(taxDetails); } DistDimTesoH distDimTesoH = new DistDimTesoH() { SAR_CJRMVD10_IDENTI = expense.Id, SAR_CJRMVD10_CODDIS = $"AL0{expense.CompanyId.ToString()}|{expense.User.Id_Erp}" }; distDimTesoHRepository.Add(distDimTesoH); this.reportsUnitOfWork.Commit(); expensesExported++; } else { expensesNotExported++; if (!providersNotExported.Contains(expense.Provider.Cuit)) { providersNotExported.Add(expense.Provider.Cuit); } } } foreach (var expense in expenseList.Results) { if (!providersNotExported.Contains(expense.Provider.Cuit)) { expense.Exported = true; expense.ExportedDateTime = DateTime.Now; this.expenseRepository.Edit(Mapper.Map <ExpenseDto, Expense>(expense)); this.unitOfWork.Commit(); } } int notExportedProviders = providersNotExported.Count(); string providersPath = null; if (notExportedProviders > 0) { ProviderListViewCriteria providersCriteria = new ProviderListViewCriteria() { Size = -1, FileName = "Proveedores_inexistentes_exportacion_gastos" }; SearchResultViewModel <ProviderDto> providersList = this.providerAppService.ExportData(providersCriteria, null, providersNotExported); providersPath = this.SaveCsv <ProviderDto, ProviderListViewCriteria>(providersList, providersCriteria, providersCriteria.FileName + "_" + long.Parse(DateTime.Now.ToString("yyyyMMddHHmmss")), false, null); } response = request.CreateResponse(HttpStatusCode.Created, new { success = true, exported = expensesExported, not_exported = expensesNotExported, inexistent_providers = notExportedProviders, error_providers_path = providersPath }); } return response; }));