public Response Save(DocumCc item, string empresaDB)
        {
            try
            {
                using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
                Utilitarios utilitarios = new Utilitarios();

                #region Buscar consecutivo
                int numeroDocumento = utilitarios.BuscarConsecutivo(item.TipoDoc.Trim(), item.CoSucu, empresaDB);
                #endregion

                Clientes cliente = new ClientesRepositorio().GetCliente(item.CoCli, empresaDB);
                if (cliente == null)
                {
                    throw new ArgumentException($"El cliente {item.CoCli.Trim()} no existe.");
                }
                Vendedor vendedor = new VendedoresRepositorio().Find(item.CoVen, empresaDB);
                if (vendedor == null)
                {
                    throw new ArgumentException($"El vendedor {item.CoVen.Trim()} no existe.");
                }

                #region Construcción de DisCen
                string DisCen = utilitarios.ArmarDisCen(item.FecEmis, item.MontoBru, item.MontoImp, (item.Tipo == "6") ? item.MontoNet : 0, empresaDB);
                #endregion

                item.NroDoc          = numeroDocumento;
                item.Contrib         = cliente.Contribu;
                item.DisCen          = DisCen;
                db.Entry(item).State = EntityState.Added;
                db.SaveChanges();

                #region Actualizar consecutivo
                utilitarios.ActualizarConsecutivo(numeroDocumento, item.TipoDoc.Trim(), item.CoSucu, empresaDB);
                #endregion

                return(new Response {
                    Status = "OK", Message = "Transacción realizada con éxito", FacturaID = item.NroDoc.ToString()
                });
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message
                });
            }
        }
