public IActionResult Guardar([FromBody] EncabFacturaVenta factura, string Emp) { factura.CoUsIn = "999"; factura.FeUsIn = DateTime.Now; resultado = metodo.Guardar(factura, Emp); if (resultado.Status == "OK") { return(Ok(resultado)); } else { return(BadRequest(resultado)); } }
public IActionResult Guardar([FromBody] EncabFacturaVenta factura, string Emp) { factura.CoUsIn = string.IsNullOrEmpty(factura.CoUsIn) ? "999" : factura.CoUsIn; factura.FeUsIn = DateTime.Now; factura.CoUsMo = string.Empty; factura.FeUsMo = Convert.ToDateTime("01/01/1900"); factura.CoUsEl = string.Empty; factura.FeUsEl = Convert.ToDateTime("01/01/1900"); resultado = metodo.Save(factura, Emp); if (resultado.Status == "OK") { return(Ok(resultado)); } else { return(BadRequest(resultado)); } }
private void ValidarDatos(EncabFacturaVenta obj, string empresaDB) { #region Verificar sucursal SaSucursal sucu = new SucursalesRepositorio().Find(obj.CoSucuIn, empresaDB); if (sucu == null) { throw new ArgumentException($"La sucursal {obj.CoSucuIn} no existe."); } #endregion #region Verificar cliente SaCliente cliente = new ClientesRepositorio().Find(obj.CoCli, empresaDB); if (cliente == null) { throw new ArgumentException($"El cliente {obj.CoCli} no existe."); } #endregion #region Verificar transporte SaTransporte transporte = new TransportesRepositorio().Find(obj.CoTran, empresaDB); if (transporte == null) { throw new ArgumentException($"El transporte {obj.CoTran} no existe."); } #endregion #region Verificar forma de pago SaCondicionPago condicion = new CondicionesPagosRepositorio().Find(obj.CoCond, empresaDB); if (condicion == null) { throw new ArgumentException($"La forma de pago {obj.CoCond} no existe."); } #endregion #region Verificar moneda utilitarios.GetMoneda(obj.CoMone, empresaDB); #endregion #region Verificar datos en renglones foreach (var iRengFac in obj.DetaFacturaVenta) { #region Verificar articulo SaArticulo 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 SaAlmacen almacen = new AlmacenesRepositorio().Find(iRengFac.CoAlma, empresaDB); if (almacen == null) { throw new ArgumentException($"El almacén {iRengFac.CoAlma.Trim()} suministrado en el renglón {iRengFac.RengNum} no existe."); } else { if (almacen.CoSucur.Trim() != iRengFac.CoSucuIn.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.CoSucuIn.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 utilitarios.GetUnidadPrimaria(iRengFac.CoUni.Trim(), empresaDB); #endregion } #endregion }
public Response Guardar(EncabFacturaVenta factura, string empresaDB) { try { using var db = new ProfitAdmin2K12(conn.GetDbContextOptions(empresaDB)); int resultEncab = -1, resultDeta = -1, resultDoc = -1; #region Validar datos ValidarDatos(factura, empresaDB); #endregion #region Consecutivo numero de factura /*Consecutivo de Numero de Factura.*/ string codigoConsecutivoFactura = "DOC_VEN_FACT"; string numeroFactura = utilitarios.GetProximoNumero(codigoConsecutivoFactura, factura.CoSucuIn, empresaDB); #endregion #region Consecutivo numero de control /*Consecutivo de Nro Control*/ string codigoConsecutivoControl = "FACT_VTA_N_CON"; string numeroControl = utilitarios.GetProximoNumero(codigoConsecutivoControl, factura.CoSucuIn, empresaDB); #endregion #region Insertar factura de venta. FormattableString FactVenta = $@"EXEC pInsertarFacturaVenta @sN_Control={numeroControl} ,@sDoc_Num={numeroFactura} ,@sDescrip={factura.Descrip} ,@sCo_Cli={factura.CoCli} ,@sCo_Tran={factura.CoTran} ,@sCo_Cond={factura.CoCond} ,@sCo_Ven={factura.CoVen} ,@sCo_Cta_Ingr_Egr={factura.CoCtaIngrEgr} ,@sCo_Mone={factura.CoMone} ,@bAnulado={factura.Anulado} ,@sdFec_Emis={factura.FecEmis} ,@sdFec_Reg={factura.FecReg} ,@sdFec_Venc={factura.FecVenc} ,@sStatus={factura.Status} ,@deTasa={factura.Tasa} ,@sPorc_Desc_Glob={factura.PorcDescGlob} ,@deMonto_Desc_Glob={factura.MontoDescGlob} ,@sPorc_Reca={factura.PorcReca} ,@deMonto_Reca={factura.MontoReca} ,@deSaldo={factura.Saldo} ,@deTotal_Bruto={factura.TotalBruto} ,@deMonto_Imp={factura.MontoImp} ,@deMonto_Imp3={factura.MontoImp3} ,@deOtros1={factura.Otros1} ,@deOtros2={factura.Otros2} ,@deOtros3={factura.Otros3} ,@deMonto_Imp2={factura.MontoImp2} ,@deTotal_Neto={factura.TotalNeto} ,@sComentario={factura.Comentario} ,@sDir_Ent={factura.DirEnt} ,@bContrib={factura.Contrib} ,@bImpresa={factura.Impresa} ,@sSalestax={factura.Salestax} ,@sImpfis={factura.Impfis} ,@sImpfisfac={factura.Impfisfac} ,@bVen_Ter={factura.VenTer} ,@sDis_Cen={factura.DisCen} ,@sCampo1={factura.Campo1} ,@sCampo2={factura.Campo2} ,@sCampo3={factura.Campo3} ,@sCampo4={factura.Campo4} ,@sCampo5={factura.Campo5} ,@sCampo6={factura.Campo6} ,@sCampo7={factura.Campo7} ,@sCampo8={factura.Campo8} ,@sRevisado={factura.Revisado} ,@sTrasnfe={factura.Trasnfe} ,@sco_sucu_in={factura.CoSucuIn} ,@sco_us_in={factura.CoUsIn} ,@sMaquina={factura.Maquina}"; resultEncab = db.Database.ExecuteSqlInterpolated(FactVenta); #endregion #region Insertar renglones de factura de venta. /* resultEncab es el resultado devuelto por el stored procedure de insertar factura de venta * (-1 no registró la transacción en sql) */ foreach (var i in factura.DetaFacturaVenta) { FormattableString RengFactVenta = $@"EXEC pInsertarRenglonesFacturaVenta @iReng_Num={i.RengNum} ,@sDoc_Num={numeroFactura} ,@sCo_Art={i.CoArt} ,@sDes_Art={i.DesArt} ,@sCo_Uni={i.CoUni} ,@sSco_Uni={i.ScoUni} ,@sCo_Alma={i.CoAlma} ,@sCo_Precio={i.CoPrecio} ,@sTipo_Imp={i.TipoImp} ,@sTipo_Imp2={i.TipoImp2} ,@sTipo_Imp3={i.TipoImp3} ,@deTotal_Art={i.TotalArt} ,@deSTotal_Art={i.StotalArt} ,@dePrec_Vta={i.PrecVta} ,@sPorc_Desc={i.PorcDesc} ,@deMonto_Desc={i.MontoDesc} ,@deReng_Neto={i.RengNeto} ,@dePendiente={i.Pendiente} ,@dePendiente2={i.Pendiente2} ,@deMonto_Desc_Glob={i.MontoDescGlob} ,@deMonto_reca_Glob={i.MontoRecaGlob} ,@deOtros1_glob={i.Otros1Glob} ,@deOtros2_glob={i.Otros2Glob} ,@deOtros3_glob={i.Otros3Glob} ,@deMonto_imp_afec_glob={i.MontoImpAfecGlob} ,@deMonto_imp2_afec_glob={i.MontoImp2AfecGlob} ,@deMonto_imp3_afec_glob={i.MontoImp3AfecGlob} ,@sTipo_Doc={i.TipoDoc} ,@gRowguid_Doc={i.RowguidDoc} ,@sNum_Doc={i.NumDoc} ,@dePorc_Imp={i.PorcImp} ,@dePorc_Imp2={i.PorcImp2} ,@dePorc_Imp3={i.PorcImp3} ,@deMonto_Imp={i.MontoImp} ,@deMonto_Imp2={i.MontoImp2} ,@deMonto_Imp3={i.MontoImp3} ,@deOtros={i.Otros} ,@deTotal_Dev={i.TotalDev} ,@deMonto_Dev={i.MontoDev} ,@sComentario={i.Comentario} ,@sDis_Cen={i.DisCen} ,@sCo_Sucu_In={i.CoSucuIn} ,@sCo_Us_In={i.CoUsIn} ,@sREVISADO={i.Revisado} ,@sTRASNFE={i.Trasnfe} ,@sMaquina={i.Maquina}"; resultDeta = db.Database.ExecuteSqlInterpolated(RengFactVenta); } #endregion #region Insertar documento de venta /*resultDeta devuelve el resultado del stored procedure insertar renglones de factura de venta * (-1 no registró la transacción en sql). */ //' de Cliente ' {factura.CoCli} FormattableString DocumentoVenta = $@"EXEC pInsertarDocumentoVenta @sNro_Doc = {numeroFactura} ,@sCo_Tipo_Doc = 'FACT' ,@sDoc_Orig = 'FACT' ,@sCo_Cli = {factura.CoCli} ,@sCo_Mone = {factura.CoMone} ,@sdFec_Reg = {factura.FecReg} ,@sdFec_Emis = {factura.FecEmis} ,@bAnulado = {factura.Anulado} ,@deAdicional = 0 ,@sMov_Ban = NULL ,@bAut = 1 ,@bContrib = {factura.Contrib} ,@sObserva = {factura.Descrip} ,@sNro_Orig = {numeroFactura} ,@sNro_Che = NULL ,@sCo_Ven = {factura.CoVen} ,@sCo_Cta_Ingr_Egr = {factura.CoCtaIngrEgr} ,@deTasa = {factura.Tasa} ,@sTipo_Imp = NULL ,@deTotal_Bruto = {factura.TotalBruto} ,@deTotal_Neto = {factura.TotalNeto} ,@deMonto_Reca = {factura.MontoReca} ,@deMonto_Imp = {factura.MontoImp} ,@deMonto_Imp2 = {factura.MontoImp2} ,@deMonto_Imp3 = {factura.MontoImp3} ,@deSaldo = {factura.Saldo} ,@sN_Control = {numeroControl} ,@sNum_Comprobante = NULL ,@sDis_Cen = NULL ,@deComis1 = 0,@deComis2 = 0,@deComis3 = 0,@deComis4 = 0 ,@deOtros1 = {factura.Otros1} ,@deOtros2 = {factura.Otros2} ,@deOtros3 = {factura.Otros3} ,@sPorc_Desc_Glob = {factura.PorcDescGlob} ,@deMonto_Desc_Glob = {factura.MontoDescGlob} ,@sPorc_Reca = {factura.PorcReca} ,@dePorc_Imp = 0,@dePorc_Imp2 = 0,@dePorc_Imp3 = 0 ,@sSalestax = {factura.Salestax} ,@bVen_Ter = {factura.VenTer} ,@sdFec_Venc = {factura.FecVenc} ,@deComis5 = 0,@deComis6 = 0 ,@sImpFis = {factura.Impfis} ,@sImpFisFac = {factura.Impfisfac} ,@sImp_Nro_Z = {factura.ImpNroZ} ,@iTipo_Origen = 0 ,@sCampo1 = {factura.Campo1},@sCampo2 = {factura.Campo2},@sCampo3 = {factura.Campo3},@sCampo4 = {factura.Campo4},@sCampo5 = {factura.Campo5},@sCampo6 = {factura.Campo6},@sCampo7 = {factura.Campo7},@sCampo8 = {factura.Campo8} ,@sRevisado = {factura.Revisado} ,@sTrasnfe = {factura.Trasnfe} ,@sco_sucu_in = {factura.CoSucuIn} ,@sco_us_in = {factura.CoUsIn} ,@sMaquina = {factura.Maquina}"; resultDoc = db.Database.ExecuteSqlInterpolated(DocumentoVenta); #endregion return(new Response { Status = "OK", Message = "Transacción realizada con éxito.", FacturaID = numeroFactura, ControlID = numeroControl }); } catch (Exception ex) { return(new Response { Status = "ERROR", Message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message }); } }
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 }
private Response CrearCobro(EncabFacturaVenta factura) { try { /*Crear anticipo por la factura q se esta creando*/ #region Documento venta tipo adelanto string nroAnticipo; DocumentoVenta documento = new DocumentoVenta { CoTipoDoc = "ADEL", CoCli = factura.CoCli.Trim(), CoVen = factura.CoVen.Trim(), CoMone = factura.CoMone, Tasa = factura.Tasa, FecReg = factura.FecReg, FecEmis = factura.FecEmis, FecVenc = factura.FecVenc, Aut = true, Contrib = factura.Contrib, DocOrig = "COBRO", NroOrig = null, Saldo = factura.Saldo, TotalBruto = factura.Saldo, TotalNeto = factura.Saldo, TipoImp = "7", CoUsIn = factura.CoUsIn, FeUsIn = DateTime.Now, CoUsMo = string.Empty, FeUsMo = Convert.ToDateTime("01/01/1900"), CoSucuIn = factura.CoSucuIn, CoSucuMo = factura.CoSucuMo }; string AnticipoString = JsonConvert.SerializeObject(documento); httpCliente.Headers.Add(HttpRequestHeader.ContentType, "application/json"); response = httpCliente.UploadString($"http://localhost:{puertoApi}/api/DocumentoVentaProfit/Guardar?Emp={db}", "POST", AnticipoString); resp = JsonConvert.DeserializeObject <Response>(response); nroAnticipo = resp.FacturaID; #endregion #region Renglones cobro List <DetaCobroDocReng> RengCob = new List <DetaCobroDocReng> { new DetaCobroDocReng { RengNum = 1, CoTipoDoc = "ADEL", NroDoc = nroAnticipo, /*;-)*/ CoSucuIn = factura.CoSucuIn, CoUsIn = factura.CoUsIn, FeUsIn = DateTime.Now, CoUsMo = factura.CoUsMo, CoSucuMo = factura.CoSucuMo, FeUsMo = factura.FeUsMo } }; #endregion #region Forma de pago List <TipoCobroTpreng> RengTip = new List <TipoCobroTpreng> { new TipoCobroTpreng { RengNum = 1, FormaPag = "EF", CodCaja = _caja.CodCaja.Trim(), // ;-) MontDoc = factura.Saldo, FechaChe = factura.FecEmis, CoSucuIn = factura.CoSucuIn, CoUsIn = factura.CoUsIn, FeUsIn = factura.FeUsIn, CoSucuMo = factura.CoSucuMo, CoUsMo = factura.CoUsMo, FeUsMo = factura.FeUsMo, } }; #endregion #region Encabezado cobro y guardar EncabCobro cobro = new EncabCobro { Descrip = $"Anticipo automático proyecto {factura.Campo2.Trim()} presupuesto {factura.Campo1.Trim()}.", CoCli = factura.CoCli.Trim(), CoVen = factura.CoVen, CoMone = factura.CoMone, Tasa = factura.Tasa, Fecha = factura.FecEmis, Campo1 = factura.Campo1.Trim(), Campo2 = factura.Campo2.Trim(), CoUsIn = "999", FeUsIn = DateTime.Now, CoSucuIn = factura.CoSucuIn, CoUsMo = string.Empty, FeUsMo = Convert.ToDateTime("01/01/1900"), DetaCobroDocReng = RengCob, TipoCobroTpreng = RengTip }; string CobroString = JsonConvert.SerializeObject(cobro); httpCliente.Headers.Add(HttpRequestHeader.ContentType, "application/json"); response = httpCliente.UploadString($"http://localhost:{puertoApi}/api/CobroProfit/Guardar?Emp={db}&isAdelanto={true}", "POST", CobroString); resp = JsonConvert.DeserializeObject <Response>(response); nroCobro = resp.FacturaID.Trim(); #endregion #region Actualizando el anticipo response = httpCliente.DownloadString($"http://localhost:{puertoApi}/api/DocumentoVentaProfit/GetDocumento?NumDocumento={nroAnticipo.Trim()}&CodTipoDocumento=ADEL&Emp={db}"); DocumentoVenta anticipo = JsonConvert.DeserializeObject <DocumentoVenta>(response); anticipo.Observa = $"COBRO N° {nroCobro}"; anticipo.NroOrig = nroCobro; string EditAnticipoString = JsonConvert.SerializeObject(anticipo); httpCliente.Headers.Add(HttpRequestHeader.ContentType, "application/json"); response = httpCliente.UploadString($"http://localhost:{puertoApi}/api/DocumentoVentaProfit/Actualizar?Emp={db}", "PUT", EditAnticipoString); return(resp = JsonConvert.DeserializeObject <Response>(response)); #endregion } catch (WebException ex) { CloseLoading(); using (var reader = new System.IO.StreamReader(ex.Response.GetResponseStream())) { response = reader.ReadToEnd(); return(resp = JsonConvert.DeserializeObject <Response>(response)); } } }