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
                });
            }
        }
Exemple #2
0
        private void ValidarFactura(EncabFacturaVenta obj, string empresaDB)
        {
            using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
            Utilitarios utilitarios = new Utilitarios();

            #region Verificar cliente
            cliente = new ClientesRepositorio().GetCliente(obj.CoCli, empresaDB);
            if (cliente == null)
            {
                throw new ArgumentException($"El cliente {obj.CoCli.Trim()} indicado para la factura no existe.");
            }
            else
            {
                if (cliente.Inactivo)
                {
                    throw new ArgumentException($"El cliente {obj.CoCli.Trim()} indicado para la factura se encuentra inactivo.");
                }
            }
            #endregion

            #region Verificar vendedor
            Vendedor vendor = new VendedoresRepositorio().Find(obj.CoVen, empresaDB);
            if (vendor != null)
            {
                if (!vendor.FunVen)
                {
                    throw new ArgumentException($"Vendedor {obj.CoVen} indicado no tiene función de 'vendedor'.");
                }
            }
            else
            {
                throw new ArgumentException($"El vendedor {obj.CoVen} suministrado no existe.");
            }
            #endregion

            #region Verificar transporte
            Transpor transporte = db.Transpor.FirstOrDefault(t => t.CoTran == obj.CoTran);
            if (transporte == null)
            {
                throw new ArgumentException($"El transporte {obj.CoTran} suministrado no existe.");
            }
            #endregion

            #region Verificar condicion de pago
            Condicio condicion = db.Condicio.FirstOrDefault(c => c.CoCond == obj.FormaPag);
            if (condicion == null)
            {
                throw new ArgumentException($"La condición de pago {obj.FormaPag} suministrado no existe.");
            }
            #endregion

            #region Verificar moneda
            utilitarios.GetMoneda(obj.Moneda, empresaDB);
            #endregion

            #region Verificar sucursal
            utilitarios.GetSucursal(obj.CoSucu, empresaDB);
            #endregion

            #region Verificar datos en renglones de factura
            foreach (var iRengFac in obj.DetaFacturaVenta)
            {
                #region Verificar articulo
                Art articulo = db.Art.FirstOrDefault(a => a.CoArt == iRengFac.CoArt);
                if (articulo == null)
                {
                    throw new ArgumentException($"El artículo {iRengFac.CoArt.Trim()} suministrado en el renglón {iRengFac.RengNum} no existe.");
                }
                #endregion

                #region Verificar almacen
                SubAlma almacen = db.SubAlma.FirstOrDefault(a => a.CoSub == iRengFac.CoAlma);
                if (almacen == null)
                {
                    throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no existe.");
                }
                else
                {
                    if (almacen.CoAlma.Trim() != obj.CoSucu.Trim())
                    {
                        throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no está permitido utilizarlo en la sucursal suministrada {obj.CoSucu.Trim()}.");
                    }
                    if (almacen.Noventa)
                    {
                        throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no está permitido utilizarlo en el módulo de facturas.");
                    }
                }
                #endregion

                #region Verificar unidad primaria
                Unidades unidad = db.Unidades.FirstOrDefault(u => u.CoUni == iRengFac.UniVenta);
                if (unidad == null)
                {
                    throw new ArgumentException($"La unidad de venta {iRengFac.UniVenta.Trim()} suministrada en el renglón {iRengFac.RengNum} no existe.");
                }
                #endregion
            }
            #endregion
        }
        private void ValidarDevolucion(EncabDevolucionVenta obj, string empresaDB)
        {
            using var db = new ProfitAdmin2K8(conn.GetDbContextOptions(empresaDB));
            Utilitarios utilitarios = new Utilitarios();

            #region Verificar caja ppal para el cobro
            caja = db.Cajas.FirstOrDefault(c => c.Cajapri == true);
            if (caja == null)
            {
                throw new ArgumentException("No existe una caja principal para la cancelación del cobro. Llame a su consultor profit.");
            }
            #endregion

            #region Verificar cliente
            cliente = new ClientesRepositorio().GetCliente(obj.CoCli, empresaDB);
            if (cliente == null)
            {
                throw new ArgumentException($"El cliente {obj.CoCli.Trim()} indicado para la devolución no existe.");
            }
            else
            {
                if (cliente.Inactivo)
                {
                    throw new ArgumentException($"El cliente {obj.CoCli.Trim()} indicado para la devolución se encuentra inactivo.");
                }
            }
            #endregion

            #region Verificar vendedor
            Vendedor vendor = new VendedoresRepositorio().Find(obj.CoVen, empresaDB);
            if (vendor != null)
            {
                if (!vendor.FunVen)
                {
                    throw new ArgumentException($"Vendedor {obj.CoVen} indicado no tiene función de 'vendedor'.");
                }
                if (!vendor.FunCob)
                {
                    throw new ArgumentException($"Vendedor {obj.CoVen} indicado no tiene función de 'cobrador'.");
                }
            }
            else
            {
                throw new ArgumentException($"El vendedor {obj.CoVen} suministrado no existe.");
            }
            #endregion

            #region Verificar transporte
            Transpor transporte = db.Transpor.FirstOrDefault(t => t.CoTran == obj.CoTran);
            if (transporte == null)
            {
                throw new ArgumentException($"El transporte {obj.CoTran} suministrado no existe.");
            }
            #endregion

            #region Verificar condicion de pago
            Condicio condicion = db.Condicio.FirstOrDefault(c => c.CoCond == obj.FormaPag);
            if (condicion == null)
            {
                throw new ArgumentException($"La condición de pago {obj.FormaPag} suministrado no existe.");
            }
            #endregion

            #region Verificar moneda
            utilitarios.GetMoneda(obj.Moneda, empresaDB);
            #endregion

            #region Verificar sucursal
            utilitarios.GetSucursal(obj.CoSucu, empresaDB);
            #endregion

            #region Verificar datos en renglones de factura
            foreach (var iRengFac in obj.DetaDevolucionVenta)
            {
                #region Verificar factura
                factura = new FacturasVentasRepositorio().Find(iRengFac.NumDoc, empresaDB);
                if (factura == null)
                {
                    throw new ArgumentException($"La factura {iRengFac.NumDoc} indicada en el renglón {iRengFac.RengNum} en la devolución de cliente no existe.");
                }
                if (factura.Anulada)
                {
                    throw new ArgumentException($"La factura {iRengFac.NumDoc} indicada en el renglón {iRengFac.RengNum} en la devolución de cliente se encuentra anulada.");
                }
                if (factura.Saldo == 0)
                {
                    throw new ArgumentException($"La factura {iRengFac.NumDoc} indicada en el renglón {iRengFac.RengNum} se encuentra procesada [Saldo=0.00].");
                }
                if (factura.Saldo < iRengFac.RengNeto)
                {
                    throw new ArgumentException($"La factura {iRengFac.NumDoc} tiene un saldo menor al monto indicado en el renglón {iRengFac.RengNum}.");
                }
                if (factura.DetaFacturaVenta.FirstOrDefault(ra => ra.CoArt.Trim() == iRengFac.CoArt.Trim()) == null)
                {
                    throw new ArgumentException($"El artículo {iRengFac.CoArt.Trim()} indicado en el renglón {iRengFac.RengNum} no se encontró en la factura.");
                }
                #endregion

                #region Verificar articulo
                Art articulo = new ArticulosRepositorio().Find(iRengFac.CoArt, empresaDB);
                if (articulo == null)
                {
                    throw new ArgumentException($"El artículo {iRengFac.CoArt.Trim()} suministrado en el renglón {iRengFac.RengNum} no existe.");
                }
                #endregion

                #region Verificar almacen
                SubAlma almacen = db.SubAlma.FirstOrDefault(a => a.CoSub == iRengFac.CoAlma);
                if (almacen == null)
                {
                    throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no existe.");
                }
                else
                {
                    if (almacen.CoAlma.Trim() != obj.CoSucu.Trim())
                    {
                        throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no está permitido utilizarlo en la sucursal suministrada {obj.CoSucu.Trim()}.");
                    }
                    if (almacen.Noventa)
                    {
                        throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no está permitido utilizarlo en el módulo de facturas.");
                    }
                }
                #endregion

                #region Verificar unidad primaria
                Unidades unidad = db.Unidades.FirstOrDefault(u => u.CoUni == iRengFac.UniVenta);
                if (unidad == null)
                {
                    throw new ArgumentException($"La unidad de venta {iRengFac.UniVenta.Trim()} suministrada en el renglón {iRengFac.RengNum} no existe.");
                }
                #endregion
            }
            #endregion
        }