Example #1
0
    public static byte[] ExportExcelLibroCentralizacionAuxiliaresVentaCompra(ClientesContablesModel objCliente, bool InformarMembrete, TipoCentralizacion tipoLibroCentralizacion, string tituloDocumento, FacturaPoliContext db, string FechaInicio = "", string FechaFin = "", int Anio = 0, int Mes = 0)
    {
        byte[] ExcelByteArray        = null;
        string pathFileArchivosLibro = ParseExtensions.Get_AppData_Path("LibroTemplate.xlsx");


        using (XLWorkbook excelFile = new XLWorkbook(pathFileArchivosLibro))
        {
            var workSheet = excelFile.Worksheet(1);

            if (InformarMembrete == true)
            {
                workSheet.Cell("A1").Value = objCliente.RazonSocial;
                workSheet.Cell("A2").Value = objCliente.RUTEmpresa;
                workSheet.Cell("A3").Value = objCliente.Giro;
                workSheet.Cell("A6").Value = objCliente.Direccion;
                workSheet.Cell("A7").Value = objCliente.Ciudad;
                workSheet.Cell("A8").Value = objCliente.Representante;
                workSheet.Cell("A9").Value = objCliente.RUTRepresentante;
            }
            else
            {
                workSheet.Cell("A1").Value = string.Empty;
                workSheet.Cell("A2").Value = string.Empty;
                workSheet.Cell("A3").Value = string.Empty;
                workSheet.Cell("A6").Value = string.Empty;
                workSheet.Cell("A7").Value = string.Empty;
                workSheet.Cell("A8").Value = string.Empty;
                workSheet.Cell("A9").Value = string.Empty;
            }

            if (string.IsNullOrWhiteSpace(tituloDocumento) == false)
            {
                workSheet.Cell("A12").Value = tituloDocumento;
            }
            else
            {
                workSheet.Cell("A12").Value = string.Empty;
            }

            List <AuxiliaresDetalleModel> lstAuxiliares = RescatarLibroCentralizacion(objCliente, tipoLibroCentralizacion, db, FechaInicio, FechaFin, Anio, Mes);

            int NumeroFilaExcel        = 15;
            int NumeroCorrelativoDummy = 1;


            foreach (AuxiliaresDetalleModel tableRow in lstAuxiliares)
            {
                List <string> valuesForExcel = new List <string>();
                //FECHA
                valuesForExcel.Add(ParseExtensions.ToDD_MM_AAAA(tableRow.Fecha));
                //NUMERO CORRELATIVO
                valuesForExcel.Add(NumeroCorrelativoDummy.ToString());
                //TIPO DE DOCUMENTO
                valuesForExcel.Add(ParseExtensions.EnumGetDisplayAttrib(tableRow.TipoDocumento));
                //FOLIO
                valuesForExcel.Add(tableRow.Folio.ToString());
                //RUT PRESTADOR
                valuesForExcel.Add(tableRow.Individuo.PrestadorRut);
                //NOMBRE PRESTADOR
                valuesForExcel.Add(tableRow.Individuo.PrestadorNombre);

                //EXENTO
                valuesForExcel.Add(tableRow.MontoExentoLinea.ToString());
                //MONTO
                valuesForExcel.Add(tableRow.MontoNetoLinea.ToString());
                //IVA
                valuesForExcel.Add(tableRow.MontoIVALinea.ToString());
                //TOTAL
                valuesForExcel.Add(tableRow.MontoTotalLinea.ToString());

                string[] theRow = valuesForExcel.ToArray();
                for (int i = 0; i < theRow.Length; i++)
                {
                    workSheet.Cell(NumeroFilaExcel, i + 1).Value = theRow[i];
                }
                workSheet.Range("A" + NumeroFilaExcel + ":J" + NumeroFilaExcel).Rows().Style.Border.OutsideBorder = XLBorderStyleValues.Medium;
                //workSheet.Range("A" + NumeroFilaExcel + "J" + NumeroFilaExcel).Rows().Style.Border.InsideBorder.Get = XLBorderStyleValues.Double;

                NumeroFilaExcel++;
                NumeroCorrelativoDummy++;
            }

            //OBTIENE TOTALES POR TIPO DE DOCUMENTO
            List <string[]> lstTotalValues = new List <string[]>();
            var             objX           = lstAuxiliares.Select(x => x.TipoDocumento).Distinct();
            foreach (TipoDte tipo_dte in objX)
            {
                lstTotalValues.Add(new string[] {
                    "Total",
                    lstAuxiliares.Where(r => r.TipoDocumento == tipo_dte).Count() + " " + ParseExtensions.EnumGetDisplayAttrib(tipo_dte),
                    ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoExentoLinea)),
                    ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoNetoLinea)),
                    ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoIVALinea)),
                    ParseExtensions.NumeroConPuntosDeMiles((lstAuxiliares.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoTotalLinea)))
                    //+ lstTotalValues.Where(r => r.TipoFactura == tipo_dte).Sum(r => r.ObjTotals.ImpuestoAdicionalMonto)))
                    //MANEJAR A FUTURO IMPUESTO ADICIONAL TOTAL DE LOS OTROS TIPOS?
                });
            }

            lstTotalValues.Add(new string[] {
                "Total",
                lstAuxiliares.Count() + " " + "Comprobantes",
                ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Sum(r => r.MontoExentoLinea)),
                ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Sum(r => r.MontoExentoLinea)),
                ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Sum(r => r.MontoExentoLinea)),
                ParseExtensions.NumeroConPuntosDeMiles(lstAuxiliares.Sum(r => r.MontoExentoLinea))
            });

            /*
             * lstTotalValues.Add(new string[] {
             *      "Total",
             *      lstVentasDelMes.Count() +" " + "Comprobantes",
             *      ParseExtensions.NumeroConPuntosDeMiles(rQuery.Where(CheckNonCredito).Sum(r => r.ObjTotals.MontoExento) - rQuery.Where(CheckCredito).Sum(r => r.ObjTotals.MontoExento)),
             *      ParseExtensions.NumeroConPuntosDeMiles(rQuery.Where(CheckNonCredito).Sum(r => r.ObjTotals.MontoNetoMonto) - rQuery.Where(CheckCredito).Sum(r => r.ObjTotals.MontoNetoMonto)),
             *      ParseExtensions.NumeroConPuntosDeMiles(rQuery.Where(CheckNonCredito).Sum(r => r.ObjTotals.IVAMonto) - rQuery.Where(CheckCredito).Sum(r => r.ObjTotals.IVAMonto)),
             *      ParseExtensions.NumeroConPuntosDeMiles((rQuery.Where(CheckNonCredito).Sum(r => r.ObjTotals.TotalMonto) + rQuery.Sum(r => r.ObjTotals.ImpuestoAdicionalMonto))
             *                                           - (rQuery.Where(CheckCredito).Sum(r => r.ObjTotals.TotalMonto) + rQuery.Where(CheckCredito).Sum(r => r.ObjTotals.ImpuestoAdicionalMonto)))
             * });*/

            if (lstTotalValues.Count > 0)
            {
                //var rangeWithArrays = workSheet.Cell(NumeroFilaExcel, 1).InsertData(lstTotalValues);
                //rangeWithArrays.LastRow().Style.Border.BottomBorder = XLBorderStyleValues.Thick;
                int lastRowLocation = NumeroFilaExcel + 1;
                workSheet.Cell(lastRowLocation, 5).InsertData(lstTotalValues);
            }
            else
            {
                workSheet.Cell(16, 5).InsertData(lstTotalValues);
            }


            workSheet.Columns().AdjustToContents();

            ExcelByteArray = ParseExtensions.GetExcelStream(excelFile);
        }
        if (ExcelByteArray == null)
        {
            return(null);
        }
        else
        {
            return(ExcelByteArray);
        }
    }
