Ejemplo n.º 1
0
        public ActionResult Create(documentos_posfechados modelo, int?menu)
        {
            int idtipodoc = Convert.ToInt32(Request["idtipodoc"]);

            ViewBag.txtNitCliente      = Request["txtNitCliente"];
            ViewBag.perfilSeleccionado = Convert.ToInt32(Request["idperfil"]);

            icb_sysparameter buscarParametroTpDoc = context.icb_sysparameter.FirstOrDefault(x => x.syspar_cod == "P49");
            string           idTipoDocPosfechados = buscarParametroTpDoc != null ? buscarParametroTpDoc.syspar_value : "0";
            int idDocPosfechados = Convert.ToInt32(idTipoDocPosfechados);

            if (ModelState.IsValid)
            {
                long numeroConsecutivo = 0;
                int  anioActual        = DateTime.Now.Year;
                int  mesActual         = DateTime.Now.Month;
                int  bodegaActual      = Convert.ToInt32(Session["user_bodega"]);
                icb_doc_consecutivos numeroConsecutivoAux = context.icb_doc_consecutivos.OrderByDescending(x => x.doccons_ano)
                                                            .FirstOrDefault(x => x.doccons_idtpdoc == idtipodoc && x.doccons_bodega == bodegaActual);
                grupoconsecutivos grupoConsecutivo =
                    context.grupoconsecutivos.FirstOrDefault(x =>
                                                             x.documento_id == idtipodoc && x.bodega_id == bodegaActual);
                if (numeroConsecutivoAux != null)
                {
                    if (numeroConsecutivoAux.doccons_requiere_mes)
                    {
                        if (numeroConsecutivoAux.doccons_mes != mesActual)
                        {
                            // Requiere mes pero no hay consecutivo para el anio actual
                            TempData["mensaje_error"] =
                                "No existe un numero consecutivo asignado para este tipo de documento en el mes actual que es requerido";
                            ViewBag.banco = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);

                            ViewBag.idtipodoc =
                                new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                               "tpdoc_id", "tpdoc_nombre", idtipodoc);
                            TempData["modelo_invalido"] = "modelo_invalido";
                            BuscarFavoritos(menu);
                            return(View(modelo));
                        }

                        //requiereAnio = true;
                        numeroConsecutivo = numeroConsecutivoAux.doccons_siguiente;
                    }
                    else if (numeroConsecutivoAux.doccons_requiere_anio)
                    {
                        if (numeroConsecutivoAux.doccons_ano != anioActual)
                        {
                            // Requiere anio pero no hay consecutivo para el anio actual
                            TempData["mensaje_error"] =
                                "No existe un numero consecutivo asignado para este tipo de documento en el año actual que es requerido";
                            ViewBag.banco     = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
                            ViewBag.idtipodoc =
                                new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                               "tpdoc_id", "tpdoc_nombre", idtipodoc);
                            TempData["modelo_invalido"] = "modelo_invalido";
                            BuscarFavoritos(menu);
                            return(View(modelo));
                        }

                        numeroConsecutivo = numeroConsecutivoAux.doccons_siguiente;
                    }
                    else
                    {
                        numeroConsecutivo = numeroConsecutivoAux.doccons_siguiente;
                    }
                }
                else
                {
                    TempData["mensaje_error"] = "No existe un numero consecutivo asignado para este tipo de documento";
                    ViewBag.banco             = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
                    ViewBag.idtipodoc         = new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                                               "tpdoc_id", "tpdoc_nombre", idtipodoc);
                    TempData["modelo_invalido"] = "modelo_invalido";
                    BuscarFavoritos(menu);
                    return(View(modelo));
                }

                // Si llega hasta aqui significa que si existe un numero consecutivo para el documento en la bodega actual.

                var parametrosCuentasVerificar = (from perfil in context.perfil_cuentas_documento
                                                  join nombreParametro in context.paramcontablenombres
                                                  on perfil.id_nombre_parametro equals nombreParametro.id
                                                  join cuenta in context.cuenta_puc
                                                  on perfil.cuenta equals cuenta.cntpuc_id
                                                  where perfil.id_perfil == modelo.idperfil
                                                  select new
                {
                    perfil.id,
                    perfil.id_nombre_parametro,
                    perfil.cuenta,
                    perfil.centro,
                    perfil.id_perfil,
                    nombreParametro.descripcion_parametro,
                    cuenta.cntpuc_numero
                }).ToList();

                List <DocumentoDescuadradoModel> listaDescuadrados = new List <DocumentoDescuadradoModel>();
                decimal calcularDebito  = 0;
                decimal calcularCredito = 0;

                foreach (var parametro in parametrosCuentasVerificar)
                {
                    //var tipoParametro = 0;

                    cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);
                    if (buscarCuenta != null)
                    {
                        if (parametro.id_nombre_parametro == 15)
                        {
                            if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                            {
                                calcularDebito += modelo.Valor;
                                listaDescuadrados.Add(new DocumentoDescuadradoModel
                                {
                                    NumeroCuenta         = parametro.cntpuc_numero,
                                    DescripcionParametro = parametro.descripcion_parametro,
                                    ValorDebito          = modelo.Valor,
                                    ValorCredito         = 0
                                });
                            }

                            if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                            {
                                calcularCredito += modelo.Valor;
                                listaDescuadrados.Add(new DocumentoDescuadradoModel
                                {
                                    NumeroCuenta         = parametro.cntpuc_numero,
                                    DescripcionParametro = parametro.descripcion_parametro,
                                    ValorDebito          = 0,
                                    ValorCredito         = modelo.Valor
                                });
                            }
                        }
                        else
                        {
                            listaDescuadrados.Add(new DocumentoDescuadradoModel
                            {
                                NumeroCuenta         = parametro.cntpuc_numero,
                                DescripcionParametro = parametro.descripcion_parametro,
                                ValorDebito          = 0,
                                ValorCredito         = 0
                            });
                            TempData["documento_descuadrado"] =
                                "El documento no tiene los movimientos calculados correctamente";
                            ViewBag.documentoDescuadrado = listaDescuadrados;
                            ViewBag.calculoDebito        = calcularDebito;
                            ViewBag.calculoCredito       = calcularCredito;
                            ViewBag.banco     = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
                            ViewBag.idtipodoc =
                                new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                               "tpdoc_id", "tpdoc_nombre", idtipodoc);
                            TempData["modelo_invalido"] = "modelo_invalido";
                            BuscarFavoritos(menu);
                            return(View(modelo));
                        }
                    }
                }

                if (calcularCredito != calcularDebito)
                {
                    TempData["documento_descuadrado"] =
                        "El documento no tiene los movimientos calculados correctamente";
                    ViewBag.documentoDescuadrado = listaDescuadrados;
                    ViewBag.calculoDebito        = calcularDebito;
                    ViewBag.calculoCredito       = calcularCredito;
                    ViewBag.banco     = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
                    ViewBag.idtipodoc = new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                                       "tpdoc_id", "tpdoc_nombre", idtipodoc);
                    TempData["modelo_invalido"] = "modelo_invalido";
                    BuscarFavoritos(menu);
                    return(View(modelo));
                }
                // Fin de la validacion para el calculo del debito y credito del movimiento contable

                encab_documento crearEncabezado = new encab_documento
                {
                    tipo         = idtipodoc,
                    bodega       = bodegaActual,
                    nit          = modelo.idtercero,
                    numero       = numeroConsecutivo,
                    fecha        = DateTime.Now,
                    fec_creacion = DateTime.Now,
                    valor_total  = modelo.Valor,
                    impoconsumo  = 0
                };
                context.encab_documento.Add(crearEncabezado);
                int save = context.SaveChanges();

                if (save > 0)
                {
                    encab_documento buscarUltimoEncabezado =
                        context.encab_documento.OrderByDescending(x => x.idencabezado).FirstOrDefault();


                    modelo.idencabdoc = buscarUltimoEncabezado != null ? buscarUltimoEncabezado.idencabezado : 0;
                    context.documentos_posfechados.Add(modelo);

                    List <perfil_cuentas_documento> parametrosCuentas = context.perfil_cuentas_documento.Where(x => x.id_perfil == modelo.idperfil)
                                                                        .ToList();
                    centro_costo centroValorCero = context.centro_costo.FirstOrDefault(x => x.pre_centcst == "0");
                    int          idCentroCero    = centroValorCero != null?Convert.ToInt32(centroValorCero.centcst_id) : 0;

                    icb_terceros terceroValorCero = context.icb_terceros.FirstOrDefault(x => x.doc_tercero == "0");
                    int          idTerceroCero    = centroValorCero != null?Convert.ToInt32(terceroValorCero.tercero_id) : 0;

                    int secuencia = 1;
                    foreach (perfil_cuentas_documento parametro in parametrosCuentas)
                    {
                        decimal    valorCredito = 0;
                        decimal    valorDebito  = 0;
                        cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);
                        if (buscarCuenta != null)
                        {
                            if (parametro.id_nombre_parametro == 15)
                            {
                                valorCredito = modelo.Valor;
                                valorDebito  = modelo.Valor;
                            }

                            mov_contable movNuevo = new mov_contable
                            {
                                id_encab =
                                    buscarUltimoEncabezado != null ? buscarUltimoEncabezado.idencabezado : 0,
                                fec_creacion      = DateTime.Now,
                                userid_creacion   = Convert.ToInt32(Session["user_usuarioid"]),
                                idparametronombre = parametro.id_nombre_parametro,
                                cuenta            = parametro.cuenta,
                                centro            = parametro.centro,
                                fec = DateTime.Now,
                                seq = secuencia
                            };

                            if (buscarCuenta.concepniff == 1)
                            {
                                if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                {
                                    movNuevo.debitoniif = valorDebito;
                                    movNuevo.debito     = valorDebito;
                                }

                                if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                {
                                    movNuevo.credito     = valorCredito;
                                    movNuevo.creditoniif = valorCredito;
                                }
                            }

                            if (buscarCuenta.concepniff == 4)
                            {
                                if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                {
                                    movNuevo.debitoniif = valorDebito;
                                }

                                if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                {
                                    movNuevo.creditoniif = valorCredito;
                                }
                            }

                            if (buscarCuenta.concepniff == 5)
                            {
                                if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                {
                                    movNuevo.debito = valorDebito;
                                }

                                if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                {
                                    movNuevo.credito = valorCredito;
                                }
                            }

                            if (buscarCuenta.manejabase)
                            {
                                movNuevo.basecontable = modelo.Valor;
                            }

                            if (buscarCuenta.tercero)
                            {
                                movNuevo.nit = modelo.idtercero;
                            }

                            if (buscarCuenta.documeto)
                            {
                                movNuevo.documento = buscarUltimoEncabezado.numero.ToString();
                            }

                            movNuevo.detalle = "Cheque posfechado " + buscarUltimoEncabezado.documento;
                            secuencia++;


                            cuentas_valores buscar_cuentas_valores = context.cuentas_valores.FirstOrDefault(x =>
                                                                                                            x.centro == parametro.centro && x.cuenta == parametro.cuenta && x.nit == movNuevo.nit);
                            DateTime fechaHoy = DateTime.Now;
                            if (buscar_cuentas_valores != null)
                            {
                                buscar_cuentas_valores.ano    = fechaHoy.Year;
                                buscar_cuentas_valores.mes    = fechaHoy.Month;
                                buscar_cuentas_valores.cuenta = movNuevo.cuenta;
                                buscar_cuentas_valores.centro = movNuevo.centro;
                                //buscar_cuentas_valores.nit = movNuevo.nit ?? idTerceroCero;
                                buscar_cuentas_valores.nit                  = movNuevo.nit;
                                buscar_cuentas_valores.debito              += movNuevo.debito;
                                buscar_cuentas_valores.credito             += movNuevo.credito;
                                buscar_cuentas_valores.debitoniff          += movNuevo.debitoniif;
                                buscar_cuentas_valores.creditoniff         += movNuevo.creditoniif;
                                context.Entry(buscar_cuentas_valores).State = EntityState.Modified;
                            }
                            else
                            {
                                cuentas_valores crearCuentaValor = new cuentas_valores
                                {
                                    ano    = fechaHoy.Year,
                                    mes    = fechaHoy.Month,
                                    cuenta = movNuevo.cuenta,
                                    centro = movNuevo.centro,
                                    //crearCuentaValor.nit = movNuevo.nit ?? idTerceroCero;
                                    nit         = movNuevo.nit,
                                    debito      = movNuevo.debito,
                                    credito     = movNuevo.credito,
                                    debitoniff  = movNuevo.debitoniif,
                                    creditoniff = movNuevo.creditoniif
                                };
                                context.cuentas_valores.Add(crearCuentaValor);
                            }

                            context.mov_contable.Add(movNuevo);
                        }
                    }

                    bool guardarCuenta = context.SaveChanges() > 0;
                    if (guardarCuenta)
                    {
                        int grupoId = grupoConsecutivo != null ? grupoConsecutivo.grupo : 0;
                        List <icb_doc_consecutivos> gruposConsecutivos = context.icb_doc_consecutivos
                                                                         .Where(x => x.doccons_grupoconsecutivo == grupoId).ToList();
                        foreach (icb_doc_consecutivos grupo in gruposConsecutivos)
                        {
                            grupo.doccons_siguiente    = grupo.doccons_siguiente + 1;
                            context.Entry(grupo).State = EntityState.Modified;
                        }

                        context.SaveChanges();
                        TempData["mensaje"] = "La creacion del cheque posfechado se ha guardado exitosamente.";
                        ViewBag.banco       = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
                        ViewBag.idtipodoc   =
                            new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados), "tpdoc_id",
                                           "tpdoc_nombre", idtipodoc);
                        return(RedirectToAction("Create", "chequePosfechado", new { menu }));
                    }
                }
            }

            ViewBag.banco     = new SelectList(context.bancos, "id", "Descripcion", modelo.banco);
            ViewBag.idtipodoc = new SelectList(context.tp_doc_registros.Where(x => x.tipo == idDocPosfechados),
                                               "tpdoc_id", "tpdoc_nombre", idtipodoc);
            TempData["modelo_invalido"] = "modelo_invalido";
            BuscarFavoritos(menu);
            return(View(modelo));
        }
