public static TipoOrigen RetornaTipoReceptor(QuickReceptorModel Prestador) { var ReturnValues = new TipoOrigen(); if (Prestador != null && Prestador.tipoReceptor == "PR") { ReturnValues = TipoOrigen.Compra; } else if (Prestador != null && Prestador.tipoReceptor == "CL") { ReturnValues = TipoOrigen.Venta; } else if (Prestador != null && Prestador.tipoReceptor == "P") { ReturnValues = TipoOrigen.Remuneraciones; } else if (Prestador != null && Prestador.tipoReceptor == "H") { ReturnValues = TipoOrigen.Honorario; } else { ReturnValues = TipoOrigen.Otros; } return(ReturnValues); }
public static QuickReceptorModel GetReceptorByIDandEmisor(string UserID, QuickEmisorModel _emisor, int IDReceptor) { QuickReceptorModel objReceptor = null; FacturaPoliContext db = ParseExtensions.GetDatabaseContext(UserID); IQueryable <QuickReceptorModel> objQueryable = db.Receptores.Where(r => r.QuickEmisorModelID == _emisor.QuickEmisorModelID); //List<QuickReceptorModel> lstReceptarTryTest = objQueryable.Where(r => r.QuickReceptorModelID == IDReceptor).ToList(); objReceptor = objQueryable.SingleOrDefault(r => r.QuickReceptorModelID == IDReceptor); return(objReceptor); }
public static QuickReceptorModel ObtenerPrestadorSiExiste(string Rut, FacturaPoliContext db, ClientesContablesModel ObjCliente) { var Receptor = new QuickReceptorModel(); if (!string.IsNullOrWhiteSpace(Rut)) { Receptor = db.Receptores.FirstOrDefault(x => x.RUT == Rut && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID && x.tipoReceptor == "PR" || x.RUT == Rut && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID && x.tipoReceptor == "P" || x.RUT == Rut && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID && x.tipoReceptor == "H" || x.RUT == Rut && x.ClientesContablesModelID == ObjCliente.ClientesContablesModelID && x.tipoReceptor == "CL"); } else { return(null); } return(Receptor); }
public static List <LibroHonorariosDeTerceros> ProcesarLibroHonorariosTerceros(FacturaPoliContext db, ClientesContablesModel ObjCliente, QuickEmisorModel EstaEmpresa, List <string[]> BoletasNoProcesadas, string FechaContabilizacion) { BoletasNoProcesadas.RemoveRange(0, 8); int NumeroFinal = BoletasNoProcesadas.Count(); //Arreglo para simular los elementos de un array partiendo del 0 int IndexElementosNoDeseados = BoletasNoProcesadas.Count() - 3; //Arreglo para simular los elementos de un array partiendo del 0 int CantidadDeElementosAeliminar = NumeroFinal - IndexElementosNoDeseados; BoletasNoProcesadas.RemoveRange(IndexElementosNoDeseados, CantidadDeElementosAeliminar); List <LibroHonorariosDeTerceros> ListaARetornar = new List <LibroHonorariosDeTerceros>(); string TipoReceptor = "H"; List <LibroHonorariosDeTerceros> SinRepetidos = new List <LibroHonorariosDeTerceros>(); foreach (string[] ColumnaBoleta in BoletasNoProcesadas) { LibroHonorariosDeTerceros VerificadorLibroHonorTercero = new LibroHonorariosDeTerceros(); DateTime FechaConta = ParseExtensions.ToDD_MM_AAAA_Multi(FechaContabilizacion); DateTime FechaInicial = ParseExtensions.ToDD_MM_AAAA_Multi(ColumnaBoleta[2]); DateTime FechaFinal = ParseExtensions.ToDD_MM_AAAA_Multi(ColumnaBoleta[5]); int Folio = Convert.ToInt32(ColumnaBoleta[0]); string Estado = ColumnaBoleta[1].Trim(); string RutPrestador = ColumnaBoleta[6].Trim(); string NombrePrestador = ColumnaBoleta[7].Trim(); decimal Bruto = Convert.ToDecimal(ColumnaBoleta[8].Replace(".", "")); decimal Retenido = Convert.ToDecimal(ColumnaBoleta[9].Replace(".", "")); decimal Pagado = Convert.ToDecimal(ColumnaBoleta[10].Replace(".", "")); SinRepetidos = db.DBLibroHonorariosTerceros.Where(x => x.ClienteContable.ClientesContablesModelID == ObjCliente.ClientesContablesModelID && x.NumOFolio == Folio && x.Receptor.RUT == RutPrestador && x.HaSidoConvertidoAVoucher == true && x.TipoLibro == TipoCentralizacion.Honorarios).ToList(); List <VoucherModel> EstaVigenteEncontrado = new List <VoucherModel>(); VoucherModel VoucherEncontrado = new VoucherModel(); if (SinRepetidos != null || SinRepetidos.Count() > 0) { foreach (var ItemRepetido in SinRepetidos) { VoucherEncontrado = db.DBVoucher.SingleOrDefault(x => x.VoucherModelID == ItemRepetido.VoucherModel.VoucherModelID); if (VoucherEncontrado.DadoDeBaja == false) { EstaVigenteEncontrado.Add(VoucherEncontrado); } } } if (SinRepetidos.Count() > 0 && SinRepetidos != null && EstaVigenteEncontrado.Count() > 0) { continue; } if (Estado == "VIGENTE") { VerificadorLibroHonorTercero.FechaContabilizacion = FechaConta; VerificadorLibroHonorTercero.Estado = Estado; VerificadorLibroHonorTercero.ClienteContable = ObjCliente; VerificadorLibroHonorTercero.NumOFolio = Folio; VerificadorLibroHonorTercero.FechaInicial = FechaInicial; VerificadorLibroHonorTercero.RutEmpresa = EstaEmpresa.RUTEmpresa; VerificadorLibroHonorTercero.NombreEmpresa = EstaEmpresa.RazonSocial; VerificadorLibroHonorTercero.FechaFinal = FechaFinal; VerificadorLibroHonorTercero.RutReceptor = RutPrestador; VerificadorLibroHonorTercero.NombreReceptor = NombrePrestador; VerificadorLibroHonorTercero.Brutos = Bruto; VerificadorLibroHonorTercero.Retenidos = Retenido; VerificadorLibroHonorTercero.Pagado = Pagado; QuickReceptorModel objPrestador = QuickReceptorModel.CrearOActualizarPrestadorPorRut(VerificadorLibroHonorTercero.RutReceptor, VerificadorLibroHonorTercero.NombreReceptor, ObjCliente, db, TipoReceptor); VerificadorLibroHonorTercero.Receptor = objPrestador; ListaARetornar.Add(VerificadorLibroHonorTercero); } } if (ListaARetornar.Count() > 0 && SinRepetidos.Count() == 0) { db.DBLibroHonorariosTerceros.AddRange(ListaARetornar); db.SaveChanges(); } return(ListaARetornar); }
//Queda pendiente crear este mismo metodo pero generico para reutilizar. //public static List<ObjCartolaYVouchers> ConvertirAObjetoCartola(HttpPostedFileBase file) //{ // List<ObjCartolaYVouchers> ReturnValues = new List<ObjCartolaYVouchers>(); // if (file == null || file.ContentLength == 0) // { // string Error = "Error Excel Vacio"; // } // else // { // if (file.FileName.EndsWith("xls") || file.FileName.EndsWith("xlsx")) // { // string path = ParseExtensions.Get_Temp_path(file.FileName); // Le indicamos la ruta donde guardará el excel. // if (File.Exists(path)) // { // File.Delete(path); //Si ya existe lo elimina. // } // file.SaveAs(path); //Guardamos momentaneamente el fichero. -> La idea es extraer su información y luego eliminarlo. // Application application = new Application(); // Workbook workBook = application.Workbooks.Open(path); // Worksheet worksheet = workBook.ActiveSheet; // Range range = worksheet.UsedRange; // for (int row = 2; row <= range.Rows.Count; row++) // { // ObjCartolaYVouchers FilaAGuardar = new ObjCartolaYVouchers(); // FilaAGuardar.Fecha = ParseExtensions.ToDD_MM_AAAA_Multi(((Range)range.Cells[row, 1]).Text); // FilaAGuardar.Docum = Convert.ToInt32(((Range)range.Cells[row, 2]).Text); // FilaAGuardar.Detalle = ((Range)range.Cells[row, 3]).Text; // FilaAGuardar.Debe = decimal.Parse(((Range)range.Cells[row, 4]).Text); // FilaAGuardar.Haber = decimal.Parse(((Range)range.Cells[row, 5]).Text); // FilaAGuardar.Saldo = decimal.Parse(((Range)range.Cells[row, 6]).Text); // //Parte del voucher // FilaAGuardar.CodigoInterno = ((Range)range.Cells[row, 7]).Text; // FilaAGuardar.Rut = ((Range)range.Cells[row, 8]).Text; // FilaAGuardar.Glosa = ((Range)range.Cells[row, 9]).Text; // ReturnValues.Add(FilaAGuardar); // } // workBook.Close(); // File.Delete(path); // } // } // return ReturnValues; //} public static Tuple <bool, List <ObjCartolaYVouchers> > ConvertirAVoucher(List <ObjCartolaYVouchers> LstCartolaYVouchers, ClientesContablesModel ObjCliente, FacturaPoliContext db, CuentaContableModel CuentaConsultada, string FechaCartola, int NumeroCartola) { bool Result = false; List <ObjCartolaYVouchers> LosQueNoPudieronInsertarse = new List <ObjCartolaYVouchers>(); List <ObjCartolaYVouchers> LosQueTienenInformacion = LstCartolaYVouchers.Where(x => !string.IsNullOrWhiteSpace(x.CodigoInterno)).ToList(); if (!LosQueTienenInformacion.Any()) { throw new Exception("No hay registros validos para insertar."); } //Los que están en la cartola pero no en el mayor... List <ObjCartolaYVouchers> Pendientes = LstCartolaYVouchers.Where(x => string.IsNullOrWhiteSpace(x.CodigoInterno)).ToList(); LosQueNoPudieronInsertarse.AddRange(Pendientes); List <CartolaBancariaModel> CartolaCompleta = new List <CartolaBancariaModel>(); if (LstCartolaYVouchers.Any()) { db.Configuration.AutoDetectChangesEnabled = false; //revisar como mejora la performance DateTime FechaConvertida = ParseExtensions.ToDD_MM_AAAA_Multi(FechaCartola); DeleteCartolaBancariaExistente(FechaConvertida, NumeroCartola, db, ObjCliente); List <CartolaBancariaModel> CartolaDetalle = new List <CartolaBancariaModel>(); DateTime Fecha = LosQueTienenInformacion.FirstOrDefault().Fecha; int? nullableProxVoucherNumber = ParseExtensions.GetNumVoucher(ObjCliente, db, Fecha.Month, Fecha.Year); int baseNumberFolio = nullableProxVoucherNumber.Value; List <VoucherModel> LstVoucher = new List <VoucherModel>(); foreach (ObjCartolaYVouchers itemCartola in LosQueTienenInformacion) { CuentaContableModel CuentaAUsar = UtilesContabilidad.CuentaContableDesdeCodInterno(itemCartola.CodigoInterno, ObjCliente); QuickReceptorModel Prestador = UtilesContabilidad.ObtenerPrestadorSiExiste(itemCartola.Rut, db, ObjCliente); TipoOrigen TipoPrestador = UtilesContabilidad.RetornaTipoReceptor(Prestador); if (CuentaAUsar == null) { throw new Exception($"La cuenta contable que intentas ingresar no está en el plan de cuentas O no está digitada en el excel CUENTA CONTABLE CON ERROR : {itemCartola.CodigoInterno}"); } if (CuentaAUsar.TieneAuxiliar == 1 && Prestador != null || CuentaAUsar.TieneAuxiliar == 0 && Prestador == null) { VoucherModel CapaVoucher = new VoucherModel(); CapaVoucher.TipoOrigenVoucher = TipoPrestador; CapaVoucher.FechaEmision = itemCartola.Fecha; CapaVoucher.NumeroVoucher = baseNumberFolio; CapaVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(baseNumberFolio, Fecha); CapaVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID; CapaVoucher.Glosa = itemCartola.Glosa; if (itemCartola.Debe > 0 && itemCartola.Haber == 0) { CapaVoucher.Tipo = TipoVoucher.Ingreso; } else if (itemCartola.Haber > 0 && itemCartola.Debe == 0) { CapaVoucher.Tipo = TipoVoucher.Egreso; } //Armamos tabla Detalle Voucher //1 List <DetalleVoucherModel> LstToEvaluate = new List <DetalleVoucherModel>(); DetalleVoucherModel DetalleCartola = new DetalleVoucherModel(); //cada linea es solo 1 monto DetalleCartola.VoucherModelID = CapaVoucher.VoucherModelID; DetalleCartola.ObjCuentaContable = CuentaConsultada; DetalleCartola.FechaDoc = itemCartola.Fecha; DetalleCartola.GlosaDetalle = itemCartola.Glosa; if (itemCartola.Debe > 0 && itemCartola.Haber == 0) { DetalleCartola.MontoDebe = itemCartola.Debe; } else if (itemCartola.Haber > 0 && itemCartola.Debe == 0) { DetalleCartola.MontoHaber = itemCartola.Haber; } //2 DetalleVoucherModel DetalleConciliacion = new DetalleVoucherModel(); DetalleConciliacion.VoucherModelID = CapaVoucher.VoucherModelID; DetalleConciliacion.FechaDoc = itemCartola.Fecha; DetalleConciliacion.ObjCuentaContable = CuentaAUsar; DetalleConciliacion.GlosaDetalle = itemCartola.Glosa; if (DetalleCartola.MontoDebe > 0 && DetalleCartola.MontoHaber == 0) { DetalleConciliacion.MontoHaber = DetalleCartola.MontoDebe; } else if (DetalleCartola.MontoHaber > 0 && DetalleCartola.MontoDebe == 0) { DetalleConciliacion.MontoDebe = DetalleCartola.MontoHaber; } LstToEvaluate.Add(DetalleCartola); LstToEvaluate.Add(DetalleConciliacion); //Guardamos los detalles en una lista de detalles if (LstToEvaluate.Sum(r => r.MontoDebe) == LstToEvaluate.Sum(r => r.MontoHaber)) { foreach (DetalleVoucherModel itemDetalle in LstToEvaluate) { itemDetalle.Conciliado = true; } CapaVoucher.ListaDetalleVoucher = LstToEvaluate; LstVoucher.Add(CapaVoucher); if (CuentaAUsar.TieneAuxiliar == 1 && Prestador != null) { foreach (DetalleVoucherModel NuevoDetalleVoucher in LstToEvaluate) { if (NuevoDetalleVoucher.ObjCuentaContable == CuentaAUsar) { CuentaContableModel CtaAux = NuevoDetalleVoucher.ObjCuentaContable; AuxiliaresModel Auxiliar = new AuxiliaresModel(); Auxiliar.LineaNumeroDetalle = CapaVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; Auxiliar.objCtaContable = CtaAux; NuevoDetalleVoucher.Auxiliar = Auxiliar; List <AuxiliaresDetalleModel> lstAuxDetalle = new List <AuxiliaresDetalleModel>(); AuxiliaresDetalleModel nuevoAuxDetalle = new AuxiliaresDetalleModel(); decimal MontoTotal = NuevoDetalleVoucher.MontoDebe + NuevoDetalleVoucher.MontoHaber; nuevoAuxDetalle.TipoDocumento = itemCartola.TipoDteNumVoucher; nuevoAuxDetalle.Fecha = itemCartola.Fecha; nuevoAuxDetalle.FechaContabilizacion = itemCartola.Fecha; nuevoAuxDetalle.Folio = itemCartola.Docum; nuevoAuxDetalle.Individuo2 = Prestador; nuevoAuxDetalle.MontoNetoLinea = 0; nuevoAuxDetalle.MontoExentoLinea = 0; nuevoAuxDetalle.MontoIVALinea = 0; nuevoAuxDetalle.MontoTotalLinea = MontoTotal; nuevoAuxDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; nuevoAuxDetalle.MontoIVANoRecuperable = 0; nuevoAuxDetalle.MontoIVAUsoComun = 0; nuevoAuxDetalle.MontoIVAActivoFijo = 0; if (CtaAux.TipoAuxiliarQueUtiliza == TipoAuxiliar.Honorarios) { nuevoAuxDetalle.ValorLiquido = MontoTotal; } lstAuxDetalle.Add(nuevoAuxDetalle); Auxiliar.ListaDetalleAuxiliares = lstAuxDetalle; } } } baseNumberFolio++; } } else { LosQueNoPudieronInsertarse.Add(itemCartola); } } List <DetalleVoucherModel> detalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.Auxiliar != null)).ToList(); db.DBVoucher.AddRange(LstVoucher); db.SaveChanges(); if (detalle.Any()) { detalle.ForEach(x => { x.Auxiliar.DetalleVoucherModelID = x.DetalleVoucherModelID; }); foreach (AuxiliaresModel itemAuxiliar in detalle.Select(x => x.Auxiliar).ToArray()) { db.Entry(itemAuxiliar).State = System.Data.Entity.EntityState.Modified; } db.SaveChanges(); } CartolaDetalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.ObjCuentaContable.CuentaContableModelID == CuentaConsultada.CuentaContableModelID)) .Select(x => new CartolaBancariaModel { VoucherModelID = x.VoucherModelID, Fecha = x.FechaDoc, Folio = x.Auxiliar != null ? x.Auxiliar.ListaDetalleAuxiliares.FirstOrDefault().Folio : 0, EstaConciliado = true, Detalle = x.GlosaDetalle, CuentaContableModelID = x.ObjCuentaContable, Debe = x.MontoDebe, Haber = x.MontoHaber }).ToList(); bool ResultadoInsercionCartolaBancaria = GuardarCartolaBancaria(CartolaDetalle, FechaCartola, NumeroCartola, CuentaConsultada, ObjCliente, db); Result = true; } else { throw new Exception("No hay registros para insertar."); } return(Tuple.Create(Result, LosQueNoPudieronInsertarse)); }
public static QuickReceptorModel CrearOActualizarPrestadorPorRut(string RUTPrestador, string NombrePrestador, ClientesContablesModel objCliente, String tipoReceptor) { FacturaProduccionContext db = new FacturaProduccionContext(); int existe = db.Receptores.Where(r => r.RUT == RUTPrestador && r.QuickEmisorModelID == objCliente.QuickEmisorModelID && r.tipoReceptor == tipoReceptor && r.ClientesContablesModelID == objCliente.ClientesContablesModelID).Count(); if (existe < 1) { QuickReceptorModel objPrestadores = new QuickReceptorModel(); try { objPrestadores.QuickEmisorModelID = objCliente.QuickEmisorModelID; objPrestadores.RUT = RUTPrestador; objPrestadores.RazonSocial = NombrePrestador; objPrestadores.tipoReceptor = tipoReceptor; objPrestadores.Direccion = "1"; objPrestadores.Giro = "1"; objPrestadores.ClientesContablesModelID = objCliente.ClientesContablesModelID; db.Receptores.Add(objPrestadores); db.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } //agrego filtro para saber que clientes tiene el cliente contable //int clienteEmisor = db.DBClientesContablesEmisor.Where(r => objCliente.QuickEmisorModelID == r.QuickReceptorModelID && r.ClientesContablesModelID == objCliente.ParametrosCliente.ClientesContablesModelID).Count(); //ClientesContablesEmisorModel clientesContablesEmisor = ((from t1 in db.DBClientesContablesEmisor // where t1.QuickReceptorModelID == objCliente.QuickEmisorModelID && t1.ClientesContablesModelID == objCliente.ClientesContablesModelID // select t1 // ).FirstOrDefault()); ClientesContablesEmisorModel clientesContablesEmisor = db.DBClientesContablesEmisor.Where(x => x.QuickReceptorModelID == objCliente.QuickEmisorModelID && x.ClientesContablesModelID == objCliente.ClientesContablesModelID).FirstOrDefault(); if (clientesContablesEmisor == null) { ClientesContablesEmisorModel clienteEmisor2 = new ClientesContablesEmisorModel(); clienteEmisor2.ClientesContablesModelID = objCliente.ClientesContablesModelID; clienteEmisor2.QuickReceptorModelID = objCliente.QuickEmisorModelID; db.DBClientesContablesEmisor.Add(clienteEmisor2); } db.SaveChanges(); return(objPrestadores); } else { QuickReceptorModel objPrestadores = db.Receptores.Where(r => r.RUT == RUTPrestador && r.QuickEmisorModelID == objCliente.QuickEmisorModelID && r.tipoReceptor == tipoReceptor).First(); ClientesContablesEmisorModel clientesContablesEmisor = db.DBClientesContablesEmisor.Where(t1 => t1.QuickReceptorModelID == objCliente.QuickEmisorModelID && t1.ClientesContablesModelID == objCliente.ClientesContablesModelID).FirstOrDefault(); // db.DBClientesContablesEmisor.Where(r => objCliente.QuickEmisorModelID == r.QuickReceptorModelID && r.ClientesContablesModelID == objCliente.ParametrosCliente.ClientesContablesModelID).Count(); if (clientesContablesEmisor == null) { ClientesContablesEmisorModel clienteEmisor = new ClientesContablesEmisorModel(); clienteEmisor.ClientesContablesModelID = objCliente.ClientesContablesModelID; clienteEmisor.QuickReceptorModelID = objCliente.QuickEmisorModelID; db.DBClientesContablesEmisor.Add(clienteEmisor); db.SaveChanges(); } if (objPrestadores.RazonSocial == NombrePrestador) { return(objPrestadores); } else { objPrestadores.RazonSocial = NombrePrestador; db.Receptores.AddOrUpdate(objPrestadores); db.SaveChanges(); return(objPrestadores); } } }
public static bool InsertBoletasCovLinq(ClientesContablesModel ObjCliente, List <BoletasExcelModel> BoletasItems, TipoCentralizacion Tipo, FacturaPoliContext db) { using (var dbTransaction = db.Database.BeginTransaction()) { List <BoletasCoVModel> ListaBoletasHijo = new List <BoletasCoVModel>(); CuentaContableModel CuentaIva = ParametrosClienteModel.GetCuentaContableIvaAUsarObj(ObjCliente, db); //cuenta Iva //Al importar un libro hay 2 opciones para saber si es compra o venta //1.- al momento de importar la intefaz grafica dirá que elija si es compra o venta //2.- la segunda forma es la siguiente -> tomar el primer registro y dependiendo de su centralización indicar si es compra o venta. //Ambas opciones pueden llegar a cometer errores por ende tener en cuenta esto para cuando el desarrollo ya esté avanzado decimal TotalNeto = 0; decimal TotalIva = 0; TipoReceptor tipoReceptor = new TipoReceptor(); if (Tipo == TipoCentralizacion.Compra) { tipoReceptor = TipoReceptor.PR; } if (Tipo == TipoCentralizacion.Venta) { tipoReceptor = TipoReceptor.CL; } DateTime Fecha = BoletasItems.FirstOrDefault().Fecha; int? nullableProxVoucherNumber = ParseExtensions.GetNumVoucher(ObjCliente, db, Fecha.Month, Fecha.Year); int baseNumberFolio = nullableProxVoucherNumber.Value; List <BoletasExcelModel> LosQueNoPudieronInsertarse = new List <BoletasExcelModel>(); List <VoucherModel> LstVoucher = new List <VoucherModel>(); //en el futuro hacer estas agrupaciones por día -> un voucher tendrá tantos registros como todos los que caigan en el mismo día (se sugiere hacer un group by con este criterio en el foreach) foreach (BoletasExcelModel ItemBoleta in BoletasItems) { List <DetalleVoucherModel> detalleVoucher = new List <DetalleVoucherModel>(); QuickReceptorModel Receptor = QuickReceptorModel.CrearOActualizarPrestadorPorRut(ItemBoleta.Rut, ItemBoleta.RazonSocial, ObjCliente, db, tipoReceptor.ToString()); CuentaContableModel CuentaAuxiliar = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaAuxiliar, ObjCliente); //CuentaAuxiliar CuentaContableModel CuentaProveedorDeudor = UtilesContabilidad.CuentaContableDesdeCodInterno(ItemBoleta.CuentaContable, ObjCliente); //Cuenta ProveedorDeudor if (CuentaProveedorDeudor == null) { throw new Exception("La cuenta de proveedor deudor debe existir para este cliente contable"); } //Cada uno de estos detallevouchers que se hará lleva la misma logica que los libros de compra que se insertan a día de hoy -> revisar la inserción de libros de compra y venta ya existente VoucherModel NuevoVoucher = new VoucherModel(); NuevoVoucher.TipoOrigen = Tipo == TipoCentralizacion.Compra ? "Compra" : "Venta"; NuevoVoucher.TipoOrigenVoucher = Tipo == TipoCentralizacion.Compra ? TipoOrigen.Compra : TipoOrigen.Venta; NuevoVoucher.ClientesContablesModelID = ObjCliente.ClientesContablesModelID; NuevoVoucher.FechaEmision = ItemBoleta.Fecha; NuevoVoucher.Tipo = TipoVoucher.Traspaso; NuevoVoucher.NumeroVoucher = baseNumberFolio; NuevoVoucher.NumVoucherWithDate = ParseExtensions.BuildNewFormatNumVoucher(baseNumberFolio, Fecha); string FullDescripcionDocOriginal = (int)ItemBoleta.TipoDocumento + " / Folio: " + ItemBoleta.NumeroDeDocumento + " / " + Receptor != null ? Receptor.NombreFantasia : ""; NuevoVoucher.Glosa = FullDescripcionDocOriginal; //Revisar como debe ser creada la glosa es probable que se haga con la misma logica que con la importación de libros de compra y ventas //Encerrar la logica de las compras y las ventas en otra función? decimal CostoNeto = ItemBoleta.Neto; decimal MontoIva = ItemBoleta.Iva; decimal MontoTotal = ItemBoleta.Neto + ItemBoleta.Iva; DetalleVoucherModel LineaCuentaCorriente = new DetalleVoucherModel(); DetalleVoucherModel LineaDetalleIva = new DetalleVoucherModel(); DetalleVoucherModel LineaDetalleAuxiliar = new DetalleVoucherModel(); LineaCuentaCorriente.FechaDoc = ItemBoleta.Fecha; LineaCuentaCorriente.ObjCuentaContable = CuentaProveedorDeudor; LineaCuentaCorriente.GlosaDetalle = "Costo Neto" + FullDescripcionDocOriginal; LineaDetalleIva.FechaDoc = ItemBoleta.Fecha; LineaDetalleIva.ObjCuentaContable = CuentaIva; LineaDetalleIva.GlosaDetalle = "Iva Compras" + FullDescripcionDocOriginal; LineaDetalleAuxiliar.FechaDoc = ItemBoleta.Fecha; LineaDetalleAuxiliar.ObjCuentaContable = CuentaAuxiliar; LineaDetalleAuxiliar.GlosaDetalle = ""; if (ItemBoleta.TipoDocumento.EsUnaNotaCredito()) { LineaCuentaCorriente.MontoDebe = 0; LineaCuentaCorriente.MontoHaber = CostoNeto; LineaDetalleIva.MontoDebe = 0; LineaDetalleIva.MontoHaber = MontoIva; LineaDetalleAuxiliar.MontoDebe = MontoTotal; LineaDetalleAuxiliar.MontoHaber = 0; } else { LineaCuentaCorriente.MontoDebe = CostoNeto; LineaCuentaCorriente.MontoHaber = 0; //detalle voucher 2 -> Iva LineaDetalleIva.MontoDebe = MontoIva; LineaDetalleIva.MontoHaber = 0; //detalle voucher 3 -> Auxiliar} LineaDetalleAuxiliar.MontoDebe = 0; LineaDetalleAuxiliar.MontoHaber = MontoTotal; } detalleVoucher.Add(LineaCuentaCorriente); detalleVoucher.Add(LineaDetalleIva); detalleVoucher.Add(LineaDetalleAuxiliar); if (detalleVoucher.Sum(x => x.MontoDebe) == detalleVoucher.Sum(x => x.MontoHaber)) { NuevoVoucher.ListaDetalleVoucher = detalleVoucher; baseNumberFolio++; } else { LosQueNoPudieronInsertarse.Add(ItemBoleta); } //revisar si funciona de esta manera foreach (DetalleVoucherModel ItemDetalle in NuevoVoucher.ListaDetalleVoucher.Where(x => x.ObjCuentaContable == CuentaAuxiliar).ToList()) { AuxiliaresModel Auxiliar = new AuxiliaresModel(); CuentaContableModel CtaAux = ItemDetalle.ObjCuentaContable; Auxiliar.LineaNumeroDetalle = NuevoVoucher.ListaDetalleVoucher.Count; Auxiliar.MontoTotal = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber; Auxiliar.objCtaContable = CtaAux; ItemDetalle.Auxiliar = Auxiliar; List <AuxiliaresDetalleModel> lstAuxDetalle = new List <AuxiliaresDetalleModel>(); AuxiliaresDetalleModel AuxiliarDetalle = new AuxiliaresDetalleModel(); decimal MontoTotalLinea = ItemDetalle.MontoDebe + ItemDetalle.MontoHaber; AuxiliarDetalle.TipoDocumento = ItemBoleta.TipoDocumento; AuxiliarDetalle.Fecha = ItemBoleta.Fecha; AuxiliarDetalle.FechaContabilizacion = ItemBoleta.Fecha; AuxiliarDetalle.Folio = ItemBoleta.NumeroDeDocumento; AuxiliarDetalle.Individuo2 = Receptor; AuxiliarDetalle.MontoNetoLinea = 0; AuxiliarDetalle.MontoExentoLinea = 0; AuxiliarDetalle.MontoIVALinea = 0; AuxiliarDetalle.MontoTotalLinea = MontoTotalLinea; AuxiliarDetalle.AuxiliaresModelID = Auxiliar.AuxiliaresModelID; AuxiliarDetalle.MontoIVANoRecuperable = 0; AuxiliarDetalle.MontoIVAUsoComun = 0; AuxiliarDetalle.MontoIVAActivoFijo = 0; lstAuxDetalle.Add(AuxiliarDetalle); Auxiliar.ListaDetalleAuxiliares = lstAuxDetalle; } //BaseNumFolio List <DetalleVoucherModel> detalle = LstVoucher.SelectMany(x => x.ListaDetalleVoucher.Where(y => y.Auxiliar != null)).ToList(); db.DBVoucher.AddRange(LstVoucher); db.SaveChanges(); if (detalle.Any()) { detalle.ForEach(x => { x.Auxiliar.DetalleVoucherModelID = x.DetalleVoucherModelID; }); foreach (AuxiliaresModel itemAuxiliar in detalle.Select(x => x.Auxiliar).ToArray()) { db.Entry(itemAuxiliar).State = System.Data.Entity.EntityState.Modified; } db.SaveChanges(); } } } return(false); }
public 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); }