Example #2
0
    public static string VerificaRepetidosEnExcelImportSIICoV(List <string[]> CsvSII, ClientesContablesModel objCliente, FacturaPoliContext db)
    {
        TipoCentralizacion tipoCentralizacion = TipoCentralizacion.Ninguno;
        long    folio   = 0;
        TipoDte tipoDte = 0;
        var     IdentificadorRepetidos = new List <string>();
        string  ReturnValues           = "";

        foreach (string[] strFilaCSV in CsvSII)
        {
            if (CsvSII.First() == strFilaCSV)
            {
                if (strFilaCSV[2] == "Tipo Compra")
                {
                    tipoCentralizacion = TipoCentralizacion.Compra;
                }
                else if (strFilaCSV[2] == "Tipo Venta")
                {
                    tipoCentralizacion = TipoCentralizacion.Venta;
                }
                else
                {
                    return(null);
                }

                continue;
            }
            tipoDte = (TipoDte)ParseExtensions.ParseInt(strFilaCSV[1]);
            string RutPrestador = strFilaCSV[3];
            folio = long.Parse(strFilaCSV[5]);

            var SinRepetidos = db.DBLibrosContables.Where(x => x.ClientesContablesModelID == objCliente.ClientesContablesModelID &&
                                                          x.Folio == folio &&
                                                          x.TipoDocumento == tipoDte &&
                                                          x.individuo.RUT == RutPrestador &&
                                                          x.HaSidoConvertidoAVoucher == true &&
                                                          x.TipoLibro == tipoCentralizacion)
                               .Select(x => new { x.Folio, x.VoucherModelID })
                               .Distinct()
                               .ToList();

            if (SinRepetidos != null)
            {
                foreach (var itemRepetido in SinRepetidos)
                {
                    var VoucherEncontrado = db.DBVoucher.Where(x => x.VoucherModelID == itemRepetido.VoucherModelID).Select(x => new { x.DadoDeBaja, x.Tipo }).FirstOrDefault();
                    if (VoucherEncontrado.DadoDeBaja == false && VoucherEncontrado.Tipo == TipoVoucher.Traspaso)
                    {
                        IdentificadorRepetidos.Add(itemRepetido.Folio.ToString());
                    }
                }
            }
        }

        if (IdentificadorRepetidos.Any())
        {
            ReturnValues = string.Join(",", IdentificadorRepetidos);
        }

        return(ReturnValues);
    }
