Example #1
0
        public GastoDevengar(int iContaEgresoID)
        {
            InitializeComponent();
            this.Icon = Properties.Resources.Ico_ControlRefaccionaria_Ant;

            this.oEgreso = Datos.GetEntity <ContaEgreso>(c => c.ContaEgresoID == iContaEgresoID);
        }
Example #2
0
        public GastoDevengar(int iContaEgresoID)
        {
            InitializeComponent();
            this.Icon = Properties.Resources.Ico_ControlRefaccionaria_Ant;

            this.oEgreso = Datos.GetEntity<ContaEgreso>(c => c.ContaEgresoID == iContaEgresoID);
        }
Example #3
0
        public GastoContable(int iEgresoID)
        {
            this.InitializeComponent();

            this.oEgreso = Datos.GetEntity <ContaEgreso>(c => c.ContaEgresoID == iEgresoID);
            this.EsMod   = true;
        }
Example #4
0
        public GastoContable(int iEgresoID)
        {
            this.InitializeComponent();

            this.oEgreso = Datos.GetEntity<ContaEgreso>(c => c.ContaEgresoID == iEgresoID);
            this.EsMod = true;
        }
Example #5
0
        public static void CrearPolizasDeGastoContable(ContaEgreso oGasto)
        {
            ContaPoliza oPoliza = null;
            var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == oGasto.ContaCuentaAuxiliarID);

            // Se verifica lo devengado, para hacer una póliza por cada devengado
            var oDev = Datos.GetListOf<ContaEgresoDevengado>(c => c.ContaEgresoID == oGasto.ContaEgresoID);
            // Si no hay devengados, se agrega uno con el importe del gasto, para que sí se haga la póliza del gasto
            if (oDev.Count == 0)
                oDev.Add(new ContaEgresoDevengado() { SucursalID = oGasto.SucursalID, Importe = oGasto.Importe });

            // Se comienzan a hacer las pólizas correspondientes
            foreach (var oReg in oDev)
            {
                // Si el importe es cero, no se hace nada
                if (oReg.Importe == 0)
                    continue;

                // Se crea la póliza normal del gasto, después se ajusta el importe.
                if (oGasto.TipoDocumentoID == Cat.TiposDeDocumento.Factura)
                {
                    if (oGasto.TipoFormaPagoID == Cat.FormasDePago.Efectivo)
                    {
                        oPoliza = ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoFacturadoEfectivo, oGasto.ContaEgresoID, oGasto.FolioFactura
                            , oGasto.Observaciones, oReg.SucursalID, oGasto.Fecha);
                    }
                    else
                    {
                        if (oGasto.BancoCuentaID == Cat.CuentasBancarias.Banamex || oGasto.BancoCuentaID == Cat.CuentasBancarias.Scotiabank)
                            oPoliza = ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoFacturadoBanco, oGasto.ContaEgresoID, oGasto.FolioFactura
                                , oGasto.Observaciones, oReg.SucursalID, oGasto.Fecha);
                        else
                            oPoliza = ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoContableFacturadoBancoCpcp, oGasto.ContaEgresoID
                                , oGasto.FolioFactura, oGasto.Observaciones, oReg.SucursalID, oGasto.Fecha);
                    }
                }
                else
                {
                    oPoliza = ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoNotaEfectivo, oGasto.ContaEgresoID, oGasto.FolioFactura
                        , (oCuentaAux.CuentaAuxiliar + " / " + oGasto.Observaciones), oReg.SucursalID, oGasto.Fecha);
                }

                // Se ajusta el importe según el devengado que sea, si es diferente
                if (oReg.Importe != oGasto.Importe)
                    ContaProc.ModificarImportePoliza(oPoliza.ContaPolizaID, oGasto.Importe, oReg.Importe);
            }
        }
Example #6
0
        public static void GastoVerDevengarAutomaticamente(ContaEgreso oEgreso)
        {
            var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == oEgreso.ContaCuentaAuxiliarID);
            if (oCuentaAux.DevengarAut.Valor())
            {
                decimal mPorTotal = 0, mImporteDev = 0;
                var oDevAut = Datos.GetListOf<ContaCuentaAuxiliarDevengadoAutomatico>(c => c.ContaCuentaAuxiliarID == oEgreso.ContaCuentaAuxiliarID);
                foreach (var oReg in oDevAut)
                {
                    mPorTotal += oReg.Porcentaje;
                    decimal mImporte = Math.Round(oEgreso.Importe * (oReg.Porcentaje / 100), 2);
                    if (mPorTotal == 100)
                        mImporte = (oEgreso.Importe - mImporteDev);

                    ContaProc.GastoDevengar(oEgreso.ContaEgresoID, oReg.SucursalID, mImporte, oEgreso.Fecha);
                    mImporteDev += mImporte;
                }
            }
            // Se verifica si se debe hacer un devengado especial
            else if (oCuentaAux.DevengarAutEsp.Valor())
            {
                var oDevEsp = Datos.GetEntity<ContaCuentaAuxiliarDevengadoEspecial>(c => c.ContaCuentaAuxiliarID == oEgreso.ContaCuentaAuxiliarID);
                if (oDevEsp != null)
                    ContaProc.GastoDevengarEspecial(oEgreso.ContaEgresoID, oDevEsp.DuenioID, oEgreso.Importe, oEgreso.Fecha);
            }
        }
Example #7
0
        public static ResAcc<int> GastoCrear(ContaEgreso oGasto)
        {
            Datos.Guardar<ContaEgreso>(oGasto);
            // Se manda devengar, sólo se afecta si aplica, si no no
            ContaProc.GastoVerDevengarAutomaticamente(oGasto);

            return new ResAcc<int>(true, oGasto.ContaEgresoID);
        }