Ejemplo n.º 2
0
        public ActionResult Create(NotasContablesModel ncp)
        {
            if (ModelState.IsValid)
            {
                //consecutivo
                grupoconsecutivos grupo = context.grupoconsecutivos.FirstOrDefault(x =>
                                                                                   x.documento_id == ncp.tipo && x.bodega_id == ncp.bodega);
                if (grupo != null)
                {
                    DocumentoPorBodegaController doc = new DocumentoPorBodegaController();
                    long consecutivo = doc.BuscarConsecutivo(grupo.grupo);

                    //Encabezado documento
                    encab_documento encabezado = new encab_documento
                    {
                        tipo             = ncp.tipo,
                        numero           = consecutivo,
                        nit              = ncp.nit,
                        fecha            = DateTime.Now,
                        valor_total      = Convert.ToDecimal(ncp.valor_total),
                        iva              = Convert.ToDecimal(ncp.iva),
                        retencion        = Convert.ToDecimal(ncp.retencion),
                        retencion_ica    = Convert.ToDecimal(ncp.retencion_ica),
                        retencion_iva    = Convert.ToDecimal(ncp.retencion_iva),
                        vendedor         = ncp.vendedor,
                        documento        = ncp.documento,
                        prefijo          = ncp.prefijo,
                        valor_mercancia  = Convert.ToDecimal(ncp.costo),
                        nota1            = ncp.nota1,
                        userid_creacion  = Convert.ToInt32(Session["user_usuarioid"]),
                        fec_creacion     = DateTime.Now,
                        porcen_retencion =
                            float.Parse(ncp.por_retencion,
                                        CultureInfo
                                        .InvariantCulture), //esto se utiliza para que al guardar el dato en la BD me quede con la "," del decimal
                        porcen_reteiva =
                            float.Parse(ncp.por_retencion_iva,
                                        CultureInfo
                                        .InvariantCulture), //esto se utiliza para que al guardar el dato en la BD me quede con la "," del decimal
                        porcen_retica =
                            float.Parse(ncp.por_retencion_ica,
                                        CultureInfo
                                        .InvariantCulture), //esto se utiliza para que al guardar el dato en la BD me quede con la "," del decimal
                        perfilcontable = ncp.perfilcontable,
                        bodega         = ncp.bodega
                    };
                    context.encab_documento.Add(encabezado); // ***** ACTUALIZA ENCABEZADO *****

                    //valor aplicado tengo que actualizarlo en la factura a la que estoy generando la nota
                    //buscas la factura
                    if (!string.IsNullOrWhiteSpace(ncp.documento) && ncp.prefijo != null)
                    {
                        int             numerodocumento = Convert.ToInt32(ncp.documento);
                        encab_documento factura         = context.encab_documento
                                                          .Where(d => d.idencabezado == ncp.prefijo && d.numero == numerodocumento).FirstOrDefault();

                        if (factura != null)
                        {
                            int valoraplicado = Convert.ToInt32(factura.valor_aplicado) != null
                                ? Convert.ToInt32(factura.valor_aplicado)
                                : 0;

                            decimal nuevovalor = Convert.ToDecimal(valoraplicado) + Convert.ToDecimal(ncp.valor_total);
                            factura.valor_aplicado       = Convert.ToDecimal(nuevovalor);
                            context.Entry(factura).State = EntityState.Modified;
                            // si al crear la nota credito se selecciono factura se debe guardar el registro tambien en cruce documentos, de lo contrario NO
                            //Cruce documentos
                            cruce_documentos cd = new cruce_documentos
                            {
                                idtipo          = ncp.tipo,
                                numero          = consecutivo,
                                idtipoaplica    = Convert.ToInt32(ncp.tipofactura),
                                numeroaplica    = Convert.ToInt32(ncp.documento),
                                valor           = Convert.ToDecimal(ncp.valor_total),
                                fecha           = DateTime.Now,
                                fechacruce      = DateTime.Now,
                                userid_creacion = Convert.ToInt32(Session["user_usuarioid"])
                            };
                            context.cruce_documentos.Add(cd); // ***** ACTUALIZA CRUCE DE DOCUMENTOS *****
                        }
                    }

                    //movimiento contable
                    //buscamos en perfil cuenta documento, por medio del perfil seleccionado
                    var parametrosCuentasVerificar = (from perfil in context.perfil_cuentas_documento
                                                      join nombreParametro in context.paramcontablenombres
                                                      on perfil.id_nombre_parametro equals nombreParametro.id
                                                      join cuenta in context.cuenta_puc
                                                      on perfil.cuenta equals cuenta.cntpuc_id
                                                      where perfil.id_perfil == ncp.perfilcontable
                                                      select new
                    {
                        perfil.id,
                        perfil.id_nombre_parametro,
                        perfil.cuenta,
                        perfil.centro,
                        perfil.id_perfil,
                        nombreParametro.descripcion_parametro,
                        cuenta.cntpuc_numero
                    }).ToList();

                    int     secuencia     = 1;
                    decimal totalDebitos  = 0;
                    decimal totalCreditos = 0;

                    List <DocumentoDescuadradoModel> listaDescuadrados   = new List <DocumentoDescuadradoModel>();
                    List <cuentas_valores>           ids_cuentas_valores = new List <cuentas_valores>();
                    centro_costo centroValorCero = context.centro_costo.FirstOrDefault(x => x.pre_centcst == "0");
                    int          idCentroCero    = centroValorCero != null?Convert.ToInt32(centroValorCero.centcst_id) : 0;

                    foreach (var parametro in parametrosCuentasVerificar)
                    {
                        string descripcionParametro = context.paramcontablenombres
                                                      .FirstOrDefault(x => x.id == parametro.id_nombre_parametro).descripcion_parametro;
                        cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);

                        if (buscarCuenta != null)
                        {
                            if (parametro.id_nombre_parametro == 2 && Convert.ToDecimal(ncp.iva) != 0 ||
                                parametro.id_nombre_parametro == 3 && Convert.ToDecimal(ncp.retencion) != 0 ||
                                parametro.id_nombre_parametro == 4 && Convert.ToDecimal(ncp.por_retencion_iva) != 0 ||
                                parametro.id_nombre_parametro == 5 && Convert.ToDecimal(ncp.retencion_ica) != 0 ||
                                parametro.id_nombre_parametro == 1 ||
                                parametro.id_nombre_parametro == 9)
                            {
                                mov_contable movNuevo = new mov_contable
                                {
                                    id_encab          = ncp.id_encab,
                                    seq               = secuencia,
                                    idparametronombre = parametro.id_nombre_parametro,
                                    cuenta            = parametro.cuenta,
                                    centro            = parametro.centro,
                                    fec               = DateTime.Now,
                                    fec_creacion      = DateTime.Now,
                                    userid_creacion   = Convert.ToInt32(Session["user_usuarioid"]),
                                    detalle           = ncp.nota1
                                };

                                cuenta_puc info = context.cuenta_puc.Where(i => i.cntpuc_id == parametro.cuenta)
                                                  .FirstOrDefault();

                                if (info.tercero)
                                {
                                    movNuevo.nit = ncp.nit;
                                }
                                else
                                {
                                    icb_terceros tercero = context.icb_terceros.Where(t => t.doc_tercero == "0")
                                                           .FirstOrDefault();
                                    movNuevo.nit = tercero.tercero_id;
                                }

                                // las siguientes validaciones se hacen dependiendo de la cuenta que esta moviendo la nota credito, para guardar la informacion acorde
                                if (parametro.id_nombre_parametro == 1) // if (parametro.id_nombre_parametro == 10)
                                {
                                    /*if (info.aplicaniff==true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.costo);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        //movNuevo.credito = Convert.ToDecimal(ncp.valor_total);
                                        //movNuevo.debito = 0;

                                        //movNuevo.creditoniif = Convert.ToDecimal(ncp.valor_total);
                                        //movNuevo.debitoniif = 0;
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.valor_total);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.valor_total);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.valor_total);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.valor_total);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 9) // credito
                                {
                                    /*if (info.aplicaniff == true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.costo);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(ncp.costo);
                                        movNuevo.debito  = 0;

                                        movNuevo.creditoniif = Convert.ToDecimal(ncp.costo);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = Convert.ToDecimal(ncp.costo);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(ncp.costo);
                                        movNuevo.debito  = 0;
                                    }
                                }

                                if (parametro.id_nombre_parametro == 2) // credito
                                {
                                    /*if (info.aplicaniff == true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.costo);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito     = Convert.ToDecimal(ncp.iva);
                                        movNuevo.debito      = 0;
                                        movNuevo.creditoniif = Convert.ToDecimal(ncp.iva);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = Convert.ToDecimal(ncp.iva);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(ncp.iva);
                                        movNuevo.debito  = 0;
                                    }
                                }

                                if (parametro.id_nombre_parametro == 3)
                                {
                                    /*if (info.aplicaniff == true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.costo);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.retencion);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.retencion);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 4)
                                {
                                    /*if (info.aplicaniff == true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.iva);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.retencion_iva);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion_iva);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion_iva);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.retencion_iva);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 5)
                                {
                                    /*if (info.aplicaniff == true)
                                     *                      {
                                     *
                                     *                      }*/

                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(ncp.costo);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = ncp.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito     = 0;
                                        movNuevo.debito      = Convert.ToDecimal(ncp.retencion_ica);
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion_ica);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(ncp.retencion_ica);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(ncp.retencion_ica);
                                    }
                                }

                                secuencia++;

                                //Cuentas valores
                                cuentas_valores buscar_cuentas_valores = context.cuentas_valores.FirstOrDefault(x =>
                                                                                                                x.centro == parametro.centro && x.cuenta == parametro.cuenta &&
                                                                                                                x.nit == movNuevo.nit);
                                if (buscar_cuentas_valores != null)
                                {
                                    buscar_cuentas_valores.debito              += movNuevo.debito;
                                    buscar_cuentas_valores.credito             += movNuevo.credito;
                                    buscar_cuentas_valores.debitoniff          += movNuevo.debitoniif;
                                    buscar_cuentas_valores.creditoniff         += movNuevo.creditoniif;
                                    context.Entry(buscar_cuentas_valores).State = EntityState.Modified;
                                }
                                else
                                {
                                    DateTime        fechaHoy         = DateTime.Now;
                                    cuentas_valores crearCuentaValor = new cuentas_valores
                                    {
                                        ano         = fechaHoy.Year,
                                        mes         = fechaHoy.Month,
                                        cuenta      = movNuevo.cuenta,
                                        centro      = movNuevo.centro,
                                        nit         = movNuevo.nit,
                                        debito      = movNuevo.debito,
                                        credito     = movNuevo.credito,
                                        debitoniff  = movNuevo.debitoniif,
                                        creditoniff = movNuevo.creditoniif
                                    };
                                    context.cuentas_valores
                                    .Add(crearCuentaValor);     // ***** ACTUALIZA CUENTA VALORES *****
                                }

                                context.mov_contable.Add(movNuevo); // ***** ACTUALIZA MOV CONTABLES *****

                                totalCreditos += movNuevo.credito;
                                totalDebitos  += movNuevo.debito;

                                listaDescuadrados.Add(
                                    new DocumentoDescuadradoModel // ***** ACTUALIZA listaDescuadrados *****
                                {
                                    NumeroCuenta         = "(" + info.cntpuc_numero + ")" + info.cntpuc_descp,
                                    DescripcionParametro = descripcionParametro,
                                    ValorDebito          = movNuevo.debito,
                                    ValorCredito         = movNuevo.credito
                                });
                            }
                        }
                    }

                    if (totalDebitos != totalCreditos)
                    {
                        TempData["mensaje_error"] =
                            "El documento no tiene los movimientos calculados correctamente, verifique el perfil del documento";

                        ViewBag.documentoSeleccionado = encabezado.tipo;
                        ViewBag.bodegaSeleccionado    = encabezado.bodega;
                        ViewBag.perfilSeleccionado    = encabezado.perfilcontable;

                        ViewBag.documentoDescuadrado = listaDescuadrados;
                        ViewBag.calculoDebito        = totalDebitos;
                        ViewBag.calculoCredito       = totalCreditos;

                        listas();
                        return(View(ncp));
                    }

                    context.SaveChanges();
                    TempData["mensaje"] = "registro creado correctamente";
                    DocumentoPorBodegaController conse = new DocumentoPorBodegaController();
                    doc.ActualizarConsecutivo(grupo.grupo, consecutivo);

                    return(RedirectToAction("Create"));
                }

                TempData["mensaje_error"] = "no hay consecutivo";
            }
            else
            {
                TempData["mensaje_error"] = "No fue posible guardar el registro, por favor valide";
                List <ModelErrorCollection> errors = ModelState.Select(x => x.Value.Errors)
                                                     .Where(y => y.Count > 0)
                                                     .ToList();
            }

            listas();
            return(View(ncp));
        }