Example #3
0
    public static byte[] ExportExcelLibroVentaCompraNormal(List <string[]> cachedLibroCompra, ClientesContablesModel objCliente, bool InformarMembrete, TipoCentralizacion tipoLibroCentralizacion, string tituloDocumento, string FechaInicio = "", string FechaFin = "", int Anio = 0, int Mes = 0, bool TieneFiltros = false)
    {
        byte[] ExcelByteArray = null;


        string pathFileArchivosLibro = ParseExtensions.Get_AppData_Path("LibroTemplate.xlsx");

        if (tipoLibroCentralizacion == TipoCentralizacion.Compra)
        {
            pathFileArchivosLibro = ParseExtensions.Get_AppData_Path("LibroTemplate.xlsx");
        }
        else if (tipoLibroCentralizacion == TipoCentralizacion.Venta)
        {
            pathFileArchivosLibro = ParseExtensions.Get_AppData_Path("LibroTemplate2.xlsx");
        }



        using (XLWorkbook excelFile = new XLWorkbook(pathFileArchivosLibro))
        {
            var workSheet = excelFile.Worksheet(1);

            FacturaPoliContext db = new FacturaPoliContext();

            if (InformarMembrete == true)
            {
                workSheet.Cell("A1").Value = objCliente.RazonSocial;
                workSheet.Cell("A2").Value = "Rut: " + ParseExtensions.FormatoRutMembrete(objCliente.RUTEmpresa);
                workSheet.Cell("A3").Value = objCliente.Giro;
                workSheet.Cell("A6").Value = objCliente.Direccion;
                workSheet.Cell("A7").Value = objCliente.Ciudad;
                workSheet.Cell("A8").Value = ParseExtensions.FormatoRutMembrete(objCliente.RUTRepresentante) + objCliente.Representante;
                // workSheet.Cell("A9").Value = objCliente.RUTRepresentante;
            }
            else
            {
                workSheet.Cell("A1").Value = string.Empty;
                workSheet.Cell("A2").Value = string.Empty;
                workSheet.Cell("A3").Value = string.Empty;
                workSheet.Cell("A6").Value = string.Empty;
                workSheet.Cell("A7").Value = string.Empty;
                workSheet.Cell("A8").Value = string.Empty;
                workSheet.Cell("A9").Value = string.Empty;
            }

            if (TieneFiltros)
            {
                workSheet.Cell("C4").Value = tituloDocumento;
            }
            else if (!TieneFiltros)
            {
                workSheet.Cell("C4").Value = "TODOS LOS AÑOS";
            }

            if (tipoLibroCentralizacion == TipoCentralizacion.Compra)
            {
                //H a M
                workSheet.Columns("A", "M").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                workSheet.Columns("H:M").Style.NumberFormat.Format     = "#,##0 ;-#,##0";
            }
            else if (tipoLibroCentralizacion == TipoCentralizacion.Venta)
            {
                workSheet.Columns("A", "K").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                workSheet.Columns("H:K").Style.NumberFormat.Format     = "#,##0 ;-#,##0";
            }

            bool     ConversionFechaInicioExitosa = false;
            DateTime dtFechaInicio             = new DateTime();
            bool     ConversionFechaFinExitosa = false;
            DateTime dtFechaFin = new DateTime();

            ConversionFechaInicioExitosa = DateTime.TryParse(FechaInicio, out dtFechaInicio);
            ConversionFechaFinExitosa    = DateTime.TryParse(FechaFin, out dtFechaFin);

            workSheet.Columns("B", "C").Style.DateFormat.Format = "dd-MM-yyyy";

            int NumeroFilaExcel        = 15;
            int NumeroCorrelativoDummy = 1;
            //int IgnoraUltimo = cachedLibroCompra.Count() - 2;

            foreach (String[] tableRow in  cachedLibroCompra)
            {
                List <string> valuesForExcel = new List <string>();

                //Correlativo
                valuesForExcel.Add(tableRow[0]);
                //Fecha documento
                valuesForExcel.Add(tableRow[1]);
                //Fecha contabilización
                valuesForExcel.Add(tableRow[2]);
                //Comprobante
                valuesForExcel.Add(tableRow[3]);
                //Folio
                valuesForExcel.Add(tableRow[4]);
                //Nombre
                valuesForExcel.Add(tableRow[5]);
                //Rut
                valuesForExcel.Add(tableRow[6]);
                //Exento
                valuesForExcel.Add(tableRow[7]);
                //Monto Afecto
                valuesForExcel.Add(tableRow[8]);
                //IVA Recuperable (IVA a secas)
                valuesForExcel.Add(tableRow[9]);
                if (tipoLibroCentralizacion == TipoCentralizacion.Compra)
                {
                    //IVA no recuperable
                    valuesForExcel.Add(tableRow[10]);
                    //IVA uso común
                    valuesForExcel.Add(tableRow[11]);
                }
                //TOTAL
                valuesForExcel.Add(tableRow[12]);

                string[] theRow = valuesForExcel.ToArray();
                for (int i = 0; i < theRow.Length; i++)
                {
                    if (theRow[i] != "-" && !string.IsNullOrWhiteSpace(theRow[i]))
                    {
                        if (i == 1 || i == 2)
                        {
                            DateTime Fecha = ParseExtensions.CreaFechaLiteral(theRow[i]);
                            workSheet.Cell(NumeroFilaExcel, i + 1).Value = Fecha;
                        }
                        else
                        {
                            workSheet.Cell(NumeroFilaExcel, i + 1).Value = theRow[i]; //.Value = theRow[i];
                        }
                    }
                }
                if (tipoLibroCentralizacion == TipoCentralizacion.Compra)
                {
                    workSheet.Range("A" + NumeroFilaExcel + ":M" + NumeroFilaExcel).Rows().Style.Border.OutsideBorder = XLBorderStyleValues.Thin; // Se establece el rango que cubrirá el borde del excel
                                                                                                                                                  //workSheet.Range("A" + NumeroFilaExcel + "J" + NumeroFilaExcel).Rows().Style.Border.InsideBorder.Get = XLBorderStyleValues.Double;
                }
                else if (tipoLibroCentralizacion == TipoCentralizacion.Venta)
                {
                    workSheet.Range("A" + NumeroFilaExcel + ":K" + NumeroFilaExcel).Rows().Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
                }
                NumeroFilaExcel++;
                NumeroCorrelativoDummy++;
            }

            /*   foreach (LibrosContablesModel tableRow in bagDetalleLibros)
             * {
             *     List<string> valuesForExcel = new List<string>();
             *     //FECHA
             *     valuesForExcel.Add(ParseExtensions.ToDD_MM_AAAA(tableRow.FechaDoc));
             *     //NUMERO CORRELATIVO
             *     valuesForExcel.Add(NumeroCorrelativoDummy.ToString());
             *     //TIPO DE DOCUMENTO
             *     valuesForExcel.Add(ParseExtensions.EnumGetDisplayAttrib(tableRow.TipoDocumento));
             *     //FOLIO
             *     valuesForExcel.Add(tableRow.Folio.ToString());
             *     //RUT PRESTADOR
             *     valuesForExcel.Add(tableRow.individuo.RUT);
             *     //NOMBRE PRESTADOR
             *     valuesForExcel.Add(tableRow.individuo.RazonSocial);
             *
             *     //EXENTO
             *     valuesForExcel.Add(tableRow.MontoExento.ToString());
             *     //MONTO
             *     valuesForExcel.Add(tableRow.MontoNeto.ToString());
             *     //IVA
             *     valuesForExcel.Add(tableRow.MontoIva.ToString());
             *     //TOTAL
             *     valuesForExcel.Add(tableRow.MontoTotal.ToString());
             *
             *     string[] theRow = valuesForExcel.ToArray();
             *     for (int i = 0; i < theRow.Length; i++)
             *     {
             *         workSheet.Cell(NumeroFilaExcel, i + 1).SetValue<string>(theRow[i]); //.Value = theRow[i];
             *     }
             *     workSheet.Range("A" + NumeroFilaExcel + ":J" + NumeroFilaExcel).Rows().Style.Border.OutsideBorder = XLBorderStyleValues.Medium;
             *     //workSheet.Range("A" + NumeroFilaExcel + "J" + NumeroFilaExcel).Rows().Style.Border.InsideBorder.Get = XLBorderStyleValues.Double;
             *
             *     NumeroFilaExcel++;
             *     NumeroCorrelativoDummy++;
             * }*/

            //OBTIENE TOTALES POR TIPO DE DOCUMENTO

            List <string[]> lstTotalValues = new List <string[]>();
            var             objX           = cachedLibroCompra.Select(x => x[3]).Distinct();
            if (tipoLibroCentralizacion == TipoCentralizacion.Compra)
            {
                foreach (string tipo_dte in objX)
                {
                    lstTotalValues.Add(new string[] {
                        "Total",
                        cachedLibroCompra.Where(r => r[3] == tipo_dte).Count() + " " + tipo_dte,
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[7]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[8]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[9]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[10]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[11]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[12])))
                    });
                }

                lstTotalValues.Add(new string[] {
                    "Total",
                    cachedLibroCompra.Count() + " " + "Comprobantes",
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[7]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[7])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[8]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[8])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[9]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[9])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[10]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[10])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[11]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[11])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[12]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[12]))))
                });
            }
            else if (tipoLibroCentralizacion == TipoCentralizacion.Venta)
            {
                foreach (string tipo_dte in objX)
                {
                    lstTotalValues.Add(new string[] {
                        "Total",
                        cachedLibroCompra.Where(r => r[3] == tipo_dte).Count() + " " + tipo_dte,
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[7]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[8]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[9]))),
                        ParseExtensions.NumeroConPuntosDeMiles(cachedLibroCompra.Where(r => r[3] == tipo_dte).Sum(x => int.Parse(x[12])))
                    });
                }

                lstTotalValues.Add(new string[] {
                    "Total",
                    cachedLibroCompra.Count() + " " + "Comprobantes",
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[7]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[7])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[8]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[8])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[9]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[9])))),
                    ParseExtensions.NumeroConPuntosDeMiles((cachedLibroCompra.Where(w => bool.Parse(w[13]) == false).Sum(r => int.Parse(r[12]))) - (cachedLibroCompra.Where(w => bool.Parse(w[13]) == true).Sum(r => int.Parse(r[12]))))
                });
            }



            /*}
             *
             *
             *          List<string[]> lstTotalValues = new List<string[]>();
             *          var objX = bagDetalleLibros.Select(x => x.TipoDocumento).Distinct();
             *          foreach (TipoDte tipo_dte in objX)
             *          {
             *              lstTotalValues.Add(new string[] {
             *                  "Total",
             *                  bagDetalleLibros.Where(r => r.TipoDocumento == tipo_dte).Count() +" " + ParseExtensions.EnumGetDisplayAttrib(tipo_dte),
             *                  ParseExtensions.NumeroConPuntosDeMiles(bagDetalleLibros.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoExento)),
             *                  ParseExtensions.NumeroConPuntosDeMiles(bagDetalleLibros.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoNeto)),
             *                  ParseExtensions.NumeroConPuntosDeMiles(bagDetalleLibros.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoIva)),
             *                  ParseExtensions.NumeroConPuntosDeMiles((bagDetalleLibros.Where(r => r.TipoDocumento == tipo_dte).Sum(r => r.MontoTotal)))
             *              });
             *          }
             *
             *          lstTotalValues.Add(new string[] {
             *                  "Total",
             *                  bagDetalleLibros.Count() +" " + "Comprobantes",
             *                  ParseExtensions.NumeroConPuntosDeMiles( (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == false).Sum(r => r.MontoExento)) - (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == true).Sum(r => r.MontoExento)) ),
             *                  ParseExtensions.NumeroConPuntosDeMiles( (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == false).Sum(r => r.MontoNeto)) - (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == true).Sum(r => r.MontoNeto)) ),
             *                  ParseExtensions.NumeroConPuntosDeMiles( (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == false).Sum(r => r.MontoIva)) - (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == true).Sum(r => r.MontoIva)) ),
             *                  ParseExtensions.NumeroConPuntosDeMiles( (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == false).Sum(r => r.MontoTotal)) - (bagDetalleLibros.Where(w => w.TipoDocumento.EsUnaNotaCredito() == true).Sum(r => r.MontoTotal)) )
             *          });*/

            if (lstTotalValues.Count > 0)
            {
                int lastRowLocation = NumeroFilaExcel + 1;
                workSheet.Cell(lastRowLocation, 6).InsertData(lstTotalValues);
            }
            else
            {
                workSheet.Cell(16, 6).InsertData(lstTotalValues);
            }
            workSheet.Columns().AdjustToContents();
            ExcelByteArray = ParseExtensions.GetExcelStream(excelFile);
        }
        if (ExcelByteArray == null)
        {
            return(null);
        }
        else
        {
            return(ExcelByteArray);
        }
    }
