public static void Completar9500(Cotizacion9500 o9500, decimal mSobrante, bool bDevolverEfectivo) { // Se cancela la venta del anticipo var oVentaAnt = Datos.GetEntity <Venta>(q => q.VentaID == o9500.AnticipoVentaID && q.VentaEstatusID != Cat.VentasEstatus.Cancelada && q.VentaEstatusID != Cat.VentasEstatus.CanceladaSinPago && q.Estatus); if (oVentaAnt != null) { oVentaAnt.VentaEstatusID = Cat.VentasEstatus.Cancelada; Datos.Guardar <Venta>(oVentaAnt); // Se genera una devolución de efectivo (si se realizó un pago) de la venta cancelada, pues se generará una nueva venta con el importe total if (Datos.Exists <VentaPago>(q => q.VentaID == o9500.AnticipoVentaID && q.Estatus)) { VentasProc.GenerarDevolucionDeEfectivo(o9500.AnticipoVentaID.Valor(), o9500.Anticipo - (mSobrante > 0 ? mSobrante : 0)); } } // Si hubo un sobrante, se genera nota de crédito o se devuelve efectivo if (mSobrante > 0) { if (bDevolverEfectivo) { VentasProc.GenerarDevolucionDeEfectivo(oVentaAnt.VentaID, mSobrante); } else { VentasProc.GenerarNotaDeCredito(o9500.ClienteID, mSobrante, "", Cat.OrigenesNotaDeCredito.Anticipo9500, oVentaAnt.VentaID); } } // Se modifica el Estatus del 9500 o9500.EstatusGenericoID = Cat.EstatusGenericos.Completada; Datos.Guardar <Cotizacion9500>(o9500); }
public static void Cancelar9500(int i9500ID, string sMotivo, int iUsuarioID) { var o9500 = Datos.GetEntity <Cotizacion9500>(q => q.Cotizacion9500ID == i9500ID && q.Estatus); var o9500Detalle = Datos.GetListOf <Cotizacion9500Detalle>(q => q.Cotizacion9500ID == i9500ID && q.Estatus); // Se verifica si se cobró el anticipo, para cancelarlo if (o9500.Anticipo > 0) { var oAnticipo = Datos.GetEntity <Venta>(c => c.VentaID == o9500.AnticipoVentaID && c.Estatus); if (oAnticipo.VentaEstatusID == Cat.VentasEstatus.Cobrada || oAnticipo.VentaEstatusID == Cat.VentasEstatus.Completada) { // Si se pagó, se genera una devolución var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == o9500.AnticipoVentaID); if (oVentaV.Pagado > 0) { VentasProc.GenerarDevolucionDeEfectivo(oVentaV.VentaID, oVentaV.Pagado); } // Se cancela la venta del anticipo oAnticipo.VentaEstatusID = (oVentaV.Pagado > 0 ? Cat.VentasEstatus.Cancelada : Cat.VentasEstatus.CanceladaSinPago); Datos.Guardar <Venta>(oAnticipo); } } // Se borran las partes del 9500, si no han sido usadas foreach (var oParte in o9500Detalle) { // Se valida que la parte no haya sido usada en ventas if (Datos.Exists <VentaDetalle>(q => q.ParteID == oParte.ParteID)) { continue; } // Se valida que la parte no haya sido usada en almacén if (Datos.Exists <MovimientoInventarioDetalle>(q => q.ParteID == oParte.ParteID)) { continue; } // Se borra -> Deshabilitado hasta tener las validaciones del Almacén Guardar.EliminarParte(oParte.ParteID); } // Se verifica si hay autorizaciones, para borrarlas var oAuts = Datos.GetListOf <Autorizacion>(c => (c.AutorizacionProcesoID == Cat.AutorizacionesProcesos.c9500PrecioFueraDeRango || c.AutorizacionProcesoID == Cat.AutorizacionesProcesos.c9500SinAnticipo) && c.Tabla == Cat.Tablas.Tabla9500 && c.TablaRegistroID == i9500ID && c.Estatus); foreach (var oReg in oAuts) { oReg.Estatus = true; Datos.Guardar <Autorizacion>(oReg); } // Se cancela el 9500 o9500.EstatusGenericoID = Cat.EstatusGenericos.CanceladoAntesDeVender; o9500.BajaUsuarioID = iUsuarioID; o9500.BajaMotivo = sMotivo; Datos.Guardar <Cotizacion9500>(o9500); }