Example #8
0
        public bool AccionGuardar()
        {
            // Se valida
            if (!this.Validar())
            {
                return(false);
            }

            Cargando.Mostrar();

            // Se guardan los datos
            // DateTime dAhora = DateTime.Now;
            int?iDocID = Util.Entero(this.cmbDocumento.SelectedValue);
            // Se guarda el gasto
            ContaEgreso oGasto = (this.EsMod ? this.oEgreso : new ContaEgreso());

            oGasto.ContaCuentaAuxiliarID = Util.Entero(this.cmbCuentaAuxiliar.SelectedValue);
            oGasto.Fecha            = this.dtpFecha.Value;
            oGasto.Importe          = Util.Decimal(this.txtImporte.Text);
            oGasto.TipoFormaPagoID  = Util.Entero(this.cmbFormaDePago.SelectedValue);
            oGasto.FolioDePago      = this.txtFolioDePago.Text;
            oGasto.FolioFactura     = this.txtFolioFactura.Text;
            oGasto.BancoCuentaID    = (int?)this.cmbCuentaBancaria.SelectedValue;
            oGasto.TipoDocumentoID  = (iDocID > 0 ? iDocID : null);
            oGasto.EsFiscal         = this.chkEsFiscal.Checked;
            oGasto.Observaciones    = this.txtObservaciones.Text;
            oGasto.RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID;
            oGasto.SucursalID       = GlobalClass.SucursalID;
            Datos.Guardar <ContaEgreso>(oGasto);
            // Se guarda el detalle, si aplica
            foreach (DataGridViewRow Fila in this.dgvDetalle.Rows)
            {
                if (Fila.IsNewRow)
                {
                    continue;
                }

                int iCambioID = Util.Entero(Fila.Cells["_Cambio"].Value);
                if (iCambioID == Cat.TiposDeAfectacion.SinCambios)
                {
                    continue;
                }

                ContaEgresoDetalle oGastoDet;
                if (iCambioID == Cat.TiposDeAfectacion.Agregar)
                {
                    oGastoDet = new ContaEgresoDetalle();
                    oGastoDet.ContaEgresoID = oGasto.ContaEgresoID;
                }
                else
                {
                    oGastoDet = (Fila.Tag as ContaEgresoDetalle);
                    if (iCambioID == Cat.TiposDeAfectacion.Borrar)
                    {
                        Datos.Eliminar <ContaEgresoDetalle>(oGastoDet, true);
                        continue;
                    }
                }
                oGastoDet.ContaConsumibleID = Util.Entero(Fila.Cells["ContaConsumibleID"].Value);
                oGastoDet.Cantidad          = Util.Decimal(Fila.Cells["Cantidad"].Value);
                oGastoDet.Importe           = Util.Decimal(Fila.Cells["Precio"].Value);
                Datos.Guardar <ContaEgresoDetalle>(oGastoDet);
            }
            // Se manda devengar automáticamente, si aplica
            ContaProc.GastoVerDevengarAutomaticamente(oGasto);

            // Se ejecutan procesos para gastos nuevos únicamente
            if (!this.EsMod)
            {
                // Se crean la pólizas contable correspondientes (AfeConta),
                ContaProc.CrearPolizasDeGastoContable(oGasto);

                // Se crea el movimiento bancario correspondiente, si aplica
                // Como se afecta la cuenta de bancos, se crea el movimiento bancario para mandarlo a conciliación y así llevar el control de todos los
                // movimientos bancarios
                if (oGasto.TipoFormaPagoID == Cat.FormasDePago.Cheque || oGasto.TipoFormaPagoID == Cat.FormasDePago.Tarjeta ||
                    oGasto.TipoFormaPagoID == Cat.FormasDePago.Transferencia)
                {
                    var oMovBanc = new BancoCuentaMovimiento()
                    {
                        BancoCuentaID   = oGasto.BancoCuentaID,
                        EsIngreso       = false,
                        Fecha           = oGasto.Fecha,
                        FechaAsignado   = oGasto.Fecha,
                        SucursalID      = oGasto.SucursalID,
                        Importe         = oGasto.Importe,
                        Concepto        = oGasto.Observaciones,
                        Referencia      = oGasto.FolioFactura,
                        TipoFormaPagoID = oGasto.TipoFormaPagoID,
                        RelacionTabla   = Cat.Tablas.ContaEgreso,
                        RelacionID      = oGasto.ContaEgresoID
                    };
                    ContaProc.RegistrarMovimientoBancario(oMovBanc);
                }
            }

            Cargando.Cerrar();

            // Se muestra una notificación
            this.RestaurarControles();
            UtilLocal.MostrarNotificacion("Proceso completado correctamente.");

            return(true);
        }