예제 #2
0
        public Response Save(EncabAjuste item, string empresaDB)
        {
            try
            {
                Utilitarios utilitarios = new Utilitarios();
                using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));

                #region Validar ajuste
                ValidarAjuste(item, empresaDB);
                #endregion

                #region Buscar consecutivo
                int numeroAjuste = utilitarios.BuscarConsecutivo("AJUS", item.CoSucu, empresaDB);
                #endregion

                if (numeroAjuste > 0)
                {
                    db.Entry(new Ajuste
                    {
                        #region Campos
                        AjueNum    = numeroAjuste,
                        Fecha      = item.Fecha,
                        Motivo     = item.Motivo,
                        Total      = item.Total,
                        Seriales   = item.Seriales,
                        Feccom     = item.Feccom,
                        Numcom     = item.Numcom,
                        Tasa       = item.Tasa,
                        Moneda     = item.Moneda,
                        DisCen     = item.DisCen,
                        Campo1     = item.Campo1,
                        Campo2     = item.Campo2,
                        Campo3     = item.Campo3,
                        Campo4     = item.Campo4,
                        Campo5     = item.Campo5,
                        Campo6     = item.Campo6,
                        Campo7     = item.Campo7,
                        Campo8     = item.Campo8,
                        CoUsIn     = item.CoUsIn,
                        FeUsIn     = item.FeUsIn,
                        CoUsMo     = item.CoUsMo,
                        FeUsMo     = item.FeUsMo,
                        CoUsEl     = item.CoUsEl,
                        FeUsEl     = item.FeUsEl,
                        Revisado   = item.Revisado,
                        Trasnfe    = item.Trasnfe,
                        CoSucu     = item.CoSucu,
                        Rowguid    = item.Rowguid,
                        Anulada    = item.Anulada,
                        Aux01      = item.Aux01,
                        Aux02      = item.Aux02,
                        Produccion = item.Produccion,
                        ImpNum     = item.ImpNum,
                        FactNum    = item.FactNum
                                     #endregion
                    }).State = EntityState.Added;

                    foreach (var iAjusteReng in item.DetaAjuste)
                    {
                        db.Entry(new RengAju
                        {
                            #region Campos
                            AjueNum    = numeroAjuste,
                            RengNum    = iAjusteReng.RengNum,
                            DisCen     = iAjusteReng.DisCen,
                            Tipo       = iAjusteReng.Tipo,
                            CoArt      = iAjusteReng.CoArt,
                            TotalArt   = iAjusteReng.TotalArt,
                            UniCompra  = iAjusteReng.UniCompra,
                            StotalArt  = iAjusteReng.StotalArt,
                            SuniCompr  = iAjusteReng.SuniCompr,
                            CoAlma     = iAjusteReng.CoAlma,
                            CostUnitOm = iAjusteReng.CostUnitOm,
                            CostUnit   = iAjusteReng.CostUnit,
                            Feccom     = iAjusteReng.Feccom,
                            Numcom     = iAjusteReng.Numcom,
                            UniVenta   = iAjusteReng.UniVenta,
                            SuniVenta  = iAjusteReng.SuniVenta,
                            CosProUn   = iAjusteReng.CosProUn,
                            UltCosOm   = iAjusteReng.UltCosOm,
                            CosProOm   = iAjusteReng.CosProOm,
                            Rowguid    = iAjusteReng.Rowguid,
                            TotalUni   = iAjusteReng.TotalUni,
                            NroLote    = iAjusteReng.NroLote,
                            FecLote    = iAjusteReng.FecLote,
                            Pendiente2 = iAjusteReng.Pendiente2,
                            TipoDoc2   = iAjusteReng.TipoDoc2,
                            RengDoc2   = iAjusteReng.RengDoc2,
                            NumDoc2    = iAjusteReng.NumDoc2,
                            Aux01      = iAjusteReng.Aux01,
                            Aux02      = iAjusteReng.Aux02,
                            MoCant     = iAjusteReng.MoCant,
                            GfCant     = iAjusteReng.GfCant,
                            MoCantOm   = iAjusteReng.MoCantOm,
                            GfCantOm   = iAjusteReng.GfCantOm,
                            Produccion = iAjusteReng.Produccion
                                         #endregion
                        }).State = EntityState.Added;

                        #region Actualización de stock

                        #region Saber si el tipo de ajuste del renglon es de entrada o salida.
                        var TipoAjuste = db.TipoAju.FirstOrDefault(t => t.CoTipo.Trim() == iAjusteReng.Tipo.Trim()).TipoTrans;
                        #endregion

                        utilitarios.ActualizarStockArticuloAlmacen(iAjusteReng.CoArt, iAjusteReng.CoAlma, iAjusteReng.TotalArt, (TipoAjuste == "E"), empresaDB);
                        #endregion

                        #region Actualización de costos en articulo

                        #region Valor de la tasa OM parametrizada.
                        decimal tasa = db.Moneda.FirstOrDefault(m => m.CoMone.Trim() == db.ParEmp.FirstOrDefault().MoneArt.Trim()).Cambio;
                        #endregion

                        Art art = db.Art.FirstOrDefault(a => a.CoArt.Trim() == iAjusteReng.CoArt.Trim());
                        art.CosProUn = iAjusteReng.CostUnit;
                        art.FecCosPr = DateTime.Now;
                        art.CosProOm = iAjusteReng.CostUnit / tasa;
                        art.FecProOm = DateTime.Now;

                        art.CosUnAn  = art.UltCosUn;
                        art.FecCosAn = art.FecUltCo;
                        art.UltCosUn = iAjusteReng.CostUnit;
                        art.FecUltCo = DateTime.Now;

                        art.UltCosDo = art.UltCosOm;
                        art.FecCosDo = art.FecUltOm;
                        art.UltCosOm = iAjusteReng.CostUnit / tasa;
                        art.FecUltOm = DateTime.Now;

                        art.CoUsMo = item.CoUsMo;
                        art.FeUsMo = DateTime.Now;

                        db.Entry(art).State = EntityState.Modified;
                        #endregion
                    }
                    db.SaveChanges();

                    #region Actualizacion de consecutivo
                    utilitarios.ActualizarConsecutivo(numeroAjuste, "AJUS", item.CoSucu, empresaDB);
                    #endregion

                    return(new Response {
                        Status = "OK", Message = "Transacción realizada con éxito."
                    });
                }
                else
                {
                    throw new ArgumentException("No se encontró el correlativo configurado para 'AJUS'.");
                }
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message
                });
            }
        }
