コード例 #1
0
        private bool AccionAceptar()
        {
            // Cargando.Mostrar();

            decimal mFaltante         = 0;
            int     iClienteID        = 0;
            int     iCobroVentaID     = 0;
            bool    bUsarCascosAFavor = false;
            bool    bCrearVale        = false;
            bool    bCascoAFavor      = false;

            int iCascoRecibido   = Util.Entero(this.cmbCascoRecibido.SelectedValue);
            int iSucursalID      = GlobalClass.SucursalID;
            int iCascoRegistroID = this.oCascoRegistro.CascoRegistroID;
            int iParteID         = this.oCascoRegistro.ParteID;
            var oParte           = Datos.GetEntity <Parte>(c => c.ParteID == iParteID && c.Estatus);
            var oVenta           = Datos.GetEntity <Venta>(c => c.VentaID == this.oCascoRegistro.VentaID && c.Estatus);

            iClienteID = oVenta.ClienteID;
            var oCliente = Datos.GetEntity <Cliente>(c => c.ClienteID == oVenta.ClienteID && c.Estatus);

            if (iCascoRecibido != oParte.RequiereCascoDe)
            {
                // Si se recibió algún casco
                if (iCascoRecibido > 0)
                {
                    // Se obtienen el importe requerido
                    var oPrecioReq = Datos.GetEntity <PartePrecio>(c => c.ParteID == oParte.RequiereCascoDe && c.Estatus);
                    var oPrecioRec = Datos.GetEntity <PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus);
                    if (oPrecioReq == null || oPrecioRec == null)
                    {
                        UtilLocal.MensajeAdvertencia("Hubo un error al obtener el Casco requerido.");
                        return(false);
                    }

                    // Se calcula el importe faltante
                    decimal?[] aPreciosReq = new decimal?[5] {
                        oPrecioReq.PrecioUno, oPrecioReq.PrecioDos, oPrecioReq.PrecioTres, oPrecioReq.PrecioCuatro, oPrecioReq.PrecioCinco
                    };
                    decimal?[] aPreciosRec = new decimal?[5] {
                        oPrecioRec.PrecioUno, oPrecioRec.PrecioDos, oPrecioRec.PrecioTres, oPrecioRec.PrecioCuatro, oPrecioRec.PrecioCinco
                    };
                    mFaltante = (aPreciosReq[oCliente.ListaDePrecios - 1] - aPreciosRec[oCliente.ListaDePrecios - 1]).Valor();

                    // Se evalúa el importe faltante, para tomar alguna acción
                    if (mFaltante != 0)
                    {
                        // Si el casco recibido es menor que el casco esperado
                        if (mFaltante > 0)
                        {
                            // Se busca por folio de cobro o por cascos a favor, según sea el caso
                            if (this.txtFolioDeCobro.Text == "")
                            {
                                decimal mTotalAFavor = Util.Decimal(this.lblTotalAFavor.Text);
                                if (mTotalAFavor != mFaltante)
                                {
                                    UtilLocal.MensajeAdvertencia("El importe seleccionado con los Cascos a favor debe ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda));
                                    return(false);
                                }
                                bUsarCascosAFavor = true;
                            }
                            else
                            {
                                // Se obtiene el importe de la venta
                                var oVentaCobroV = Datos.GetEntity <VentasView>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID &&
                                                                                (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada));
                                if (oVentaCobroV == null)
                                {
                                    UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada.");
                                    return(false);
                                }
                                iCobroVentaID = oVentaCobroV.VentaID;

                                // Se valida que la parte de la venta sea una "diferencia de casco"
                                if (!Datos.Exists <VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == Cat.Partes.DiferenciaDeCascos && c.Estatus))
                                {
                                    UtilLocal.MensajeAdvertencia("La venta especificada no corresponde a una Diferencia de Casco.");
                                    return(false);
                                }
                                // Se valida que el importe cobrado sea el correspondiente
                                if (oVentaCobroV.Total != mFaltante)
                                {
                                    UtilLocal.MensajeAdvertencia("El cobro por la diferencia debe de ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda));
                                    return(false);
                                }
                            }
                        }
                        // Si el casco recibido es mayor que el casco esperado
                        else if (mFaltante < 0)
                        {
                            var oRes = UtilLocal.MensajePreguntaCancelar("El importe del casco recibido es mayor al esperado. ¿Deseas crear un Vale a favor del Cliente?");
                            if (oRes == DialogResult.Cancel)
                            {
                                return(false);
                            }
                            bCrearVale   = (oRes == DialogResult.Yes);
                            bCascoAFavor = !bCrearVale;
                        }
                    }
                }
                else  // Si no se recibió ningún casco, se evalúa la venta
                {
                    // Se obtiene la VentaID
                    var oVentaCobro = Datos.GetEntity <Venta>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID &&
                                                              (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada) && c.Estatus);
                    if (oVentaCobro == null)
                    {
                        UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada.");
                        return(false);
                    }
                    iCobroVentaID = oVentaCobro.VentaID;

                    // Se valida que la venta tenga la Parte correspondiente al casco
                    if (!Datos.Exists <VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == oParte.RequiereDepositoDe && c.Estatus))
                    {
                        UtilLocal.MensajeAdvertencia("El cobro del Casco no corresonde al Artículo.");
                        return(false);
                    }
                }
            }

            // Cargando.Cerrar();
            // Se solicita la contraseña
            var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.ControlDeCascos.Completar");

            if (oResU.Error)
            {
                return(false);
            }
            Cargando.Mostrar();

            // Se completa el registro de casco
            DateTime dAhora = DateTime.Now;

            // Se registran y modifican los Cascos a favor usados, si aplica
            if (bUsarCascosAFavor)
            {
                foreach (DataGridViewRow oFila in this.dgvImportesAFavor.Rows)
                {
                    if (Util.Logico(oFila.Cells["Sel"].Value))
                    {
                        // Se registra el importe usado para el CascoImporte
                        int     iCascoImporteID = Util.Entero(oFila.Cells["CascoImporteID"].Value);
                        decimal mAUsar          = Util.Decimal(oFila.Cells["ImporteAUsar"].Value);
                        var     oCascoImporte   = Datos.GetEntity <CascoImporte>(c => c.CascoImporteID == iCascoImporteID);
                        oCascoImporte.ImporteUsado += mAUsar;
                        Datos.Guardar <CascoImporte>(oCascoImporte);
                        // Se registra la relación entre el CascoRegistro y el CascoImporte
                        var oCascoRegImp = new CascoRegistroImporte()
                        {
                            CascoRegistroID = this.oCascoRegistro.CascoRegistroID,
                            CascoImporteID  = oCascoImporte.CascoImporteID,
                            Importe         = mAUsar
                        };
                        Datos.Guardar <CascoRegistroImporte>(oCascoRegImp);
                    }
                }
            }
            // Se crea el vale, si aplica
            if (bCrearVale)
            {
                var oRes = VentasProc.GenerarNotaDeCredito(iClienteID, (mFaltante * -1), "", Cat.OrigenesNotaDeCredito.CascoDeMayorValor
                                                           , this.oCascoRegistro.CascoRegistroID);
                // Se crea la póliza contable (AfeConta)
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.ValeDirecto, oRes.Respuesta, oCliente.Nombre, "POR CASCO MAYOR");
                // Se manda a imprimir el ticket
                VentasLoc.GenerarTicketNotaDeCredito(oRes.Respuesta);
            }
            // Se registra el casco a favor, si aplica
            if (bCascoAFavor)
            {
                var oCascoImporte = new CascoImporte()
                {
                    Fecha    = dAhora,
                    OrigenID = this.oCascoRegistro.CascoRegistroID,
                    Importe  = (mFaltante * -1)
                };
                Datos.Guardar <CascoImporte>(oCascoImporte);
            }
            // Se afecta la existencia y el kárdex del casco recibido
            if (iCascoRecibido > 0)
            {
                var oSucursal  = Datos.GetEntity <Sucursal>(c => c.SucursalID == iSucursalID && c.Estatus);
                var oPrecioRec = Datos.GetEntity <PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus);
                AdmonProc.AfectarExistenciaYKardex(iCascoRecibido, GlobalClass.SucursalID, Cat.OperacionesKardex.EntradaInventario, iCascoRegistroID.ToString()
                                                   , oResU.Respuesta.UsuarioID, oCliente.Nombre, "CONTROL DE CASCOS", oSucursal.NombreSucursal, 1, oPrecioRec.Costo.Valor()
                                                   , Cat.Tablas.CascoRegistro, iCascoRegistroID);
            }

            // Se guardan los datos del registro de casco
            this.oCascoRegistro.RecibidoCascoID  = (iCascoRecibido > 0 ? (int?)iCascoRecibido : null);
            this.oCascoRegistro.RealizoUsuarioID = oResU.Respuesta.UsuarioID;
            this.oCascoRegistro.CobroVentaID     = (iCobroVentaID > 0 ? (int?)iCobroVentaID : null);
            Datos.Guardar <CascoRegistro>(this.oCascoRegistro);

            // Se manda a imprimir el ticket correspondiente
            var oCascoRegV = Datos.GetEntity <CascosRegistrosView>(c => c.CascoRegistroID == iCascoRegistroID);
            var oRep       = new Report();

            oRep.Load(GlobalClass.ConfiguracionGlobal.pathReportes + "ControlDeCascos.frx");
            VentasLoc.TicketAgregarLeyendas(ref oRep);
            oRep.RegisterData(new List <CascosRegistrosView>()
            {
                oCascoRegV
            }, "ControlDeCasco");
            UtilLocal.EnviarReporteASalida("Reportes.ControlDeCascos.Completar.Salida", oRep);

            Cargando.Cerrar();
            UtilLocal.MostrarNotificacion("Control de casco completado correctamente.");

            return(true);
        }