Example #9
0
        private void ImpAccionGuardar()
        {
            if (!this.ImpValidar())
                return;

            Cargando.Mostrar();

            // Se inserta el pago de impuesto
            var oImpuesto = new NominaImpuesto()
            {
                ContaCuentaDeMayorID = Util.Entero(this.cmbImpTipo.SelectedValue),
                Fecha = this.dtpImpFecha.Value,
                Periodo = Util.Entero(this.cmbImpPeriodo.SelectedValue),
                BancoCuentaID = Util.Entero(this.cmbImpCuenta.SelectedValue),
                TipoFormaPagoID = Util.Entero(this.cmbImpFormaDePago.SelectedValue),
                FolioDePago = this.txtImpFolioDePago.Text
            };
            Datos.Guardar<NominaImpuesto>(oImpuesto);

            string sPeriodo = this.cmbImpPeriodo.Text;
            decimal mImporteTotal = 0;
            foreach (DataGridViewRow oFila in this.dgvImpDatos.Rows)
            {
                if (!Util.Logico(oFila.Cells["imp_Sel"].Value))
                    continue;

                // Se inserta el impuesto usuario
                var oImpUsuario = new NominaImpuestoUsuario()
                {
                    NominaImpuestoID = oImpuesto.NominaImpuestoID,
                    IdUsuario = Util.Entero(oFila.Cells["imp_UsuarioID"].Value),
                    SucursalID = Util.Entero(oFila.Cells["imp_SucursalID"].Value),
                    Retenido = Util.Decimal(oFila.Cells["imp_Retenido"].Value),
                    Total = Util.Decimal(oFila.Cells["imp_Total"].Value)
                };
                Datos.Guardar<NominaImpuestoUsuario>(oImpUsuario);
                mImporteTotal += oImpUsuario.Total;

                // Se inserta el gasto contable
                var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == oImpuesto.ContaCuentaDeMayorID && c.RelacionID == oImpUsuario.IdUsuario);
                if (oCuentaAux == null)
                {
                    UtilLocal.MensajeAdvertencia("El usuario " + Util.Cadena(oFila.Cells["imp_Usuario"].Value)
                        + " no tiene una cuenta auxiliar relacionada. No se generará el gasto contable.");
                }
                else
                {
                    var oEgreso = new ContaEgreso()
                    {
                        ContaCuentaAuxiliarID = oCuentaAux.ContaCuentaAuxiliarID,
                        Fecha = oImpuesto.Fecha,
                        Importe = oImpUsuario.Total,
                        TipoFormaPagoID = oImpuesto.TipoFormaPagoID,
                        FolioDePago = oImpuesto.FolioDePago,
                        TipoDocumentoID = Cat.TiposDeDocumento.Factura,
                        EsFiscal = true,
                        Observaciones = ("PAGO " + this.cmbImpTipo.Text + " " + sPeriodo),
                        SucursalID = oImpUsuario.SucursalID,
                        RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID,
                        FolioFactura = sPeriodo,
                        BancoCuentaID = oImpuesto.BancoCuentaID
                    };
                    ContaProc.GastoCrear(oEgreso);
                }

                // Se registra la póliza correspondiente (AfeConta)
                switch (oImpuesto.ContaCuentaDeMayorID)
                {
                    case Cat.ContaCuentasDeMayor.Nomina2Por:
                        ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.Pago2Por, oImpUsuario.NominaImpuestoUsuarioID, oImpuesto.FolioDePago
                            , ("PAGO 2% " + sPeriodo), oImpuesto.Fecha);
                        break;
                    case Cat.ContaCuentasDeMayor.Imss:
                        ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoImss, oImpUsuario.NominaImpuestoUsuarioID, oImpuesto.FolioDePago
                            , ("PAGO IMSS " + sPeriodo), oImpuesto.Fecha);
                        break;
                    case Cat.ContaCuentasDeMayor.Infonavit:
                        ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoInfonavit, oImpUsuario.NominaImpuestoUsuarioID, oImpuesto.FolioDePago
                            , ("PAGO INFONAVIT " + sPeriodo), oImpuesto.Fecha);
                        break;
                }
            }

            // Se inserta el movimiento bancario
            var oMov = new BancoCuentaMovimiento()
            {
                BancoCuentaID = oImpuesto.BancoCuentaID,
                EsIngreso = false,
                Fecha = oImpuesto.Fecha,
                FechaAsignado = oImpuesto.Fecha,
                SucursalID = Cat.Sucursales.Matriz,
                Importe = mImporteTotal,
                Concepto = ("PAGO IMPUESTO " + this.cmbImpTipo.Text + " " + sPeriodo),
                Referencia = GlobalClass.UsuarioGlobal.NombreUsuario,
                TipoFormaPagoID = oImpuesto.TipoFormaPagoID,
                DatosDePago = oImpuesto.FolioDePago,
                RelacionTabla = Cat.Tablas.NominaImpuesto,
                RelacionID = oImpuesto.NominaImpuestoID
            };
            ContaProc.RegistrarMovimientoBancario(oMov);

            Cargando.Cerrar();
            UtilLocal.MensajeInformacion("Proceso completado exitosamente.");
        }
Example #10
0
        private bool GuardarDomingo()
        {
            Cargando.Mostrar();

            // Se guarda la nómina
            int iBancoCuentaID = Util.Entero(this.cmbCuentaBancaria.SelectedValue);
            string sDia = DateTime.Now.ToString("yyMMdd");
            var oNomina = new Nomina()
            {
                Semana = DateTime.Now,
                Fecha = DateTime.Now,
                BancoCuentaID = iBancoCuentaID,
                Domingo = true
            };
            Datos.Guardar<Nomina>(oNomina);

            // Se guarda el detalle
            foreach (DataGridViewRow oFila in this.dgvDatos.Rows)
            {
                if (!Util.Logico(oFila.Cells["Sel"].Value))
                    continue;

                int iUsuarioID = Util.Entero(oFila.Cells["UsuarioID"].Value);
                int iSucursalID = Util.Entero(oFila.Cells["SucursalID"].Value);
                // Se guardan los datos
                var oNominaFijo = new NominaUsuario()
                {
                    NominaID = oNomina.NominaID,
                    IdUsuario = iUsuarioID,
                    SucursalID = Util.Entero(oFila.Cells["SucursalID"].Value),
                    Adicional = Util.Decimal(oFila.Cells["Adicional"].Value),
                    Tickets = Util.Decimal(oFila.Cells["Tickets"].Value),
                    Adelanto = Util.Decimal(oFila.Cells["Adelanto"].Value),
                    MinutosTarde = Util.Decimal(oFila.Cells["MinutosTarde"].Value),
                    Otros = Util.Decimal(oFila.Cells["Otros"].Value)
                };
                Datos.Guardar<NominaUsuario>(oNominaFijo);

                // Se genera el gasto contable por la diferencia, si aplica
                decimal mDiferencia = Util.Decimal(oFila.Cells["Diferencia"].Value);
                if (mDiferencia != 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios && c.RelacionID == iUsuarioID);
                    if (oCuentaAux != null)
                    {
                        var oGasto = new ContaEgreso()
                        {
                            ContaCuentaAuxiliarID = oCuentaAux.ContaCuentaAuxiliarID,
                            Fecha = DateTime.Now,
                            Importe = mDiferencia,
                            TipoFormaPagoID = Cat.FormasDePago.Efectivo,
                            TipoDocumentoID = Cat.TiposDeDocumento.Nota,
                            EsFiscal = false,
                            Observaciones = "NÓMINA DOMINGO",
                            SucursalID = iSucursalID,
                            RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID,
                            FolioFactura = sDia,
                        };
                        ContaProc.GastoCrear(oGasto);
                    }
                }
            }

            // Se generan las pólizas contables correspondientes (AfeConta)
            var oNominaUsuariosV = Datos.GetListOf<NominaUsuariosView>(c => c.NominaID == oNomina.NominaID);
            foreach (var oReg in oNominaUsuariosV)
            {
                // Se crea la póliza de la diferencia, si aplica
                if (oReg.Diferencia != 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux == null)
                    {
                        UtilLocal.MensajeAdvertencia("No se encontró la cuenta auxiliar: Salarios -> " + oReg.Usuario + ". No se creará la póliza de Complemento Nómina.");
                        continue;
                    }
                    ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "NÓMINA DOMINGO"
                        , oCuentaAux.ContaCuentaAuxiliarID, Cat.ContaCuentasAuxiliares.ReservaNomina, oReg.Diferencia.Valor(), oReg.Usuario
                        , Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                }

                // Se crea la póliza del adelanto, si aplica
                DateTime dAhora = DateTime.Now;
                if (oReg.Adelanto > 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.DeudoresDiversos
                        && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux != null)
                    {
                        ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "ADELANTO", Cat.ContaCuentasAuxiliares.Caja, oCuentaAux.ContaCuentaAuxiliarID
                            , oReg.Adelanto, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor(), oReg.SucursalID);
                        // Se crea adicionalmente, un ingreso de caja por el importe del adelanto
                        var oIngreso = new CajaIngreso()
                        {
                            CajaTipoIngresoID = Cat.CajaTiposDeIngreso.Otros,
                            Concepto = ("PAGO ADELANTO " + oReg.Usuario),
                            Importe = oReg.Adelanto,
                            Fecha = dAhora,
                            SucursalID = oReg.SucursalID,
                            RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID
                        };
                        Datos.Guardar<CajaIngreso>(oIngreso);
                    }
                }
                // Se crea la póliza de minutos tarde y otros, si aplica
                if (oReg.MinutosTarde > 0 || oReg.Otros > 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios
                        && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux != null)
                    {
                        if (oReg.MinutosTarde > 0)
                            ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "MINUTOS TARDE", Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID
                                , oReg.MinutosTarde, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                        if (oReg.Otros > 0)
                            ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "OTROS DESCUENTOS", Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID
                                , oReg.Otros, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                    }
                }
            }

            // Se manda a imprimir la nómina de cada usuario
            var oRep = new Report();
            oRep.Load(UtilLocal.RutaReportes("NominaDomingo.frx"));
            oRep.RegisterData(new List<Nomina>() { oNomina }, "Nomina");
            oRep.RegisterData(oNominaUsuariosV, "Usuarios");

            Cargando.Cerrar();
            UtilLocal.EnviarReporteASalida("Reportes.NominaDomingo.Salida", oRep);

            UtilLocal.MostrarNotificacion("Proceso completado.");
            this.btnDomingo_Click(this, null);

            return true;
        }