Ejemplo n.º 3
0
        public ActionResult crearMatriculaND(int id, string placa, string observacion, int valor, string fechamatricula,
                                             int tipodoc, string bodega, string nit, string asesor, string perfilc, int tramitador_id, int cartera)
        {
            int response = 0;
            int idbodega = context.bodega_concesionario.Where(x => x.bodccs_nombre == bodega).Select(z => z.id)
                           .FirstOrDefault();
            int tpdocumento = context.tp_doc_registros.Where(x => x.tpdoc_id == tipodoc).Select(z => z.tpdoc_id)
                              .FirstOrDefault();
            int terceroid = context.icb_terceros.Where(x => x.doc_tercero == nit).Select(z => z.tercero_id)
                            .FirstOrDefault();
            int?idasesor = context.vw_pendientesEntrega.Where(x => x.asesor == asesor).Select(z => z.idAsesor)
                           .FirstOrDefault();
            int idperfilc = context.perfil_contable_documento.Where(x => x.tipo == tpdocumento).Select(z => z.id)
                            .FirstOrDefault();


            if (tramitador_id == 0 && cartera == 0)
            {
                tramitador_id = Convert.ToInt32(Session["user_usuarioid"]);
            }


            if (ModelState.IsValid)
            {
                //consecutivo
                grupoconsecutivos grupo = context.grupoconsecutivos.FirstOrDefault(x =>
                                                                                   x.documento_id == tpdocumento && x.bodega_id == idbodega);
                if (grupo != null)
                {
                    DocumentoPorBodegaController doc = new DocumentoPorBodegaController();
                    long consecutivo = doc.BuscarConsecutivo(grupo.grupo);

                    //Encabezado documento
                    encab_documento encabezado = new encab_documento
                    {
                        tipo               = tpdocumento,
                        numero             = consecutivo,
                        nit                = terceroid,
                        fecha              = DateTime.Now,
                        valor_total        = Convert.ToDecimal(valor),
                        iva                = Convert.ToDecimal(0),
                        retencion          = Convert.ToDecimal(0),
                        retencion_ica      = Convert.ToDecimal(0),
                        retencion_iva      = Convert.ToDecimal(0),
                        vendedor           = idasesor,
                        documento          = nit,
                        valor_mercancia    = Convert.ToDecimal(valor),
                        userid_creacion    = Convert.ToInt32(Session["user_usuarioid"]),
                        fec_creacion       = DateTime.Now,
                        porcen_retencion   = float.Parse("0", CultureInfo.InvariantCulture),
                        porcen_reteiva     = float.Parse("0", CultureInfo.InvariantCulture),
                        porcen_retica      = float.Parse("0", CultureInfo.InvariantCulture),
                        perfilcontable     = idperfilc,
                        bodega             = idbodega,
                        id_pedido_vehiculo = id
                    };
                    context.encab_documento.Add(encabezado);

                    //movimiento contable
                    //buscamos en perfil cuenta documento, por medio del perfil seleccionado
                    var parametrosCuentasVerificar = (from perfil in context.perfil_cuentas_documento
                                                      join nombreParametro in context.paramcontablenombres
                                                      on perfil.id_nombre_parametro equals nombreParametro.id
                                                      join cuenta in context.cuenta_puc
                                                      on perfil.cuenta equals cuenta.cntpuc_id
                                                      where perfil.id_perfil == idperfilc
                                                      select new
                    {
                        perfil.id,
                        perfil.id_nombre_parametro,
                        perfil.cuenta,
                        perfil.centro,
                        perfil.id_perfil,
                        nombreParametro.descripcion_parametro,
                        cuenta.cntpuc_numero
                    }).ToList();
                    int     secuencia     = 1;
                    decimal totalDebitos  = 0;
                    decimal totalCreditos = 0;

                    List <DocumentoDescuadradoModel> listaDescuadrados   = new List <DocumentoDescuadradoModel>();
                    List <cuentas_valores>           ids_cuentas_valores = new List <cuentas_valores>();
                    centro_costo centroValorCero = context.centro_costo.FirstOrDefault(x => x.pre_centcst == "0");
                    int          idCentroCero    = centroValorCero != null?Convert.ToInt32(centroValorCero.centcst_id) : 0;

                    foreach (var parametro in parametrosCuentasVerificar)
                    {
                        string descripcionParametro = context.paramcontablenombres
                                                      .FirstOrDefault(x => x.id == parametro.id_nombre_parametro).descripcion_parametro;
                        cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);

                        if (buscarCuenta != null)
                        {
                            if (parametro.id_nombre_parametro == 2 && Convert.ToDecimal(0) != 0 ||
                                parametro.id_nombre_parametro == 3 && Convert.ToDecimal(0) != 0 ||
                                parametro.id_nombre_parametro == 4 && Convert.ToDecimal(0) != 0 ||
                                parametro.id_nombre_parametro == 5 && Convert.ToDecimal(0) != 0 ||
                                parametro.id_nombre_parametro == 10 ||
                                parametro.id_nombre_parametro == 11)
                            {
                                mov_contable movNuevo = new mov_contable
                                {
                                    id_encab          = 0,
                                    seq               = secuencia,
                                    idparametronombre = parametro.id_nombre_parametro,
                                    cuenta            = parametro.cuenta,
                                    centro            = parametro.centro,
                                    fec               = DateTime.Now,
                                    fec_creacion      = DateTime.Now,
                                    userid_creacion   = Convert.ToInt32(Session["user_usuarioid"])
                                };
                                //            movNuevo.detalle = ndm.nota1;

                                cuenta_puc info = context.cuenta_puc.Where(i => i.cntpuc_id == parametro.cuenta)
                                                  .FirstOrDefault();

                                if (info.tercero)
                                {
                                    movNuevo.nit = terceroid;
                                }
                                else
                                {
                                    icb_terceros tercero = context.icb_terceros.Where(t => t.doc_tercero == "0")
                                                           .FirstOrDefault();
                                    movNuevo.nit = tercero.tercero_id;
                                }

                                // las siguientes validaciones se hacen dependiendo de la cuenta que esta moviendo la nota credito, para guardar la informacion acorde
                                if (parametro.id_nombre_parametro == 10)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(valor);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(valor);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(valor);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(valor);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(valor);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 11)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(valor);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(valor);
                                        movNuevo.debito  = 0;

                                        movNuevo.creditoniif = Convert.ToDecimal(valor);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = Convert.ToDecimal(valor);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(valor);
                                        movNuevo.debito  = 0;
                                    }
                                }

                                if (parametro.id_nombre_parametro == 2)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(valor);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito     = Convert.ToDecimal(encabezado.iva);
                                        movNuevo.debito      = 0;
                                        movNuevo.creditoniif = Convert.ToDecimal(encabezado.iva);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = Convert.ToDecimal(encabezado.iva);
                                        movNuevo.debitoniif  = 0;
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = Convert.ToDecimal(encabezado.iva);
                                        movNuevo.debito  = 0;
                                    }
                                }

                                if (parametro.id_nombre_parametro == 3 && Convert.ToDecimal(encabezado.retencion) != 0)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(valor);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(encabezado.retencion);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(encabezado.retencion);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 4)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(encabezado.iva);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(encabezado.retencion_iva);

                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion_iva);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion_iva);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(encabezado.retencion_iva);
                                    }
                                }

                                if (parametro.id_nombre_parametro == 5)
                                {
                                    if (info.manejabase)
                                    {
                                        movNuevo.basecontable = Convert.ToDecimal(valor);
                                    }
                                    else
                                    {
                                        movNuevo.basecontable = 0;
                                    }

                                    if (info.documeto)
                                    {
                                        movNuevo.documento = encabezado.documento;
                                    }

                                    if (buscarCuenta.concepniff == 1)
                                    {
                                        movNuevo.credito     = 0;
                                        movNuevo.debito      = Convert.ToDecimal(encabezado.retencion_ica);
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion_ica);
                                    }

                                    if (buscarCuenta.concepniff == 4)
                                    {
                                        movNuevo.creditoniif = 0;
                                        movNuevo.debitoniif  = Convert.ToDecimal(encabezado.retencion_ica);
                                    }

                                    if (buscarCuenta.concepniff == 5)
                                    {
                                        movNuevo.credito = 0;
                                        movNuevo.debito  = Convert.ToDecimal(encabezado.retencion_ica);
                                    }
                                }

                                secuencia++;

                                //Cuentas valores
                                cuentas_valores buscar_cuentas_valores = context.cuentas_valores.FirstOrDefault(x =>
                                                                                                                x.centro == parametro.centro && x.cuenta == parametro.cuenta &&
                                                                                                                x.nit == movNuevo.nit);
                                if (buscar_cuentas_valores != null)
                                {
                                    buscar_cuentas_valores.debito              += movNuevo.debito;
                                    buscar_cuentas_valores.credito             += movNuevo.credito;
                                    buscar_cuentas_valores.debitoniff          += movNuevo.debitoniif;
                                    buscar_cuentas_valores.creditoniff         += movNuevo.creditoniif;
                                    context.Entry(buscar_cuentas_valores).State = EntityState.Modified;
                                }
                                else
                                {
                                    DateTime        fechaHoy         = DateTime.Now;
                                    cuentas_valores crearCuentaValor = new cuentas_valores
                                    {
                                        ano         = fechaHoy.Year,
                                        mes         = fechaHoy.Month,
                                        cuenta      = movNuevo.cuenta,
                                        centro      = movNuevo.centro,
                                        nit         = movNuevo.nit,
                                        debito      = movNuevo.debito,
                                        credito     = movNuevo.credito,
                                        debitoniff  = movNuevo.debitoniif,
                                        creditoniff = movNuevo.creditoniif
                                    };
                                    context.cuentas_valores.Add(crearCuentaValor);
                                }

                                context.mov_contable.Add(movNuevo);

                                totalCreditos += movNuevo.credito;
                                totalDebitos  += movNuevo.debito;

                                listaDescuadrados.Add(new DocumentoDescuadradoModel
                                {
                                    NumeroCuenta         = "(" + info.cntpuc_numero + ")" + info.cntpuc_descp,
                                    DescripcionParametro = descripcionParametro,
                                    ValorDebito          = movNuevo.debito,
                                    ValorCredito         = movNuevo.credito
                                });
                            }
                        }
                    }

                    if (totalDebitos != totalCreditos)
                    {
                        response = 0;
                    }
                    else
                    {
                        context.SaveChanges();
                        DocumentoPorBodegaController conse = new DocumentoPorBodegaController();
                        doc.ActualizarConsecutivo(grupo.grupo, consecutivo);
                        crearMatricula(id, tramitador_id, cartera, placa, valor, fechamatricula, observacion, encabezado);
                        response = 1;
                    }
                }
                else
                {
                    response = 0;
                }
            }
            else
            {
                List <ModelErrorCollection> errors = ModelState.Select(x => x.Value.Errors)
                                                     .Where(y => y.Count > 0)
                                                     .ToList();
                response = 0;
            }

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 4
0
        public ActionResult Create(EntradaSalidaModel modelo, int?menu)
        {
            if (ModelState.IsValid)
            {
                long numeroConsecutivo = 0;
                ConsecutivosGestion  gestionConsecutivo    = new ConsecutivosGestion();
                icb_doc_consecutivos numeroConsecutivoAux  = new icb_doc_consecutivos();
                tp_doc_registros     buscarTipoDocRegistro =
                    context.tp_doc_registros.FirstOrDefault(x => x.tpdoc_id == modelo.TipoDocumento);
                numeroConsecutivoAux = gestionConsecutivo.BuscarConsecutivo(buscarTipoDocRegistro, modelo.TipoDocumento,
                                                                            modelo.BodegaOrigen);

                grupoconsecutivos buscarGrupoConsecutivos = context.grupoconsecutivos.FirstOrDefault(x =>
                                                                                                     x.documento_id == modelo.TipoDocumento && x.bodega_id == modelo.BodegaOrigen);
                int numeroGrupo = buscarGrupoConsecutivos != null ? buscarGrupoConsecutivos.grupo : 0;

                if (numeroConsecutivoAux != null)
                {
                    numeroConsecutivo = numeroConsecutivoAux.doccons_siguiente;
                }
                else
                {
                    TempData["mensaje_error"] = "No existe un numero consecutivo asignado para este tipo de documento";
                    ListasDesplegables();
                    ViewBag.documentoSeleccionado = modelo.TipoDocumento;
                    ViewBag.bodegaSeleccionada    = modelo.BodegaOrigen;
                    ViewBag.perfilSeleccionado    = modelo.PerfilContable;
                    BuscarFavoritos(menu);
                    return(View(modelo));
                }

                // Si llega aqui significa que si hay un numero de documento consecutivo
                decimal sumaCostosReferenciasAux = 0;
                int     numero_repuestosAux      = Convert.ToInt32(Request["lista_repuestos"]);
                int     cantidad_total           = Convert.ToInt32(Request["cantidad_total"]);

                if (cantidad_total <= 0)
                {
                    TempData["mensaje_error"] = "No ha agregado ninguna referencia para realizar el proceso";
                    ListasDesplegables();
                    ViewBag.documentoSeleccionado = modelo.TipoDocumento;
                    ViewBag.bodegaSeleccionada    = modelo.BodegaOrigen;
                    ViewBag.perfilSeleccionado    = modelo.PerfilContable;
                    BuscarFavoritos(menu);
                    return(View(modelo));
                }

                for (int i = 1; i <= numero_repuestosAux; i++)
                {
                    string referencia_codigo = Request["codigo_referencia" + i];
                    string referencia_valor  = Request["valor_referencia" + i];
                    if (string.IsNullOrEmpty(referencia_codigo) || string.IsNullOrEmpty(referencia_valor))
                    {
                        // Significa que la agregaron y la eliminaron
                    }
                    else
                    {
                        sumaCostosReferenciasAux += Convert.ToDecimal(referencia_valor);
                    }
                }


                var parametrosCuentasVerificar = (from perfil in context.perfil_cuentas_documento
                                                  join nombreParametro in context.paramcontablenombres
                                                  on perfil.id_nombre_parametro equals nombreParametro.id
                                                  join cuenta in context.cuenta_puc
                                                  on perfil.cuenta equals cuenta.cntpuc_id
                                                  where perfil.id_perfil == modelo.PerfilContable
                                                  select new
                {
                    perfil.id,
                    perfil.id_nombre_parametro,
                    perfil.cuenta,
                    perfil.centro,
                    perfil.id_perfil,
                    nombreParametro.descripcion_parametro,
                    cuenta.cntpuc_numero
                }).ToList();
                List <DocumentoDescuadradoModel> listaDescuadrados = new List <DocumentoDescuadradoModel>();
                decimal calcularDebito  = 0;
                decimal calcularCredito = 0;

                foreach (var parametro in parametrosCuentasVerificar)
                {
                    cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);
                    if (buscarCuenta != null)
                    {
                        if (parametro.id_nombre_parametro == 9 || parametro.id_nombre_parametro == 12)
                        {
                            if (parametro.id_nombre_parametro == 12)
                            {
                                if (buscarCuenta.concepniff == 1 || buscarCuenta.concepniff == 5)
                                {
                                    calcularCredito += sumaCostosReferenciasAux;
                                    listaDescuadrados.Add(new DocumentoDescuadradoModel
                                    {
                                        NumeroCuenta         = parametro.cntpuc_numero,
                                        DescripcionParametro = parametro.descripcion_parametro,
                                        ValorDebito          = 0,
                                        ValorCredito         = sumaCostosReferenciasAux
                                    });
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    //    calcularDebito += sumaCostosReferenciasAux;
                                    //    listaDescuadrados.Add(new DocumentoDescuadradoModel()
                                    //    {
                                    //        NumeroCuenta = parametro.cntpuc_numero,
                                    //        DescripcionParametro = parametro.descripcion_parametro,
                                    //        ValorDebito = sumaCostosReferenciasAux,
                                    //        ValorCredito = 0
                                    //    });
                                    //}
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                    //{
                                    //    calcularCredito += sumaCostosReferenciasAux;
                                    //    listaDescuadrados.Add(new DocumentoDescuadradoModel()
                                    //    {
                                    //        NumeroCuenta = parametro.cntpuc_numero,
                                    //        DescripcionParametro = parametro.descripcion_parametro,
                                    //        ValorDebito = 0,
                                    //        ValorCredito = sumaCostosReferenciasAux
                                    //    });
                                    //}
                                }
                                else
                                {
                                    listaDescuadrados.Add(new DocumentoDescuadradoModel
                                    {
                                        NumeroCuenta         = parametro.cntpuc_numero,
                                        DescripcionParametro = parametro.descripcion_parametro,
                                        ValorDebito          = 0,
                                        ValorCredito         = 0
                                    });
                                }
                            }
                            else
                            {
                                if (buscarCuenta.concepniff == 1 || buscarCuenta.concepniff == 5)
                                {
                                    calcularDebito += sumaCostosReferenciasAux;
                                    listaDescuadrados.Add(new DocumentoDescuadradoModel
                                    {
                                        NumeroCuenta         = parametro.cntpuc_numero,
                                        DescripcionParametro = parametro.descripcion_parametro,
                                        ValorDebito          = sumaCostosReferenciasAux,
                                        ValorCredito         = 0
                                    });
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    //    calcularDebito += sumaCostosReferenciasAux;
                                    //    listaDescuadrados.Add(new DocumentoDescuadradoModel()
                                    //    {
                                    //        NumeroCuenta = parametro.cntpuc_numero,
                                    //        DescripcionParametro = parametro.descripcion_parametro,
                                    //        ValorDebito = sumaCostosReferenciasAux,
                                    //        ValorCredito = 0
                                    //    });
                                    //}
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                    //{
                                    //    calcularCredito += sumaCostosReferenciasAux;
                                    //    listaDescuadrados.Add(new DocumentoDescuadradoModel()
                                    //    {
                                    //        NumeroCuenta = parametro.cntpuc_numero,
                                    //        DescripcionParametro = parametro.descripcion_parametro,
                                    //        ValorDebito = 0,
                                    //        ValorCredito = sumaCostosReferenciasAux
                                    //    });
                                    //}
                                }
                                else
                                {
                                    listaDescuadrados.Add(new DocumentoDescuadradoModel
                                    {
                                        NumeroCuenta         = parametro.cntpuc_numero,
                                        DescripcionParametro = parametro.descripcion_parametro,
                                        ValorDebito          = 0,
                                        ValorCredito         = 0
                                    });
                                }
                            }
                        }
                    }
                }

                if (calcularCredito != calcularDebito)
                {
                    TempData["documento_descuadrado"] =
                        "El documento no tiene los movimientos calculados correctamente";
                    ViewBag.documentoSeleccionado = modelo.TipoDocumento;
                    ViewBag.bodegaSeleccionada    = modelo.BodegaOrigen;
                    ViewBag.perfilSeleccionado    = modelo.PerfilContable;

                    ViewBag.documentoDescuadrado = listaDescuadrados;
                    ViewBag.calculoDebito        = calcularDebito;
                    ViewBag.calculoCredito       = calcularCredito;
                    ListasDesplegables();
                    BuscarFavoritos(menu);
                    return(View(modelo));
                }

                icb_sysparameter buscarNit = context.icb_sysparameter.FirstOrDefault(x => x.syspar_cod == "P33");
                int nitTraslado            = buscarNit != null?Convert.ToInt32(buscarNit.syspar_value) : 0;

                encab_documento crearEncabezado = new encab_documento
                {
                    tipo   = modelo.TipoDocumento,
                    bodega = modelo.BodegaOrigen,
                    numero = numeroConsecutivo,
                    nit    = nitTraslado,
                    //crearEncabezado.documento = modelo.Referencia; // Puede haber varias referencias
                    fecha           = DateTime.Now,
                    fec_creacion    = DateTime.Now,
                    vencimiento     = DateTime.Now,
                    userid_creacion = Convert.ToInt32(Session["user_usuarioid"]),
                    impoconsumo     = 0,
                    perfilcontable  = modelo.PerfilContable,
                    notas           = modelo.Notas
                };
                context.encab_documento.Add(crearEncabezado);

                bool            guardar = context.SaveChanges() > 0;
                encab_documento buscarUltimoEncabezado =
                    context.encab_documento.OrderByDescending(x => x.idencabezado).FirstOrDefault();


                decimal sumaCostosReferencias = 0;
                int     numero_repuestos      = Convert.ToInt32(Request["lista_repuestos"]);
                int     sequ = 1;
                for (int i = 1; i <= numero_repuestos; i++)
                {
                    string referencia_codigo = Request["codigo_referencia" + i];
                    string referencia_valor  = Request["valor_referencia" + i];
                    if (string.IsNullOrEmpty(referencia_codigo) || string.IsNullOrEmpty(referencia_valor))
                    {
                        // Significa que la agregaron y la eliminaron
                    }
                    else
                    {
                        sumaCostosReferencias += Convert.ToDecimal(referencia_valor);

                        referencias_inven buscarReferenciasInvenOrigen = context.referencias_inven.FirstOrDefault(x =>
                                                                                                                  x.codigo == referencia_codigo && x.ano == DateTime.Now.Year &&
                                                                                                                  x.mes == DateTime.Now.Month && x.bodega == modelo.BodegaOrigen);
                        if (buscarReferenciasInvenOrigen != null)
                        {
                            buscarReferenciasInvenOrigen.cos_ent =
                                (!string.IsNullOrEmpty(buscarReferenciasInvenOrigen.cos_ent.ToString())
                                    ? Convert.ToDecimal(buscarReferenciasInvenOrigen.cos_ent)
                                    : 0) + (!string.IsNullOrEmpty(referencia_valor)
                                    ? Convert.ToDecimal(referencia_valor)
                                    : 0);
                            buscarReferenciasInvenOrigen.sub_cos =
                                (!string.IsNullOrEmpty(buscarReferenciasInvenOrigen.sub_cos.ToString())
                                    ? Convert.ToDecimal(buscarReferenciasInvenOrigen.sub_cos)
                                    : 0) + (!string.IsNullOrEmpty(referencia_valor)
                                    ? Convert.ToDecimal(referencia_valor)
                                    : 0);
                            context.Entry(buscarReferenciasInvenOrigen).State = EntityState.Modified;
                        }
                        else
                        {
                            referencias_inven crearReferencia = new referencias_inven
                            {
                                bodega  = modelo.BodegaOrigen,
                                codigo  = referencia_codigo,
                                ano     = (short)DateTime.Now.Year,
                                mes     = (short)DateTime.Now.Month,
                                can_ini = 0,
                                cos_ent = !string.IsNullOrEmpty(referencia_valor)
                                    ? Convert.ToDecimal(referencia_valor)
                                    : 0,
                                sub_cos = !string.IsNullOrEmpty(referencia_valor)
                                    ? Convert.ToDecimal(referencia_valor)
                                    : 0,
                                modulo = "R"
                            };
                            context.referencias_inven.Add(crearReferencia);
                        }


                        lineas_documento crearLineasOrigen = new lineas_documento
                        {
                            codigo          = referencia_codigo,
                            fec_creacion    = DateTime.Now,
                            userid_creacion = Convert.ToInt32(Session["user_usuarioid"]),
                            nit             = nitTraslado,
                            bodega          = modelo.BodegaOrigen,
                            seq             = sequ,
                            estado          = true,
                            fec             = DateTime.Now,
                            costo_unitario  = !string.IsNullOrEmpty(referencia_valor)
                                ? Convert.ToDecimal(referencia_valor)
                                : 0,
                            id_encabezado = buscarUltimoEncabezado != null ? buscarUltimoEncabezado.idencabezado : 0
                        };
                        context.lineas_documento.Add(crearLineasOrigen);
                        sequ++;
                    }
                }

                centro_costo centroValorCero = context.centro_costo.FirstOrDefault(x => x.pre_centcst == "0");
                int          idCentroCero    = centroValorCero != null?Convert.ToInt32(centroValorCero.centcst_id) : 0;

                icb_terceros terceroValorCero = context.icb_terceros.FirstOrDefault(x => x.doc_tercero == "0");
                int          idTerceroCero    = centroValorCero != null?Convert.ToInt32(terceroValorCero.tercero_id) : 0;

                int secuencia = 1;
                foreach (var parametro in parametrosCuentasVerificar)
                {
                    cuenta_puc buscarCuenta = context.cuenta_puc.FirstOrDefault(x => x.cntpuc_id == parametro.cuenta);
                    if (buscarCuenta != null)
                    {
                        if (parametro.id_nombre_parametro == 9 || parametro.id_nombre_parametro == 12)
                        {
                            mov_contable movNuevo = new mov_contable
                            {
                                id_encab =
                                    buscarUltimoEncabezado != null ? buscarUltimoEncabezado.idencabezado : 0,
                                fec_creacion      = DateTime.Now,
                                userid_creacion   = Convert.ToInt32(Session["user_usuarioid"]),
                                idparametronombre = parametro.id_nombre_parametro,
                                cuenta            = parametro.cuenta,
                                centro            = parametro.centro,
                                nit = 0,
                                fec = DateTime.Now,
                                seq = secuencia
                            };

                            // La validacion se hace ya que cuando el parametro es 9 (es decir inventario) se invierte el credito con debito
                            if (parametro.id_nombre_parametro == 12)
                            {
                                if (buscarCuenta.concepniff == 1)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.credito     = sumaCostosReferencias;
                                    movNuevo.creditoniif = sumaCostosReferencias;
                                    //}
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                    //{
                                    //    movNuevo.debitoniif = sumaCostosReferencias;
                                    //    movNuevo.debito = sumaCostosReferencias;
                                    //}
                                }

                                if (buscarCuenta.concepniff == 4)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.creditoniif = sumaCostosReferencias;
                                }
                                //}
                                //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                //{
                                //    movNuevo.debitoniif = sumaCostosReferencias;
                                //}

                                if (buscarCuenta.concepniff == 5)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.credito = sumaCostosReferencias;
                                }
                                //}
                                //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                //{
                                //    movNuevo.debito = sumaCostosReferencias;
                                //}
                            }
                            else
                            {
                                if (buscarCuenta.concepniff == 1)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.debitoniif = sumaCostosReferencias;
                                    movNuevo.debito     = sumaCostosReferencias;
                                    //}
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                    //{
                                    //    movNuevo.credito = sumaCostosReferencias;
                                    //    movNuevo.creditoniif = sumaCostosReferencias;
                                    //}
                                }

                                if (buscarCuenta.concepniff == 4)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.debitoniif = sumaCostosReferencias;
                                }
                                //}
                                //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                //{
                                //    movNuevo.creditoniif = sumaCostosReferencias;
                                //}

                                if (buscarCuenta.concepniff == 5)
                                {
                                    //if (buscarCuenta.mov_cnt.ToUpper().Contains("DEBITO"))
                                    //{
                                    movNuevo.debito = sumaCostosReferencias;
                                }
                                //}
                                //if (buscarCuenta.mov_cnt.ToUpper().Contains("CREDITO"))
                                //{
                                //    movNuevo.credito = sumaCostosReferencias;
                                //}
                            }

                            if (buscarCuenta.manejabase)
                            {
                                movNuevo.basecontable = sumaCostosReferencias;
                            }

                            if (buscarCuenta.documeto)
                            {
                                movNuevo.documento = "1";
                            }

                            if (buscarCuenta.tercero)
                            {
                                movNuevo.nit = nitTraslado;
                            }

                            movNuevo.detalle = "Sube costo de referencias";
                            secuencia++;

                            DateTime        fechaHoy = DateTime.Now;
                            cuentas_valores buscar_cuentas_valores = context.cuentas_valores.FirstOrDefault(x =>
                                                                                                            x.centro == parametro.centro && x.cuenta == parametro.cuenta && x.nit == movNuevo.nit &&
                                                                                                            x.ano == fechaHoy.Year && x.mes == fechaHoy.Month);
                            if (buscar_cuentas_valores != null)
                            {
                                buscar_cuentas_valores.ano    = fechaHoy.Year;
                                buscar_cuentas_valores.mes    = fechaHoy.Month;
                                buscar_cuentas_valores.cuenta = movNuevo.cuenta;
                                buscar_cuentas_valores.centro = movNuevo.centro;
                                //buscar_cuentas_valores.nit = movNuevo.nit ?? idTerceroCero;
                                buscar_cuentas_valores.nit                  = movNuevo.nit;
                                buscar_cuentas_valores.debito              += movNuevo.debito;
                                buscar_cuentas_valores.credito             += movNuevo.credito;
                                buscar_cuentas_valores.debitoniff          += movNuevo.debitoniif;
                                buscar_cuentas_valores.creditoniff         += movNuevo.creditoniif;
                                context.Entry(buscar_cuentas_valores).State = EntityState.Modified;
                            }
                            else
                            {
                                cuentas_valores crearCuentaValor = new cuentas_valores
                                {
                                    ano    = fechaHoy.Year,
                                    mes    = fechaHoy.Month,
                                    cuenta = movNuevo.cuenta,
                                    centro = movNuevo.centro,
                                    //crearCuentaValor.nit = movNuevo.nit ?? idTerceroCero;
                                    nit         = movNuevo.nit,
                                    debito      = movNuevo.debito,
                                    credito     = movNuevo.credito,
                                    debitoniff  = movNuevo.debitoniif,
                                    creditoniff = movNuevo.creditoniif
                                };
                                context.cuentas_valores.Add(crearCuentaValor);
                            }

                            context.mov_contable.Add(movNuevo);
                        }
                    }
                }

                try
                {
                    int guardarLineasYMovimientos = context.SaveChanges();

                    if (guardarLineasYMovimientos > 0)
                    {
                        if (buscarGrupoConsecutivos != null)
                        {
                            List <icb_doc_consecutivos> numerosConsecutivos = context.icb_doc_consecutivos
                                                                              .Where(x => x.doccons_grupoconsecutivo == numeroGrupo).ToList();
                            foreach (icb_doc_consecutivos item in numerosConsecutivos)
                            {
                                item.doccons_siguiente    = item.doccons_siguiente + 1;
                                context.Entry(item).State = EntityState.Modified;
                            }

                            context.SaveChanges();
                        }

                        TempData["mensaje"] =
                            "El cambio de costo de la(s) referencia(s) se ha realizado correctamente con numero " +
                            numeroConsecutivo;
                        ViewBag.numDocumentoCreado = numeroConsecutivo;
                    }
                }
                catch (Exception ex)
                {
                    Exception sss = ex.InnerException;
                }
            }

            ListasDesplegables();
            BuscarFavoritos(menu);
            return(View());
        }
