public IHttpActionResult Put([FromBody] CuentaContableModel model) { try { //Valido que la cuenta no forme parte de un evento activo int estado = Convert.ToInt16(RegistryState.Aprobado); var evnt = eventoService.GetAll(c => c.EV_ESTATUS == estado, null, includes: c => c.AspNetUsers); if (evnt.Where(r => r.EV_CUENTA_DEBITO == model.CO_ID_CUENTA_CONTABLE || r.EV_CUENTA_CREDITO == model.CO_ID_CUENTA_CONTABLE).Count() != 0) { return(BadRequest("Esta cuenta está parametrizada en un evento activo, debe inactivarlo para continuar.")); } else { model.CO_USUARIO_MOD = User.Identity.GetUserId(); model.CO_FECHA_MOD = DateTime.Now; model.CO_ESTATUS = Convert.ToInt16(BusinessEnumerations.Estatus.ACTIVO); service.Update(model); return(Ok()); } } catch (Exception ex) { return(BadRequest("No se pudo actualizar la cuenta. " + ex.Message)); } }
public ActionResult ActivarEditar(int?id, CuentaContableModel model) { if (Session["StringToken"] != null) { string token = Session["StringToken"].ToString(); if (id != null) { ViewBag.Empresas = CatalogoServicio.Empresas(token); ViewBag.EsEdicion = true; return(View("CuentaContable", CatalogoServicio.ActivarModifiarCuentaContable(id.Value, model, token))); } else { var respuesta = CatalogoServicio.EditarCuentaContable(model, token); if (respuesta.Exito) { model.Numero = string.Empty; model.Descripcion = string.Empty; ViewBag.Empresas = CatalogoServicio.Empresas(token); return(RedirectToAction("CuentaContable")); } else { ViewBag.Empresas = CatalogoServicio.Empresas(token); ViewBag.MensajeError = respuesta.Mensaje; return(View("CuentaContable", model)); } } } else { return(View(AutenticacionServicio.InitIndex(new Models.Seguridad.LoginModel()))); } }
private string GetNameCuentaContra(CuentaContableModel cuenta) { string nameCuentaContra = string.Empty; if (cuenta != null) { nameCuentaContra = ((cuenta.CO_CTA_CONTABLE_CONTRA == null ? string.Empty : cuenta.CO_CTA_CONTABLE_CONTRA.Trim()) + (cuenta.CO_COD_AUXILIAR_CONTRA == null ? string.Empty : cuenta.CO_COD_AUXILIAR_CONTRA.Trim()) + (cuenta.CO_NUM_AUXILIAR_CONTRA == null ? string.Empty : cuenta.CO_NUM_AUXILIAR_CONTRA.Trim())); } return(nameCuentaContra); }
public static CuentaContableModel CuentaContableDesdeID(int CuentaContableID, ClientesContablesModel ObjCliente) { CuentaContableModel ReturnValues = new CuentaContableModel(); if (ObjCliente != null) { ReturnValues = ObjCliente.CtaContable.SingleOrDefault(x => x.CuentaContableModelID == CuentaContableID); } return(ReturnValues); }
public static CuentaContableModel CuentaContableDesdeCodInterno(string CodInterno, ClientesContablesModel ObjCliente) { CuentaContableModel ReturnValues = new CuentaContableModel(); if (ObjCliente != null) { ReturnValues = ObjCliente.CtaContable.FirstOrDefault(x => x.CodInterno == CodInterno); } return(ReturnValues); }
public static string ObtenerNombreCuentaContable(int CuentaContableID, ClientesContablesModel ObjCliente) { string NombreCtaCont = string.Empty; CuentaContableModel CuentaCont = new CuentaContableModel(); if (ObjCliente != null) { CuentaCont = ObjCliente.CtaContable.SingleOrDefault(x => x.CuentaContableModelID == CuentaContableID); } NombreCtaCont = CuentaCont.CodInterno + " " + CuentaCont.nombre; return(NombreCtaCont); }
private string GetCuenta(int IdCuenta, int op) { CuentaContableModel Model = CCService.GetSingle(f => f.CO_ID_CUENTA_CONTABLE == IdCuenta); if (op == 0) { return((Model.CO_CUENTA_CONTABLE.TrimEnd() + Model.CO_COD_AUXILIAR.TrimEnd() + Model.CO_NUM_AUXILIAR.TrimEnd()).ToString()); } else { return(Model.CO_NOM_AUXILIAR); } }
public ActionResult EjecutarConciliacion(ComparacionConciliacionBancariaViewModel DatosConciliacion) { string UserID = User.Identity.GetUserId(); FacturaPoliContext db = ParseExtensions.GetDatabaseContext(UserID); ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db); CuentaContableModel CuentaConsultada = ParseExtensions.ObtenerCuentaDesdeId(DatosConciliacion.IdCuentaContable, objCliente); var Reporte = new ReporteResultadoConciliacion(); var DatosConciliacionActualizados = CartolaBancariaModel.ConciliarSiSePuede(DatosConciliacion, db, objCliente); var ActualizarTablas = CartolaBancariaMacroModel.ActualizarEstadosConciliacion(db, objCliente, DatosConciliacionActualizados.Item2, CuentaConsultada, DatosConciliacionActualizados.Item1.IdCartola); var ReporteConciliacion = CartolaBancariaModel.calcularReporteConciliacionManual(DatosConciliacionActualizados.Item1.lstCartola, DatosConciliacionActualizados.Item1.lstLibroMayor); return(View(ReporteConciliacion)); }
public ActionResult Crear(CuentaContableModel model) { if (Session["StringToken"] != null) { string token = Session["StringToken"].ToString(); var respuesta = CatalogoServicio.GuardarCuentaContable(model, token); if (respuesta.Exito) { ViewBag.Empresas = CatalogoServicio.Empresas(token); return(View("CuentaContable", CatalogoServicio.InitCtaContable(token))); } else { ViewBag.Empresas = CatalogoServicio.Empresas(token); ViewBag.MensajeError = respuesta.Mensaje; return(View("CuentaContable", model)); } } else { return(View(AutenticacionServicio.InitIndex(new Models.Seguridad.LoginModel()))); } }
public static bool InsertBoletasCovLinq(ClientesContablesModel ObjCliente, List <BoletasExcelModel> BoletasItems, TipoCentralizacion Tipo, FacturaPoliContext db) { using (var dbTransaction = db.Database.BeginTransaction()) { List <BoletasCoVModel> ListaBoletasHijo = new List <BoletasCoVModel>(); CuentaContableModel CuentaIva = ParametrosClienteModel.GetCuentaContableIvaAUsarObj(ObjCliente, db); //cuenta Iva //Al importar un libro hay 2 opciones para saber si es compra o venta //1.- al momento de importar la intefaz grafica dirá que elija si es compra o venta //2.- la segunda forma es la siguiente -> tomar el primer registro y dependiendo de su centralización indicar si es compra o venta. //Ambas opciones pueden llegar a cometer errores por ende tener en cuenta esto para cuando el desarrollo ya esté avanzado decimal TotalNeto = 0; decimal TotalIva = 0; TipoReceptor tipoReceptor = new TipoReceptor(); if (Tipo == TipoCentralizacion.Compra) { tipoReceptor = TipoReceptor.PR; } if (Tipo == TipoCentralizacion.Venta) { tipoReceptor = TipoReceptor.CL; } DateTime Fecha = BoletasItems.FirstOrDefault().Fecha; int? nullableProxVoucherNumber = ParseExtensions.GetNumVoucher(ObjCliente, db, Fecha.Month, Fecha.Year); int baseNumberFolio = nullableProxVoucherNumber.Value; List <BoletasExcelModel> LosQueNoPudieronInsertarse = new List <BoletasExcelModel>(); List <VoucherModel> LstVoucher = new List <VoucherModel>(); //en el futuro hacer estas agrupaciones por día -> un voucher tendrá tantos registros como todos los que caigan en el mismo día (se sugiere hacer un group by con este criterio en el foreach) foreach (BoletasExcelModel ItemBoleta in BoletasItems) { List <DetalleVoucherModel> detalleVoucher = new List <DetalleVoucherModel>(); QuickReceptorModel Receptor = QuickReceptorModel.CrearOActualizarPrestadorPorRut(ItemBoleta.Rut, ItemBoleta.RazonSocial, ObjCliente, db, tipoReceptor.ToString()); CuentaContableModel CuentaAuxiliar = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaAuxiliar, ObjCliente); //CuentaAuxiliar CuentaContableModel CuentaProveedorDeudor = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaContable, ObjCliente); //Cuenta ProveedorDeudor if (CuentaProveedorDeudor == null) { throw new Exception("La cuenta de proveedor deudor debe existir para este cliente contable"); } //Cada uno de estos detallevouchers que se hará lleva la misma logica que los libros de compra que se insertan a día de hoy -> revisar la inserción de libros de compra y venta ya existente VoucherModel NuevoVoucher = new VoucherModel(); NuevoVoucher.TipoOrigen = Tipo == TipoCentralizacion.Compra ? "Compra" : "Venta"; NuevoVoucher.TipoOrigenVoucher = Tipo == TipoCentralizacion.Compra ? TipoOrigen.Compra : TipoOrigen.Venta; NuevoVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID; NuevoVoucher.FechaEmision = ItemBoleta.Fecha; NuevoVoucher.Tipo = TipoVoucher.Traspaso; NuevoVoucher.NumeroVoucher = baseNumberFolio; NuevoVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(baseNumberFolio, Fecha); string FullDescripcionDocOriginal = (int)ItemBoleta.TipoDocumento + " / Folio: " + ItemBoleta.NumeroDeDocumento + " / " + Receptor != null ? Receptor.NombreFantasia : ""; NuevoVoucher.Glosa = FullDescripcionDocOriginal; //Revisar como debe ser creada la glosa es probable que se haga con la misma logica que con la importación de libros de compra y ventas //Encerrar la logica de las compras y las ventas en otra función? decimal CostoNeto = ItemBoleta.Neto; decimal MontoIva = ItemBoleta.Iva; decimal MontoTotal = ItemBoleta.Neto + ItemBoleta.Iva; DetalleVoucherModel LineaCuentaCorriente = new DetalleVoucherModel(); DetalleVoucherModel LineaDetalleIva = new DetalleVoucherModel(); DetalleVoucherModel LineaDetalleAuxiliar = new DetalleVoucherModel(); LineaCuentaCorriente.FechaDoc = ItemBoleta.Fecha; LineaCuentaCorriente.ObjCuentaContable = CuentaProveedorDeudor; LineaCuentaCorriente.GlosaDetalle = "Costo Neto" + FullDescripcionDocOriginal; LineaDetalleIva.FechaDoc = ItemBoleta.Fecha; LineaDetalleIva.ObjCuentaContable = CuentaIva; LineaDetalleIva.GlosaDetalle = "Iva Compras" + FullDescripcionDocOriginal; LineaDetalleAuxiliar.FechaDoc = ItemBoleta.Fecha; LineaDetalleAuxiliar.ObjCuentaContable = CuentaAuxiliar; LineaDetalleAuxiliar.GlosaDetalle = ""; if (ItemBoleta.TipoDocumento.EsUnaNotaCredito()) { LineaCuentaCorriente.MontoDebe = 0; LineaCuentaCorriente.MontoHaber = CostoNeto; LineaDetalleIva.MontoDebe = 0; LineaDetalleIva.MontoHaber = MontoIva; LineaDetalleAuxiliar.MontoDebe = MontoTotal; LineaDetalleAuxiliar.MontoHaber = 0; } else { LineaCuentaCorriente.MontoDebe = CostoNeto; LineaCuentaCorriente.MontoHaber = 0; //detalle voucher 2 -> Iva LineaDetalleIva.MontoDebe = MontoIva; LineaDetalleIva.MontoHaber = 0; //detalle voucher 3 -> Auxiliar} LineaDetalleAuxiliar.MontoDebe = 0; LineaDetalleAuxiliar.MontoHaber = MontoTotal; } detalleVoucher.Add(LineaCuentaCorriente); detalleVoucher.Add(LineaDetalleIva); detalleVoucher.Add(LineaDetalleAuxiliar); if (detalleVoucher.Sum(x => x.MontoDebe) == detalleVoucher.Sum(x => x.MontoHaber)) { NuevoVoucher.ListaDetalleVoucher = detalleVoucher; baseNumberFolio++; } else { LosQueNoPudieronInsertarse.Add(ItemBoleta); } //revisar si funciona de esta manera foreach (DetalleVoucherModel ItemDetalle in NuevoVoucher.ListaDetalleVoucher.Where(x => x.ObjCuentaContable == CuentaAuxiliar).ToList()) { AuxiliaresModel Auxiliar = new AuxiliaresModel(); CuentaContableModel CtaAux = ItemDetalle.ObjCuentaContable; Auxiliar.LineaNumeroDetalle = NuevoVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber; Auxiliar.objCtaContable = CtaAux; ItemDetalle.Auxiliar = Auxiliar; List <AuxiliaresDetalleModel> lstAuxDetalle = new List <AuxiliaresDetalleModel>(); AuxiliaresDetalleModel AuxiliarDetalle = new AuxiliaresDetalleModel(); decimal MontoTotalLinea = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber; AuxiliarDetalle.TipoDocumento = ItemBoleta.TipoDocumento; AuxiliarDetalle.Fecha = ItemBoleta.Fecha; AuxiliarDetalle.FechaContabilizacion = ItemBoleta.Fecha; AuxiliarDetalle.Folio = ItemBoleta.NumeroDeDocumento; AuxiliarDetalle.Individuo2 = Receptor; AuxiliarDetalle.MontoNetoLinea = 0; AuxiliarDetalle.MontoExentoLinea = 0; AuxiliarDetalle.MontoIVALinea = 0; AuxiliarDetalle.MontoTotalLinea = MontoTotalLinea; AuxiliarDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; AuxiliarDetalle.MontoIVANoRecuperable = 0; AuxiliarDetalle.MontoIVAUsoComun = 0; AuxiliarDetalle.MontoIVAActivoFijo = 0; lstAuxDetalle.Add(AuxiliarDetalle); Auxiliar.ListaDetalleAuxiliares = lstAuxDetalle; } //BaseNumFolio List <DetalleVoucherModel> detalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.Auxiliar != null)).ToList(); db.DBVoucher.AddRange(LstVoucher); db.SaveChanges(); if (detalle.Any()) { detalle.ForEach(x => { x.Auxiliar.DetalleVoucherModelID = x.DetalleVoucherModelID; }); foreach (AuxiliaresModel itemAuxiliar in detalle.Select(x => x.Auxiliar).ToArray()) { db.Entry(itemAuxiliar).State = System.Data.Entity.EntityState.Modified; } db.SaveChanges(); } } } return(false); }
public RegistroControlContent CreateSinglePartidas(RegistroControlModel control, PartidaManualModel partida, int tipoOperacion) { int counter = 1; string referencia = partida.PA_REFERENCIA; string conceptoCosto = partida.PA_CONCEPTO_COSTO; partida.PA_CONCEPTO_COSTO = string.Empty; partida.PA_REFERENCIA = string.Empty; DateTime todays = DateTime.Now.Date; var counterRecord = base.Count(c => DbFunctions.TruncateTime(c.RC_FECHA_CREACION) == todays); string dateFormat = "yyyyMMdd"; var model = new List <SAX_PARTIDAS>(); var registroContext = new RegistroControlContent(); List <PartidasModel> list = new List <PartidasModel>(); PartidasContent partidas = new PartidasContent(); List <MessageErrorPartida> listError = new List <MessageErrorPartida>(); var empresaUsuario = empresaUsuarioService.Query(x => x.US_ID_USUARIO == control.RC_COD_USUARIO).Select(x => new UsuarioEmpresaModel { UE_ID_USUARIO_EMPRESA = x.UE_ID_USUARIO_EMPRESA, US_ID_USUARIO = x.US_ID_USUARIO, CE_ID_EMPRESA = x.CE_ID_EMPRESA, UE_ESTATUS = x.UE_ESTATUS, UE_FECHA_CREACION = x.UE_FECHA_CREACION, UE_USUARIO_CREACION = x.UE_USUARIO_CREACION, UE_FECHA_MOD = x.UE_FECHA_MOD, UE_USUARIO_MOD = x.UE_USUARIO_MOD }).ToList(); var centroCostos = centroCostoService.GetAllFlatten <CentroCostoModel>(); //var conceptoCostos = conceptoCostoService.GetAllFlatten<ConceptoCostoModel>(); List <ConceptoCostoModel> conceptoCostos = conceptoCostoService.Query(x => x.CC_ID_CONCEPTO_COSTO == x.CC_ID_CONCEPTO_COSTO).Select(y => new ConceptoCostoModel { CC_ID_CONCEPTO_COSTO = y.CC_ID_CONCEPTO_COSTO, CE_ID_EMPRESA = y.CE_ID_EMPRESA, CC_NUM_CONCEPTO = y.CC_NUM_CONCEPTO, CC_CUENTA_MAYOR = y.CC_CUENTA_MAYOR, CC_ESTATUS = y.CC_ESTATUS }).ToList(); //var cuentas = ctaService.GetAllFlatten<CuentaContableModel>(); List <CuentaContableModel> cuentas = ctaService.Query(x => x.CO_ID_CUENTA_CONTABLE == x.CO_ID_CUENTA_CONTABLE).Select(y => new CuentaContableModel { CO_ID_CUENTA_CONTABLE = y.CO_ID_CUENTA_CONTABLE, CE_ID_EMPRESA = y.CE_ID_EMPRESA, CO_CUENTA_CONTABLE = y.CO_CUENTA_CONTABLE, CO_COD_AUXILIAR = y.CO_COD_AUXILIAR, CO_NUM_AUXILIAR = y.CO_NUM_AUXILIAR, CA_ID_AREA = y.ca_id_area, CO_COD_NATURALEZA = y.CO_COD_NATURALEZA, CO_COD_CONCILIA = y.CO_COD_CONCILIA, CO_NOM_CUENTA_CONTRA = y.CO_NOM_CUENTA_CONTRA, CO_CTA_CONTABLE_CONTRA = y.CO_CTA_CONTABLE_CONTRA, CO_ESTATUS = y.CO_ESTATUS }).ToList(); var empresa = empresaService.GetAllFlatten <EmpresaModel>(); var empresaAreaCentro = empresaAreaCentroCostoSrv.GetAll(); var empresaCentro = empresaCentroSrv.GetAll(); List <MonedaModel> lstMoneda = monedaService.GetAllFlatten <MonedaModel>(); CuentaContableModel cuenta_debito = cuentas.Where(x => x.CO_ID_CUENTA_CONTABLE == partida.EV_CUENTA_DEBITO).FirstOrDefault(); CuentaContableModel cuenta_credito = cuentas.Where(x => x.CO_ID_CUENTA_CONTABLE == partida.EV_CUENTA_CREDITO).FirstOrDefault(); var param = paramService.GetSingle(); DateTime fechaOperativa = this.GetFechaProceso(); string codeOperacion = string.Empty; if (tipoOperacion == Convert.ToInt16(BusinessEnumerations.TipoOperacion.CARGA_INICIAL)) { codeOperacion = "I"; } else if (tipoOperacion == Convert.ToInt16(BusinessEnumerations.TipoOperacion.CARGA_MASIVA)) { codeOperacion = "D"; } else if (tipoOperacion == Convert.ToInt16(BusinessEnumerations.TipoOperacion.CAPTURA_MANUAL)) { codeOperacion = "M"; } control.CA_ID_AREA = control.CA_ID_AREA; control.RC_COD_EVENTO = partida.PA_EVENTO; control.EV_COD_EVENTO = Convert.ToInt16(partida.PA_EVENTO); control.RC_COD_OPERACION = tipoOperacion; control.RC_COD_PARTIDA = fechaOperativa.ToString(dateFormat) + codeOperacion + ((counterRecord + 1).ToString("00000")); control.RC_FECHA_APROBACION = null; control.RC_FECHA_MOD = null; control.RC_USUARIO_CREACION = control.RC_COD_USUARIO; control.RC_ESTATUS_LOTE = Convert.ToInt16(BusinessEnumerations.EstatusCarga.POR_APROBAR); var partidaDebito = partida.CustomMapIgnoreICollection <PartidaManualModel, PartidasModel>(); if (cuenta_debito != null && !string.IsNullOrEmpty(cuenta_debito.CO_CUENTA_CONTABLE)) { partidaDebito.PA_CTA_CONTABLE = cuenta_debito.CO_CUENTA_CONTABLE.Trim() + cuenta_debito.CO_COD_AUXILIAR.Trim() + cuenta_debito.CO_NUM_AUXILIAR.Trim(); if (cuenta_debito.CO_COD_CONCILIA.Equals("1")) { partidaDebito.PA_REFERENCIA = partida.REFERENCIA_CUENTA_DEBITO; } } if (cuenta_debito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("51") || cuenta_debito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("52") || cuenta_debito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("31") || cuenta_debito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("32")) { partidaDebito.PA_CONCEPTO_COSTO = conceptoCosto; } partidaDebito.PA_CENTRO_COSTO = partida.PA_CENTRO_COSTO; partidaDebito.PA_FECHA_CARGA = fechaOperativa.Date; partidaDebito.PA_FECHA_TRX = fechaOperativa.Date; partidaDebito.PA_USUARIO_MOD = null; partidaDebito.PA_USUARIO_APROB = null; partidaDebito.PA_FECHA_MOD = null; partidaDebito.PA_FECHA_APROB = null; partidaDebito.PA_FECHA_CREACION = DateTime.Now; partidaDebito.PA_FECHA_CONCILIA = null; partidaDebito.PA_FECHA_ANULACION = null; partidaDebito.PA_USUARIO_CREACION = control.RC_COD_USUARIO; var credito = (partida.PA_IMPORTE * -1); var debito = partida.PA_IMPORTE; partidaDebito.PA_STATUS_PARTIDA = Convert.ToInt16(BusinessEnumerations.EstatusCarga.POR_APROBAR); partidaDebito.PA_IMPORTE = debito; partidaDebito.PA_TIPO_CONCILIA = 0; partidaDebito.PA_CONTADOR = 1; list.Add(partidaDebito); var partidaCredito = partida.CustomMapIgnoreICollection <PartidaManualModel, PartidasModel>(); if (cuenta_credito != null && !string.IsNullOrEmpty(cuenta_credito.CO_CUENTA_CONTABLE)) { partidaCredito.PA_CTA_CONTABLE = cuenta_credito.CO_CUENTA_CONTABLE.Trim() + cuenta_credito.CO_COD_AUXILIAR.Trim() + cuenta_credito.CO_NUM_AUXILIAR.Trim(); if (cuenta_credito.CO_COD_CONCILIA.Equals("1")) { partidaCredito.PA_REFERENCIA = partida.REFERENCIA_CUENTA_CREDITO; } } if (cuenta_credito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("51") || cuenta_credito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("52") || cuenta_credito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("31") || cuenta_credito.CO_CUENTA_CONTABLE.Trim().Substring(0, 2).Equals("32")) { partidaCredito.PA_CONCEPTO_COSTO = conceptoCosto; } partidaCredito.PA_FECHA_CARGA = fechaOperativa.Date; partidaCredito.PA_FECHA_TRX = fechaOperativa.Date; partidaCredito.PA_CENTRO_COSTO = partida.CENTRO_COSTO_CREDITO; partidaCredito.PA_FECHA_MOD = null; partidaCredito.PA_FECHA_APROB = null; partidaCredito.PA_FECHA_CONCILIA = null; partidaCredito.PA_FECHA_ANULACION = null; partidaCredito.PA_USUARIO_MOD = null; partidaCredito.PA_USUARIO_APROB = null; partidaCredito.PA_FECHA_CREACION = DateTime.Now; partidaCredito.PA_USUARIO_CREACION = control.RC_COD_USUARIO; partidaCredito.PA_STATUS_PARTIDA = Convert.ToInt16(BusinessEnumerations.EstatusCarga.POR_APROBAR); partidaCredito.PA_TIPO_CONCILIA = 0; partidaCredito.PA_IMPORTE = credito; partidaCredito.PA_CONTADOR = 2; list.Add(partidaCredito); DateTime today = DateTime.Now; var counterRecords = partidaService.Count(c => c.PA_FECHA_CARGA.Year == today.Year && c.PA_FECHA_CARGA.Month == today.Month && c.PA_FECHA_CARGA.Day == today.Day); control.RC_TOTAL_REGISTRO = list.Count; control.RC_USUARIO_CREACION = control.RC_USUARIO_CREACION; control.RC_TOTAL_CREDITO = credito; control.RC_TOTAL_DEBITO = debito; control.RC_TOTAL = credito + debito; control.RC_FECHA_CREACION = DateTime.Now; control.RC_FECHA_PROCESO = partida.PA_FECHA_TRX; var mensaje = string.Empty; decimal montoConsolidado = 0; UsuarioAreaService usuarioAreaService = new UsuarioAreaService(); var cuenta = string.Empty; registroService = registroService ?? new RegistroControlService(); var consolidatedReference = partidaService.getConsolidaReferencias(list); int codAreaGenerica = Convert.ToInt16(WebConfigurationManager.AppSettings["areaOperativaGenerica"]); var areaGenerica = areaOperativaService.GetSingle(x => x.CA_COD_AREA == codAreaGenerica); foreach (var iteminner in list) { counter++; String PA_REFERENCIA = string.Empty; CuentaContableModel singleCuenta = null; int rechazado = Convert.ToInt16(BusinessEnumerations.EstatusCarga.RECHAZADO); int conciliaSI = Convert.ToInt16(BusinessEnumerations.Concilia.SI); try { var referenciaEmbedded = iteminner.PA_REFERENCIA; if (string.IsNullOrEmpty(iteminner.PA_CTA_CONTABLE)) { mensaje = $"La cuenta contable no puede estar en blanco."; throw new CuentaContableVaciaException(); } else { iteminner.PA_CTA_CONTABLE = iteminner.PA_CTA_CONTABLE.Trim(); if (string.IsNullOrEmpty(iteminner.PA_CTA_CONTABLE)) { mensaje = $"La cuenta contable no puede estar en blanco."; throw new CuentaContableException(); } } cuenta = iteminner.PA_CTA_CONTABLE.Trim().ToUpper(); iteminner.PA_COD_EMPRESA = iteminner.PA_COD_EMPRESA == null ? string.Empty : iteminner.PA_COD_EMPRESA; var importe = iteminner.PA_IMPORTE; var empresaSingle = empresa.FirstOrDefault(x => x.CE_COD_EMPRESA.Trim() == iteminner.PA_COD_EMPRESA.Trim()); if (empresaSingle == null) { throw new EmpresaException($"La empresa {iteminner.PA_COD_EMPRESA} no existe en el sistema."); } singleCuenta = cuentas.FirstOrDefault(c => (c.CO_CUENTA_CONTABLE.Trim().ToUpper() + c.CO_COD_AUXILIAR.Trim().ToUpper() + c.CO_NUM_AUXILIAR.Trim().ToUpper()) == cuenta && (c.CA_ID_AREA == control.CA_ID_AREA || c.CA_ID_AREA == areaGenerica.CA_ID_AREA) && c.CE_ID_EMPRESA == empresaSingle.CE_ID_EMPRESA); if (singleCuenta == null) { throw new CuentaContableAreaException($"La cuenta contable {cuenta} no existe en el sistema. Verificar cuenta contable para empresa y el área indicada."); } var fechaCarga = iteminner.PA_FECHA_CARGA; decimal monto = 0; int tipo_error = 0; if (singleCuenta.CO_COD_CONCILIA != null && singleCuenta.CO_COD_CONCILIA.Equals("1")) { if (string.IsNullOrEmpty(singleCuenta.CO_COD_NATURALEZA)) { throw new CodNaturalezaException("La cuenta contable conciliable y no tiene definida naturaleza dentro del catálogo de cuentas."); } if (string.IsNullOrEmpty(singleCuenta.CO_COD_CONCILIA)) { throw new CodNaturalezaException("La cuenta contable no tiene definida estatus de conciliación dentro del catálogo de cuentas."); } if (singleCuenta.CO_COD_NATURALEZA.Equals("D") && !String.IsNullOrEmpty(referenciaEmbedded) /*&& importe > 0*/) { if (String.IsNullOrEmpty(referenciaEmbedded)) { mensaje = $"La referencia es requerida, cuenta de naturaleza débito con importe negativo. {referenciaEmbedded}"; throw new Exception(); } var refSummary = consolidatedReference.Where(c => c.Referencia == referenciaEmbedded).FirstOrDefault(); montoConsolidado = refSummary == null ? 0 : refSummary.Monto; var referenciaExiste = partidaService.Query(x => x.PA_COD_EMPRESA == iteminner.PA_COD_EMPRESA && x.PA_COD_MONEDA == iteminner.PA_COD_MONEDA && x.PA_REFERENCIA == iteminner.PA_REFERENCIA && x.PA_CTA_CONTABLE.Trim() == iteminner.PA_CTA_CONTABLE.Trim() && x.PA_CENTRO_COSTO == iteminner.PA_CENTRO_COSTO && x.PA_STATUS_PARTIDA != rechazado && x.PA_ESTADO_CONCILIA != conciliaSI); if (referenciaExiste != null && referenciaExiste.Count() == 0) { mensaje = $"La referencia indicada ({referenciaEmbedded}) no coincide en el sistema para la empresa, moneda, cuenta, centro de costo indicado en la partida a cargar."; throw new Exception(); } iteminner.PA_ORIGEN_REFERENCIA = Convert.ToInt16(BusinessEnumerations.TipoReferencia.MANUAL); } else if (singleCuenta.CO_COD_NATURALEZA.Equals("C") && !String.IsNullOrEmpty(referenciaEmbedded) /*&& importe > 0 */) { if (String.IsNullOrEmpty(referenciaEmbedded)) { mensaje = $"La referencia es requerida, cuenta de naturaleza crédito con importe positivo. {referenciaEmbedded}"; throw new Exception(); } var refSummary = consolidatedReference.Where(c => c.Referencia == referenciaEmbedded).FirstOrDefault(); montoConsolidado = refSummary == null ? 0 : refSummary.Monto; var referenciaExiste = partidaService.Query(x => x.PA_COD_EMPRESA == iteminner.PA_COD_EMPRESA && x.PA_COD_MONEDA == iteminner.PA_COD_MONEDA && x.PA_REFERENCIA == iteminner.PA_REFERENCIA && x.PA_CTA_CONTABLE.Trim() == iteminner.PA_CTA_CONTABLE.Trim() && x.PA_CENTRO_COSTO == iteminner.PA_CENTRO_COSTO && x.PA_STATUS_PARTIDA != rechazado && x.PA_ESTADO_CONCILIA != conciliaSI); if (referenciaExiste != null && referenciaExiste.Count() == 0) { mensaje = $"La referencia indicada ({referenciaEmbedded}) no coincide en el sistema para la empresa, moneda, cuenta, centro de costo indicado en la partida a cargar."; throw new Exception(); } iteminner.PA_ORIGEN_REFERENCIA = Convert.ToInt16(BusinessEnumerations.TipoReferencia.MANUAL); } else if ((singleCuenta.CO_COD_NATURALEZA.Equals("C") || singleCuenta.CO_COD_NATURALEZA.Equals("D")) && String.IsNullOrEmpty(referenciaEmbedded)) { iteminner.PA_REFERENCIA = ""; iteminner.PA_ORIGEN_REFERENCIA = Convert.ToInt16(BusinessEnumerations.TipoReferencia.AUTOMATICO); } else { mensaje = "No se cumple con una referencia valida por naturaleza ni importe."; throw new Exception(); } } else { if (!String.IsNullOrEmpty(iteminner.PA_REFERENCIA)) { mensaje = $"La cuenta no es conciliable, por lo tanto no puede tener referencia."; throw new Exception(); } //La cuenta no es conciliable por lo tanto no es necesario colocarte un tipo de conciliacion //if (string.IsNullOrEmpty(referenciaEmbedded)) // referenciaEmbedded = "NOCONCILIA"; //PA_REFERENCIA = referenciaEmbedded; //iteminner.PA_ORIGEN_REFERENCIA = Convert.ToInt16(BusinessEnumerations.TipoReferencia.MANUAL); iteminner.PA_ORIGEN_REFERENCIA = null; } } catch (Exception e) { if (e is CuentaContableException) { listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = mensaje, Columna = "Cuenta Contable" }); mensaje = string.Empty; } if (e is CodNaturalezaException) { mensaje = $"Validar naturaleza de cuenta contable {cuenta}."; listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = mensaje, Columna = "Referencia" }); mensaje = string.Empty; } if (e is CodConciliaException) { mensaje = $"Validar conciliación de cuenta contable {cuenta}."; listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = mensaje, Columna = "Referencia" }); mensaje = string.Empty; } if (e is CuentaContableVaciaException) { //Si la cuenta contable viene vacia o con formato incorrecto (Numero y caracteres especiales) //El error se manejo en la lectura del campo } if (singleCuenta == null) { //mensaje = $"No se puede encontrar la cuenta contable {cuenta}."; //listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = mensaje, Columna = "PA_REFERENCIA" }); mensaje = string.Empty; } if (e is CuentaContableAreaException) { listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = e.Message, Columna = "Cuenta contable" }); mensaje = string.Empty; } if (e is EmpresaException) { listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = e.Message, Columna = "Empresa" }); mensaje = string.Empty; } else { if (!string.IsNullOrEmpty(mensaje)) { listError.Add(new MessageErrorPartida() { Linea = counter, Mensaje = mensaje, Columna = "Referencia" }); } } } fileProvider.ValidaReglasCarga(counter, ref list, ref listError, iteminner, Convert.ToInt16(BusinessEnumerations.TipoOperacion.CAPTURA_MANUAL), centroCostos, conceptoCostos, cuentas, empresa, list, lstMoneda, fechaOperativa, empresaAreaCentro, partida.CA_ID_AREA, empresaCentro, empresaUsuario); } //Validaciones globales por Saldos Balanceados por Moneda y Empresa var monedaError = new List <EmpresaMonedaValidationModel>(); bool validaSaldoMoneda = partidaService.isSaldoValidoMonedaEmpresa(list, ref monedaError); if (!validaSaldoMoneda) { monedaError.ForEach(x => { listError.Add(new MessageErrorPartida { Columna = "global", Linea = counter++, Mensaje = $"Partida desbalanceada en la empresa: {x.DescripcionEmpresa} y moneda {x.DescripcionMoneda}" }); }); } registroContext.ListPartidas = list; registroContext.ListError = listError; control.SAX_PARTIDAS = list; if (listError.Count == 0) { var modelRegistroTo = Mapper.Map <RegistroControlModel, SAX_REGISTRO_CONTROL>(control); var modelPart = Mapper.Map <List <PartidasModel>, List <SAX_PARTIDAS> >(list); modelRegistroTo.SAX_PARTIDAS = modelPart; var registro = registroControl.LoadFileData(modelRegistroTo); var returnmodel = Mapper.Map <SAX_REGISTRO_CONTROL, RegistroControlModel>(registro); } return(registroContext); }
public ActionResult ImportarExcelConciliacionBancaria(ObjCartolaMacro DataCartola) { string UserID = User.Identity.GetUserId(); FacturaPoliContext db = ParseExtensions.GetDatabaseContext(UserID); ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db); Session["CartolaImportada"] = null; using (var dbContextTransaction = db.Database.BeginTransaction()) { try { if (DataCartola.files != null && DataCartola.files.ContentLength > 0) { string fileExtension = Path.GetExtension(DataCartola.files.FileName); if (fileExtension == ".xlsx" || fileExtension == ".xls") { List <string[]> MayorConsultado = Session["LibroMayorTwo"] as List <string[]>; List <LibroMayorConciliacion> MayorConsultadoLista = CartolaBancariaModel.getListaLibroMayor(MayorConsultado); string NombreCtaCont = MayorConsultado[0][9]; ViewBag.NombreCuentaContable = NombreCtaCont; int CuentaConsultadaID = (int)Session["ObjetoCuentaContableConsultada"]; CuentaContableModel CuentaConsultada = UtilesContabilidad.CuentaContableDesdeID(CuentaConsultadaID, objCliente); //DeExcelAObjetoCartolaYVoucher var ObjCartolaCompleto = CartolaBancariaMacroModel.ConvertirAObjetoCartola(DataCartola.files /*NombreCtaCont*/); var ResultadoInsercion = CartolaBancariaMacroModel.ConvertirAVoucher(ObjCartolaCompleto, objCliente, db, CuentaConsultada, DataCartola.FechaCartola, DataCartola.NumeroCartola); //Usar para el reporte de conciliacion bancaria var NoInsertados = ResultadoInsercion.Item2; Session["ReporteNoInsertados"] = NoInsertados; if (ResultadoInsercion.Item1 == false) { TempData["Error"] = "Esta cartola ya existe."; return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria")); } } } else { TempData["Error"] = "No existen registros en el fichero."; return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria")); } dbContextTransaction.Commit(); TempData["Correcto"] = "Cartola y Vouchers creados con éxito."; return(RedirectToAction("ResultadoConciliacion", "ContabilidadConciliacionBancaria")); } catch (Exception ex) { dbContextTransaction.Rollback(); TempData["Error"] = $"Error al realizar esta acción. Mensaje de error: {ex.Message}. En caso de necesitarlo informar este error."; db.DBErrores.Add(new ErrorMensajeMonitoreo { Mensaje = ex.Message }); db.SaveChanges(); return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria")); } } }
public static IQueryable <EstadoCuentasCorrientesViewModel> GetLstCtasCorrientesConciliadasDetalle(FacturaPoliContext db, CuentaContableModel objCliente) { IQueryable <EstadoCuentasCorrientesViewModel> LstCtaCorriente = (from Detalle in db.DBDetalleVoucher join Voucher in db.DBVoucher on Detalle.VoucherModelID equals Voucher.VoucherModelID join Auxiliar in db.DBAuxiliares on Detalle.Auxiliar.AuxiliaresModelID equals Auxiliar.AuxiliaresModelID join AuxiliaresDetalle in db.DBAuxiliaresDetalle on Auxiliar.AuxiliaresModelID equals AuxiliaresDetalle.AuxiliaresModelID where Auxiliar.objCtaContable.ClientesContablesModelID == objCliente.ClientesContablesModelID && Voucher.DadoDeBaja == false && Auxiliar.objCtaContable.TieneAuxiliar == 1 select new EstadoCuentasCorrientesViewModel { RutPrestador = AuxiliaresDetalle.Individuo2.RUT, NombrePrestador = AuxiliaresDetalle.Individuo2.RazonSocial, Fecha = Detalle.FechaDoc, Folio = AuxiliaresDetalle.Folio, Comprobante = Voucher.Tipo.ToString() + " " + Voucher.NumeroVoucher.ToString() + " " + Detalle.Auxiliar.LineaNumeroDetalle.ToString(), Documento = AuxiliaresDetalle.TipoDocumento, CuentaContable = Detalle.ObjCuentaContable }); return(null); }
public static string ProcesarLibrosContablesAVoucher(List <LibrosContablesModel> lstEntradasLibro, ClientesContablesModel objCliente, FacturaPoliContext db, List <CuentaContableModel> lstCuentaContable, List <int> IdsCentroDeCostos) { using (var dbContextTransaction = db.Database.BeginTransaction()) { string FeedBack = ""; try { if (lstEntradasLibro == null || lstEntradasLibro.Count == 0 || objCliente == null || objCliente.ParametrosCliente == null) { throw new Exception("Error no hay datos para procesar."); } var folioExcel = lstEntradasLibro.First().Folio.ToString(); if (lstEntradasLibro.Count != lstCuentaContable.Count) { throw new Exception("Error no hay cuentas contables asignadas para cada registro."); } CuentaContableModel CuentaIVAAUsar = null; if (lstEntradasLibro.First().TipoLibro == TipoCentralizacion.Compra) { CuentaIVAAUsar = db.DBCuentaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaCompras.CuentaContableModelID && r.ClientesContablesModelID == objCliente.ClientesContablesModelID); } else if (lstEntradasLibro.First().TipoLibro == TipoCentralizacion.Venta) { CuentaIVAAUsar = db.DBCuentaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaVentas.CuentaContableModelID && r.ClientesContablesModelID == objCliente.ClientesContablesModelID); } else { throw new Exception("Error el documento no es de compra ni venta."); } if (CuentaIVAAUsar == null) { throw new Exception("Error no se encontró configuración valida en el modulo parametros clientes, Por favor parametrizar las cuentas contables."); } List <VoucherModel> lstNuevosVouchers = new List <VoucherModel>(); int contadorAnexo = 0; CuentaContableModel cuentaPrincipal = new CuentaContableModel(); DateTime FechaContabilizacion = lstEntradasLibro.FirstOrDefault().FechaContabilizacion; int NumeroVoucherInicial = ParseExtensions.GetNumVoucher(objCliente, db, FechaContabilizacion.Month, FechaContabilizacion.Year).Value; foreach (LibrosContablesModel entradaLibro in lstEntradasLibro) { //CuentaIVAAUsar = db.DBCuentaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaCompras.CuentaContableModelID && r.ClientesContablesModelID == objCliente.ClientesContablesModelID ); VoucherModel nuevoVoucher = new VoucherModel(); if (entradaLibro.TipoLibro == TipoCentralizacion.Venta) { nuevoVoucher.TipoOrigen = "Venta"; nuevoVoucher.TipoOrigenVoucher = TipoOrigen.Venta; } if (entradaLibro.TipoLibro == TipoCentralizacion.Compra) { nuevoVoucher.TipoOrigen = "Compra"; nuevoVoucher.TipoOrigenVoucher = TipoOrigen.Compra; } nuevoVoucher.ClientesContablesModelID = objCliente.ClientesContablesModelID; nuevoVoucher.FechaEmision = entradaLibro.FechaContabilizacion; nuevoVoucher.Tipo = TipoVoucher.Traspaso; string FullDescripcionDocOriginal = (int)entradaLibro.TipoDocumento + " / Folio: " + entradaLibro.Folio + " / " + entradaLibro.individuo.RazonSocial; nuevoVoucher.Glosa = FullDescripcionDocOriginal; //nuevoVoucher.NumeroVoucher = ParseExtensions.GetNumVoucher(objCliente, db, entradaLibro.FechaContabilizacion.Month, entradaLibro.FechaContabilizacion.Year).Value; nuevoVoucher.NumeroVoucher = NumeroVoucherInicial; nuevoVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(NumeroVoucherInicial, FechaContabilizacion); //DEFINIR CUAL ES LA CUENTA DE VENTA O COMPRA DONDE VAN LAS VENTAS O COMPRAS List <DetalleVoucherModel> DetalleVoucher = new List <DetalleVoucherModel>(); if (entradaLibro.TipoLibro == TipoCentralizacion.Venta) { // decimal CostoNeto = entradaLibro.MontoTotal - entradaLibro.MontoIva; decimal CostoNeto = entradaLibro.MontoNeto; decimal MontoTotal = entradaLibro.MontoTotal; decimal MontoIva = entradaLibro.MontoIva; decimal MontoExento = entradaLibro.MontoExento; DetalleVoucherModel detalleGastoNeto = new DetalleVoucherModel(); detalleGastoNeto.FechaDoc = entradaLibro.FechaContabilizacion; //EN VENTA EL TOTAL VA AL DEBE, EN EL HABER VA EL GASTO NETO Y EL IVA ... pero si es una nota de credito los del haber van al debe y viceversa if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleGastoNeto.MontoHaber = CostoNeto + MontoExento; detalleGastoNeto.MontoDebe = 0; } else { detalleGastoNeto.MontoHaber = 0; detalleGastoNeto.MontoDebe = CostoNeto + MontoExento; } detalleGastoNeto.GlosaDetalle = "Costo Neto " + FullDescripcionDocOriginal; detalleGastoNeto.ObjCuentaContable = lstCuentaContable[contadorAnexo]; detalleGastoNeto.CentroCostoID = IdsCentroDeCostos[contadorAnexo]; DetalleVoucher.Add(detalleGastoNeto); DetalleVoucherModel detalleGastoIVA = new DetalleVoucherModel(); if (entradaLibro.MontoIva > 0) { detalleGastoIVA.FechaDoc = entradaLibro.FechaContabilizacion; //EN VENTA EL TOTAL VA AL DEBE, EN EL HABER VA EL GASTO NETO Y EL IVA ... pero si es una nota de credito los del haber van al debe y viceversa if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleGastoIVA.MontoHaber = MontoIva; detalleGastoIVA.MontoDebe = 0; } else { detalleGastoIVA.MontoHaber = 0; detalleGastoIVA.MontoDebe = MontoIva; } detalleGastoIVA.GlosaDetalle = "IVA Ventas " + FullDescripcionDocOriginal; detalleGastoIVA.ObjCuentaContable = CuentaIVAAUsar;//objCliente.CtaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaVentas.CuentaContableModelID); DetalleVoucher.Add(detalleGastoIVA); } DetalleVoucherModel detalleCtaVenta = new DetalleVoucherModel(); detalleCtaVenta.FechaDoc = entradaLibro.FechaContabilizacion; //EN VENTA EL TOTAL VA AL DEBE, EN EL HABER VA EL GASTO NETO Y EL IVA ... pero si es una nota de credito los del haber van al debe y viceversa if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleCtaVenta.MontoHaber = 0; detalleCtaVenta.MontoDebe = MontoTotal; } else { detalleCtaVenta.MontoHaber = MontoTotal; detalleCtaVenta.MontoDebe = 0; } detalleCtaVenta.ObjCuentaContable = objCliente.CtaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaVentas.CuentaContableModelID); cuentaPrincipal = detalleCtaVenta.ObjCuentaContable; detalleCtaVenta.GlosaDetalle = detalleCtaVenta.ObjCuentaContable.nombre + " (Venta) " + FullDescripcionDocOriginal; DetalleVoucher.Add(detalleCtaVenta); } //EN COMPRA EL TOTAL VA AL HABER, EN EL DEBE VA EL GASTO NETO Y EL IVA... ...pero si es una nota de credito los del debe van al haber y viceversa else if (entradaLibro.TipoLibro == TipoCentralizacion.Compra) { decimal CostoNeto = entradaLibro.MontoNeto;//entradaLibro.MontoTotal - entradaLibro.MontoIva; decimal CostoIvaNoRecuperable = entradaLibro.MontoIvaNoRecuperable; decimal CostoIvaActivoFijo = entradaLibro.MontoIvaActivoFijo; decimal CostoIvaUsoComun = entradaLibro.MontoIvaUsocomun; decimal MontoTotal = entradaLibro.MontoTotal; decimal MontoIva = entradaLibro.MontoIva; decimal montoExento = entradaLibro.MontoExento; String tipocompra = ""; //Iva No Recuperable if (CostoIvaNoRecuperable > 0 && CostoIvaUsoComun == 0 && MontoIva == 0) { tipocompra = "IvaNoRecuperable"; } if (CostoIvaUsoComun == 0 && MontoIva > 0 && CostoIvaNoRecuperable == 0) { tipocompra = "IvaRecuperable"; } if (CostoIvaNoRecuperable > 0 || CostoIvaNoRecuperable == 0 && MontoIva == 0 && CostoIvaUsoComun > 0) { tipocompra = "IvaUsoComun"; } DetalleVoucherModel detalleGastoNeto = new DetalleVoucherModel(); detalleGastoNeto.FechaDoc = entradaLibro.FechaContabilizacion; //EN COMPRA EL TOTAL VA AL HABER, EN EL DEBE VA EL GASTO NETO Y EL IVA... //pero si es una nota de credito los del debe van al haber y viceversa if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleGastoNeto.MontoHaber = 0; detalleGastoNeto.MontoDebe = CostoNeto + montoExento; } else { detalleGastoNeto.MontoHaber = CostoNeto + montoExento; detalleGastoNeto.MontoDebe = 0; } detalleGastoNeto.GlosaDetalle = "Costo Neto " + FullDescripcionDocOriginal; detalleGastoNeto.ObjCuentaContable = lstCuentaContable[contadorAnexo]; detalleGastoNeto.CentroCostoID = IdsCentroDeCostos[contadorAnexo]; DetalleVoucher.Add(detalleGastoNeto); //DetalleVoucherModel detalleGastoNetoCopiaIva = new DetalleVoucherModel(); //if (tipocompra == "IvaNoRecuperable" || tipocompra == "IvaUsoComun") //{ // detalleGastoNetoCopiaIva.FechaDoc = entradaLibro.FechaContabilizacion; // if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) // { // detalleGastoNetoCopiaIva.MontoHaber = 0; // detalleGastoNetoCopiaIva.MontoDebe = CostoIvaNoRecuperable; // } // else // { // detalleGastoNetoCopiaIva.MontoHaber = CostoIvaNoRecuperable; // detalleGastoNetoCopiaIva.MontoDebe = 0; // } // detalleGastoNetoCopiaIva.GlosaDetalle = "Costo Iva No Recuperable " + FullDescripcionDocOriginal; // detalleGastoNetoCopiaIva.ObjCuentaContable = lstCuentaContable[contadorAnexo]; // DetalleVoucher.Add(detalleGastoNetoCopiaIva); //} DetalleVoucherModel detalleGastoIVA = new DetalleVoucherModel(); // if (entradaLibro.MontoIva > 0) //Genero lineas según tipoCompra if (tipocompra == "IvaRecuperable" || tipocompra == "IvaUsoComun") { detalleGastoIVA.FechaDoc = entradaLibro.FechaContabilizacion; decimal montoIvaTotal = MontoIva; if (tipocompra == "IvaUsoComun") { montoIvaTotal = CostoIvaUsoComun; //CostoIvaNoRecuperable + CostoIvaUsoComun; } //EN COMPRA EL TOTAL VA AL HABER, EN EL DEBE VA EL GASTO NETO Y EL IVA... //pero si es una nota de credito los del debe van al haber y viceversa if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleGastoIVA.MontoHaber = 0; detalleGastoIVA.MontoDebe = montoIvaTotal;//MontoIva; } else { detalleGastoIVA.MontoHaber = montoIvaTotal;// MontoIva; detalleGastoIVA.MontoDebe = 0; } detalleGastoIVA.GlosaDetalle = "IVA Compras " + FullDescripcionDocOriginal; detalleGastoIVA.ObjCuentaContable = CuentaIVAAUsar;//objCliente.CtaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaVentas.CuentaContableModelID); DetalleVoucher.Add(detalleGastoIVA); } DetalleVoucherModel detalleCtaCompra = new DetalleVoucherModel(); detalleCtaCompra.FechaDoc = entradaLibro.FechaContabilizacion; //EN COMPRA EL TOTAL VA AL HABER, EN EL DEBE VA EL GASTO NETO Y EL IVA... //pero si es una nota de credito los del debe van al haber y viceversa if (tipocompra == "IvaUsoComun") { if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleCtaCompra.MontoHaber = montoExento + CostoNeto + CostoIvaUsoComun; detalleCtaCompra.MontoDebe = 0; } else { detalleCtaCompra.MontoHaber = 0; detalleCtaCompra.MontoDebe = montoExento + CostoNeto + CostoIvaUsoComun; } } else { if (entradaLibro.TipoDocumento.EsUnaNotaCredito() == false) { detalleCtaCompra.MontoHaber = montoExento + CostoNeto + MontoIva; detalleCtaCompra.MontoDebe = 0; } else { detalleCtaCompra.MontoHaber = 0; detalleCtaCompra.MontoDebe = montoExento + CostoNeto + MontoIva; } } detalleCtaCompra.ObjCuentaContable = objCliente.CtaContable.SingleOrDefault(r => r.CuentaContableModelID == objCliente.ParametrosCliente.CuentaCompras.CuentaContableModelID); cuentaPrincipal = detalleCtaCompra.ObjCuentaContable; detalleCtaCompra.GlosaDetalle = detalleCtaCompra.ObjCuentaContable.nombre + " (Compra) " + FullDescripcionDocOriginal; DetalleVoucher.Add(detalleCtaCompra); } if (DetalleVoucher.Sum(r => r.MontoDebe) == DetalleVoucher.Sum(r => r.MontoHaber)) { nuevoVoucher.ListaDetalleVoucher = DetalleVoucher; entradaLibro.HaSidoConvertidoAVoucher = true; //Convertimosa voucher solo si el libro ya es convertido a voucher. List <ImpuestosAdRelacionModel> AConvertir = db.DBImpuestosAdRelacionSII.Where(x => x.CodigoUnionImpuesto == entradaLibro.CodigoUnionImpuesto).ToList(); if (AConvertir.Count != 0) { foreach (ImpuestosAdRelacionModel Convertidor in AConvertir) { //Cambiar esta parte a la actualizacion dejar de usar addorupdate Convertidor.HaSidoConvertidoAVoucher = true; db.DBImpuestosAdRelacionSII.AddOrUpdate(Convertidor); db.SaveChanges(); } } } else { contadorAnexo++; NumeroVoucherInicial++; continue; //Pensar en como reportar que hubo problemas importando la linea X del libro } lstNuevosVouchers.Add(nuevoVoucher); foreach (DetalleVoucherModel NuevoDetalleVoucher in nuevoVoucher.ListaDetalleVoucher) { if (NuevoDetalleVoucher.ObjCuentaContable == cuentaPrincipal) { AuxiliaresModel Auxiliar = new AuxiliaresModel(); Auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID; Auxiliar.LineaNumeroDetalle = nuevoVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; Auxiliar.objCtaContable = NuevoDetalleVoucher.ObjCuentaContable; //Auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID; db.DBAuxiliares.Add(Auxiliar); AuxiliaresDetalleModel nuevoAuxDetalle = new AuxiliaresDetalleModel(); nuevoAuxDetalle.TipoDocumento = entradaLibro.TipoDocumento; nuevoAuxDetalle.Fecha = entradaLibro.FechaDoc; nuevoAuxDetalle.FechaContabilizacion = entradaLibro.FechaContabilizacion; //revisar // nuevoAuxDetalle.FechaVencimiento = entradaLibro.fe nuevoAuxDetalle.Folio = entradaLibro.Folio; nuevoAuxDetalle.Individuo2 = entradaLibro.individuo; nuevoAuxDetalle.MontoNetoLinea = entradaLibro.MontoNeto; nuevoAuxDetalle.MontoExentoLinea = entradaLibro.MontoExento; nuevoAuxDetalle.MontoIVALinea = entradaLibro.MontoIva; nuevoAuxDetalle.MontoTotalLinea = entradaLibro.MontoTotal; nuevoAuxDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; if (entradaLibro.TipoLibro == TipoCentralizacion.Compra) { nuevoAuxDetalle.MontoIVANoRecuperable = entradaLibro.MontoIvaNoRecuperable; nuevoAuxDetalle.MontoIVAUsoComun = entradaLibro.MontoIvaUsocomun; nuevoAuxDetalle.MontoIVAActivoFijo = entradaLibro.MontoIvaActivoFijo; } db.DBAuxiliaresDetalle.Add(nuevoAuxDetalle); db.SaveChanges(); } } contadorAnexo++; NumeroVoucherInicial++; } if (lstNuevosVouchers != null && lstNuevosVouchers.Count > 0) { foreach (VoucherModel NuevoVoucher in lstNuevosVouchers) { //objCliente.ListVoucher.Add(NuevoVoucher); db.DBVoucher.Add(NuevoVoucher); } db.SaveChanges(); int posicion = 0; foreach (VoucherModel NuevoVoucher in lstNuevosVouchers) { int posicion2 = 0; foreach (LibrosContablesModel entradaLibro in lstEntradasLibro) { if (posicion == posicion2) { entradaLibro.VoucherModelID = NuevoVoucher.VoucherModelID; entradaLibro.estado = true; db.DBLibrosContables.AddOrUpdate(entradaLibro); db.SaveChanges(); } posicion2++; } int total = NuevoVoucher.ListaDetalleVoucher.Count; foreach (DetalleVoucherModel NuevoDetalleVoucher in NuevoVoucher.ListaDetalleVoucher) { if (NuevoDetalleVoucher.ObjCuentaContable == cuentaPrincipal) { AuxiliaresModel auxiliar = (from c in db.DBAuxiliares where c.LineaNumeroDetalle == total && c.objCtaContable.ClientesContablesModelID == cuentaPrincipal.ClientesContablesModelID && c.DetalleVoucherModelID == 0 select c).FirstOrDefault(); if (auxiliar != null) { auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID; db.DBAuxiliares.AddOrUpdate(auxiliar); NuevoDetalleVoucher.Auxiliar = auxiliar; db.DBDetalleVoucher.AddOrUpdate(NuevoDetalleVoucher); db.SaveChanges(); } } } posicion++; } } dbContextTransaction.Commit(); FeedBack = "Exito"; return(FeedBack); } catch (Exception ex) { dbContextTransaction.Rollback(); FeedBack = "Error inesperado " + ex.Message; return(FeedBack); } } }
public IHttpActionResult Post([FromBody] CuentaContableModel model) { model.CO_USUARIO_CREACION = User.Identity.GetUserId(); model.CO_FECHA_CREACION = DateTime.Now; return(Ok(service.Insert(model, true))); }
public static void ProcesarLibroHonorTerceroAVoucher(List <LibroHonorariosDeTerceros> lstAConvertir, ClientesContablesModel ObjCliente, FacturaPoliContext db, List <CuentaContableModel> lstCuentaConbtale) { if (lstAConvertir == null || lstAConvertir.Count == 0 || ObjCliente == null || ObjCliente.ParametrosCliente == null) { return; } if (lstAConvertir.Count != lstAConvertir.Count) { throw new Exception(); } CuentaContableModel Retencion = null; CuentaContableModel Retencion2 = null; Retencion = db.DBCuentaContable.SingleOrDefault(x => x.CuentaContableModelID == ObjCliente.ParametrosCliente.CuentaRetencionHonorarios.CuentaContableModelID && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID); Retencion2 = db.DBCuentaContable.SingleOrDefault(x => x.CuentaContableModelID == ObjCliente.ParametrosCliente.CuentaRetencionesHonorarios2.CuentaContableModelID && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID); if (Retencion == null) { return; } List <VoucherModel> lstNuevosVouchers = new List <VoucherModel>(); int contadorAnexo = 0; CuentaContableModel cuentaPrincipal = new CuentaContableModel(); DateTime FechaContabilizacion = lstAConvertir.FirstOrDefault().FechaContabilizacion; int NumeroVoucherInicial = ParseExtensions.GetNumVoucher(ObjCliente, db, FechaContabilizacion.Month, FechaContabilizacion.Year).Value; foreach (LibroHonorariosDeTerceros itemLibroHonor in lstAConvertir) { decimal MontoBruto = itemLibroHonor.Brutos; // Debe decimal MontoRetenido = itemLibroHonor.Retenidos; //Haber decimal MontoPagado = itemLibroHonor.Pagado; // Haber VoucherModel nuevoVoucher = new VoucherModel(); nuevoVoucher.TipoOrigen = "HonorarioTercero"; nuevoVoucher.TipoOrigenVoucher = itemLibroHonor.TipoO; nuevoVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID; nuevoVoucher.FechaEmision = itemLibroHonor.FechaContabilizacion; nuevoVoucher.Tipo = itemLibroHonor.TipoV; // Traspaso string FullDescripcionDocOriginal = lstCuentaConbtale[contadorAnexo].nombre + " / Folio: " + itemLibroHonor.NumOFolio + " / " + itemLibroHonor.Receptor.RazonSocial; nuevoVoucher.Glosa = FullDescripcionDocOriginal; nuevoVoucher.NumeroVoucher = NumeroVoucherInicial; nuevoVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(NumeroVoucherInicial, FechaContabilizacion); List <DetalleVoucherModel> DetalleVoucher = new List <DetalleVoucherModel>(); DetalleVoucherModel DetalleVhonorarios = new DetalleVoucherModel(); // Linea 1 Del Voucher DetalleVhonorarios.FechaDoc = itemLibroHonor.FechaContabilizacion; DetalleVhonorarios.GlosaDetalle = "Honorarios Profesionales" + FullDescripcionDocOriginal; DetalleVhonorarios.MontoDebe = MontoBruto; DetalleVhonorarios.MontoHaber = 0; DetalleVhonorarios.ObjCuentaContable = lstCuentaConbtale[contadorAnexo]; DetalleVoucher.Add(DetalleVhonorarios); DetalleVoucherModel DetalleVhonorarios2 = new DetalleVoucherModel(); //Linea 2 Del Voucher if (itemLibroHonor.Retenidos > 0) { DetalleVhonorarios2.FechaDoc = itemLibroHonor.FechaContabilizacion; DetalleVhonorarios2.MontoDebe = 0; DetalleVhonorarios2.MontoHaber = MontoRetenido; DetalleVhonorarios2.ObjCuentaContable = Retencion; DetalleVhonorarios2.GlosaDetalle = Retencion.nombre + FullDescripcionDocOriginal; DetalleVoucher.Add(DetalleVhonorarios2); } DetalleVoucherModel DetalleVhonorarios2parte2 = new DetalleVoucherModel(); // Linea 3 del voucher if (itemLibroHonor.Pagado > 0) { DetalleVhonorarios2parte2.FechaDoc = itemLibroHonor.FechaContabilizacion; DetalleVhonorarios2parte2.MontoDebe = 0; DetalleVhonorarios2parte2.MontoHaber = MontoPagado; DetalleVhonorarios2parte2.GlosaDetalle = Retencion2.nombre + FullDescripcionDocOriginal; DetalleVhonorarios2parte2.ObjCuentaContable = Retencion2; cuentaPrincipal = Retencion2; DetalleVoucher.Add(DetalleVhonorarios2parte2); } if (DetalleVoucher.Sum(x => x.MontoDebe) == DetalleVoucher.Sum(x => x.MontoHaber)) { nuevoVoucher.ListaDetalleVoucher = DetalleVoucher; itemLibroHonor.HaSidoConvertidoAVoucher = true; } else { contadorAnexo++; continue; } lstNuevosVouchers.Add(nuevoVoucher); foreach (DetalleVoucherModel NuevoDetalleVoucher in nuevoVoucher.ListaDetalleVoucher) { if (NuevoDetalleVoucher.ObjCuentaContable == cuentaPrincipal) { AuxiliaresModel Auxiliar = new AuxiliaresModel(); Auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID; Auxiliar.LineaNumeroDetalle = nuevoVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; Auxiliar.objCtaContable = NuevoDetalleVoucher.ObjCuentaContable; Auxiliar.Tipo = TipoAuxiliar.Honorarios; db.DBAuxiliares.Add(Auxiliar); AuxiliaresDetalleModel nuevoAuxDetalle = new AuxiliaresDetalleModel(); nuevoAuxDetalle.Fecha = itemLibroHonor.FechaInicial; nuevoAuxDetalle.FechaContabilizacion = itemLibroHonor.FechaContabilizacion; nuevoAuxDetalle.FechaVencimiento = itemLibroHonor.FechaFinal; nuevoAuxDetalle.Folio = itemLibroHonor.NumOFolio; nuevoAuxDetalle.Individuo2 = itemLibroHonor.Receptor; nuevoAuxDetalle.MontoBrutoLinea = MontoBruto; nuevoAuxDetalle.ValorLiquido = MontoPagado; nuevoAuxDetalle.ValorRetencion = MontoRetenido; nuevoAuxDetalle.MontoTotalLinea = MontoPagado; nuevoAuxDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; db.DBAuxiliaresDetalle.Add(nuevoAuxDetalle); db.SaveChanges(); //decimal MontoBruto = itemLibroHonor.Brutos; // Debe //decimal MontoRetenido = itemLibroHonor.Retenido; //Haber //decimal MontoPagado = itemLibroHonor.Pagado; // Haber } } contadorAnexo++; NumeroVoucherInicial++; } if (lstNuevosVouchers != null && lstNuevosVouchers.Count > 0) { foreach (VoucherModel NuevoVoucher in lstNuevosVouchers) { db.DBVoucher.Add(NuevoVoucher); } db.SaveChanges(); int posicion = 0; foreach (VoucherModel NuevoVoucher in lstNuevosVouchers) { int posicion2 = 0; foreach (LibroHonorariosDeTerceros itemHonor in lstAConvertir) { if (posicion == posicion2) { itemHonor.VoucherModel = NuevoVoucher; db.DBLibroHonorariosTerceros.AddOrUpdate(itemHonor); db.SaveChanges(); } posicion2++; } int total = NuevoVoucher.ListaDetalleVoucher.Count; foreach (DetalleVoucherModel NuevoDetalleVoucher in NuevoVoucher.ListaDetalleVoucher) { if (NuevoDetalleVoucher.ObjCuentaContable == cuentaPrincipal) { AuxiliaresModel auxiliar = db.DBAuxiliares.Where(x => x.LineaNumeroDetalle == total && x.objCtaContable.ClientesContablesModelID == cuentaPrincipal.ClientesContablesModelID && x.DetalleVoucherModelID == 0).FirstOrDefault(); if (auxiliar != null) { auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID; db.DBAuxiliares.AddOrUpdate(auxiliar); NuevoDetalleVoucher.Auxiliar = auxiliar; db.DBDetalleVoucher.AddOrUpdate(NuevoDetalleVoucher); db.SaveChanges(); } } } posicion++; } } }
public static CuentaContableModel GetCuentaContableIvaAUsarObj(ClientesContablesModel objCliente, FacturaPoliContext db) { CuentaContableModel cuentacontable = db.DBCuentaContable.FirstOrDefault(x => x.CuentaContableModelID == objCliente.ParametrosCliente.CuentaIvaCompras.CuentaContableModelID && x.ClientesContablesModelID == objCliente.ClientesContablesModelID); return(cuentacontable); }
public static bool ActualizarEstadosConciliacion(FacturaPoliContext db, ClientesContablesModel ObjCliente, List <RelacionadosYConciliados> DatosConciliacion, CuentaContableModel CuentaConsultada, int IdCartola) { //Se actualiza la tabla DetalleVoucher && CartolaBancaria. bool Result = false; List <int> IdsDetalleAactualizar = DatosConciliacion.Select(x => x.IdDetalle).ToList(); List <DetalleVoucherModel> DetalleEncontrados = db.DBDetalleVoucher.Where(x => IdsDetalleAactualizar.Contains(x.DetalleVoucherModelID)).ToList(); var ActualizaEncontrados = DetalleEncontrados.Select(x => { x.Conciliado = true; return(x); }).ToList(); db.DBDetalleVoucher.AddOrUpdate(ActualizaEncontrados.ToArray()); CartolaBancariaMacroModel CartolaAactualizar = db.DBCartolaBMacro.Include("CartolaDetalle").SingleOrDefault(x => x.CartolaBancariaMacroModelID == IdCartola); foreach (CartolaBancariaModel itemCArtola in CartolaAactualizar.CartolaDetalle) { RelacionadosYConciliados RelacionCartolaYLibroMayor = new RelacionadosYConciliados(); RelacionCartolaYLibroMayor = DatosConciliacion.FirstOrDefault(x => x.IdCartolaDetalle == itemCArtola.CartolaBancariaModelId); if (RelacionCartolaYLibroMayor != null) { itemCArtola.VoucherModelID = RelacionCartolaYLibroMayor.VoucherId; itemCArtola.CuentaContableModelID = CuentaConsultada; itemCArtola.EstaConciliado = true; itemCArtola.ClientesContablesModelID = ObjCliente; } } db.DBCartolaBMacro.AddOrUpdate(CartolaAactualizar); db.SaveChanges(); Result = true; return(Result); }
public static bool GuardarCartolaBancaria(List <CartolaBancariaModel> LstCartolaConInfo /*, List<CartolaBancariaModel> LstCartolaSinInfo*/, string FechaCartola, int NumeroCartola, CuentaContableModel CuentaConsultada, ClientesContablesModel ObjCliente, FacturaPoliContext db) { bool Result = false; List <CartolaBancariaModel> CartolaBancariaCompleta = new List <CartolaBancariaModel>(); CartolaBancariaCompleta.AddRange(LstCartolaConInfo); CartolaBancariaMacroModel CartolaBancariaMacro = new CartolaBancariaMacroModel(); CartolaBancariaMacro.FechaCartola = ParseExtensions.ToDD_MM_AAAA_Multi(FechaCartola); CartolaBancariaMacro.ClientesContablesModelID = ObjCliente; CartolaBancariaMacro.CuentaContableModelID = CuentaConsultada; CartolaBancariaMacro.NumeroCartola = NumeroCartola; CartolaBancariaMacro.CartolaDetalle = CartolaBancariaCompleta; db.DBCartolaBMacro.Add(CartolaBancariaMacro); db.SaveChanges(); Result = true; return(Result); }
//Queda pendiente crear este mismo metodo pero generico para reutilizar. //public static List<ObjCartolaYVouchers> ConvertirAObjetoCartola(HttpPostedFileBase file) //{ // List<ObjCartolaYVouchers> ReturnValues = new List<ObjCartolaYVouchers>(); // if (file == null || file.ContentLength == 0) // { // string Error = "Error Excel Vacio"; // } // else // { // if (file.FileName.EndsWith("xls") || file.FileName.EndsWith("xlsx")) // { // string path = ParseExtensions.Get_Temp_path(file.FileName); // Le indicamos la ruta donde guardará el excel. // if (File.Exists(path)) // { // File.Delete(path); //Si ya existe lo elimina. // } // file.SaveAs(path); //Guardamos momentaneamente el fichero. -> La idea es extraer su información y luego eliminarlo. // Application application = new Application(); // Workbook workBook = application.Workbooks.Open(path); // Worksheet worksheet = workBook.ActiveSheet; // Range range = worksheet.UsedRange; // for (int row = 2; row <= range.Rows.Count; row++) // { // ObjCartolaYVouchers FilaAGuardar = new ObjCartolaYVouchers(); // FilaAGuardar.Fecha = ParseExtensions.ToDD_MM_AAAA_Multi(((Range)range.Cells[row, 1]).Text); // FilaAGuardar.Docum = Convert.ToInt32(((Range)range.Cells[row, 2]).Text); // FilaAGuardar.Detalle = ((Range)range.Cells[row, 3]).Text; // FilaAGuardar.Debe = decimal.Parse(((Range)range.Cells[row, 4]).Text); // FilaAGuardar.Haber = decimal.Parse(((Range)range.Cells[row, 5]).Text); // FilaAGuardar.Saldo = decimal.Parse(((Range)range.Cells[row, 6]).Text); // //Parte del voucher // FilaAGuardar.CodigoInterno = ((Range)range.Cells[row, 7]).Text; // FilaAGuardar.Rut = ((Range)range.Cells[row, 8]).Text; // FilaAGuardar.Glosa = ((Range)range.Cells[row, 9]).Text; // ReturnValues.Add(FilaAGuardar); // } // workBook.Close(); // File.Delete(path); // } // } // return ReturnValues; //} public static Tuple <bool, List <ObjCartolaYVouchers> > ConvertirAVoucher(List <ObjCartolaYVouchers> LstCartolaYVouchers, ClientesContablesModel ObjCliente, FacturaPoliContext db, CuentaContableModel CuentaConsultada, string FechaCartola, int NumeroCartola) { bool Result = false; List <ObjCartolaYVouchers> LosQueNoPudieronInsertarse = new List <ObjCartolaYVouchers>(); List <ObjCartolaYVouchers> LosQueTienenInformacion = LstCartolaYVouchers.Where(x => !string.IsNullOrWhiteSpace(x.CodigoInterno)).ToList(); if (!LosQueTienenInformacion.Any()) { throw new Exception("No hay registros validos para insertar."); } //Los que están en la cartola pero no en el mayor... List <ObjCartolaYVouchers> Pendientes = LstCartolaYVouchers.Where(x => string.IsNullOrWhiteSpace(x.CodigoInterno)).ToList(); LosQueNoPudieronInsertarse.AddRange(Pendientes); List <CartolaBancariaModel> CartolaCompleta = new List <CartolaBancariaModel>(); if (LstCartolaYVouchers.Any()) { db.Configuration.AutoDetectChangesEnabled = false; //revisar como mejora la performance DateTime FechaConvertida = ParseExtensions.ToDD_MM_AAAA_Multi(FechaCartola); DeleteCartolaBancariaExistente(FechaConvertida, NumeroCartola, db, ObjCliente); List <CartolaBancariaModel> CartolaDetalle = new List <CartolaBancariaModel>(); DateTime Fecha = LosQueTienenInformacion.FirstOrDefault().Fecha; int? nullableProxVoucherNumber = ParseExtensions.GetNumVoucher(ObjCliente, db, Fecha.Month, Fecha.Year); int baseNumberFolio = nullableProxVoucherNumber.Value; List <VoucherModel> LstVoucher = new List <VoucherModel>(); foreach (ObjCartolaYVouchers itemCartola in LosQueTienenInformacion) { CuentaContableModel CuentaAUsar = UtilesContabilidad.CuentaContableDesdeCodInterno(itemCartola.CodigoInterno, ObjCliente); QuickReceptorModel Prestador = UtilesContabilidad.ObtenerPrestadorSiExiste(itemCartola.Rut, db, ObjCliente); TipoOrigen TipoPrestador = UtilesContabilidad.RetornaTipoReceptor(Prestador); if (CuentaAUsar == null) { throw new Exception($"La cuenta contable que intentas ingresar no está en el plan de cuentas O no está digitada en el excel CUENTA CONTABLE CON ERROR : {itemCartola.CodigoInterno}"); } if (CuentaAUsar.TieneAuxiliar == 1 && Prestador != null || CuentaAUsar.TieneAuxiliar == 0 && Prestador == null) { VoucherModel CapaVoucher = new VoucherModel(); CapaVoucher.TipoOrigenVoucher = TipoPrestador; CapaVoucher.FechaEmision = itemCartola.Fecha; CapaVoucher.NumeroVoucher = baseNumberFolio; CapaVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(baseNumberFolio, Fecha); CapaVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID; CapaVoucher.Glosa = itemCartola.Glosa; if (itemCartola.Debe > 0 && itemCartola.Haber == 0) { CapaVoucher.Tipo = TipoVoucher.Ingreso; } else if (itemCartola.Haber > 0 && itemCartola.Debe == 0) { CapaVoucher.Tipo = TipoVoucher.Egreso; } //Armamos tabla Detalle Voucher //1 List <DetalleVoucherModel> LstToEvaluate = new List <DetalleVoucherModel>(); DetalleVoucherModel DetalleCartola = new DetalleVoucherModel(); //cada linea es solo 1 monto DetalleCartola.VoucherModelID = CapaVoucher.VoucherModelID; DetalleCartola.ObjCuentaContable = CuentaConsultada; DetalleCartola.FechaDoc = itemCartola.Fecha; DetalleCartola.GlosaDetalle = itemCartola.Glosa; if (itemCartola.Debe > 0 && itemCartola.Haber == 0) { DetalleCartola.MontoDebe = itemCartola.Debe; } else if (itemCartola.Haber > 0 && itemCartola.Debe == 0) { DetalleCartola.MontoHaber = itemCartola.Haber; } //2 DetalleVoucherModel DetalleConciliacion = new DetalleVoucherModel(); DetalleConciliacion.VoucherModelID = CapaVoucher.VoucherModelID; DetalleConciliacion.FechaDoc = itemCartola.Fecha; DetalleConciliacion.ObjCuentaContable = CuentaAUsar; DetalleConciliacion.GlosaDetalle = itemCartola.Glosa; if (DetalleCartola.MontoDebe > 0 && DetalleCartola.MontoHaber == 0) { DetalleConciliacion.MontoHaber = DetalleCartola.MontoDebe; } else if (DetalleCartola.MontoHaber > 0 && DetalleCartola.MontoDebe == 0) { DetalleConciliacion.MontoDebe = DetalleCartola.MontoHaber; } LstToEvaluate.Add(DetalleCartola); LstToEvaluate.Add(DetalleConciliacion); //Guardamos los detalles en una lista de detalles if (LstToEvaluate.Sum(r => r.MontoDebe) == LstToEvaluate.Sum(r => r.MontoHaber)) { foreach (DetalleVoucherModel itemDetalle in LstToEvaluate) { itemDetalle.Conciliado = true; } CapaVoucher.ListaDetalleVoucher = LstToEvaluate; LstVoucher.Add(CapaVoucher); if (CuentaAUsar.TieneAuxiliar == 1 && Prestador != null) { foreach (DetalleVoucherModel NuevoDetalleVoucher in LstToEvaluate) { if (NuevoDetalleVoucher.ObjCuentaContable == CuentaAUsar) { CuentaContableModel CtaAux = NuevoDetalleVoucher.ObjCuentaContable; AuxiliaresModel Auxiliar = new AuxiliaresModel(); Auxiliar.LineaNumeroDetalle = CapaVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; Auxiliar.objCtaContable = CtaAux; NuevoDetalleVoucher.Auxiliar = Auxiliar; List <AuxiliaresDetalleModel> lstAuxDetalle = new List <AuxiliaresDetalleModel>(); AuxiliaresDetalleModel nuevoAuxDetalle = new AuxiliaresDetalleModel(); decimal MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; nuevoAuxDetalle.TipoDocumento = itemCartola.TipoDteNumVoucher; nuevoAuxDetalle.Fecha = itemCartola.Fecha; nuevoAuxDetalle.FechaContabilizacion = itemCartola.Fecha; nuevoAuxDetalle.Folio = itemCartola.Docum; nuevoAuxDetalle.Individuo2 = Prestador; nuevoAuxDetalle.MontoNetoLinea = 0; nuevoAuxDetalle.MontoExentoLinea = 0; nuevoAuxDetalle.MontoIVALinea = 0; nuevoAuxDetalle.MontoTotalLinea = MontoTotal; nuevoAuxDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; nuevoAuxDetalle.MontoIVANoRecuperable = 0; nuevoAuxDetalle.MontoIVAUsoComun = 0; nuevoAuxDetalle.MontoIVAActivoFijo = 0; if (CtaAux.TipoAuxiliarQueUtiliza == TipoAuxiliar.Honorarios) { nuevoAuxDetalle.ValorLiquido = MontoTotal; } lstAuxDetalle.Add(nuevoAuxDetalle); Auxiliar.ListaDetalleAuxiliares = lstAuxDetalle; } } } baseNumberFolio++; } } else { LosQueNoPudieronInsertarse.Add(itemCartola); } } List <DetalleVoucherModel> detalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.Auxiliar != null)).ToList(); db.DBVoucher.AddRange(LstVoucher); db.SaveChanges(); if (detalle.Any()) { detalle.ForEach(x => { x.Auxiliar.DetalleVoucherModelID = x.DetalleVoucherModelID; }); foreach (AuxiliaresModel itemAuxiliar in detalle.Select(x => x.Auxiliar).ToArray()) { db.Entry(itemAuxiliar).State = System.Data.Entity.EntityState.Modified; } db.SaveChanges(); } CartolaDetalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.ObjCuentaContable.CuentaContableModelID == CuentaConsultada.CuentaContableModelID)) .Select(x => new CartolaBancariaModel { VoucherModelID = x.VoucherModelID, Fecha = x.FechaDoc, Folio = x.Auxiliar != null ? x.Auxiliar.ListaDetalleAuxiliares.FirstOrDefault().Folio : 0, EstaConciliado = true, Detalle = x.GlosaDetalle, CuentaContableModelID = x.ObjCuentaContable, Debe = x.MontoDebe, Haber = x.MontoHaber }).ToList(); bool ResultadoInsercionCartolaBancaria = GuardarCartolaBancaria(CartolaDetalle, FechaCartola, NumeroCartola, CuentaConsultada, ObjCliente, db); Result = true; } else { throw new Exception("No hay registros para insertar."); } return(Tuple.Create(Result, LosQueNoPudieronInsertarse)); }