コード例 #2
0
        private bool AccionAceptar()
        {
            // Cargando.Mostrar();

            decimal mFaltante = 0;
            int iClienteID = 0;
            int iCobroVentaID = 0;
            bool bUsarCascosAFavor = false;
            bool bCrearVale = false;
            bool bCascoAFavor = false;

            int iCascoRecibido = Util.Entero(this.cmbCascoRecibido.SelectedValue);
            int iSucursalID = GlobalClass.SucursalID;
            int iCascoRegistroID = this.oCascoRegistro.CascoRegistroID;
            int iParteID = this.oCascoRegistro.ParteID;
            var oParte = Datos.GetEntity<Parte>(c => c.ParteID == iParteID && c.Estatus);
            var oVenta = Datos.GetEntity<Venta>(c => c.VentaID == this.oCascoRegistro.VentaID && c.Estatus);
            iClienteID = oVenta.ClienteID;
            var oCliente = Datos.GetEntity<Cliente>(c => c.ClienteID == oVenta.ClienteID && c.Estatus);

            if (iCascoRecibido != oParte.RequiereCascoDe)
            {
                // Si se recibió algún casco
                if (iCascoRecibido > 0)
                {
                    // Se obtienen el importe requerido
                    var oPrecioReq = Datos.GetEntity<PartePrecio>(c => c.ParteID == oParte.RequiereCascoDe && c.Estatus);
                    var oPrecioRec = Datos.GetEntity<PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus);
                    if (oPrecioReq == null || oPrecioRec == null)
                    {
                        UtilLocal.MensajeAdvertencia("Hubo un error al obtener el Casco requerido.");
                        return false;
                    }

                    // Se calcula el importe faltante
                    decimal?[] aPreciosReq = new decimal?[5] { oPrecioReq.PrecioUno, oPrecioReq.PrecioDos, oPrecioReq.PrecioTres, oPrecioReq.PrecioCuatro, oPrecioReq.PrecioCinco };
                    decimal?[] aPreciosRec = new decimal?[5] { oPrecioRec.PrecioUno, oPrecioRec.PrecioDos, oPrecioRec.PrecioTres, oPrecioRec.PrecioCuatro, oPrecioRec.PrecioCinco };
                    mFaltante = (aPreciosReq[oCliente.ListaDePrecios - 1] - aPreciosRec[oCliente.ListaDePrecios - 1]).Valor();

                    // Se evalúa el importe faltante, para tomar alguna acción
                    if (mFaltante != 0)
                    {
                        // Si el casco recibido es menor que el casco esperado
                        if (mFaltante > 0)
                        {
                            // Se busca por folio de cobro o por cascos a favor, según sea el caso
                            if (this.txtFolioDeCobro.Text == "")
                            {
                                decimal mTotalAFavor = Util.Decimal(this.lblTotalAFavor.Text);
                                if (mTotalAFavor != mFaltante)
                                {
                                    UtilLocal.MensajeAdvertencia("El importe seleccionado con los Cascos a favor debe ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda));
                                    return false;
                                }
                                bUsarCascosAFavor = true;
                            }
                            else
                            {
                                // Se obtiene el importe de la venta
                                var oVentaCobroV = Datos.GetEntity<VentasView>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID
                                    && (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada));
                                if (oVentaCobroV == null)
                                {
                                    UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada.");
                                    return false;
                                }
                                iCobroVentaID = oVentaCobroV.VentaID;

                                // Se valida que la parte de la venta sea una "diferencia de casco"
                                if (!Datos.Exists<VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == Cat.Partes.DiferenciaDeCascos && c.Estatus))
                                {
                                    UtilLocal.MensajeAdvertencia("La venta especificada no corresponde a una Diferencia de Casco.");
                                    return false;
                                }
                                // Se valida que el importe cobrado sea el correspondiente
                                if (oVentaCobroV.Total != mFaltante)
                                {
                                    UtilLocal.MensajeAdvertencia("El cobro por la diferencia debe de ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda));
                                    return false;
                                }
                            }
                        }
                        // Si el casco recibido es mayor que el casco esperado
                        else if (mFaltante < 0)
                        {
                            var oRes = UtilLocal.MensajePreguntaCancelar("El importe del casco recibido es mayor al esperado. ¿Deseas crear un Vale a favor del Cliente?");
                            if (oRes == DialogResult.Cancel)
                                return false;
                            bCrearVale = (oRes == DialogResult.Yes);
                            bCascoAFavor = !bCrearVale;
                        }
                    }
                }
                else  // Si no se recibió ningún casco, se evalúa la venta
                {
                    // Se obtiene la VentaID
                    var oVentaCobro = Datos.GetEntity<Venta>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID
                        && (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada) && c.Estatus);
                    if (oVentaCobro == null)
                    {
                        UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada.");
                        return false;
                    }
                    iCobroVentaID = oVentaCobro.VentaID;

                    // Se valida que la venta tenga la Parte correspondiente al casco
                    if (!Datos.Exists<VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == oParte.RequiereDepositoDe && c.Estatus))
                    {
                        UtilLocal.MensajeAdvertencia("El cobro del Casco no corresonde al Artículo.");
                        return false;
                    }
                }
            }

            // Cargando.Cerrar();
            // Se solicita la contraseña
            var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.ControlDeCascos.Completar");
            if (oResU.Error) return false;
            Cargando.Mostrar();

            // Se completa el registro de casco
            DateTime dAhora = DateTime.Now;
            // Se registran y modifican los Cascos a favor usados, si aplica
            if (bUsarCascosAFavor)
            {
                foreach (DataGridViewRow oFila in this.dgvImportesAFavor.Rows)
                {
                    if (Util.Logico(oFila.Cells["Sel"].Value))
                    {
                        // Se registra el importe usado para el CascoImporte
                        int iCascoImporteID = Util.Entero(oFila.Cells["CascoImporteID"].Value);
                        decimal mAUsar = Util.Decimal(oFila.Cells["ImporteAUsar"].Value);
                        var oCascoImporte = Datos.GetEntity<CascoImporte>(c => c.CascoImporteID == iCascoImporteID);
                        oCascoImporte.ImporteUsado += mAUsar;
                        Datos.Guardar<CascoImporte>(oCascoImporte);
                        // Se registra la relación entre el CascoRegistro y el CascoImporte
                        var oCascoRegImp = new CascoRegistroImporte()
                        {
                            CascoRegistroID = this.oCascoRegistro.CascoRegistroID,
                            CascoImporteID = oCascoImporte.CascoImporteID,
                            Importe = mAUsar
                        };
                        Datos.Guardar<CascoRegistroImporte>(oCascoRegImp);
                    }
                }
            }
            // Se crea el vale, si aplica
            if (bCrearVale)
            {
                var oRes = VentasProc.GenerarNotaDeCredito(iClienteID, (mFaltante * -1), "", Cat.OrigenesNotaDeCredito.CascoDeMayorValor
                    , this.oCascoRegistro.CascoRegistroID);
                // Se crea la póliza contable (AfeConta)
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.ValeDirecto, oRes.Respuesta, oCliente.Nombre, "POR CASCO MAYOR");
                // Se manda a imprimir el ticket
                VentasLoc.GenerarTicketNotaDeCredito(oRes.Respuesta);
            }
            // Se registra el casco a favor, si aplica
            if (bCascoAFavor)
            {
                var oCascoImporte = new CascoImporte()
                {
                    Fecha = dAhora,
                    OrigenID = this.oCascoRegistro.CascoRegistroID,
                    Importe = (mFaltante * -1)
                };
                Datos.Guardar<CascoImporte>(oCascoImporte);
            }
            // Se afecta la existencia y el kárdex del casco recibido
            if (iCascoRecibido > 0)
            {
                var oSucursal = Datos.GetEntity<Sucursal>(c => c.SucursalID == iSucursalID && c.Estatus);
                var oPrecioRec = Datos.GetEntity<PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus);
                AdmonProc.AfectarExistenciaYKardex(iCascoRecibido, GlobalClass.SucursalID, Cat.OperacionesKardex.EntradaInventario, iCascoRegistroID.ToString()
                    , oResU.Respuesta.UsuarioID, oCliente.Nombre, "CONTROL DE CASCOS", oSucursal.NombreSucursal, 1, oPrecioRec.Costo.Valor()
                    , Cat.Tablas.CascoRegistro, iCascoRegistroID);
            }

            // Se guardan los datos del registro de casco
            this.oCascoRegistro.RecibidoCascoID = (iCascoRecibido > 0 ? (int?)iCascoRecibido : null);
            this.oCascoRegistro.RealizoUsuarioID = oResU.Respuesta.UsuarioID;
            this.oCascoRegistro.CobroVentaID = (iCobroVentaID > 0 ? (int?)iCobroVentaID : null);
            Datos.Guardar<CascoRegistro>(this.oCascoRegistro);

            // Se manda a imprimir el ticket correspondiente
            var oCascoRegV = Datos.GetEntity<CascosRegistrosView>(c => c.CascoRegistroID == iCascoRegistroID);
            var oRep = new Report();
            oRep.Load(GlobalClass.ConfiguracionGlobal.pathReportes + "ControlDeCascos.frx");
            VentasLoc.TicketAgregarLeyendas(ref oRep);
            oRep.RegisterData(new List<CascosRegistrosView>() { oCascoRegV }, "ControlDeCasco");
            UtilLocal.EnviarReporteASalida("Reportes.ControlDeCascos.Completar.Salida", oRep);

            Cargando.Cerrar();
            UtilLocal.MostrarNotificacion("Control de casco completado correctamente.");

            return true;
        }