Ejemplo n.º 5
0
        public ActionResult Index(InicioMesModel modelo)
        {
            string bodegas = Request["listar_bodegas"];

            ViewBag.bodegas    = bodegas;
            ViewBag.bodccs_cod = context.bodega_concesionario.OrderBy(x => x.bodccs_nombre).ToList();

            if (ModelState.IsValid)
            {
                using (DbContextTransaction dbTran = context.Database.BeginTransaction())
                {
                    try
                    {
                        if (!string.IsNullOrEmpty(bodegas))
                        {
                            string[]   bodegasId    = bodegas.Split(',');
                            List <int> listaBodegas = new List <int>();
                            foreach (string item in bodegasId)
                            {
                                listaBodegas.Add(Convert.ToInt32(item));
                            }

                            foreach (int j in listaBodegas)
                            {
                                mesactualbodega bodega = context.mesactualbodega.FirstOrDefault(x => x.idbodega == j);
                                if (bodega == null)
                                {
                                    mesactualbodega mesactualbodega = new mesactualbodega
                                    {
                                        idbodega        = j,
                                        mesacual        = modelo.mes,
                                        anoactual       = modelo.anio,
                                        fec_creacion    = DateTime.Now,
                                        userid_creacion = Convert.ToInt32(Session["user_usuarioid"])
                                    };
                                    context.mesactualbodega.Add(mesactualbodega);
                                    context.SaveChanges();
                                }
                                else
                                {
                                    int             idb = bodega.id;
                                    mesactualbodega mab = context.mesactualbodega.Find(idb);
                                    mab.mesacual             = modelo.mes;
                                    mab.anoactual            = modelo.anio;
                                    context.Entry(mab).State = EntityState.Modified;
                                    context.SaveChanges();
                                }
                            }

                            int mesAnterior  = modelo.mes;
                            int anioAnterior = modelo.anio;
                            mesAnterior  = mesAnterior == 1 ? 12 : mesAnterior - 1;
                            anioAnterior = mesAnterior == 12 ? anioAnterior - 1 : anioAnterior;

                            #region referencias inven

                            List <referencias_inven> buscarReferencia_Inven = context.referencias_inven.Where(x =>
                                                                                                              listaBodegas.Contains(x.bodega) && x.ano == anioAnterior && x.mes == mesAnterior)
                                                                              .ToList();
                            foreach (referencias_inven referencia_inven in buscarReferencia_Inven)
                            {
                                referencias_inven inven  = new referencias_inven();
                                referencias_inven existe = context.referencias_inven.FirstOrDefault(x =>
                                                                                                    x.ano == modelo.anio && x.mes == modelo.mes &&
                                                                                                    x.bodega == referencia_inven.bodega && x.codigo == referencia_inven.codigo);
                                if (existe == null)
                                {
                                    inven.bodega  = referencia_inven.bodega;
                                    inven.ano     = (short)modelo.anio;
                                    inven.mes     = (short)modelo.mes;
                                    inven.can_ini = referencia_inven.can_ini + referencia_inven.can_ent -
                                                    referencia_inven.can_sal;
                                    inven.cos_ini = referencia_inven.cos_ini + referencia_inven.cos_ent -
                                                    referencia_inven.cos_sal;
                                    inven.codigo     = referencia_inven.codigo;
                                    inven.modulo     = referencia_inven.modulo;
                                    inven.costo_prom = referencia_inven.costo_prom;
                                    context.referencias_inven.Add(inven);
                                    context.SaveChanges();
                                }
                                else
                                {
                                    existe.can_ini = referencia_inven.can_ini + referencia_inven.can_ent -
                                                     referencia_inven.can_sal;
                                    existe.cos_ini = referencia_inven.cos_ini + referencia_inven.cos_ent -
                                                     referencia_inven.cos_sal;
                                    existe.costo_prom           = referencia_inven.costo_prom;
                                    context.Entry(existe).State = EntityState.Modified;
                                    context.SaveChanges();
                                }
                            }

                            #endregion

                            #region cuentas valores

                            List <cuentas_valores> buscarCuentasValores = context.cuentas_valores
                                                                          .Where(x => x.ano == anioAnterior && x.mes == mesAnterior).ToList();

                            foreach (cuentas_valores cuentaValor in buscarCuentasValores)
                            {
                                cuentas_valores cv     = new cuentas_valores();
                                cuentas_valores existe = context.cuentas_valores.FirstOrDefault(x =>
                                                                                                x.ano == modelo.anio && x.mes == modelo.mes && x.centro == cuentaValor.centro &&
                                                                                                x.cuenta == cuentaValor.cuenta && x.nit == cuentaValor.nit);
                                if (existe != null)
                                {
                                    existe.saldo_ini +=
                                        cuentaValor.saldo_ini + cuentaValor.debito - cuentaValor.credito;
                                    existe.saldo_ininiff +=
                                        cuentaValor.saldo_ininiff + cuentaValor.debitoniff - cuentaValor.creditoniff;
                                    context.Entry(existe).State = EntityState.Modified;
                                    context.SaveChanges();
                                }
                                else
                                {
                                    cv.ano            = (short)modelo.anio;
                                    cv.mes            = (short)modelo.mes;
                                    cv.cuenta         = cuentaValor.cuenta;
                                    cv.centro         = cuentaValor.centro;
                                    cv.nit            = cuentaValor.nit;
                                    cv.saldo_ini     += cuentaValor.saldo_ini + cuentaValor.debito - cuentaValor.credito;
                                    cv.saldo_ininiff += cuentaValor.saldo_ininiff + cuentaValor.debitoniff -
                                                        cuentaValor.creditoniff;
                                    context.cuentas_valores.Add(cv);
                                    context.SaveChanges();
                                }

                                /*context.cuentas_valores.Add(new cuentas_valores()
                                 *                              {
                                 *                                      ano = (short)modelo.anio,
                                 *                                      mes = (short)modelo.mes,
                                 *                                      cuenta = cuentaValor.cuenta,
                                 *                                      centro = cuentaValor.centro,
                                 *                                      nit = cuentaValor.nit,
                                 *                                      saldo_ini = (cuentaValor.saldo_ini) + (cuentaValor.debito) - (cuentaValor.credito),
                                 *                                      saldo_ininiff = (cuentaValor.saldo_ininiff) + (cuentaValor.debitoniff) - (cuentaValor.creditoniff)
                                 *                              });*/
                            }

                            #endregion

                            if (buscarReferencia_Inven.Count > 0 || buscarCuentasValores.Count > 0)
                            {
                                TempData["mensaje"] = "El inicio de mes se ha realizado exitosamente.";
                                ViewBag.bodegas     = "";
                                dbTran.Commit();
                                return(RedirectToAction("Index"));
                            }

                            TempData["mensaje_error"] =
                                "No se han actualizado los registros porque no se encontraron datos para la(s) bodegas seleccionadas en el mes seleccionado";
                        }
                    }
                    catch (DbEntityValidationException)
                    {
                        dbTran.Rollback();
                        throw;
                    }
                }
            }

            return(View(modelo));
        }