Example #4
0
    public static List <AuxiliaresDetalleModel> RescatarLibroCentralizacion(ClientesContablesModel objCliente, TipoCentralizacion tipoLibroCentralizacion, FacturaPoliContext db, string FechaInicio = "", string FechaFin = "", int Anio = 0, int Mes = 0)
    {
        bool     ConversionFechaInicioExitosa = false;
        DateTime dtFechaInicio             = new DateTime();
        bool     ConversionFechaFinExitosa = false;
        DateTime dtFechaFin = new DateTime();

        ConversionFechaInicioExitosa = DateTime.TryParse(FechaInicio, out dtFechaInicio);
        ConversionFechaFinExitosa    = DateTime.TryParse(FechaFin, out dtFechaFin);

        var CuentasContableCliente = db.DBCuentaContable.Where(w => w.ClientesContablesModelID == objCliente.ClientesContablesModelID && w.TipoCentralizacionAuxiliares == tipoLibroCentralizacion);
        List <VoucherModel>           LstVoucher = db.DBVoucher.Where(r => r.ClientesContablesModelID == objCliente.ClientesContablesModelID && r.DadoDeBaja == false).ToList();
        List <AuxiliaresDetalleModel> LaLista    = new List <AuxiliaresDetalleModel>();

        foreach (var voucher in LstVoucher)
        {
            List <DetalleVoucherModel> lstDetalleVoucher = voucher.ListaDetalleVoucher.Where(p => CuentasContableCliente.Any(ee => ee.CodInterno == p.ObjCuentaContable.CodInterno)).ToList();
            foreach (var detalleVoucher in lstDetalleVoucher)
            {
                List <AuxiliaresModel> lstAuxiliar = db.DBAuxiliares.Where(r => r.DetalleVoucherModelID == detalleVoucher.DetalleVoucherModelID).ToList();
                foreach (var auxiliar in lstAuxiliar)
                {
                    List <AuxiliaresDetalleModel> LstDetalleAuxiliares = db.DBAuxiliaresDetalle.Where(r => r.AuxiliaresModelID == auxiliar.AuxiliaresModelID).ToList();
                    if (Anio != 0)
                    {
                        LstDetalleAuxiliares = LstDetalleAuxiliares.Where(r => r.FechaContabilizacion.Year == Anio).ToList();
                    }
                    if (Mes != 0)
                    {
                        LstDetalleAuxiliares = LstDetalleAuxiliares.Where(r => r.FechaContabilizacion.Month == Mes).ToList();
                    }
                    if (ConversionFechaInicioExitosa)
                    {
                        LstDetalleAuxiliares = LstDetalleAuxiliares.Where(r => r.FechaContabilizacion >= dtFechaInicio).ToList();
                    }
                    if (ConversionFechaFinExitosa)
                    {
                        LstDetalleAuxiliares = LstDetalleAuxiliares.Where(r => r.FechaContabilizacion <= dtFechaFin).ToList();
                    }
                    LaLista.AddRange(LstDetalleAuxiliares);
                }
            }
        }
        return(LaLista);
    }