Example #11
0
        private bool AccionGuardar()
        {
            if (!this.Validar())
                return false;

            if (this.bDomingo)
                return this.GuardarDomingo();

            Cargando.Mostrar();

            // Se guarda la nómina
            int iBancoCuentaID = Util.Entero(this.cmbCuentaBancaria.SelectedValue);
            DateTime dAhora = DateTime.Now;
            DateTime dOficial = this.dtpOficial.Value;
            DateTime dComplementaria = this.dtpComplementaria.Value;
            string sDiaOficial = dOficial.ToString("yyMMdd");
            string sDiaComplementaria = dComplementaria.ToString("yyMMdd");
            DateTime dSemana = Util.FechaHora(this.cmbSemana.SelectedValue);
            bool bEsAguinaldo = (this.cmbSemana.Text == "AGUINALDO");
            var oNomina = new Nomina()
            {
                Semana = dSemana,
                Fecha = dAhora,
                BancoCuentaID = iBancoCuentaID,
                EsAguinaldo = bEsAguinaldo
            };
            Datos.Guardar<Nomina>(oNomina);

            // Se guarda el detalle
            decimal mTotalOficial = 0;
            foreach (DataGridViewRow oFila in this.dgvDatos.Rows)
            {
                if (!Util.Logico(oFila.Cells["Sel"].Value))
                    continue;

                int iUsuarioID = Util.Entero(oFila.Cells["UsuarioID"].Value);
                int iSucursalID = Util.Entero(oFila.Cells["SucursalID"].Value);
                // Se llenan los datos de la nómina oficial (dinámico)
                for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++)
                {
                    var oNominaOfCuentaV = (this.dgvDatos.Columns[iCol].Tag as NominaOficialCuentasView);
                    var oNominaOf = new NominaUsuarioOficial()
                    {
                        NominaID = oNomina.NominaID,
                        IdUsuario = iUsuarioID,
                        ContaCuentaDeMayorID = oNominaOfCuentaV.ContaCuentaDeMayorID,
                        Importe = Util.Decimal(oFila.Cells[iCol].Value),
                        Suma = oNominaOfCuentaV.Suma
                    };
                    Datos.Guardar<NominaUsuarioOficial>(oNominaOf);
                }
                // Se guardan los datos no dinámicos
                var oNominaFijo = new NominaUsuario()
                {
                    NominaID = oNomina.NominaID,
                    IdUsuario = iUsuarioID,
                    SucursalID = Util.Entero(oFila.Cells["SucursalID"].Value),
                    SuperoMinimo = (oFila.Cells["SueldoMinimo"].Style.ForeColor == Color.Gray),
                    SueldoFijo = Util.Decimal(oFila.Cells["SueldoFijo"].Value),
                    SueldoVariable = Util.Decimal(oFila.Cells["SueldoVariable"].Value),
                    Sueldo9500 = Util.Decimal(oFila.Cells["Sueldo9500"].Value),
                    SueldoMinimo = Util.Decimal(oFila.Cells["SueldoMinimo"].Value),
                    Bono = Util.Decimal(oFila.Cells["Bono"].Value),
                    Adicional = Util.Decimal(oFila.Cells["Adicional"].Value),
                    Tickets = Util.Decimal(oFila.Cells["Tickets"].Value),
                    Adelanto = Util.Decimal(oFila.Cells["Adelanto"].Value),
                    MinutosTarde = Util.Decimal(oFila.Cells["MinutosTarde"].Value),
                    Otros = Util.Decimal(oFila.Cells["Otros"].Value)
                };
                Datos.Guardar<NominaUsuario>(oNominaFijo);

                // Se generan los gastos contables correspondientes, de lo oficial
                for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++)
                {
                    decimal mImporte = Util.Decimal(oFila.Cells[iCol].Value);
                    var oNominaOfCuentaV = (this.dgvDatos.Columns[iCol].Tag as NominaOficialCuentasView);
                    int iCuentaDeMayorID = oNominaOfCuentaV.ContaCuentaDeMayorID;
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == iCuentaDeMayorID && c.RelacionID == iUsuarioID);
                    if (oCuentaAux == null)
                        continue;
                    var oGasto = new ContaEgreso()
                    {
                        ContaCuentaAuxiliarID = oCuentaAux.ContaCuentaAuxiliarID,
                        Fecha = dOficial,
                        Importe = mImporte,
                        TipoFormaPagoID = Cat.FormasDePago.Transferencia,
                        FolioDePago = sDiaOficial,
                        TipoDocumentoID = Cat.TiposDeDocumento.Factura,
                        EsFiscal = true,
                        Observaciones = ("NÓMINA " + this.cmbSemana.Text),
                        SucursalID = iSucursalID,
                        RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID,
                        FolioFactura = sDiaOficial,
                        BancoCuentaID = iBancoCuentaID
                    };
                    ContaProc.GastoCrear(oGasto);
                }
                // Se genera el gasto contable por la diferencia, si aplica
                decimal mDiferencia = Util.Decimal(oFila.Cells["Diferencia"].Value);
                if (mDiferencia != 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios && c.RelacionID == iUsuarioID);
                    if (oCuentaAux != null)
                    {
                        var oGasto = new ContaEgreso()
                        {
                            ContaCuentaAuxiliarID = oCuentaAux.ContaCuentaAuxiliarID,
                            Fecha = dComplementaria,
                            Importe = mDiferencia,
                            TipoFormaPagoID = Cat.FormasDePago.Efectivo,
                            TipoDocumentoID = Cat.TiposDeDocumento.Nota,
                            EsFiscal = false,
                            Observaciones = ("CN " + this.cmbSemana.Text),
                            SucursalID = iSucursalID,
                            RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID,
                            FolioFactura = sDiaComplementaria,
                        };
                        ContaProc.GastoCrear(oGasto);
                    }
                }

                mTotalOficial += Util.Decimal(oFila.Cells["TotalOficial"].Value);
            }

            // Se genera el moviemiento bancario, con lo oficial
            var oMov = new BancoCuentaMovimiento()
            {
                BancoCuentaID = iBancoCuentaID,
                EsIngreso = false,
                Fecha = dOficial,
                FechaAsignado = dAhora,
                SucursalID = GlobalClass.SucursalID,
                Importe = mTotalOficial,
                Concepto = "NÓMINA BANCARIA",
                Referencia = GlobalClass.UsuarioGlobal.NombreUsuario,
                TipoFormaPagoID = Cat.FormasDePago.Transferencia,
                RelacionTabla = Cat.Tablas.Nomina,
                RelacionID = oNomina.NominaID
            };
            ContaProc.RegistrarMovimientoBancario(oMov);

            // Se generan las pólizas contables correspondientes (AfeConta)
            var oNominaUsuariosV = Datos.GetListOf<NominaUsuariosView>(c => c.NominaID == oNomina.NominaID);
            var oPolizaBase = new ContaPoliza()
            {
                ContaTipoPolizaID = Cat.ContaTiposDePoliza.Egreso,
                Fecha = dComplementaria,
                Concepto = "",
                RelacionTabla = Cat.Tablas.NominaUsuario,
                RelacionID = oNomina.NominaID
            };
            foreach (var oReg in oNominaUsuariosV)
            {
                // Se crea la póliza de lo oficial
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.NominaOficial, oReg.NominaUsuarioID, this.cmbSemana.Text, ("NÓMINA " + this.cmbSemana.Text)
                    , oReg.SucursalID, dOficial);
                // Se crea la póliza de la diferencia, si aplica
                if (oReg.Diferencia != 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux == null)
                    {
                        UtilLocal.MensajeAdvertencia("No se encontró la cuenta auxiliar: Salarios -> " + oReg.Usuario + ". No se creará la póliza de Complemento Nómina.");
                        continue;
                    }
                    var oPoliza = Util.CrearCopia<ContaPoliza>(oPolizaBase);
                    oPoliza.Concepto = ("COMPLEMENTO NÓMINA " + this.cmbSemana.Text);
                    ContaProc.CrearPoliza(oPoliza, oCuentaAux.ContaCuentaAuxiliarID, Cat.ContaCuentasAuxiliares.ReservaNomina, oReg.Diferencia.Valor(), oReg.Usuario
                        , oReg.SucursalID, Cat.Sucursales.Matriz);
                    /* ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, ("COMPLEMENTO NÓMINA " + this.cmbSemana.Text)
                        , oCuentaAux.ContaCuentaAuxiliarID, Cat.ContaCuentasAuxiliares.ReservaNomina, oReg.Diferencia.Valor(), oReg.Usuario
                        , Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                    */
                }

                // Se crea la póliza del adelanto, si aplica
                if (oReg.Adelanto > 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.DeudoresDiversos
                        && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux != null)
                    {
                        // ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Ingreso, "ADELANTO", Cat.ContaCuentasAuxiliares.Caja, oCuentaAux.ContaCuentaAuxiliarID
                        //    , oReg.Adelanto, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor(), oReg.SucursalID);
                        var oPoliza = Util.CrearCopia<ContaPoliza>(oPolizaBase);
                        oPoliza.ContaTipoPolizaID = Cat.ContaTiposDePoliza.Ingreso;
                        oPoliza.Concepto = "ADELANTO";
                        oPoliza.SucursalID = oReg.SucursalID;
                        ContaProc.CrearPoliza(oPoliza, Cat.ContaCuentasAuxiliares.Caja, oCuentaAux.ContaCuentaAuxiliarID, oReg.Adelanto, oReg.Usuario
                            , Cat.Sucursales.Matriz, oReg.SucursalID);

                        // Se crea adicionalmente, un ingreso de caja por el importe del adelanto
                        var oIngreso = new CajaIngreso()
                        {
                            CajaTipoIngresoID = Cat.CajaTiposDeIngreso.Otros,
                            Concepto = ("PAGO ADELANTO " + oReg.Usuario),
                            Importe = oReg.Adelanto,
                            Fecha = dAhora,
                            SucursalID = oReg.SucursalID,
                            RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID
                        };
                        Datos.Guardar<CajaIngreso>(oIngreso);
                    }
                }
                // Se crea la póliza de minutos tarde y otros, si aplica
                if (oReg.MinutosTarde > 0 || oReg.Otros > 0)
                {
                    var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Salarios
                        && c.RelacionID == oReg.UsuarioID);
                    if (oCuentaAux != null)
                    {
                        if (oReg.MinutosTarde > 0)
                        {
                            // ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "MINUTOS TARDE", Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID
                            //     , oReg.MinutosTarde, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                            var oPoliza = Util.CrearCopia<ContaPoliza>(oPolizaBase);
                            oPoliza.Concepto = "MINUTOS TARDE";
                            ContaProc.CrearPoliza(oPoliza, Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID, oReg.MinutosTarde, oReg.Usuario
                                , Cat.Sucursales.Matriz, oReg.SucursalID);
                        }
                        if (oReg.Otros > 0)
                        {
                            // ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "OTROS DESCUENTOS", Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID
                            //     , oReg.Otros, oReg.Usuario, Cat.Tablas.NominaUsuario, oReg.NominaID.Valor());
                            var oPoliza = Util.CrearCopia<ContaPoliza>(oPolizaBase);
                            oPoliza.Concepto = "OTROS DESCUENTOS";
                            ContaProc.CrearPoliza(oPoliza, Cat.ContaCuentasAuxiliares.ReservaNomina, oCuentaAux.ContaCuentaAuxiliarID, oReg.Otros, oReg.Usuario
                                , Cat.Sucursales.Matriz, oReg.SucursalID);
                        }
                    }
                }
            }

            // Se genera el resguardo y refuerzo especiales
            /* Este procedimiento hacía crecer el Resguardo, porque el dinero no se tomaba de ReservaNómina y se
             * mandaba a Resguardo cuando en realidad quedaba en el salario de los usuarios 17/11/2015
            var oResguardos = new Dictionary<int, decimal>();
            var oRefuerzos = new Dictionary<int, decimal>();
            foreach (DataGridViewRow oFila in this.dgvDatos.Rows)
            {
                if (!Util.ConvertirBool(oFila.Cells["Sel"].Value))
                    continue;

                int iSucursalID = Util.ConvertirEntero(oFila.Cells["SucursalID"].Value);
                if (!oResguardos.ContainsKey(iSucursalID))
                    oResguardos.Add(iSucursalID, 0);
                if (!oRefuerzos.ContainsKey(iSucursalID))
                    oRefuerzos.Add(iSucursalID, 0);

                decimal mDiferencia = Util.ConvertirDecimal(oFila.Cells["Diferencia"].Value);
                decimal mTickets = Util.ConvertirDecimal(oFila.Cells["Tickets"].Value);
                decimal mMinutosTarde = Util.ConvertirDecimal(oFila.Cells["MinutosTarde"].Value);
                decimal mOtros = Util.ConvertirDecimal(oFila.Cells["Otros"].Value);
                decimal mAdelanto = Util.ConvertirDecimal(oFila.Cells["Adelanto"].Value);
                oRefuerzos[iSucursalID] += (mDiferencia - mMinutosTarde - mOtros);
                // Se quita el adelanto a los resguardos de acuerdo a una nueva petición - Moi 03/08/2015
                // oResguardos[iSucursalID] += (mDiferencia - mMinutosTarde - mOtros + mAdelanto);
                // Se suman ahora los tickets a los resguardos porque no están seguros y están haciendo pruebas - Moi 08/08/2015
                oResguardos[iSucursalID] += (mDiferencia - mMinutosTarde - mOtros + mTickets);
            }
            // Se crean los resguardos / refuerzos y las pólizas correspondientes (AfeConta)
            foreach (var oReg in oResguardos)
            {
                var oResguardo = VentasProc.GenerarResguardo(oReg.Value, oReg.Key);
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.Resguardo, oResguardo.CajaEgresoID, "NO MOVER", "NO MOVER DE TIENDA / RESGUARDO", oReg.Key);
            }
            foreach (var oReg in oRefuerzos)
            {
                var oRefuerzo = VentasProc.GenerarRefuerzo(oReg.Value, oReg.Key);
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.Refuerzo, oRefuerzo.CajaIngresoID, "REFUERZO", "REFUERZO NÓMINA", oReg.Key);
            }
            */

            // Se manda a imprimir la nómina de cada usuario
            var oNominaUsuariosOfV = Datos.GetListOf<NominaUsuariosOficialView>(c => c.NominaID == oNomina.NominaID);
            var oNominaOficialTotales = oNominaUsuariosOfV.GroupBy(c => c.UsuarioID).Select(c => new
            {
                UsuarioID = c.Key,
                Ingreso = c.Where(s => s.Suma).Sum(s => s.Importe),
                Egreso = c.Where(s => !s.Suma).Sum(s => s.Importe)
            });
            var oRep = new Report();
            oRep.Load(UtilLocal.RutaReportes("Nomina.frx"));
            oRep.RegisterData(new List<Nomina>() { oNomina }, "Nomina");
            oRep.RegisterData(oNominaUsuariosV, "Usuarios");
            oRep.RegisterData(oNominaUsuariosOfV, "UsuariosOficial");
            oRep.RegisterData(oNominaOficialTotales, "UsuariosOficialTotales");

            Cargando.Cerrar();
            UtilLocal.EnviarReporteASalida("Reportes.Nomina.Salida", oRep);

            this.LlenarNomina();
            return true;
        }