예제 #3
0
        public Response Save(EncabNotRec item, string empresaDB)
        {
            try
            {
                using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
                Utilitarios utilitarios = new Utilitarios();

                #region Buscar consecutivo
                var numeroNRecepcion = utilitarios.BuscarConsecutivo("NREC", item.CoSucu, empresaDB);
                #endregion

                if (numeroNRecepcion > 0)
                {
                    #region Calcular exento para el DisCen
                    decimal TotalExento = (decimal)(from exento in item.DetaNotaRecepcion where exento.TipoImp == "6" select exento).Sum(t => t.RengNeto);
                    #endregion

                    #region Construcción de DisCen
                    string DisCen = utilitarios.ArmarDisCen(item.FecEmis, (decimal)item.TotBruto, item.Iva, TotalExento, empresaDB);
                    #endregion

                    #region Encabezado factura
                    NotRec NotaRec = new NotRec
                    {
                        #region Campos
                        FactNum    = numeroNRecepcion,
                        Factura    = item.Factura,
                        Contrib    = item.Contrib,
                        DisCen     = item.DisCen,
                        Nombre     = item.Nombre,
                        Rif        = item.Rif,
                        Nit        = item.Nit,
                        Status     = item.Status,
                        Comentario = item.Comentario,
                        Descrip    = item.Descrip,
                        Saldo      = item.Saldo,
                        FecEmis    = item.FecEmis,
                        FecVenc    = item.FecVenc,
                        CoCli      = item.CoCli,
                        CoVen      = item.CoVen,
                        CoTran     = item.CoTran,
                        DirEnt     = item.DirEnt,
                        FormaPag   = item.FormaPag,
                        TotBruto   = item.TotBruto,
                        TotNeto    = item.TotNeto,
                        GlobDesc   = item.GlobDesc,
                        TotReca    = item.TotReca,
                        PorcGdesc  = item.PorcGdesc,
                        PorcReca   = item.PorcReca,
                        TotalUc    = item.TotalUc,
                        TotalCp    = item.TotalCp,
                        TotFlete   = item.TotFlete,
                        MontoDev   = item.MontoDev,
                        Totklu     = item.Totklu,
                        Anulada    = item.Anulada,
                        Impresa    = item.Impresa,
                        Iva        = item.Iva,
                        IvaDev     = item.IvaDev,
                        Feccom     = item.Feccom,
                        Numcom     = item.Numcom,
                        Tasa       = item.Tasa,
                        Moneda     = item.Moneda,
                        CtaContab  = item.CtaContab,
                        Seriales   = item.Seriales,
                        Tasag      = item.Tasag,
                        Tasag10    = item.Tasag10,
                        Tasag20    = item.Tasag20,
                        Campo1     = item.Campo1,
                        Campo2     = item.Campo2,
                        Campo3     = item.Campo3,
                        Campo4     = item.Campo4,
                        Campo5     = item.Campo5,
                        Campo6     = item.Campo6,
                        Campo7     = item.Campo7,
                        Campo8     = item.Campo8,
                        CoUsIn     = item.CoUsIn,
                        FeUsIn     = item.FeUsIn,
                        CoUsMo     = item.CoUsMo,
                        FeUsMo     = item.FeUsMo,
                        CoUsEl     = item.CoUsEl,
                        FeUsEl     = item.FeUsEl,
                        Revisado   = item.Revisado,
                        Trasnfe    = item.Trasnfe,
                        CoSucu     = item.CoSucu,
                        Rowguid    = item.Rowguid,
                        MonIlc     = item.MonIlc,
                        Otros1     = item.Otros1,
                        Otros2     = item.Otros2,
                        Otros3     = item.Otros3,
                        Aux01      = item.Aux01,
                        Aux02      = item.Aux02,
                        Salestax   = item.Salestax,
                        Origen     = item.Origen,
                        OrigenD    = item.OrigenD,
                        StaProd    = item.StaProd,
                        Telefono   = item.Telefono
                                     #endregion
                    };
                    db.Entry(NotaRec).State = EntityState.Added;
                    #endregion

                    #region Renglones
                    List <RengNdr> Renglones = new List <RengNdr>();

                    foreach (var i in item.DetaNotaRecepcion)
                    {
                        RengNdr reng_ndr = new RengNdr
                        {
                            #region Campos
                            FactNum    = numeroNRecepcion,
                            RengNum    = i.RengNum,
                            DisCen     = i.DisCen,
                            TipoDoc    = i.TipoDoc,
                            RengDoc    = i.RengDoc,
                            NumDoc     = i.NumDoc,
                            CoArt      = i.CoArt,
                            CoAlma     = i.CoAlma,
                            TotalArt   = i.TotalArt,
                            StotalArt  = i.StotalArt,
                            Pendiente  = i.Pendiente,
                            UniVenta   = i.UniVenta,
                            PrecVta    = i.PrecVta,
                            PorcDesc   = i.PorcDesc,
                            TipoImp    = i.TipoImp,
                            RengNeto   = i.RengNeto,
                            CosProUn   = i.CosProUn,
                            UltCosUn   = i.UltCosUn,
                            UltCosOm   = i.UltCosOm,
                            CosProOm   = i.CosProOm,
                            TotalDev   = i.TotalDev,
                            MontoDev   = i.MontoDev,
                            PrecVta2   = i.PrecVta2,
                            Anulado    = i.Anulado,
                            DesArt     = i.DesArt,
                            Seleccion  = i.Seleccion,
                            CantImp    = i.CantImp,
                            Comentario = i.Comentario,
                            Rowguid    = i.Rowguid,
                            TotalUni   = i.TotalUni,
                            MonIlc     = i.MonIlc,
                            Otros      = i.Otros,
                            NroLote    = i.NroLote,
                            FecLote    = i.FecLote,
                            Pendiente2 = i.Pendiente2,
                            TipoDoc2   = i.TipoDoc2,
                            RengDoc2   = i.RengDoc2,
                            NumDoc2    = i.NumDoc2,
                            CoAlma2    = i.CoAlma2,
                            Aux01      = i.Aux01,
                            Aux02      = i.Aux02,
                            CantProd   = i.CantProd,
                            ImpProd    = i.ImpProd
                                         #endregion
                        };
                        Renglones.Add(reng_ndr);
                    }

                    #region Actualizacion de stock
                    foreach (var i in Renglones)
                    {
                        utilitarios.ActualizarStockArticuloAlmacen(i.CoArt, i.CoAlma, i.TotalArt, true, empresaDB);
                        db.Entry(i).State = EntityState.Added;

                        #region Actualización de costos en articulo

                        #region Valor de la tasa OM parametrizada.
                        decimal tasa = db.Moneda.FirstOrDefault(m => m.CoMone.Trim() == db.ParEmp.FirstOrDefault().MoneArt.Trim()).Cambio;
                        #endregion

                        Art art = db.Art.FirstOrDefault(a => a.CoArt.Trim() == i.CoArt.Trim());
                        art.CosUnAn  = art.UltCosUn;
                        art.FecCosAn = art.FecUltCo;

                        art.UltCosUn = i.PrecVta;
                        art.FecUltCo = DateTime.Now;

                        art.UltCosDo = art.UltCosOm;
                        art.FecCosDo = art.FecUltOm;
                        art.UltCosOm = i.PrecVta / tasa;
                        art.FecUltOm = DateTime.Now;

                        art.CosProUn = i.PrecVta;
                        art.FecCosPr = DateTime.Now;

                        art.CosProOm = i.PrecVta / tasa;
                        art.FecProOm = DateTime.Now;

                        art.CoUsMo = item.CoUsMo;
                        art.FeUsMo = DateTime.Now;

                        db.Entry(art).State = EntityState.Modified;
                        #endregion
                    }
                    #endregion

                    #endregion

                    db.SaveChanges();

                    #region Actualizar consecutivo
                    utilitarios.ActualizarConsecutivo(numeroNRecepcion, "NREC", item.CoSucu, empresaDB);
                    #endregion

                    return(new Response {
                        Status = "OK", Message = "Transacción realizada con éxito.", FacturaID = numeroNRecepcion.ToString()
                    });
                }
                else
                {
                    throw new ArgumentException("No se encontró el correlativo configurado para 'NREC'.");
                }
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message
                });
            }
        }
