public async Task <IHttpActionResult> PutTipoOrigen(int id, TipoOrigen tipoOrigen)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != tipoOrigen.IdTipoOrigen)
            {
                return(BadRequest());
            }

            db.Entry(tipoOrigen).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();

                return(StatusCode(HttpStatusCode.NoContent));
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TipoOrigenExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
        }
Ejemplo n.º 2
0
    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 async Task <IHttpActionResult> GetTipoOrigen(int id)
        {
            TipoOrigen tipoOrigen = await db.TipoOrigen.FindAsync(id);

            if (tipoOrigen == null)
            {
                return(NotFound());
            }

            return(Ok(tipoOrigen));
        }
        public async Task <IHttpActionResult> PostTipoOrigen(TipoOrigen tipoOrigen)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.TipoOrigen.Add(tipoOrigen);
            await db.SaveChangesAsync();

            return(CreatedAtRoute("DefaultApi", new { id = tipoOrigen.IdTipoOrigen }, tipoOrigen));
        }
        public async Task <IHttpActionResult> DeleteTipoOrigen(int id)
        {
            TipoOrigen tipoOrigen = await db.TipoOrigen.FindAsync(id);

            if (tipoOrigen == null)
            {
                return(NotFound());
            }

            db.TipoOrigen.Remove(tipoOrigen);
            await db.SaveChangesAsync();

            return(Ok(tipoOrigen));
        }
    //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));
    }