Example #5
0
    public static PaginadorModel RescatarLibroCentralizacion(ClientesContablesModel objCliente, TipoCentralizacion tipoLibroCentralizacion, FacturaPoliContext db, string FechaInicio = "", string FechaFin = "", int Anio = 0, int Mes = 0, int pagina = 0, int cantidadRegistrosPorPagina = 0, string Rut = "", string RazonSocial = "", int Folio = 0)
    {
        bool     ConversionFechaInicioExitosa = false;
        DateTime dtFechaInicio             = new DateTime();
        bool     ConversionFechaFinExitosa = false;
        DateTime dtFechaFin = new DateTime();

        List <LibrosContablesModel> lstlibroData = new List <LibrosContablesModel>();

        if (string.IsNullOrWhiteSpace(FechaInicio) == false && string.IsNullOrWhiteSpace(FechaFin) == false)
        {
            ConversionFechaInicioExitosa = DateTime.TryParseExact(FechaInicio, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dtFechaInicio);
            ConversionFechaFinExitosa    = DateTime.TryParseExact(FechaFin, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dtFechaFin);
        }

        // Solo si es convertido a voucher se listará en el libro de compras.

        IQueryable <LibrosContablesModel> lstlibro = (from LibrosContables in db.DBLibrosContables
                                                      join Vouchers in db.DBVoucher on LibrosContables.VoucherModelID equals Vouchers.VoucherModelID
                                                      where Vouchers.DadoDeBaja == false && LibrosContables.HaSidoConvertidoAVoucher == true &&
                                                      Vouchers.ClientesContablesModelID == objCliente.ClientesContablesModelID && Vouchers.Tipo == TipoVoucher.Traspaso &&
                                                      LibrosContables.TipoLibro == tipoLibroCentralizacion

                                                      select LibrosContables);


        //IQueryable<LibrosContablesModel> lstlibro = db.DBLibrosContables.Where(r => r.ClientesContablesModelID == objCliente.ClientesContablesModelID && r.TipoLibro == tipoLibroCentralizacion &&  r.HaSidoConvertidoAVoucher == true);

        //(r => r.Fecha >= dtFechaInicio && r.Fecha <= dtFechaFin);

        if (Anio != 0 && Anio > 0)
        {
            lstlibro = lstlibro.Where(r => r.FechaContabilizacion.Year == Anio);
        }
        if (Mes != 0 && Mes > 0)
        {
            lstlibro = lstlibro.Where(r => r.FechaContabilizacion.Month == Mes);
        }
        if (ConversionFechaInicioExitosa && ConversionFechaInicioExitosa)
        {
            lstlibro = lstlibro.Where(r => r.FechaContabilizacion >= dtFechaInicio && r.FechaContabilizacion <= dtFechaFin);
        }
        if (!string.IsNullOrWhiteSpace(Rut))
        {
            lstlibro = lstlibro.Where(r => r.individuo.RUT.Contains(Rut));
        }
        if (!string.IsNullOrWhiteSpace(RazonSocial))
        {
            lstlibro = lstlibro.Where(r => r.individuo.RazonSocial.Contains(RazonSocial));
        }
        if (Folio != 0 && Folio > 0)
        {
            lstlibro = lstlibro.Where(r => r.Folio == Folio);
        }


        int totalDeRegistros = lstlibro.Count();

        if (cantidadRegistrosPorPagina != 0)
        {
            lstlibroData = lstlibro.OrderBy(r => r.FechaContabilizacion)
                           .Skip((pagina - 1) * cantidadRegistrosPorPagina)
                           .Take(cantidadRegistrosPorPagina).ToList();
        }
        else if (cantidadRegistrosPorPagina == 0)
        {
            lstlibroData = lstlibro.OrderBy(r => r.FechaContabilizacion).ToList();
        }

        List <string[]> ReturnValues = new List <string[]>();

        decimal TotalExento           = 0;
        decimal TotalNeto             = 0;
        decimal TotalIva              = 0;
        decimal TotalIvaNoRecuperable = 0;
        decimal TotalIvaUsocomun      = 0;
        decimal TotalMontoTotal       = 0;

        var TotalesNotasDeCredito = (from lstLibro in lstlibroData.Where(x => x.TipoDocumento.EsUnaNotaCredito())
                                     group lstLibro by 1 into g
                                     select new
        {
            TotalMontoExento = g.Sum(x => x.MontoExento),
            TotalMontoIva = g.Sum(x => x.MontoIva),
            TotalMontoNeto = g.Sum(x => x.MontoNeto),
            TotalMontoIvaNoRecuperable = g.Sum(x => x.MontoIvaNoRecuperable),
            TotalMontoIvaUsocomun = g.Sum(x => x.MontoIvaUsocomun),
            TotalMontoTotal = g.Sum(x => x.MontoTotal)
        }).FirstOrDefault();


        int NumeroRow = 1;

        foreach (LibrosContablesModel Item in lstlibroData)
        {
            string[] BalanceRow = new string[] { "-", "-", "-", "-", "-", "-", "-", "0", "0", "0", "0", "0", "0", "False" };
            BalanceRow[0] = NumeroRow.ToString();
            BalanceRow[1] = ParseExtensions.ToDD_MM_AAAA(Item.FechaDoc);
            BalanceRow[2] = ParseExtensions.ToDD_MM_AAAA(Item.FechaContabilizacion);
            BalanceRow[3] = ParseExtensions.EnumGetDisplayAttrib(Item.TipoDocumento);
            if (Item.FolioHasta > 0 && Item.Folio > 0)
            {
                BalanceRow[4] = Item.Folio.ToString() + " - " + Item.FolioHasta.ToString();
            }
            else
            {
                BalanceRow[4] = Item.Folio.ToString();
            }
            if (Item.individuo != null)
            {
                //Nombre prestador
                BalanceRow[5] = Item.individuo.RazonSocial;
                //Rut prestador
                BalanceRow[6] = Item.individuo.RUT;
            }
            else
            {
                //Nombre prestador
                BalanceRow[5] = "";
                //Rut prestador
                BalanceRow[6] = "";
            }


            BalanceRow[7]  = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoExento);
            BalanceRow[8]  = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoNeto);
            BalanceRow[9]  = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoIva);
            BalanceRow[10] = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoIvaNoRecuperable);
            BalanceRow[11] = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoIvaUsocomun);
            BalanceRow[12] = ParseExtensions.NumeroConPuntosDeMiles(Item.MontoTotal);


            if (!Item.TipoDocumento.EsUnaNotaCredito())
            {
                TotalExento           += Item.MontoExento;
                TotalNeto             += Item.MontoNeto;
                TotalIva              += Item.MontoIva;
                TotalIvaNoRecuperable += Item.MontoIvaNoRecuperable;
                TotalIvaUsocomun      += Item.MontoIvaUsocomun;
                TotalMontoTotal       += Item.MontoTotal;
            }

            BalanceRow[13] = "True";

            if (Item.TipoDocumento.EsUnaNotaCredito() == false)
            {
                BalanceRow[13] = "False";
            }

            ReturnValues.Add(BalanceRow);

            NumeroRow++;
        }

        if (TotalesNotasDeCredito != null)
        {
            string[] Totales = new string[] { "-", "-", "-", "-", "-", "-", "-", "0", "0", "0", "0", "0", "0", "False" };
            Totales[6]  = "TOTAL: ";
            Totales[7]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalExento) - Math.Abs(TotalesNotasDeCredito.TotalMontoExento));
            Totales[8]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalNeto) - Math.Abs(TotalesNotasDeCredito.TotalMontoNeto));
            Totales[9]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIva) - Math.Abs(TotalesNotasDeCredito.TotalMontoIva));
            Totales[10] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIvaNoRecuperable) - Math.Abs(TotalesNotasDeCredito.TotalMontoIvaNoRecuperable));
            Totales[11] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIvaUsocomun) - Math.Abs(TotalesNotasDeCredito.TotalMontoIvaUsocomun));
            Totales[12] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalMontoTotal) - Math.Abs(TotalesNotasDeCredito.TotalMontoTotal));

            ReturnValues.Add(Totales);
        }
        else
        {
            string[] Totales = new string[] { "-", "-", "-", "-", "-", "-", "-", "0", "0", "0", "0", "0", "0", "False" };
            Totales[6]  = "TOTAL: ";
            Totales[7]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalExento));
            Totales[8]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalNeto));
            Totales[9]  = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIva));
            Totales[10] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIvaNoRecuperable));
            Totales[11] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalIvaUsocomun));
            Totales[12] = ParseExtensions.NumeroConPuntosDeMiles(Math.Abs(TotalMontoTotal));

            ReturnValues.Add(Totales);
        }

        var Paginador = new PaginadorModel();

        Paginador.ResultStringArray  = ReturnValues;
        Paginador.PaginaActual       = pagina;
        Paginador.TotalDeRegistros   = totalDeRegistros;
        Paginador.RegistrosPorPagina = cantidadRegistrosPorPagina;
        Paginador.ValoresQueryString = new RouteValueDictionary();

        if (cantidadRegistrosPorPagina != 25)
        {
            Paginador.ValoresQueryString["cantidadRegistrosPorPagina"] = cantidadRegistrosPorPagina;
        }
        if (Anio != 0)
        {
            Paginador.ValoresQueryString["Anio"] = Anio;
        }
        if (Mes != 0)
        {
            Paginador.ValoresQueryString["Mes"] = Mes;
        }
        if (!string.IsNullOrWhiteSpace(Rut))
        {
            Paginador.ValoresQueryString["Rut"] = Rut;
        }
        if (!string.IsNullOrWhiteSpace(RazonSocial))
        {
            Paginador.ValoresQueryString["RazonSocial"] = RazonSocial;
        }
        if (ConversionFechaInicioExitosa && ConversionFechaInicioExitosa)
        {
            Paginador.ValoresQueryString["FechaInicio"] = FechaInicio;
            Paginador.ValoresQueryString["FechaFin"]    = FechaFin;
        }

        return(Paginador);
    }
