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));
     }
 }
Пример #2
0
 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);
        }
Пример #4
0
    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);
    }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
        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));
        }
Пример #9
0
 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())));
     }
 }
Пример #10
0
        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);
        }
Пример #11
0
        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"));
                }
            }
        }
Пример #13
0
    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);
    }
Пример #14
0
    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++;
            }
        }
    }
Пример #17
0
    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));
    }