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; }
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; }