Example #6
0
        public static bool InsertBoletasCovLinq(ClientesContablesModel ObjCliente, List <BoletasExcelModel> BoletasItems, TipoCentralizacion Tipo, FacturaPoliContext db)
        {
            using (var dbTransaction = db.Database.BeginTransaction())
            {
                List <BoletasCoVModel> ListaBoletasHijo = new List <BoletasCoVModel>();

                CuentaContableModel CuentaIva = ParametrosClienteModel.GetCuentaContableIvaAUsarObj(ObjCliente, db); //cuenta Iva

                //Al importar un libro hay 2 opciones para saber si es compra o venta
                //1.- al momento de  importar  la intefaz grafica dirá que elija si es compra o venta
                //2.- la segunda forma es la siguiente -> tomar el primer registro y dependiendo de su centralización indicar si es compra o venta.
                //Ambas opciones pueden llegar a cometer errores por ende tener en cuenta esto para cuando el desarrollo ya esté avanzado

                decimal TotalNeto = 0;
                decimal TotalIva  = 0;

                TipoReceptor tipoReceptor = new TipoReceptor();

                if (Tipo == TipoCentralizacion.Compra)
                {
                    tipoReceptor = TipoReceptor.PR;
                }
                if (Tipo == TipoCentralizacion.Venta)
                {
                    tipoReceptor = TipoReceptor.CL;
                }


                DateTime Fecha = BoletasItems.FirstOrDefault().Fecha;
                int?     nullableProxVoucherNumber = ParseExtensions.GetNumVoucher(ObjCliente, db, Fecha.Month, Fecha.Year);
                int      baseNumberFolio           = nullableProxVoucherNumber.Value;

                List <BoletasExcelModel> LosQueNoPudieronInsertarse = new List <BoletasExcelModel>();
                List <VoucherModel>      LstVoucher = new List <VoucherModel>();
                //en el futuro hacer estas agrupaciones por día -> un voucher tendrá tantos registros como todos los que caigan en el mismo día (se sugiere hacer un group by con este criterio en el foreach)
                foreach (BoletasExcelModel ItemBoleta in BoletasItems)
                {
                    List <DetalleVoucherModel> detalleVoucher        = new List <DetalleVoucherModel>();
                    QuickReceptorModel         Receptor              = QuickReceptorModel.CrearOActualizarPrestadorPorRut(ItemBoleta.Rut, ItemBoleta.RazonSocial, ObjCliente, db, tipoReceptor.ToString());
                    CuentaContableModel        CuentaAuxiliar        = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaAuxiliar, ObjCliente); //CuentaAuxiliar
                    CuentaContableModel        CuentaProveedorDeudor = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaContable, ObjCliente); //Cuenta ProveedorDeudor

                    if (CuentaProveedorDeudor == null)
                    {
                        throw new Exception("La cuenta de proveedor deudor debe existir para este cliente contable");
                    }

                    //Cada uno de estos detallevouchers que se hará lleva la misma logica que los libros de compra que se insertan a día de hoy -> revisar la inserción de libros de compra y venta ya existente
                    VoucherModel NuevoVoucher = new VoucherModel();
                    NuevoVoucher.TipoOrigen               = Tipo == TipoCentralizacion.Compra ? "Compra" : "Venta";
                    NuevoVoucher.TipoOrigenVoucher        = Tipo == TipoCentralizacion.Compra ? TipoOrigen.Compra : TipoOrigen.Venta;
                    NuevoVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID;
                    NuevoVoucher.FechaEmision             = ItemBoleta.Fecha;
                    NuevoVoucher.Tipo               = TipoVoucher.Traspaso;
                    NuevoVoucher.NumeroVoucher      = baseNumberFolio;
                    NuevoVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(baseNumberFolio, Fecha);
                    string FullDescripcionDocOriginal = (int)ItemBoleta.TipoDocumento + " / Folio: " + ItemBoleta.NumeroDeDocumento + " / " + Receptor != null ? Receptor.NombreFantasia : "";
                    NuevoVoucher.Glosa = FullDescripcionDocOriginal;  //Revisar como debe ser creada la glosa es probable que se haga con la misma logica que con la importación de libros de compra y ventas

                    //Encerrar la logica de las compras y las ventas en otra función?

                    decimal             CostoNeto            = ItemBoleta.Neto;
                    decimal             MontoIva             = ItemBoleta.Iva;
                    decimal             MontoTotal           = ItemBoleta.Neto + ItemBoleta.Iva;
                    DetalleVoucherModel LineaCuentaCorriente = new DetalleVoucherModel();
                    DetalleVoucherModel LineaDetalleIva      = new DetalleVoucherModel();
                    DetalleVoucherModel LineaDetalleAuxiliar = new DetalleVoucherModel();

                    LineaCuentaCorriente.FechaDoc          = ItemBoleta.Fecha;
                    LineaCuentaCorriente.ObjCuentaContable = CuentaProveedorDeudor;
                    LineaCuentaCorriente.GlosaDetalle      = "Costo Neto" + FullDescripcionDocOriginal;

                    LineaDetalleIva.FechaDoc          = ItemBoleta.Fecha;
                    LineaDetalleIva.ObjCuentaContable = CuentaIva;
                    LineaDetalleIva.GlosaDetalle      = "Iva Compras" + FullDescripcionDocOriginal;

                    LineaDetalleAuxiliar.FechaDoc          = ItemBoleta.Fecha;
                    LineaDetalleAuxiliar.ObjCuentaContable = CuentaAuxiliar;
                    LineaDetalleAuxiliar.GlosaDetalle      = "";

                    if (ItemBoleta.TipoDocumento.EsUnaNotaCredito())
                    {
                        LineaCuentaCorriente.MontoDebe  = 0;
                        LineaCuentaCorriente.MontoHaber = CostoNeto;

                        LineaDetalleIva.MontoDebe  = 0;
                        LineaDetalleIva.MontoHaber = MontoIva;

                        LineaDetalleAuxiliar.MontoDebe  = MontoTotal;
                        LineaDetalleAuxiliar.MontoHaber = 0;
                    }
                    else
                    {
                        LineaCuentaCorriente.MontoDebe  = CostoNeto;
                        LineaCuentaCorriente.MontoHaber = 0;
                        //detalle voucher 2 -> Iva

                        LineaDetalleIva.MontoDebe  = MontoIva;
                        LineaDetalleIva.MontoHaber = 0;
                        //detalle voucher 3 -> Auxiliar}

                        LineaDetalleAuxiliar.MontoDebe  = 0;
                        LineaDetalleAuxiliar.MontoHaber = MontoTotal;
                    }

                    detalleVoucher.Add(LineaCuentaCorriente);
                    detalleVoucher.Add(LineaDetalleIva);
                    detalleVoucher.Add(LineaDetalleAuxiliar);

                    if (detalleVoucher.Sum(x => x.MontoDebe) == detalleVoucher.Sum(x => x.MontoHaber))
                    {
                        NuevoVoucher.ListaDetalleVoucher = detalleVoucher;

                        baseNumberFolio++;
                    }
                    else
                    {
                        LosQueNoPudieronInsertarse.Add(ItemBoleta);
                    }

                    //revisar si funciona  de esta manera
                    foreach (DetalleVoucherModel ItemDetalle in NuevoVoucher.ListaDetalleVoucher.Where(x => x.ObjCuentaContable == CuentaAuxiliar).ToList())
                    {
                        AuxiliaresModel     Auxiliar = new AuxiliaresModel();
                        CuentaContableModel CtaAux   = ItemDetalle.ObjCuentaContable;
                        Auxiliar.LineaNumeroDetalle = NuevoVoucher.ListaDetalleVoucher.Count;
                        Auxiliar.MontoTotal         = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber;
                        Auxiliar.objCtaContable     = CtaAux;

                        ItemDetalle.Auxiliar = Auxiliar;
                        List <AuxiliaresDetalleModel> lstAuxDetalle   = new List <AuxiliaresDetalleModel>();
                        AuxiliaresDetalleModel        AuxiliarDetalle = new AuxiliaresDetalleModel();

                        decimal MontoTotalLinea = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber;

                        AuxiliarDetalle.TipoDocumento         = ItemBoleta.TipoDocumento;
                        AuxiliarDetalle.Fecha                 = ItemBoleta.Fecha;
                        AuxiliarDetalle.FechaContabilizacion  = ItemBoleta.Fecha;
                        AuxiliarDetalle.Folio                 = ItemBoleta.NumeroDeDocumento;
                        AuxiliarDetalle.Individuo2            = Receptor;
                        AuxiliarDetalle.MontoNetoLinea        = 0;
                        AuxiliarDetalle.MontoExentoLinea      = 0;
                        AuxiliarDetalle.MontoIVALinea         = 0;
                        AuxiliarDetalle.MontoTotalLinea       = MontoTotalLinea;
                        AuxiliarDetalle.AuxiliaresModelID     = Auxiliar.AuxiliaresModelID;
                        AuxiliarDetalle.MontoIVANoRecuperable = 0;
                        AuxiliarDetalle.MontoIVAUsoComun      = 0;
                        AuxiliarDetalle.MontoIVAActivoFijo    = 0;

                        lstAuxDetalle.Add(AuxiliarDetalle);
                        Auxiliar.ListaDetalleAuxiliares = lstAuxDetalle;
                    }


                    //BaseNumFolio
                    List <DetalleVoucherModel> detalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.Auxiliar != null)).ToList();

                    db.DBVoucher.AddRange(LstVoucher);
                    db.SaveChanges();

                    if (detalle.Any())
                    {
                        detalle.ForEach(x => { x.Auxiliar.DetalleVoucherModelID = x.DetalleVoucherModelID; });

                        foreach (AuxiliaresModel itemAuxiliar in detalle.Select(x => x.Auxiliar).ToArray())
                        {
                            db.Entry(itemAuxiliar).State = System.Data.Entity.EntityState.Modified;
                        }
                        db.SaveChanges();
                    }
                }
            }


            return(false);
        }