예제 #4
0
        public Response Save(EncabFacturaVenta item, string empresaDB)
        {
            try
            {
                using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
                Utilitarios utilitarios = new Utilitarios();

                #region Validar factura
                ValidarFactura(item, empresaDB);
                #endregion

                #region Buscar consecutivo
                var numeroFactura = utilitarios.BuscarConsecutivo("FACT", item.CoSucu, empresaDB);
                var numeroControl = utilitarios.BuscarNroControl(item.CoSucu, empresaDB);
                #endregion

                if (numeroFactura > 0)
                {
                    #region Calcular exento para el DisCen
                    decimal TotalExento = utilitarios.TotalExento(item.DetaFacturaVenta, empresaDB);
                    #endregion

                    #region Construcción de DisCen
                    string DisCen = utilitarios.ArmarDisCen(item.FecEmis, (decimal)item.TotBruto, item.Iva, TotalExento, empresaDB);
                    #endregion

                    #region Encabezado factura
                    Factura factura = new Factura
                    {
                        #region Campos encabezado
                        FactNum    = numeroFactura,
                        Contrib    = item.Contrib,
                        Nombre     = item.Nombre,
                        Rif        = item.Rif,
                        Nit        = item.Nit,
                        NumControl = item.NumControl,
                        Status     = item.Status,
                        Comentario = item.Comentario,
                        Descrip    = item.Descrip,
                        Saldo      = item.Saldo,
                        FecEmis    = item.FecEmis,
                        FecVenc    = item.FecVenc,
                        CoCli      = item.CoCli,
                        CoVen      = item.CoVen,
                        CoTran     = item.CoTran,
                        DirEnt     = item.DirEnt,
                        FormaPag   = item.FormaPag,
                        TotBruto   = item.TotBruto,
                        TotNeto    = item.TotNeto,
                        GlobDesc   = item.GlobDesc,
                        TotReca    = item.TotReca,
                        PorcGdesc  = item.PorcReca,
                        PorcReca   = item.PorcReca,
                        TotalUc    = item.TotalUc,
                        TotalCp    = item.TotalCp,
                        TotFlete   = item.TotFlete,
                        MontoDev   = item.MontoDev,
                        Totklu     = item.Totklu,
                        Anulada    = item.Anulada,
                        Impresa    = item.Impresa,
                        Iva        = item.Iva,
                        IvaDev     = item.IvaDev,
                        Feccom     = item.Feccom,
                        Numcom     = item.Numcom,
                        Tasa       = item.Tasa,
                        Moneda     = item.Moneda,
                        DisCen     = DisCen,
                        Vuelto     = item.Vuelto,
                        Seriales   = item.Seriales,
                        Tasag      = item.Tasag,
                        Tasag10    = item.Tasag10,
                        Tasag20    = item.Tasag20,
                        Campo1     = item.Campo1,
                        Campo2     = item.Campo2,
                        Campo3     = item.Campo3,
                        Campo4     = item.Campo4,
                        Campo5     = item.Campo5,
                        Campo6     = item.Campo6,
                        Campo7     = item.Campo7,
                        Campo8     = item.Campo8,
                        CoUsIn     = item.CoUsIn,
                        FeUsIn     = item.FeUsIn,
                        CoUsMo     = item.CoUsMo,
                        FeUsMo     = item.FeUsMo,
                        CoUsEl     = item.CoUsEl,
                        FeUsEl     = item.FeUsEl,
                        Revisado   = item.Revisado,
                        Trasnfe    = item.Trasnfe,
                        Numcon     = numeroControl,
                        CoSucu     = item.CoSucu,
                        Rowguid    = item.Rowguid,
                        MonIlc     = item.MonIlc,
                        Otros1     = item.Otros1,
                        Otros2     = item.Otros2,
                        Otros3     = item.Otros3,
                        NumTurno   = item.NumTurno,
                        Aux01      = item.Aux01,
                        Aux02      = item.Aux02,
                        Id         = item.Id,
                        Salestax   = item.Salestax,
                        Origen     = item.Origen,
                        OrigenD    = item.OrigenD,
                        StaProd    = item.StaProd,
                        FecReg     = item.FecReg,
                        Impfis     = item.Impfis,
                        Impfisfac  = item.Impfisfac,
                        ImpNroZ    = item.ImpNroZ,
                        VenTer     = item.VenTer,
                        Ptovta     = item.Ptovta,
                        Telefono   = item.Telefono
                                     #endregion
                    };

                    db.Factura.Add(factura);
                    db.SaveChanges();
                    #endregion

                    #region Renglones factura
                    List <RengFac> Renglones = new List <RengFac>();

                    foreach (var d in item.DetaFacturaVenta)
                    {
                        RengFac reng_fac = new RengFac
                        {
                            #region Detalle de reng_fac
                            FactNum    = numeroFactura,
                            RengNum    = d.RengNum,
                            DisCen     = d.DisCen,
                            TipoDoc    = d.TipoDoc,
                            RengDoc    = d.RengDoc,
                            NumDoc     = d.NumDoc,
                            CoArt      = d.CoArt,
                            CoAlma     = d.CoAlma,
                            TotalArt   = d.TotalArt,
                            StotalArt  = d.StotalArt,
                            Pendiente  = d.Pendiente,
                            UniVenta   = d.UniVenta,
                            PrecVta    = d.PrecVta,
                            PorcDesc   = d.PorcDesc,
                            TipoImp    = d.TipoImp,
                            Isv        = d.Isv,
                            RengNeto   = d.RengNeto,
                            CosProUn   = d.CosProUn,
                            UltCosUn   = d.UltCosUn,
                            UltCosOm   = d.UltCosOm,
                            CosProOm   = d.CosProOm,
                            TotalDev   = d.TotalDev,
                            MontoDev   = d.MontoDev,
                            PrecVta2   = d.PrecVta2,
                            Anulado    = d.Anulado,
                            DesArt     = d.DesArt,
                            Seleccion  = d.Seleccion,
                            CantImp    = d.CantImp,
                            Comentario = d.Comentario,
                            Rowguid    = d.Rowguid,
                            TotalUni   = d.TotalUni,
                            MonIlc     = d.MonIlc,
                            Otros      = d.Otros,
                            NroLote    = d.NroLote,
                            FecLote    = d.FecLote,
                            Pendiente2 = d.Pendiente2,
                            TipoDoc2   = d.TipoDoc2,
                            RengDoc2   = d.RengDoc2,
                            NumDoc2    = d.NumDoc2,
                            TipoPrec   = d.TipoPrec,
                            CoAlma2    = d.CoAlma2,
                            Aux01      = d.Aux01,
                            Aux02      = d.Aux02,
                            CantProd   = d.CantProd,
                            ImpProd    = d.ImpProd
                                         #endregion
                        };
                        Renglones.Add(reng_fac);
                    }
                    foreach (var i in Renglones)
                    {
                        #region Actualizacion de stock
                        utilitarios.ActualizarStockArticuloAlmacen(i.CoArt, i.CoAlma, i.TotalArt, false, empresaDB);
                        #endregion

                        db.Entry(i).State = EntityState.Added;
                    }
                    db.SaveChanges();

                    #endregion

                    #region Documento de venta
                    DocumCc documento = new DocumCc
                    {
                        TipoDoc  = "FACT",
                        NroDoc   = numeroFactura,
                        Aut      = true,
                        CoCli    = item.CoCli,
                        Contrib  = item.Contrib,
                        FecEmis  = item.FecEmis,
                        FecVenc  = item.FecVenc,
                        Observa  = item.Descrip,
                        CoVen    = item.CoVen,
                        Tipo     = "1",
                        Tasa     = item.Tasa,
                        Moneda   = item.Moneda,
                        MontoImp = item.Iva,
                        MontoBru = (decimal)item.TotBruto,
                        MontoNet = (decimal)item.TotNeto,
                        Saldo    = item.Saldo,
                        Feccom   = item.Feccom,
                        DisCen   = DisCen,
                        CoUsIn   = item.CoUsIn,
                        FeUsIn   = item.FeUsIn,
                        Numcon   = numeroControl,
                        CoSucu   = item.CoSucu
                    };
                    //db.DocumCc.Add(documento);
                    db.Entry(documento).State = EntityState.Added;
                    db.SaveChanges();
                    #endregion

                    #region Actualizar consecutivo
                    utilitarios.ActualizarConsecutivo(numeroFactura, "FACT", item.CoSucu, empresaDB);
                    #endregion

                    #region Actualizar nro control
                    utilitarios.ActualizarNroControl(numeroControl, item.CoSucu, empresaDB);
                    #endregion

                    return(new Response {
                        Status = "OK", Message = "Transacción realizada con éxito.", FacturaID = numeroFactura.ToString(), ControlID = numeroControl
                    });
                }
                else
                {
                    throw new ArgumentException("No se encontró el correlativo configurado para 'FACT'.");
                }
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message
                });
            }
        }
        public Response Save(EncabDevolucionVenta item, string empresaDB)
        {
            try
            {
                using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
                Utilitarios utilitarios = new Utilitarios();

                #region Validar devolucion
                ValidarDevolucion(item, empresaDB);
                #endregion

                #region Buscar consecutivos
                int numeroDevo    = utilitarios.BuscarConsecutivo("DEVO", item.CoSucu, empresaDB);
                int numeroNCR     = utilitarios.BuscarConsecutivo("N/CR", item.CoSucu, empresaDB);
                var numeroControl = utilitarios.BuscarNroControl(item.CoSucu, empresaDB);
                #endregion

                if (numeroDevo > 0)
                {
                    #region Nota de credito

                    #region Calcular exento para el DisCen
                    decimal TotalExento = (from exento in item.DetaDevolucionVenta where exento.TipoImp == "6" select exento).Sum(t => t.RengNeto);
                    #endregion

                    #region Construcción de DisCen
                    string DisCen = utilitarios.ArmarDisCen(item.FecEmis, (decimal)item.TotBruto, item.Iva, TotalExento, empresaDB);
                    #endregion

                    #region Creando N/CR
                    Response ncr = new DocumentosVentasRepositorio()
                                   .Save(new DocumCc
                    {
                        #region Campos
                        Numcon   = numeroControl,
                        CoCli    = item.CoCli,
                        Contrib  = cliente.Contribu,
                        NroDoc   = 0,
                        TipoDoc  = "N/CR",
                        Moneda   = item.Moneda,
                        CoVen    = item.CoVen,
                        FeUsIn   = item.FeUsIn,
                        FeUsMo   = item.FeUsMo,
                        FeUsEl   = item.FeUsEl,
                        CoSucu   = item.CoSucu,
                        Tipo     = "1",
                        FecEmis  = DateTime.Now,
                        FecVenc  = DateTime.Now,
                        MontoImp = item.Iva,
                        Observa  = $"Devol. Asoc:Fact No.{factura.FactNum}.",
                        MontoBru = (decimal)item.TotBruto,
                        Recargo  = string.Empty,
                        MontoNet = (decimal)item.TotNeto,
                        DocOrig  = "DEVO",
                        NroOrig  = numeroDevo,
                        Tasa     = item.Tasa,
                        Saldo    = (decimal)item.TotNeto,
                        Salestax = string.Empty,
                        Aut      = true,
                        CoUsIn   = item.CoUsIn,
                        CoUsMo   = item.CoUsMo,
                        CoUsEl   = item.CoUsEl,
                        Feccom   = DateTime.Now
                                   #endregion
                    }, empresaDB);
                    #endregion

                    #endregion

                    #region Cancelacion automatica de la devolución
                    if (ncr.Status == "OK")
                    {
                        #region Guardar cobro
                        Response cobroresult = new CobrosRepositorio()
                                               .Save(new EncabCobro
                        {
                            #region Campos cobro
                            CobNum    = 0,
                            Recibo    = string.Empty,
                            CoCli     = item.CoCli,
                            CoVen     = item.CoVen,
                            FecCob    = DateTime.Now,
                            Feccom    = DateTime.Now,
                            Tasa      = item.Tasa,
                            Moneda    = item.Moneda,
                            CoUsIn    = item.CoUsIn,
                            FeUsIn    = item.FeUsIn,
                            CoUsMo    = item.CoUsMo,
                            FeUsMo    = item.FeUsMo,
                            CoUsEl    = item.CoUsEl,
                            FeUsEl    = item.FeUsEl,
                            CoSucu    = item.CoSucu,
                            Descrip   = $"Cobro generado por la Devolución Nro. {numeroDevo}",
                            NumDev    = numeroDevo,
                            DetaCobro = new List <DetaCobro>
                            {
                                new DetaCobro
                                {
                                    #region Renglon factura
                                    CobNum   = 0,
                                    RengNum  = 1,
                                    TpDocCob = "FACT",
                                    DocNum   = factura.FactNum,
                                    Neto     = (decimal)factura.TotNeto,
                                    MontCob  = (decimal)factura.TotNeto,
                                    Isv      = (decimal)factura.Iva,
                                    Moneda   = item.Moneda,
                                    Tasa     = item.Tasa,
                                    FecEmis  = DateTime.Now,
                                    FecVenc  = DateTime.Now
                                               #endregion
                                },
                                new DetaCobro
                                {
                                    #region Renglon nota de crédito
                                    CobNum   = 0,
                                    RengNum  = 2,
                                    TpDocCob = "N/CR",
                                    DocNum   = numeroNCR,
                                    Neto     = (decimal)item.TotNeto,
                                    MontCob  = (decimal)item.TotNeto,
                                    Isv      = (decimal)item.Iva,
                                    Moneda   = item.Moneda,
                                    Tasa     = item.Tasa,
                                    FecEmis  = DateTime.Now,
                                    FecVenc  = DateTime.Now
                                               #endregion
                                }
                            },
                            FormaPagoCobro = new List <FormaPagoCobro>
                            {
                                new FormaPagoCobro
                                {
                                    #region Campos
                                    CobNum  = 0,
                                    RengNum = 1,
                                    TipCob  = "EFEC",
                                    Movi    = 0,
                                    Moneda  = item.Moneda,
                                    CodCaja = caja.CodCaja,
                                    DesCaja = caja.Descrip,
                                    FecCheq = DateTime.Now,
                                    Banco   = "DEVO" // F**k you...
                                              #endregion
                                }
                            }
                            #endregion
                        }, empresaDB);
                        #endregion

                        #region Actualizar saldo factura y documento (FACT)
                        if (cobroresult.Status == "OK")
                        {
                            item.NumCob = Convert.ToInt32(cobroresult.FacturaID); //;-)

                            factura.CoUsMo = item.CoUsMo;
                            factura.FeUsMo = item.FeUsMo;
                            factura.Saldo -= (decimal)item.TotNeto;

                            #region Detalle de factura y stock
                            foreach (var iRengDev in item.DetaDevolucionVenta)
                            {
                                #region Monto devuelto en rengfac
                                factura.DetaFacturaVenta.FirstOrDefault(d => d.FactNum == iRengDev.NumDoc && d.RengNum == iRengDev.RengDoc).TotalDev += iRengDev.TotalArt;
                                #endregion

                                #region actualización de stock
                                utilitarios.ActualizarStockArticuloAlmacen(iRengDev.CoArt, iRengDev.CoAlma, iRengDev.TotalArt, true, empresaDB);
                                #endregion
                            }
                            #endregion

                            Response factresult = new FacturasVentasRepositorio().Update(factura, empresaDB);
                        }
                        else
                        {
                            throw new ArgumentException(cobroresult.Message);
                        }
                        #endregion
                    }
                    else
                    {
                        throw new ArgumentException(ncr.Message);
                    }
                    #endregion

                    #region Devolucion
                    List <RengDvc> RengDvcs = new List <RengDvc>();

                    db.Entry(new DevCli
                    {
                        #region Campos
                        FactNum    = numeroDevo,
                        Contrib    = item.Contrib,
                        Nombre     = item.Nombre,
                        Rif        = item.Rif,
                        Nit        = item.Nit,
                        NumControl = item.NumControl,
                        Status     = item.Status,
                        Comentario = "<Forma Pago: Efectivo>",
                        Descrip    = item.Descrip,
                        Saldo      = item.Saldo,
                        FecEmis    = item.FecEmis,
                        FecVenc    = item.FecVenc,
                        CoCli      = item.CoCli,
                        CoVen      = item.CoVen,
                        CoTran     = item.CoTran,
                        DirEnt     = item.DirEnt,
                        FormaPag   = item.FormaPag,
                        TotBruto   = item.TotBruto,
                        TotNeto    = item.TotNeto,
                        GlobDesc   = item.GlobDesc,
                        TotReca    = item.TotReca,
                        PorcGdesc  = item.PorcGdesc,
                        PorcReca   = item.PorcReca,
                        TotalUc    = item.TotalUc,
                        TotalCp    = item.TotalCp,
                        TotFlete   = item.TotFlete,
                        MontoDev   = item.MontoDev,
                        Totklu     = item.Totklu,
                        Anulada    = item.Anulada,
                        Impresa    = item.Impresa,
                        Iva        = item.Iva,
                        IvaDev     = item.IvaDev,
                        Feccom     = item.Feccom,
                        Numcom     = item.Numcom,
                        Tasa       = item.Tasa,
                        Moneda     = item.Moneda,
                        DisCen     = DisCen,
                        NcNum      = numeroNCR, // ;-)
                        Seriales   = item.Seriales,
                        Tasag      = item.Tasag,
                        Tasag10    = item.Tasag10,
                        Tasag20    = item.Tasag20,
                        Campo1     = item.Campo1,
                        Campo2     = item.Campo2,
                        Campo3     = item.Campo3,
                        Campo4     = item.Campo4,
                        Campo5     = item.Campo5,
                        Campo6     = item.Campo6,
                        Campo7     = item.Campo7,
                        Campo8     = item.Campo8,
                        CoUsIn     = item.CoUsIn,
                        FeUsIn     = item.FeUsIn,
                        CoUsMo     = item.CoUsMo,
                        FeUsMo     = item.FeUsMo,
                        CoUsEl     = item.CoUsEl,
                        FeUsEl     = item.FeUsEl,
                        Revisado   = item.Revisado,
                        Trasnfe    = item.Trasnfe,
                        Numcon     = numeroControl,
                        CoSucu     = item.CoSucu,
                        Rowguid    = item.Rowguid,
                        MonIlc     = item.MonIlc,
                        Otros1     = item.Otros1,
                        Otros2     = item.Otros2,
                        Otros3     = item.Otros3,
                        NumCob     = item.NumCob, //;-)
                        MovCaj     = item.MovCaj,
                        MovBan     = item.MovBan,
                        SaldoNcr   = item.SaldoNcr,
                        NumTurno   = item.NumTurno,
                        Aux01      = item.Aux01,
                        Aux02      = item.Aux02,
                        Salestax   = item.Salestax,
                        Origen     = item.Origen,
                        OrigenD    = item.OrigenD,
                        StaProd    = item.StaProd,
                        Telefono   = item.Telefono
                                     #endregion
                    }).State = EntityState.Added;

                    foreach (var i in item.DetaDevolucionVenta)
                    {
                        RengDvc reng = new RengDvc
                        {
                            #region Campos
                            FactNum    = numeroDevo,
                            RengNum    = i.RengNum,
                            TipoDoc    = i.TipoDoc,
                            RengDoc    = i.RengDoc,
                            NumDoc     = i.NumDoc,
                            CoArt      = i.CoArt,
                            CoAlma     = i.CoAlma,
                            TotalArt   = i.TotalArt,
                            StotalArt  = i.StotalArt,
                            Pendiente  = i.Pendiente,
                            UniVenta   = i.UniVenta,
                            PrecVta    = i.PrecVta,
                            PorcDesc   = i.PorcDesc,
                            TipoImp    = i.TipoImp,
                            RengNeto   = i.RengNeto,
                            CosProUn   = i.CosProUn,
                            UltCosUn   = i.UltCosUn,
                            UltCosOm   = i.UltCosOm,
                            CosProOm   = i.CosProOm,
                            PrecVta2   = i.PrecVta2,
                            DesArt     = i.DesArt,
                            Comentario = i.Comentario,
                            TotalUni   = i.TotalUni,
                            MonIlc     = i.MonIlc,
                            Otros      = i.Otros,
                            NroLote    = i.NroLote,
                            FecLote    = i.FecLote,
                            TipoPrec   = i.TipoPrec,
                            CoAlma2    = i.CoAlma2,
                            Aux01      = i.Aux01,
                            Aux02      = i.Aux02
                                         #endregion
                        };
                        db.Entry(reng).State = EntityState.Added;
                    }
                    db.SaveChanges();
                    #endregion

                    #region Actualización de consecutivos
                    utilitarios.ActualizarConsecutivo(numeroDevo, "DEVO", item.CoSucu, empresaDB);
                    utilitarios.ActualizarConsecutivo(numeroNCR, "N/CR", item.CoSucu, empresaDB);
                    #endregion
                }
                else
                {
                    throw new ArgumentException("No se encontró el correlativo configurado para 'DEVO'.");
                }

                return(new Response {
                    Status = "OK", Message = "Transacción realizada con éxito."
                });
            }
            catch (Exception ex)
            {
                return(new Response {
                    Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message
                });
            }
        }