Example #12
0
        private bool Gastos()
        {
            CajaGastos oGastos = this.ctlCajaGeneral.ctlGastos;

            // Se obtiene la lista de los cambios necesarios
            var oIngresos = oGastos.GenerarListaDeIngresos();
            var oEgresos = oGastos.GenerarListaDeEgresos();
            var oIngresosBorrados = oGastos.GenerarListaDeIngresosBorrados();
            var oEgresosBorrados = oGastos.GenerarListaDeEgresosBorrados();

            // Se verifica si hay cambios necesarios
            bool bCambios = (oIngresos.Count > 0 || oEgresos.Count > 0 || oIngresosBorrados.Count > 0 || oEgresosBorrados.Count > 0);
            if (!bCambios)
                return false;

            // Se solicita la validación del usuario
            var oResUs = UtilLocal.ValidarObtenerUsuario(new List<string>() { "Ventas.Ingresos.Agregar", "Ventas.Ingresos.Borrar",
                "Ventas.Egresos.Agregar", "Ventas.Egresos.Borrar" }, true);
            if (oResUs.Error)
                return false;
            int iRealizoUsuarioID = oResUs.Respuesta.UsuarioID;

            // Se solicita la autorización
            var ResAut = UtilLocal.ValidarObtenerUsuario(new List<string>() { "Autorizaciones.Ventas.Ingresos.Agregar", "Autorizaciones.Ventas.Ingresos.Borrar",
                "Autorizaciones.Ventas.Egresos.Agregar", "Autorizaciones.Ventas.Egresos.Borrar" }, true, "Autorización");
            int iAutorizoID = (ResAut.Respuesta == null ? 0 : ResAut.Respuesta.UsuarioID);

            // Se procede a guardar los datos
            DateTime dAhora = DateTime.Now;

            // Se guardan los Ingresos
            foreach (var oMov in oIngresos)
            {
                oMov.RealizoUsuarioID = iRealizoUsuarioID;
                Datos.Guardar<CajaIngreso>(oMov);

                // Si es un refuerzo, se elimina la póliza correspondiente
                if (oMov.CajaTipoIngresoID == Cat.CajaTiposDeIngreso.Refuerzo)
                {
                    var oPoliza = Datos.GetEntity<ContaPoliza>(c => c.RelacionTabla == Cat.Tablas.CajaIngreso && c.RelacionID == oMov.CajaIngresoID);
                    ContaProc.BorrarPoliza(oPoliza.ContaPolizaID);
                }

                // Se genera la autorización
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.OtrosIngresos, Cat.Tablas.CajaIngreso, oMov.CajaIngresoID, iAutorizoID);
            }
            // Se guardan los ingresos borrados
            foreach (var oMov in oIngresosBorrados)
            {
                oMov.Estatus = false;
                Datos.Guardar<CajaIngreso>(oMov);
                // Se genera la autorización
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.OtrosIngresosBorrar, Cat.Tablas.CajaIngreso, oMov.CajaIngresoID, iAutorizoID);
            }

            // Se guardan los Egresos
            bool bGastoCaja = false;
            var oGastosCaja = new List<int>();
            foreach (var oMov in oEgresos)
            {
                // Referente a lo contable

                // Validación de importe máximo (5000) para gastos de sueldos de Isidro padre e hijo (durazo)
                int iCuentaAuxiliarID = Util.Entero(oMov["CategoriaID"]);
                if (iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.SueldoIsidroPadre || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.SueldoIsidroHijo)
                {
                    var oFechas = UtilDatos.FechasDeComisiones(DateTime.Now);
                    var oContaEgresos = Datos.GetListOf<ContaEgreso>(c => c.ContaCuentaAuxiliarID == iCuentaAuxiliarID
                        && (c.Fecha >= oFechas.Valor1 && c.Fecha <= oFechas.Valor2));
                    if (oContaEgresos.Count > 0 && oContaEgresos.Sum(c => c.Importe) >= 5000)
                        iCuentaAuxiliarID = (iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.SueldoIsidroPadre
                            ? Cat.ContaCuentasAuxiliares.UtilidadesIsidroPadre : Cat.ContaCuentasAuxiliares.UtilidadesIsidroHijo);
                }
                //

                // Se genera el Gasto Contable
                var oGastoConta = new ContaEgreso()
                {
                    ContaCuentaAuxiliarID = iCuentaAuxiliarID,
                    Fecha = dAhora,
                    Importe = Util.Decimal(oMov["Importe"]),
                    TipoFormaPagoID = Cat.FormasDePago.Efectivo,
                    Observaciones = Util.Cadena(oMov["Concepto"]),
                    RealizoUsuarioID = iRealizoUsuarioID,
                    SucursalID = Util.Entero(oMov["SucursalID"])
                };
                Datos.Guardar<ContaEgreso>(oGastoConta);
                // Se manda devengar automáticamente, si aplica
                ContaProc.GastoVerDevengarAutomaticamente(oGastoConta);
                // Se genera el gasto de caja (CajaEgreso)
                var oEgreso = new CajaEgreso()
                {
                    CajaTipoEgresoID = Cat.CajaTiposDeEgreso.CuentaAuxiliar,
                    Concepto = oGastoConta.Observaciones,
                    Importe = oGastoConta.Importe,
                    Fecha = dAhora,
                    SucursalID = oGastoConta.SucursalID,
                    RealizoUsuarioID = iRealizoUsuarioID,
                    ContaEgresoID = oGastoConta.ContaEgresoID
                };
                Datos.Guardar<CajaEgreso>(oEgreso);

                // Si es un gasto de la cuenta deudores diversos, se genera la póliza correspondiente (AfeConta)
                if (Datos.Exists<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == iCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.DeudoresDiversos))
                {
                    ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Egreso, "PRÉSTAMO", iCuentaAuxiliarID, Cat.ContaCuentasAuxiliares.Caja, oGastoConta.Importe
                        , oResUs.Respuesta.NombreUsuario, Cat.Tablas.CajaEgreso, oEgreso.CajaEgresoID);
                    // Se marca el gasto como ya afectado en pólizas, para que no aparezca en gastos pendientes
                    oEgreso.AfectadoEnPolizas = true;
                    Datos.Guardar<CajaEgreso>(oEgreso);
                }

                // Se verifica si es una gasto de Reparto utilidades, para hacer un refuerzo por la misma cantidad
                if (Datos.Exists<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == iCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.ReparteDeUtilidades))
                {
                    var oRef = VentasProc.GenerarRefuerzo(oEgreso.Importe, oEgreso.SucursalID);
                    oRef.Fecha = oEgreso.Fecha;
                    Datos.Guardar<CajaIngreso>(oRef);
                }

                // Se verifica si es un gasto de casco, para afectar la existencia
                if (iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoChico || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoMediano
                    || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoGrande || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoExtragrande)
                {
                    int iCascoParteID = 0;
                    switch (iCuentaAuxiliarID)
                    {
                        case Cat.ContaCuentasAuxiliares.CascoChico: iCascoParteID = Cat.Partes.DepositoCascoChico; break;
                        case Cat.ContaCuentasAuxiliares.CascoMediano: iCascoParteID = Cat.Partes.DepositoCascoMediano; break;
                        case Cat.ContaCuentasAuxiliares.CascoGrande: iCascoParteID = Cat.Partes.DepositoCascoGrande; break;
                        case Cat.ContaCuentasAuxiliares.CascoExtragrande: iCascoParteID = Cat.Partes.DepositoCascoExtragrande; break;
                    }
                    var oSucursal = Datos.GetEntity<Sucursal>(c => c.SucursalID == GlobalClass.SucursalID && c.Estatus);
                    AdmonProc.AfectarExistenciaYKardex(iCascoParteID, GlobalClass.SucursalID, Cat.OperacionesKardex.EntradaInventario, oEgreso.CajaEgresoID.ToString()
                        , iRealizoUsuarioID, "----", "Gasto por Casco", oSucursal.NombreSucursal, 1, oGastoConta.Importe, Cat.Tablas.CajaEgreso, oEgreso.CajaEgresoID);
                }

                // Se genera la autorización
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.Gastos, Cat.Tablas.CajaEgreso, oEgreso.CajaEgresoID, iAutorizoID);

                // Bandera para saber si se realizó un gasto
                oGastosCaja.Add(oEgreso.CajaEgresoID);
                bGastoCaja = true;
            }
            // Se guardan los egresos borrados
            foreach (var oMov in oEgresosBorrados)
            {
                // Se guarda el borrado del gasto de caja (CajaEgreso)
                int iEgresoID = oMov.ContaEgresoID.Valor();
                Datos.Eliminar<CajaEgreso>(oMov);  // Ahora se borra definitivamente, pues el gasto contable no tiene campo de "Estatus"
                // Se guarda el borrado del Gasto Contable, si hubiera
                int iCuentaAuxiliarID = 0;
                if (iEgresoID > 0)
                {
                    var oContaEgreso = Datos.GetEntity<ContaEgreso>(c => c.ContaEgresoID == iEgresoID);
                    iCuentaAuxiliarID = oContaEgreso.ContaCuentaAuxiliarID;
                    ContaProc.GastoEliminar(iEgresoID);
                }

                // Si es un resguardo, se elimina la póliza correspondiente
                if (oMov.CajaTipoEgresoID == Cat.CajaTiposDeEgreso.Resguardo)
                {
                    var oPoliza = Datos.GetEntity<ContaPoliza>(c => c.RelacionTabla == Cat.Tablas.CajaEgreso && c.RelacionID == oMov.CajaEgresoID);
                    ContaProc.BorrarPoliza(oPoliza.ContaPolizaID);
                }
                // Si es un gasto de la cuenta deudores diversos, se verifica y elimina la póliza (AfeConta)
                if (Datos.Exists<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == iCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.DeudoresDiversos))
                {
                    var oPoliza = Datos.GetEntity<ContaPoliza>(c => c.RelacionTabla == Cat.Tablas.CajaEgreso && c.RelacionID == oMov.CajaEgresoID);
                    ContaProc.BorrarPoliza(oPoliza.ContaPolizaID);
                }

                // Se verifica si es una gasto de Reparto utilidades, para borrar el refuerzo creado
                if (Datos.Exists<ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == iCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.ReparteDeUtilidades))
                {
                    var oRef = Datos.GetEntity<CajaIngreso>(c => c.CajaTipoIngresoID == Cat.CajaTiposDeIngreso.Refuerzo && c.Importe == oMov.Importe && c.Fecha == oMov.Fecha);
                    Datos.Eliminar<CajaIngreso>(oRef, true);
                }

                // Se verifica si es un gasto de casco, para afectar la existencia
                if (iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoChico || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoMediano
                    || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoGrande || iCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.CascoExtragrande)
                {
                    int iCascoParteID = 0;
                    switch (iCuentaAuxiliarID)
                    {
                        case Cat.ContaCuentasAuxiliares.CascoChico: iCascoParteID = Cat.Partes.DepositoCascoChico; break;
                        case Cat.ContaCuentasAuxiliares.CascoMediano: iCascoParteID = Cat.Partes.DepositoCascoMediano; break;
                        case Cat.ContaCuentasAuxiliares.CascoGrande: iCascoParteID = Cat.Partes.DepositoCascoGrande; break;
                        case Cat.ContaCuentasAuxiliares.CascoExtragrande: iCascoParteID = Cat.Partes.DepositoCascoExtragrande; break;
                    }
                    var oSucursal = Datos.GetEntity<Sucursal>(c => c.SucursalID == GlobalClass.SucursalID && c.Estatus);
                    AdmonProc.AfectarExistenciaYKardex(iCascoParteID, GlobalClass.SucursalID, Cat.OperacionesKardex.SalidaInventario, oMov.CajaEgresoID.ToString()
                        , iRealizoUsuarioID, "----", "Gasto por Casco", oSucursal.NombreSucursal, -1, oMov.Importe, Cat.Tablas.CajaEgreso, oMov.CajaEgresoID);
                }
                // Se genera la autorización
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.GastosBorrar, Cat.Tablas.CajaEgreso, oMov.CajaEgresoID, iAutorizoID);
            }

            // Se pregunta si se debe mostrar el ticket, cuando hubo gastos
            if (bGastoCaja)
            {
                if (UtilLocal.MensajePregunta("¿Deseas imprimir los Tickets de Gasto correspondientes?") == DialogResult.Yes)
                {
                    foreach (int iEgresoID in oGastosCaja)
                        VentasLoc.GenerarTicketGasto(iEgresoID);
                }
            }

            // Se muestra una notifiación con el resultado
            UtilLocal.MostrarNotificacion("Procedimiento completado correctamente.");

            return true;
        }