Example #7
0
        public static bool InsertBoletasCoV(ClientesContablesModel ObjCliente, List <BoletasExcelModel> BoletasItems, TipoCentralizacion Tipo)
        {
            bool result = false;


            using (IDbConnection db = new MySqlConnection(ConfigurationManager.ConnectionStrings["ProdConnection"].ConnectionString))
            {
                db.Open();
                using (var dbContextTransaction = db.BeginTransaction())
                {
                    //Obtener la información de cada hijo y insertar al final de la ejecución
                    List <BoletasCoVModel> ListaBoletasHijo = new List <BoletasCoVModel>();

                    //Recuerda tener la cuenta Auxiliar como prioritaria para crear los registros de los auxiliares.

                    decimal TotalNeto = 0;
                    decimal TotalIva  = 0;

                    TipoReceptor tipoReceptor = new TipoReceptor();


                    if (Tipo == TipoCentralizacion.Compra)
                    {
                        tipoReceptor = TipoReceptor.PR;
                    }
                    if (Tipo == TipoCentralizacion.Venta)
                    {
                        tipoReceptor = TipoReceptor.CL;
                    }

                    //esto debe ser insertado al final.


                    // HASTA AQUÍ ESTAMOS BIEN

                    //QuickReceptorModel.CrearOActualizarPrestadorPorRut(RutDupleDuple, RazonSocialDuple, objCliente, db, tipoReceptor);

                    int CuentaContableIDIvaAUsar = ParametrosClienteModel.GetCuentaContableIvaAUsar(ObjCliente);
                    //Son 3 detalles, este pertenece a la que contenga el iva

                    foreach (BoletasExcelModel ItemBoleta in BoletasItems)
                    {
                        List <DetalleVoucherModelDTO> detalleVoucher = new List <DetalleVoucherModelDTO>();

                        QuickReceptorModel Receptor = QuickReceptorModel.CrearOActualizarPrestadorPorRut(ItemBoleta.Rut, ItemBoleta.RazonSocial, ObjCliente, tipoReceptor.ToString());

                        int CuentaContableSeleccionada = 0;



                        string QueryCuentaContableAuxiliar = $"SELECT CuentaContableModelID FROM CuentaContableModel WHERE ClientesContablesModelID = {ObjCliente.ClientesContablesModelID} AND CodInterno ={ItemBoleta.CuentaAuxiliar}";
                        int    IdCuentaContableAuxiliar    = db.Query <int>(QueryCuentaContableAuxiliar).FirstOrDefault(); //esta es la cuenta que lleva la suma del Iva y del Neto


                        //Crear query de conseguir la cuenta asociada de IVA
                        string QueryGetCuentaContable = $"SELECT CuentaContableModelID FROM CuentaContableModel WHERE ClientesContablesModelID = {ObjCliente.ClientesContablesModelID} AND CodInterno ={ItemBoleta.CuentaContable}";
                        var    IdCuentaContable       = db.Query <int>(QueryGetCuentaContable).FirstOrDefault(); // Esta es la cuenta del neto

                        //Recuerda se insertan 2 detallevoucher ya que uno pertenece al neto y el otro al iva
                        string QueryInsertVoucher = "INSERT INTO VoucherModel (ClientesContablesModelID,Glosa,FechaEmision,Tipo,NumeroVoucher,DadoDeBaja,CentroDeCosto_CentroCostoModelID,TipoOrigen,TipoOrigenVoucher)" +
                                                    "VALUES(@ClientesContablesModelID,@Glosa,@FechaEmision,@Tipo,@NumeroVoucher,@DadoDeBaja,@CentroDeCosto_CentroCostoModelID,@TipoOrigen,@TipoOrigenVoucher)";

                        var QueryVoucherResult = db.Execute(QueryInsertVoucher,
                                                            new {
                            ClientesContablesModelID = ObjCliente.ClientesContablesModelID,
                            Glosa         = "BOLETA DE COMPRA " + ItemBoleta.CuentaContable,
                            FechaEmision  = ItemBoleta.Fecha,
                            Tipo          = "",
                            NumeroVoucher = 0,
                            DadoDeBaja    = 0,
                            CentroDeCosto_CentroCostoModelID = 0,
                            TipoOrigen        = 1,
                            TipoOrigenVoucher = 1
                        });

                        string QueryObtenerUltimoVoucher = $"SELECT MAX(VoucherModelID) FROM VoucherModel WHERE ClientesContablesModelID = {ObjCliente.ClientesContablesModelID}";
                        int    ultimoVoucherId           = db.Query <int>(QueryObtenerUltimoVoucher).FirstOrDefault();

                        //Se generan 2 lineas
                        string QueryInsertDetalleVoucher = "INSERT INTO DetalleVoucherModel (VoucherModelID,MontoDebe,MontoHaber,GlosaDetalle,FechaDoc,Auxiliar_AuxiliaresModelID,ObjCuentaContable_CuentaContableModelID,CentroCostoID)" +
                                                           "VALUES (@VoucherModelID,@MontoDebe,@MontoHaber,@GlosaDetalle,@FechaDoc,@Auxiliar_AuxiliaresModelID,@ObjCuentaContable_CuentaContableModelID,@CentroCostoID)";

                        var QueryDetalleVoucherResult = db.Execute(QueryInsertDetalleVoucher,
                                                                   new
                        {
                            VoucherModelID             = ultimoVoucherId,
                            MontoDebe                  = ItemBoleta.Neto,
                            MontoHaber                 = 0,
                            GlosaDetalle               = "BOLETA DE " + ItemBoleta.CuentaContable,
                            FechaDoc                   = ItemBoleta.Fecha,
                            Auxiliar_AuxiliaresModelID = 0,
                            ObjCuentaContable_CuentaContableModelID = IdCuentaContable,
                            CentroCostoID = ItemBoleta.CentroDeCostos
                        });

                        string QueryObtenerUltimoDetalleVoucher = $"SELECT MAX(DetalleVoucherModelID) FROM DetalleVoucherModel WHERE ClientesContablesModelID = {ObjCliente.ClientesContablesModelID}";
                        int    ultimoDetalleVoucherId           = db.Query <int>(QueryObtenerUltimoDetalleVoucher).FirstOrDefault();

                        detalleVoucher.Add(new DetalleVoucherModelDTO
                        {
                            DetalleVoucherModelID = ultimoDetalleVoucherId,
                            VoucherModelID        = ultimoVoucherId,
                            MontoDebe             = ItemBoleta.Neto,
                            MontoHaber            = 0,
                            GlosaDetalle          = "BOLETA DE " + ItemBoleta.CuentaContable,
                            FechaDoc              = ItemBoleta.Fecha,
                            AuxiliaresModelID     = 0,
                            CuentaContableModelID = IdCuentaContable,
                            CentroCostoID         = ItemBoleta.CentroDeCostos
                        });
                        //Execute
                        string QueryInsertDetalleVoucherDos = "INSERT INTO DetalleVoucherModel (VoucherModelID,MontoDebe,MontoHaber,GlosaDetalle,FechaDoc,RazonSocialDoc,Auxiliar_AuxiliaresModelID,ObjCuentaContable_CuentaContableModelID,CentroCostoID)" +
                                                              "VALUES (@VoucherModelID,@MontoDebe,@MontoHaber,@GlosaDetalle,@FechaDoc,@RazonSocialDoc,@Auxiliar_AuxiliaresModelID,@ObjCuentaContable_CuentaContableModelID,@CentroCostoID)";

                        var QueryDetalleVoucherResultDos = db.Execute(QueryInsertDetalleVoucherDos,
                                                                      new
                        {
                            VoucherModelID             = ultimoVoucherId,
                            MontoDebe                  = 0,
                            MontoHaber                 = ItemBoleta.Iva,
                            GlosaDetalle               = "BOLETA DE " + ItemBoleta.CuentaContable,
                            FechaDoc                   = ItemBoleta.Fecha,
                            Auxiliar_AuxiliaresModelID = 0,
                            ObjCuentaContable_CuentaContableModelID = CuentaContableSeleccionada,
                            CentroCostoID = ItemBoleta.CentroDeCostos
                        });

                        string QueryObtenerUltimoDetalleVoucherDos = $"SELECT MAX(DetalleVoucherModelID) FROM DetalleVoucherModel WHERE ClientesContablesModelID = {ObjCliente.ClientesContablesModelID}";
                        int    ultimoDetalleVoucherIdDos           = db.Query <int>(QueryInsertDetalleVoucherDos).FirstOrDefault();

                        detalleVoucher.Add(new DetalleVoucherModelDTO
                        {
                            DetalleVoucherModelID = ultimoDetalleVoucherIdDos,
                            VoucherModelID        = ultimoVoucherId,
                            MontoDebe             = 0,
                            MontoHaber            = ItemBoleta.Iva,
                            GlosaDetalle          = "BOLETA DE " + ItemBoleta.CuentaContable,
                            FechaDoc              = ItemBoleta.Fecha,
                            AuxiliaresModelID     = 0,
                            CuentaContableModelID = IdCuentaContable,
                            CentroCostoID         = ItemBoleta.CentroDeCostos
                        });
                        //Execute

                        //falta la logica de los auxiliares.

                        //por cada detalle voucher se crea un auxiliar

                        foreach (DetalleVoucherModelDTO item in detalleVoucher)
                        {
                            //revisar como funciona la lógica de esta parte ¿Es completamente necesario

                            //AuxiliaresModel Auxiliar = new AuxiliaresModel();

                            //Auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID;
                            //Auxiliar.LineaNumeroDetalle = nuevoVoucher.ListaDetalleVoucher.Count;
                            //Auxiliar.MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber;
                            //Auxiliar.objCtaContable = NuevoDetalleVoucher.ObjCuentaContable;
                            ////Auxiliar.DetalleVoucherModelID = NuevoDetalleVoucher.DetalleVoucherModelID;
                            //db.DBAuxiliares.Add(Auxiliar);

                            //AuxiliaresDetalleModel nuevoAuxDetalle = new AuxiliaresDetalleModel();
                            //nuevoAuxDetalle.TipoDocumento = entradaLibro.TipoDocumento;
                            //nuevoAuxDetalle.Fecha = entradaLibro.FechaDoc;
                            //nuevoAuxDetalle.FechaContabilizacion = entradaLibro.FechaContabilizacion;

                            ////revisar
                            //// nuevoAuxDetalle.FechaVencimiento =   entradaLibro.fe
                            //nuevoAuxDetalle.Folio = entradaLibro.Folio;
                            //nuevoAuxDetalle.Individuo2 = entradaLibro.individuo;
                            //nuevoAuxDetalle.MontoNetoLinea = entradaLibro.MontoNeto;
                            //nuevoAuxDetalle.MontoExentoLinea = entradaLibro.MontoExento;
                            //nuevoAuxDetalle.MontoIVALinea = entradaLibro.MontoIva;

                            //nuevoAuxDetalle.MontoTotalLinea = entradaLibro.MontoTotal;
                            //nuevoAuxDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID;

                            //if (entradaLibro.TipoLibro == TipoCentralizacion.Compra)
                            //{
                            //    nuevoAuxDetalle.MontoIVANoRecuperable = entradaLibro.MontoIvaNoRecuperable;
                            //    nuevoAuxDetalle.MontoIVAUsoComun = entradaLibro.MontoIvaUsocomun;
                            //    nuevoAuxDetalle.MontoIVAActivoFijo = entradaLibro.MontoIvaActivoFijo;
                            //}
                            //Condición de cuenta auxiliar.
                            string QueryInsertAuxiliares = "INSERT INTO AuxiliaresModel (DetalleVoucherModelID, LineaNumeroDetalle, MontoTotal, Tipo, objCtaContable_CuentaContableModelID)" +
                                                           " VALUES(@DetalleVoucherModelID,@LineaNumeroDetalle,@MontoTotal,@Tipo,@objCtaContable_CuentaContableModelID)";


                            string QueryInsertAuxiliaresDetalle = "INSERT INTO AuxiliresDetalleModel (TipoDocumento,Fecha,,FechaContabilizacion,Folio,Individuo2_QuickReceptorModelID,MontoNetoLinea,MontoExentoLinea,MontoIVALinea,MontoTotalLinea,AuxiliaresModelID)" +
                                                                  " VALUES(@TipoDocumento,@Fecha,@FechaContabilizacion,@Folio,@Individuo2_QuickReceptorModelID,@MontoNetoLinea,@MontoExentoLinea,@MontoIVALinea,@MontoTotalLinea,@AuxiliaresModelID)";
                        }


                        string QueryObtenerIdTablaPadre = $"SELECT MAX(BoletasCoVPadreModelID) FROM BoletasCoVPadreModel WHERE ClienteContableModelID_ClientesContablesModelID = {ObjCliente.ClientesContablesModelID}";
                        int    idTablaPadre             = db.Query <int>(QueryObtenerIdTablaPadre).FirstOrDefault();


                        string             queryReceptorDummy = "SELECT * FROM QuickReceptorModel LIMIT 1";
                        QuickReceptorModel receptor           = db.Query <QuickReceptorModel>(queryReceptorDummy).FirstOrDefault();



                        string QueryInsertHijo = "INSERT INTO BoletasCoVModel (CuentaAuxiliar, BoletaCoVPadre, ClienteContable_ClientesContablesModelID, Prestador," +
                                                 " VoucherModelID, HaSidoConvertidoAVoucher, FechaInsercion, Fecha, NumeroDeDocumento, TipoDocumento," +
                                                 " FechaVencimiento, CuentaContable, Neto, Iva, CentroDeCostos, FechaPeriodoTributario)" +
                                                 " VALUES(@CuentaAuxiliar, @BoletaCoVPadre, @ClienteContable, @Prestador, @VoucherModelID, @HaSidoConvertidoAVoucher," +
                                                 "@FechaInsercion, @Fecha, @NumeroDeDocumento, @TipoDocumento, @FechaVencimiento, @CuentaContable, @Neto, @Iva, @CentroDeCostos," +
                                                 "@FechaPeriodoTributario)";

                        var ResultadoInsercionHijos = db.Execute(QueryInsertHijo,
                                                                 new
                        {
                            CuentaAuxiliar = ItemBoleta.CuentaAuxiliar,
                            BoletaCoVPadre = idTablaPadre,
                            ClienteContable_ClientesContablesModelID = ObjCliente,
                            Prestador                = Receptor,
                            VoucherModelID           = ultimoVoucherId,
                            HaSidoConvertidoAVoucher = 1,
                            FechaInsercion           = DateTime.Now,
                            Fecha             = ItemBoleta.Fecha,
                            NumeroDeDocumento = ItemBoleta.NumeroDeDocumento,
                            TipoDocumento     = TipoDte.BoletaElectronica,
                            FechaVencimiento  = DateTime.Now,
                            CuentaContable    = "123",
                            Neto                   = 100,
                            Iva                    = 100,
                            CentroDeCostos         = 0,
                            FechaPeriodoTributario = DateTime.Now
                        });
                    }
                }

                string QueryInsertPadre = "INSERT INTO BoletasCoVPadreModel (ClienteContableModelID_ClientesContablesModelID,FechaBoletas,FechaCreacion,TotalNeto,TotalIva) " +
                                          "VALUES (@ClienteContableModelID_ClientesContablesModelID, @FechaBoletas, @FechaCreacion, @TotalNeto, @TotalIva)";

                var QueryResult = db.Execute(QueryInsertPadre,
                                             new
                {
                    ClienteContableModelID_ClientesContablesModelID = ObjCliente.ClientesContablesModelID,
                    FechaBoletas       = DateTime.Now,
                    FechaCreacion      = DateTime.Now,
                    tipoCentralizacion = (int)Tipo,
                    TotalNeto          = 1,
                    TotalIva           = 1
                });

                db.Close();
            }

            return(result);
        }