private bool GastoEliminar(DataGridViewRow oFila) { // Se verifica si es un gasto desde caja, el cual no se puede borrar int iEgresoID = Util.Entero(oFila.Cells["Gastos_ContaEgresoID"].Value); if (Datos.Exists <CajaEgreso>(c => c.ContaEgresoID == iEgresoID)) { UtilLocal.MensajeAdvertencia("El gasto especificado se creó desde caja. No se puede eliminar desde aquí."); return(false); } if (UtilLocal.MensajePregunta(string.Format("¿Estás seguro que deseas eliminar el gasto \"{0}\"?", oFila.Cells["Gastos_Observaciones"].Value)) != DialogResult.Yes) { return(false); } // Se borra el gasto, de manera lógica // var oEgreso = General.GetEntity<ContaEgreso>(c => c.ContaEgresoID == iEgresoID && c.Estatus); // Datos.Eliminar<ContaEgreso>(oEgreso, true); ContaProc.GastoEliminar(iEgresoID); // Se actualizan los datos this.dgvGastos.Rows.Clear(); this.LlenarCuentasTotales(); return(true); }
private bool CuentaEliminar(int iNivel, int iCuentaID) { // Se valida que no se tengan cuentas hijas o movimientos switch (iNivel) { case 2: // Cuenta de Mayor if (Datos.Exists <ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == iCuentaID)) { UtilLocal.MensajeError("La Cuenta seleccionada tiene Subcuentas asignadas. No se puede eliminar."); return(false); } // Se procede a eliminar la cuenta var oCuentaMay = Datos.GetEntity <ContaCuentaDeMayor>(c => c.ContaCuentaDeMayorID == iCuentaID); Datos.Eliminar <ContaCuentaDeMayor>(oCuentaMay); break; case 3: // Cuenta auxiliar if (Datos.Exists <ContaEgreso>(c => c.ContaCuentaAuxiliarID == iCuentaID)) { UtilLocal.MensajeError("La Cuenta seleccionada ha sido utilizado en varios movimientos. No se puede eliminar."); return(false); } // Se manda eliminar la cuenta ContaProc.CuentaAuxiliarEliminar(iCuentaID); break; } return(true); }
private void ConciliarMovimiento(int iMovID) { var oMov = Datos.GetEntity <BancoCuentaMovimiento>(c => c.BancoCuentaMovimientoID == iMovID); oMov.Conciliado = true; oMov.FechaConciliado = DateTime.Now; oMov.ConciliadoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID; Datos.Guardar <BancoCuentaMovimiento>(oMov); // Si es una venta (ingreso), se realiza una póliza para pasar el dinero de Caja a la Cuenta correspondiente if (oMov.RelacionTabla == Cat.Tablas.VentaPagoDetalle) { /* Ya no se valida, pues si no existe la cuenta auxiliar, ésta se crea automáticamente * var oCuentaAux = General.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Bancos * && c.RelacionID == oMov.BancoCuentaID); * if (oCuentaAux == null) * { * UtilLocal.MensajeAdvertencia(string.Format("La cuenta bancaria seleccionada no tiene una cuenta auxiliar en contabilidad. No se agregará la póliza.")); * } */ // Se hace la afectación contable (AfeConta) DateTime dFechaPoliza = oMov.FechaAsignado.Valor(); if (oMov.MovimientoAgrupadorID.HasValue) { var oMovAgr = Datos.GetEntity <BancoCuentaMovimiento>(c => c.BancoCuentaMovimientoID == oMov.MovimientoAgrupadorID); dFechaPoliza = oMovAgr.FechaAsignado.Valor(); } ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DepositoBancario, oMov.BancoCuentaMovimientoID, oMov.Referencia, oMov.Concepto, dFechaPoliza); } }
private void BorrarMovimiento(DataGridViewRow oFila) { bool bEliminar = false; if (Util.Logico(oFila.Cells["con_FueManual"].Value)) { if (UtilLocal.MensajePreguntaCancelar("¿Estás seguro que deseas eliminar el movimiento seleccionado?") == DialogResult.Yes) { bEliminar = true; } } else { if (oFila.DefaultCellStyle.ForeColor != Color.Green) { // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Bancos.Movimientos.Borrar"); if (oResU.Error) { return; } bEliminar = true; } } if (bEliminar) { int iMovID = Util.Entero(oFila.Cells["con_BancoCuentaMovimientoID"].Value); ContaProc.EliminarMovimientoBancario(iMovID); this.LlenarConciliaciones(); } }
private void Asignar() { // Se obtiene la cuenta correspondiente var frmCuenta = new MensajeObtenerValor("Selecciona la cuenta a la cual se le van a asignar los movimientos seleccionados:", Cat.CuentasBancarias.Scotiabank, MensajeObtenerValor.Tipo.Combo); frmCuenta.CargarCombo("BancoCuentaID", "NombreDeCuenta", Datos.GetListOf <BancoCuenta>(c => c.UsoClientes)); int iBancoCuentaID = 0; if (frmCuenta.ShowDialog(Principal.Instance) == DialogResult.OK) { iBancoCuentaID = Util.Entero(frmCuenta.Valor); } else { return; } Cargando.Mostrar(); foreach (DataGridViewRow oFila in this.dgvAsignacion.Rows) { if (Util.Logico(oFila.Cells["asi_Sel"].Value)) { int iMovID = Util.Entero(oFila.Cells["asi_BancoCuentaMovimientoID"].Value); ContaProc.AsignarMovimientoBancario(iMovID, iBancoCuentaID); } } Cargando.Cerrar(); this.LlenarAsignaciones(); }
private bool AccionGuardar() { if (!this.Validar()) { return(false); } Cargando.Mostrar(); // Se crea el movimiento bancario DateTime dFecha = this.dtpFechaMovimiento.Value; var oMovBanc = new BancoCuentaMovimiento() { BancoCuentaID = this.OrigenBancoCuentaID, EsIngreso = true, Fecha = dFecha, FechaAsignado = dFecha, SucursalID = GlobalClass.SucursalID, Importe = Util.Decimal(this.txtImporte.Text), Concepto = this.txtConcepto.Text, Referencia = GlobalClass.UsuarioGlobal.NombreUsuario, TipoFormaPagoID = Cat.FormasDePago.Efectivo }; ContaProc.RegistrarMovimientoBancario(oMovBanc); // Se crea la póliza correspondiente (AfeConta) ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DepositoBancario, oMovBanc.BancoCuentaMovimientoID , oMovBanc.Referencia, oMovBanc.Concepto, oMovBanc.Fecha); Cargando.Cerrar(); return(true); }
private void btnNcAgregar_Click(object sender, EventArgs e) { // Se solicita el concepto e importe de la nota de crédito string sConcepto = Util.Cadena(UtilLocal.ObtenerValor("Concepto de la Nota de Crédito:", "", MensajeObtenerValor.Tipo.TextoLargo)); if (sConcepto == "") { return; } decimal mImporte = Util.Decimal(UtilLocal.ObtenerValor("Importe de la Nota de Crédito:", "0.00", MensajeObtenerValor.Tipo.Decimal)); if (mImporte == 0) { return; } // Se solicita la autorización var ResAut = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.NotasDeCredito.Agregar", "Autorización"); // Se genera la nota, si todo fue bien if (ResAut.Exito) { var ResNC = VentasProc.GenerarNotaDeCredito(this.Cliente.ClienteID, mImporte, sConcepto, Cat.OrigenesNotaDeCredito.Directo, ResAut.Respuesta.UsuarioID); // Se manda a crear la póliza contable correspondiente (AfeConta) var oVale = Datos.GetEntity <NotaDeCredito>(c => c.NotaDeCreditoID == ResNC.Respuesta && c.Estatus); ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.ValeDirecto, oVale.NotaDeCreditoID, this.Cliente.Nombre, oVale.Observacion); // Se guarda la autorización VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoCrear, Cat.Tablas.NotaDeCredito, ResNC.Respuesta, ResAut.Respuesta.UsuarioID); // Se manda imprimir el ticket correspondiente VentasLoc.GenerarTicketNotaDeCredito(ResNC.Respuesta); // UtilLocal.MostrarNotificacion("Nota de Crédito generada correctamente."); this.NcAplicarFiltro(); } }
private void AgregarMovimiento() { var frmMov = new MovimientoBancarioGen() { Text = "Agregar movimiento" }; frmMov.LlenarComboCuenta(); frmMov.cmbBancoCuenta.SelectedValue = this.ConBancoCuentaID; frmMov.lblEtImporteInfo.Visible = false; frmMov.lblImporteInfo.Visible = false; frmMov.ActiveControl = frmMov.txtImporte; // Para validar los datos frmMov.delValidar += () => { frmMov.ctlError.LimpiarErrores(); if (frmMov.BancoCuentaID <= 0) { frmMov.ctlError.PonerError(frmMov.cmbBancoCuenta, "Debes especificar una cuenta."); } if (frmMov.Importe == 0) { frmMov.ctlError.PonerError(frmMov.txtImporte, "El importe especificado es inválido."); } if (frmMov.txtConcepto.Text == "") { frmMov.ctlError.PonerError(frmMov.txtConcepto, "Debes especificar un concepto.", ErrorIconAlignment.BottomLeft); } return(frmMov.ctlError.Valido); }; if (frmMov.ShowDialog(Principal.Instance) == DialogResult.OK) { Cargando.Mostrar(); // Se crea el movimiento bancario var oMov = new BancoCuentaMovimiento { BancoCuentaID = frmMov.BancoCuentaID, EsIngreso = (frmMov.Importe >= 0), Fecha = frmMov.dtpFecha.Value, FechaAsignado = frmMov.dtpFecha.Value, SucursalID = GlobalClass.SucursalID, Importe = (frmMov.Importe > 0 ? frmMov.Importe : (frmMov.Importe * -1)), Concepto = frmMov.txtConcepto.Text, Referencia = GlobalClass.UsuarioGlobal.NombreUsuario, FueManual = true }; ContaProc.RegistrarMovimientoBancario(oMov); Cargando.Cerrar(); this.LlenarConciliaciones(); } frmMov.Dispose(); }
private void smiDesasignar_Click(object sender, EventArgs e) { if (this.dgvConciliacion.CurrentRow == null) { return; } int iMovID = Util.Entero(this.dgvConciliacion.CurrentRow.Cells["con_BancoCuentaMovimientoID"].Value); if (ContaProc.DesasignarMovimientoBancario(iMovID)) { this.LlenarConciliaciones(); } }
private void BorrarPoliza(int iPolizaID) { // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Contabilidad.Polizas.Borrar"); if (oResU.Error) { return; } // Se borra la póliza ContaProc.BorrarPoliza(iPolizaID); this.LlenarArbol(); }
protected override bool AccionGuardar() { if (!this.Validar()) { return(false); } Cargando.Mostrar(); // Se crea el movimiento bancario DateTime dFecha = DateTime.Now; // Se toma la fecha de hoy var oMovBanc = new BancoCuentaMovimiento() { BancoCuentaID = this.OrigenBancoCuentaID, EsIngreso = true, Fecha = dFecha, FechaAsignado = dFecha, SucursalID = GlobalClass.SucursalID, Importe = Helper.ConvertirDecimal(this.txtImporte.Text), Concepto = this.txtConcepto.Text, Referencia = GlobalClass.UsuarioGlobal.NombreUsuario, TipoFormaPagoID = Cat.FormasDePago.Efectivo }; ContaProc.RegistrarMovimientoBancario(oMovBanc); // Se crea la póliza correspondiente (AfeConta) var oPoliza = ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DepositoBancario, oMovBanc.BancoCuentaMovimientoID, oMovBanc.Referencia, oMovBanc.Concepto); oPoliza.Fecha = oMovBanc.Fecha; Guardar.Generico <ContaPoliza>(oPoliza); Cargando.Cerrar(); return(true); }
private void RecalcularAcumulado(DateTime dDesde) { int iCuentaID = Util.Entero(this.cmbBancoCuenta.SelectedValue); ContaProc.RecalcularSaldoAcumulado(iCuentaID, dDesde); }
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); }
public override bool Ejecutar() { // Se verifica si ya se hizo el cierre de caja if (UtilDatos.VerCierreDeDaja()) { UtilLocal.MensajeAdvertencia("Ya se hizo el Corte de Caja. No se puede continuar."); return(false); } // Se valida la parte de detalle if (!this.ctlDetalle.Validar()) { return(false); } // Se valida la parte de búsqueda if (!this.ctlBusqueda.Validar()) { return(false); } int iVentaID = this.ctlBusqueda.VentaID; // Se valida que no sea una venta usada para cobro de Control de Cascos if (Datos.Exists <CascosRegistrosView>(c => c.CobroVentaID == iVentaID && (c.VentaEstatusID != Cat.VentasEstatus.Cancelada && c.VentaEstatusID != Cat.VentasEstatus.CanceladaSinPago))) { UtilLocal.MensajeAdvertencia("La venta seleccionado fue utilizada para un cobro de Control de Cascos. No se puede cancelar."); return(false); } // bool bCancelacion = this.ctlDetalle.TodosMarcados(); var oVentaV = Datos.GetEntity <VentasView>(q => q.VentaID == iVentaID); // Se verifica si es una cancelación de otra sucursal if (oVentaV.SucursalID != GlobalClass.SucursalID) { if (UtilLocal.MensajePregunta("La Venta seleccionada es de otra Sucursal. ¿Deseas continuar?") != DialogResult.Yes) { return(false); } } // Se verifica si es una cancelación de factura de varios tickets int iVentaFacturaID = 0; bool bFacturaMultiple = false; bool bCancelarTodaLaFactura = this.ctlBusqueda.CancelarTodaLaFactura; List <VentaFacturaDetalle> oVentasFactura = null; if (oVentaV.Facturada) { iVentaFacturaID = Datos.GetEntity <VentaFacturaDetalle>(q => q.VentaID == oVentaV.VentaID && q.Estatus).VentaFacturaID; oVentasFactura = Datos.GetListOf <VentaFacturaDetalle>(q => q.VentaFacturaID == iVentaFacturaID && q.Estatus); bFacturaMultiple = (oVentasFactura.Count > 1); // Se muestran los datos de detalle de todas las ventas de la factura if (bCancelarTodaLaFactura && bFacturaMultiple) { if (!this.MostrarDetalleVentasFactura(oVentasFactura)) { return(false); } } } // Se verifica si se creará vale, para pedir el cliente en caso de que no haya int iValeClienteID = oVentaV.ClienteID; if (this.ctlBusqueda.FormaDeDevolucion == Cat.FormasDePago.Vale && iValeClienteID == Cat.Clientes.Mostrador) { var frmValor = new MensajeObtenerValor("Selecciona el cliente para crear el Vale:", "", MensajeObtenerValor.Tipo.Combo); frmValor.CargarCombo("ClienteID", "Nombre", Datos.GetListOf <Cliente>(q => q.ClienteID != Cat.Clientes.Mostrador && q.Estatus)); if (frmValor.ShowDialog(Principal.Instance) == DialogResult.OK) { iValeClienteID = Util.Entero(frmValor.Valor); } frmValor.Dispose(); if (iValeClienteID == 0) { return(false); } } // Se pregunta el usuario que realiza la devolución int iUsuarioID = 0; var ResU = UtilLocal.ValidarObtenerUsuario("Ventas.Devolucion.Agregar"); if (ResU.Error) { return(false); } iUsuarioID = ResU.Respuesta.UsuarioID; // Se solicita la autorización int iAutorizoID = 0; ResU = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Devoluciones.Agregar", "Autorización"); if (ResU.Exito) { iAutorizoID = ResU.Respuesta.UsuarioID; } // Se procede a guardar los cambios DateTime dAhora = DateTime.Now; // Si es factura múltiple, se cancelan todas las ventas de la factura, si no, sólo la venta seleccionada var oIdsDev = new List <int>(); var oIdsCascos = new List <int>(); if (bFacturaMultiple && bCancelarTodaLaFactura) { var oDevGeneral = this.ctlBusqueda.GenerarDevolucion(); foreach (var oVentaFac in oVentasFactura) { // Se genera la devolución var oDev = new VentaDevolucion() { VentaID = oVentaFac.VentaID, Fecha = dAhora, RealizoUsuarioID = iUsuarioID, EsCancelacion = true, MotivoID = oDevGeneral.MotivoID, Observacion = oDevGeneral.Observacion, TipoFormaPagoID = oDevGeneral.TipoFormaPagoID }; // Se genera el detalle de la devolución var oDevDet = new List <VentaDevolucionDetalle>(); var oVentaDetalle = Datos.GetListOf <VentaDetalle>(c => c.VentaID == oVentaFac.VentaID && c.Estatus); foreach (var oParte in oVentaDetalle) { oDevDet.Add(new VentaDevolucionDetalle() { ParteID = oParte.ParteID, Costo = oParte.Costo, CostoConDescuento = oParte.CostoConDescuento, Cantidad = oParte.Cantidad, PrecioUnitario = oParte.PrecioUnitario, Iva = oParte.Iva }); } // Se manda guardar la devolución this.GuardarDevolucion(oDev, oDevDet, iValeClienteID); // Se agrega a la lisa de devoluciones oIdsDev.Add(oDev.VentaDevolucionID); // Se verifica si requiere un casco foreach (var oReg in oDevDet) { if (Datos.Exists <Parte>(c => c.ParteID == oReg.ParteID && c.RequiereCascoDe > 0 && c.Estatus)) { oIdsCascos.Add(oReg.VentaDevolucionDetalleID); } } } } else { // Se genera la devolución var oDevolucion = this.ctlBusqueda.GenerarDevolucion(); oDevolucion.Fecha = dAhora; oDevolucion.EsCancelacion = bCancelacion; oDevolucion.RealizoUsuarioID = iUsuarioID; // Se genera el detalle de la devolución var oDevDetalle = new List <VentaDevolucionDetalle>(); var oProductos = this.ctlDetalle.ProductosSel(); foreach (var oProducto in oProductos) { oDevDetalle.Add(new VentaDevolucionDetalle() { ParteID = oProducto.ParteID, Costo = oProducto.Costo, CostoConDescuento = oProducto.CostoConDescuento, Cantidad = oProducto.Cantidad, PrecioUnitario = oProducto.PrecioUnitario, Iva = oProducto.Iva }); } // Se guarda la devolución this.GuardarDevolucion(oDevolucion, oDevDetalle, iValeClienteID); // oIdsDev.Add(oDevolucion.VentaDevolucionID); // Se verifica si requiere un casco foreach (var oReg in oDevDetalle) { if (Datos.Exists <Parte>(c => c.ParteID == oReg.ParteID && c.RequiereCascoDe > 0 && c.Estatus)) { oIdsCascos.Add(oReg.VentaDevolucionDetalleID); } } } // Se verifica si es factura, en cuyo caso, se cancela la factura o se genera nota de crédito, según aplique if (oVentaV.Facturada) { if (bCancelacion && (!bFacturaMultiple || (bFacturaMultiple && bCancelarTodaLaFactura))) { var ResFactura = VentasLoc.GenerarFacturaCancelacion(iVentaFacturaID, oIdsDev); if (ResFactura.Error) { UtilLocal.MensajeAdvertencia("Hubo un error al cancelar la factura.\n\n" + ResFactura.Mensaje); } } else { var ResFactura = VentasLoc.GenerarFacturaDevolucionPorDevolucion(oIdsDev[0]); if (ResFactura.Error) { UtilLocal.MensajeAdvertencia("Hubo un error al generar la factura de la devolución.\n\n" + ResFactura.Mensaje); } } } // Se verifica si hay una cancelación de control de cascos foreach (int iDevDetID in oIdsCascos) { this.DevolverControlCasco(iDevDetID, iUsuarioID); } // Se manda a afectar contabilidad (AfeConta) foreach (int iDevID in oIdsDev) { var oDevV = Datos.GetEntity <VentasDevolucionesView>(c => c.VentaDevolucionID == iDevID); if (oDevV.Facturada) { if (oDevV.VentaACredito) { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaCreditoFacturadaVale, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaCreditoFacturadaPago, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } } else { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaValeFactura, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaPago, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } } } else { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaValeTicket, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } // Si es tiecket a crédito, se hace ajuste temporal de pólizas if (oDevV.VentaACredito) { ContaProc.BorrarPolizaTemporalTicketCredito(oDevV.VentaID); if (!bCancelacion) { var oVentaVi = Datos.GetEntity <VentasView>(c => c.VentaID == oDevV.VentaID); ContaProc.CrearPolizaTemporalTicketCredito(oDevV.VentaID, (oVentaVi.Total - oVentaVi.Pagado)); } } } } // foreach (int iDevID in oIdsDev) { // Se guarda la autorización, si aplica VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.DevolucionCancelacion, Cat.Tablas.VentaDevolucion, iDevID, iAutorizoID); // Se genera el ticket correspondiente VentasLoc.GenerarTicketDevolucion(iDevID); // Se agrega al Kardex /* Ahora se hace desde que se guarda la devolución - Guardar.VentaDevolucion() * var oDevV = General.GetEntity<VentasDevolucionesView>(c => c.VentaDevolucionID == iDevID); * var oDet = General.GetListOf<VentaDevolucionDetalle>(c => c.VentaDevolucionID == iDevID && c.Estatus); * foreach (var oReg in oDet) * { * AdmonProc.RegistrarKardex(new ParteKardex() * { * ParteID = oReg.ParteID, * OperacionID = Cat.OperacionesKardex.VentaCancelada, * SucursalID = oDevV.SucursalID, * Folio = oDevV.FolioDeVenta, * Fecha = DateTime.Now, * RealizoUsuarioID = oDevV.RealizoUsuarioID, * Entidad = oVentaV.Cliente, * Origen = oVentaV.ClienteID.ToString(), * Destino = oDevV.Sucursal, * Cantidad = oReg.Cantidad, * Importe = (oReg.PrecioUnitario + oReg.Iva), * RelacionTabla = Cat.Tablas.VentaDevolucion, * RelacionID = oDevV.VentaDevolucionID * }); * } */ } // Se manda aviso de cancelación de factura a crédito de días anteriores, si aplica if (oVentaV.Facturada && oVentaV.ACredito && oVentaV.Fecha < DateTime.Now.Date) { var oUsuarios = Datos.GetListOf <Usuario>(c => c.AlertaDevFacturaCreditoAnt == true && c.Estatus); foreach (var oReg in oUsuarios) { Proc.EnviarMensajeTcp(oReg.Ip, Proc.MensajesTcp.DevolucionFacturaCreditoAnt, oIdsDev[0].ToString()); } } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion((bCancelacion ? "Cancelación" : "Devolución") + " guardada correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
private void HacerTraspaso() { var frmTraspaso = new MovimientoBancarioGen() { OrigenBancoCuentaID = this.ConBancoCuentaID, Text = "Traspaso entre cuentas" }; frmTraspaso.LlenarComboCuenta(); frmTraspaso.lblImporteInfo.Text = this.lblSaldoOperacion.Text; frmTraspaso.txtConcepto.Text = "Traspaso entre cuentas"; // Para concatenar la cuenta destino frmTraspaso.cmbBancoCuenta.SelectedIndexChanged += new EventHandler((s, e) => { frmTraspaso.txtConcepto.Text = ("Traspaso entre cuentas - " + frmTraspaso.cmbBancoCuenta.Text); }); // Para validar los datos frmTraspaso.delValidar += () => { frmTraspaso.ctlError.LimpiarErrores(); if (frmTraspaso.BancoCuentaID <= 0) { frmTraspaso.ctlError.PonerError(frmTraspaso.cmbBancoCuenta, "Debes especificar una cuenta."); } if (frmTraspaso.Importe == 0) { frmTraspaso.ctlError.PonerError(frmTraspaso.txtImporte, "El importe especificado es inválido."); } return(frmTraspaso.ctlError.Valido); }; if (frmTraspaso.ShowDialog(Principal.Instance) == DialogResult.OK) { Cargando.Mostrar(); // Se crea el retiro de la cuenta origen var oMovOrigen = new BancoCuentaMovimiento { BancoCuentaID = this.ConBancoCuentaID, EsIngreso = false, Fecha = frmTraspaso.dtpFecha.Value, FechaAsignado = frmTraspaso.dtpFecha.Value, SucursalID = GlobalClass.SucursalID, Importe = frmTraspaso.Importe, Concepto = frmTraspaso.txtConcepto.Text, Referencia = GlobalClass.UsuarioGlobal.NombreUsuario }; ContaProc.RegistrarMovimientoBancario(oMovOrigen); // Se crea el depósito a la cuenta destino var oMovDestino = new BancoCuentaMovimiento { BancoCuentaID = frmTraspaso.BancoCuentaID, EsIngreso = true, Fecha = frmTraspaso.dtpFecha.Value, FechaAsignado = frmTraspaso.dtpFecha.Value, SucursalID = GlobalClass.SucursalID, Importe = frmTraspaso.Importe, Concepto = frmTraspaso.txtConcepto.Text, Referencia = GlobalClass.UsuarioGlobal.NombreUsuario }; ContaProc.RegistrarMovimientoBancario(oMovDestino); // Se crea la póliza sencilla correspondiente (AfeConta) var oCuentaOrigen = Datos.GetEntity <BancoCuenta>(c => c.BancoCuentaID == oMovOrigen.BancoCuentaID); var oCuentaDestino = Datos.GetEntity <BancoCuenta>(c => c.BancoCuentaID == oMovDestino.BancoCuentaID); var oCuentaAuxOrigen = Datos.GetEntity <ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == (oCuentaOrigen.EsCpcp ? Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo : Cat.ContaCuentasDeMayor.Bancos) && c.RelacionID == oMovOrigen.BancoCuentaID); var oCuentaAuxDestino = Datos.GetEntity <ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == (oCuentaDestino.EsCpcp ? Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo : Cat.ContaCuentasDeMayor.Bancos) && c.RelacionID == oMovDestino.BancoCuentaID); if (oCuentaAuxOrigen == null || oCuentaAuxDestino == null) { Cargando.Cerrar(); UtilLocal.MensajeAdvertencia("No se encontró las cuenta auxiliar de alguna de las cuentas bancarias. No se realizará la Póliza."); } else { var oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, oMovOrigen.Concepto, oCuentaAuxDestino.ContaCuentaAuxiliarID, oCuentaAuxOrigen.ContaCuentaAuxiliarID, oMovOrigen.Importe, oMovOrigen.Referencia, Cat.Tablas.BancoCuentaMovimiento, oMovOrigen.BancoCuentaMovimientoID); oPoliza.Fecha = oMovOrigen.Fecha; Datos.Guardar <ContaPoliza>(oPoliza); } Cargando.Cerrar(); this.LlenarConciliaciones(); } frmTraspaso.Dispose(); }
private void CrearPoliza(DataGridViewRow oFilaGasto) { decimal mImporte = Util.Decimal(oFilaGasto.Cells["Importe"].Value); var frmGastoPol = new GastoCajaAPoliza(mImporte); if (frmGastoPol.ShowDialog(Principal.Instance) == DialogResult.OK) { // Se llenan los datos del gasto int iEgresoID = Util.Entero(oFilaGasto.Cells["CajaEgresoID"].Value); var oGasto = Datos.GetEntity <CajaEgreso>(c => c.CajaEgresoID == iEgresoID && c.Estatus); oGasto.Facturado = frmGastoPol.Facturado; oGasto.FolioFactura = frmGastoPol.Folio; oGasto.FechaFactura = frmGastoPol.Fecha; oGasto.Subtotal = frmGastoPol.Subtotal; oGasto.Iva = frmGastoPol.Iva; Datos.Guardar <CajaEgreso>(oGasto); // Se manda crear la Póliza, si no es de Proveedores var oContaEgreso = Datos.GetEntity <ContaEgreso>(c => c.ContaEgresoID == oGasto.ContaEgresoID); if (oContaEgreso == null || !Datos.Exists <ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == oContaEgreso.ContaCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Proveedores)) { var oUsuario = Datos.GetEntity <Usuario>(c => c.UsuarioID == oGasto.RealizoUsuarioID && c.Estatus); // Caso especial para reparto de utilidades if (Datos.Exists <ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == oContaEgreso.ContaCuentaAuxiliarID && c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.ReparteDeUtilidades)) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoReparteUtilidades, oGasto.CajaEgresoID, oUsuario.NombreUsuario, oGasto.Concepto , oGasto.SucursalID, oGasto.Fecha); } else { if (oGasto.Facturado.Valor()) { // Se manda a afectar contabilidad (AfeConta) ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GastoCajaFacturado, iEgresoID, oGasto.FolioFactura, oGasto.Concepto , oGasto.SucursalID, oGasto.Fecha); } else { // Se crea una póliza simple var oPoliza = new ContaPoliza() { Fecha = oGasto.Fecha, ContaTipoPolizaID = Cat.ContaTiposDePoliza.Egreso, Concepto = oGasto.Concepto, SucursalID = oGasto.SucursalID, RelacionTabla = Cat.Tablas.CajaEgreso, RelacionID = iEgresoID }; ContaProc.CrearPoliza(oPoliza, Cat.ContaCuentasAuxiliares.GastosNoDeducibles, Cat.ContaCuentasAuxiliares.Caja, oGasto.Importe , oUsuario.NombreUsuario); } } } // Se marca el gasto como afectado, y se guardan los datos oGasto.AfectadoEnPolizas = true; Datos.Guardar <CajaEgreso>(oGasto); this.LlenarGastos(); } frmGastoPol.Dispose(); }
private void RecibirResguardo() { // Se obtiene la lista de los resugardos posibles para traspaso var oResg = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Resguardo && c.SucursalID != Cat.Sucursales.Matriz && c.Cargo > 0).OrderBy(c => c.SucursalID).ToList(); // Se quintan los resguardos marcados para ocultar manualmente, y también los no mover for (int i = 0; i < oResg.Count; i++) { int iPolDetID = oResg[i].ContaPolizaDetalleID; if (Datos.Exists <ContaPolizaResguardoOcultar>(c => c.ContaPolizaDetalleID == iPolDetID)) { oResg.RemoveAt(i--); continue; } // Para quitar los resguardos de "NO MOVER" if (oResg[i].Referencia == "NO MOVER") { oResg.RemoveAt(i--); } } // Se crea el formulario para el listado var frmListado = new ObtenerElementoLista("Selecciona el resguardo a recibir", oResg); frmListado.MostrarColumnas("Sucursal", "FechaPoliza", "Cargo"); frmListado.dgvDatos.Columns["Sucursal"].DisplayIndex = 0; frmListado.dgvDatos.Columns["FechaPoliza"].HeaderText = "Fecha"; frmListado.dgvDatos.Columns["Cargo"].HeaderText = "Importe"; frmListado.dgvDatos.Columns["Cargo"].FormatoMoneda(); // Se agrega opción (con menú contextual) para ocultar resguardos var cmsMenu = new ContextMenuStrip(); cmsMenu.Items.Add("Ocultar"); frmListado.dgvDatos.MouseClick += new MouseEventHandler((s, e) => { if (e.Button != MouseButtons.Right) { return; } if (frmListado.dgvDatos.CurrentRow == null) { return; } cmsMenu.Show(frmListado.dgvDatos, new Point(e.X, e.Y)); }); cmsMenu.Items[0].Click += new EventHandler((s, e) => { // if (frmListado.dgvDatos.CurrentRow == null) return; int iPolizaDetID = Util.Entero(frmListado.dgvDatos.CurrentRow.Cells["ContaPolizaDetalleID"].Value); var oOcultar = new ContaPolizaResguardoOcultar() { ContaPolizaDetalleID = iPolizaDetID }; Datos.Guardar <ContaPolizaResguardoOcultar>(oOcultar); int iFila = frmListado.dgvDatos.CurrentRow.Index; frmListado.dgvDatos.CurrentCell = null; frmListado.dgvDatos.Rows[iFila].Visible = false; }); // Se muestra el formulario con el listado if (frmListado.ShowDialog(Principal.Instance) == DialogResult.OK) { // Se pide el usuario var oResU = UtilLocal.ValidarObtenerUsuario(); if (oResU.Exito) { // Se procede a guardar la póliza var oPolizaV = (frmListado.Seleccion as ContaPolizasDetalleAvanzadoView); string sFecha = DateTime.Now.ToString(GlobalClass.FormatoFecha); // Se modifica la póliza original, para quitar el resguardo var oPolResguardo = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaID == oPolizaV.ContaPolizaID && c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Resguardo); oPolResguardo.Cargo = 0; Datos.Guardar <ContaPolizaDetalle>(oPolResguardo); var oPoliza = Datos.GetEntity <ContaPoliza>(c => c.ContaPolizaID == oPolizaV.ContaPolizaID); oPoliza.Concepto = string.Format("{0} / {1} / {2} / {3}", oPolizaV.Sucursal, sFecha, oResU.Respuesta.NombreUsuario, oPoliza.Concepto); Datos.Guardar <ContaPoliza>(oPoliza); // Ahora se crea una nueva póliza, para meter el resguadro a matriz oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("RESGUARDO / {1} / {2} / {3}", DateTime.Now, oPolizaV.Sucursal , sFecha, oResU.Respuesta.NombreUsuario), Cat.ContaCuentasAuxiliares.Resguardo, Cat.ContaCuentasAuxiliares.Caja, oPolizaV.Cargo, "RESGUARDO" , null, null, Cat.Sucursales.Matriz); var oPolCaja = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaID == oPoliza.ContaPolizaID && c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Caja); oPolCaja.Abono = 0; Datos.Guardar <ContaPolizaDetalle>(oPolCaja); // this.LlenarArbol(); } } frmListado.Dispose(); }
public override bool Ejecutar() { // Se valida que el importe a pagar sea mayor que cero if (this.ctlCobranza.Total <= 0) { UtilLocal.MensajeAdvertencia("No hay ningún importe a pagar."); return(false); } // Se valida el cobro if (!this.ctlCobro.Validar()) { return(false); } // Se valida que el pago sea en la misma sucursal que el primer abono, si hubiera var oVentasACobrar = this.ctlCobranza.ObtenerVentasMarcadas(); string sVentasOt = ""; foreach (var oReg in oVentasACobrar) { if (Datos.Exists <VentaPago>(c => c.VentaID == oReg.VentaID && c.Estatus && c.SucursalID != GlobalClass.SucursalID)) { sVentasOt += (", " + oReg.Folio); } } if (sVentasOt != "" && oVentasACobrar[0].VentaID != 270157) // Modificaciòn temporal para no evaluar esa venta - 2015-08-24 { UtilLocal.MensajeAdvertencia("Las siguientes ventas ya fueron abonadas en otra sucursal, por lo tanto aquí no se pueden cobrar.\n\n" + sVentasOt.Substring(2)); return(false); } // Si se quiere pagar con Vales, se valida que sólo sea una venta var oFormasDePago = this.ctlCobro.GenerarPagoDetalle(); if (oFormasDePago.Any(c => c.TipoFormaPagoID == Cat.FormasDePago.Vale) && oVentasACobrar.Count > 1) { UtilLocal.MensajeAdvertencia("En selecciones múltiples no se puede usar vales. Es necesario seleccionar sólo una venta."); return(false); } // Confirmación if (UtilLocal.MensajePregunta("¿Estás seguro que deseas realizar el abono indicado?") != DialogResult.Yes) { return(false); } // Se completa el cobro, por si fue pago en efectivo if (!this.ctlCobro.CompletarCobro()) { return(false); } // Se solicita la validación de autorización, si aplica int iAutorizoID = 0; if (this.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { var Res = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Cobro.NotaDeCreditoOtroCliente", "Autorización"); iAutorizoID = (Res.Exito ? Res.Respuesta.UsuarioID : 0); } // Se procede a guardar los datos DateTime dAhora = DateTime.Now; // Se generan los pagos para las ventas marcadas, hasta donde alcance el importe decimal mPago = this.ctlCobro.Suma; var oVentasAfectadas = new List <VentasACreditoView>(); var oPagosDetalleGen = new List <VentaPagoDetalle>(); var oIdsPago = new List <int>(); foreach (var oVentaACobrar in oVentasACobrar) { // Si la venta no tiene saldo, se salta if (oVentaACobrar.Restante <= 0) { continue; } var oPago = new VentaPago() { VentaID = oVentaACobrar.VentaID, Fecha = dAhora, }; var oPagoDetalle = new List <VentaPagoDetalle>(); decimal mPagoForma = 0; oVentaACobrar.Pagado = 0; // Se hace cero para que sólo sume lo pagado en esta ocasión foreach (var oFormaDePago in oFormasDePago) { mPagoForma = (oFormaDePago.Importe > oVentaACobrar.Restante ? oVentaACobrar.Restante : oFormaDePago.Importe); if (oFormaDePago.Importe > 0) { oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = oFormaDePago.TipoFormaPagoID, Importe = mPagoForma, BancoID = oFormaDePago.BancoID, Folio = oFormaDePago.Folio, Cuenta = oFormaDePago.Cuenta, NotaDeCreditoID = oFormaDePago.NotaDeCreditoID }); mPago -= mPagoForma; oFormaDePago.Importe -= mPagoForma; oVentaACobrar.Pagado += mPagoForma; oVentaACobrar.Restante -= mPagoForma; if (oVentaACobrar.Restante <= 0) { break; } } } Guardar.VentaPago(oPago, oPagoDetalle); // Se agrega la venta actual a las ventas afectadas oVentasAfectadas.Add(oVentaACobrar); oIdsPago.Add(oPago.VentaPagoID); oPagosDetalleGen.AddRange(oPagoDetalle); if (mPago <= 0) { break; } } // Se manda a generar la póliza contable (AfeConta) foreach (int iPagoID in oIdsPago) { var oPagoV = Datos.GetEntity <VentasPagosView>(c => c.VentaPagoID == iPagoID); if (oPagoV.Facturada) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoVentaCredito, iPagoID , (oPagoV.Folio + " / " + UtilDatos.VentaPagoFormasDePago(iPagoID)), oPagoV.Cliente); } // Si es tiecket a crédito, se hace ajuste de pólizas if (!oPagoV.Facturada) { ContaProc.BorrarPolizaTemporalTicketCredito(oPagoV.VentaID); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == oPagoV.VentaID); if (oVentaV.VentaEstatusID == Cat.VentasEstatus.Cobrada) { ContaProc.CrearPolizaTemporalTicketCredito(oPagoV.VentaID, (oVentaV.Total - oVentaV.Pagado)); } } } // Se guardan la autorizaciones aplicables if (this.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { // Se agrega una autorización por cada nota de otro cliente var oNotasOC = this.ctlCobro.NotasDeCreditoOtrosClientes(); foreach (var oNotaOC in oNotasOC) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoOtroClienteUsar, Cat.Tablas.NotaDeCredito, oNotaOC, iAutorizoID); } } // Se guardan los datos del cobro, para reimpresión de tickets string sFolioCob = VentasProc.GenerarFolioDeCobranza(); int iCuenta = 0; foreach (var oVentaAf in oVentasAfectadas) { Datos.Guardar <CobranzaTicket>(new CobranzaTicket() { Ticket = sFolioCob, VentaID = oVentaAf.VentaID, ClienteID = this.Cliente.ClienteID, Folio = oVentaAf.Folio, Fecha = oVentaAf.Fecha, Vencimiento = oVentaAf.Vencimiento, Total = oVentaAf.Total, Pagado = oVentaAf.Pagado, Restante = oVentaAf.Restante, VentaPagoID = oIdsPago[iCuenta++] }); } // Se genera el ticket correspondiente VentasLoc.GenerarTicketCobranza(sFolioCob); // Si se pagó con vale, se verifica si se crearon nuevos vales por importes restantes. Y se mandan a imprimir var oValesCreados = VentasProc.ObtenerValesCreados(oPagosDetalleGen); foreach (var oReg in oValesCreados) { VentasLoc.GenerarTicketNotaDeCredito(oReg.NotaDeCreditoID); } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Procedimiento completado correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
public override bool Ejecutar() { // Se valida la opción if (!this.ctlFacturar.Validar()) { return(false); } // Se pregunta si se debe facturar al mismo cliente de las ventas o a otro int iAFClienteID = this.Cliente.ClienteID; if (UtilLocal.MensajePregunta("¿Deseas hacer la factura a nombre del cliente seleccionado?") == DialogResult.No) { iAFClienteID = 0; var frmValor = new MensajeObtenerValor("Selecciona el cliente para facturar:", "", MensajeObtenerValor.Tipo.Combo); frmValor.CargarCombo("ClienteID", "Nombre", Datos.GetListOf <Cliente>(q => q.ClienteID != Cat.Clientes.Mostrador && q.Estatus)); if (frmValor.ShowDialog(Principal.Instance) == DialogResult.OK) { iAFClienteID = Util.Entero(frmValor.Valor); } frmValor.Dispose(); } if (iAFClienteID == 0) { return(false); } // Se solicita el usuario que realiza el proceso int iUsuarioID = 0; var Res = UtilLocal.ValidarObtenerUsuario("Ventas.FacturarTickets.Agregar"); if (Res.Error) { return(false); } iUsuarioID = Res.Respuesta.UsuarioID; // Se muestra la ventana de "Cargando.." Cargando.Mostrar(); // DateTime dAhora = DateTime.Now; // Se obtienen los datos de los productos, por si se cambió la descripción List <ProductoVenta> oPartes = null; if (this.ctlFacturar.MostrarTodasLasPartes) { oPartes = this.ctlDetalle.ObtenerListaVenta(); } // Se procede a generar la factura var oVentasAF = this.ctlFacturar.GenerarListaDeVentas(); var oFormasDePago = this.ctlFacturar.FormasDePagoLibre; var ResFe = VentasLoc.GenerarFacturaElectronica(oVentasAF, iAFClienteID, oPartes, oFormasDePago, this.ctlFacturar.Observacion, null); if (ResFe.Error) { UtilLocal.MensajeAdvertencia(ResFe.Mensaje); return(false); } // Se guarda el dato de que fue una factura de ventas var oFactura = Datos.GetEntity <VentaFactura>(q => q.VentaFacturaID == ResFe.Respuesta && q.Estatus); oFactura.Convertida = true; oFactura.RealizoUsuarioID = iUsuarioID; Datos.Guardar <VentaFactura>(oFactura); // Se manda a afectar contabilidad (AfeConta) foreach (int iVentaID in oVentasAF) { var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID); if (oVentaV.ACredito) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaCredito, iVentaID, (oFactura.Serie + oFactura.Folio), oVentaV.Cliente); // Se verifica si el ticket ya está pagado, para hacer la póliza correspondiente a dicho pago if (oVentaV.Pagado > 0) { var oPagos = Datos.GetListOf <VentaPago>(c => c.VentaID == iVentaID && c.Estatus); foreach (var oReg in oPagos) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoVentaCredito, oReg.VentaPagoID , ((oFactura.Serie + oFactura.Folio) + " / " + UtilDatos.VentaPagoFormasDePago(oReg.VentaPagoID)) , oVentaV.Cliente, oReg.SucursalID); } } // Se borra la póliza temporal creada por ser ticket a crédito ContaProc.BorrarPolizaTemporalTicketCredito(iVentaID); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaContadoFacturaConvertida, iVentaID , (oFactura.Serie + oFactura.Folio), oVentaV.Cliente, oVentaV.SucursalID); } } // Se guarda el dato de pendiente por descontar en la factura global, si aplica // Se guardan datos cuando se están facturando tickets abonados en otras sucursales foreach (int iVentaID in oVentasAF) { // Se obtienen los abonos de otras sucursales var oAbonos = Datos.GetListOf <VentasPagosView>(c => c.VentaID == iVentaID && c.SucursalID != GlobalClass.SucursalID) .GroupBy(c => new { c.VentaID, c.SucursalID }).Select(c => new { c.Key.VentaID, c.Key.SucursalID, Abonado = c.Sum(s => s.Importe) }); if (oAbonos != null && oAbonos.Count() > 0) { foreach (var oReg in oAbonos) { var oPendiente = new FacturaGlobalPendientePorDescontar() { VentaID = oReg.VentaID, Fecha = dAhora, SucursalID = oReg.SucursalID, Importe = oReg.Abonado }; Datos.Guardar <FacturaGlobalPendientePorDescontar>(oPendiente); } } } // Se cierra la ventana de "Cargando.." Cargando.Cerrar(); // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Procedimiento ejecutado correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
private void CompletarAccionGarantia(int iGarantiaID, int?iValeClienteID) { var oGarantiaV = Datos.GetEntity <VentasGarantiasView>(c => c.VentaGarantiaID == iGarantiaID); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == oGarantiaV.VentaID); int iVentaID = oVentaV.VentaID; // Se cambia el estatus de la venta, cuando aplique (cuando ya no hay partes en el detalle de la venta) if (!Datos.Exists <VentaDetalle>(c => c.VentaID == iVentaID && c.Estatus)) { var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == iVentaID && c.Estatus); oVenta.VentaEstatusID = Cat.VentasEstatus.AGarantia; Datos.Guardar <Venta>(oVenta); } // Se obtiene el importe a devolver, por si fue a crédito y no se ha pagado toda la venta decimal mImporteDev = (oVentaV.Pagado > oGarantiaV.Total ? oGarantiaV.Total.Valor() : oVentaV.Pagado); // Se genera nota de crédito o devolución de efectivo, u otro, según aplique if (mImporteDev > 0) { ResAcc <int> oResPagoNeg = null; switch (oGarantiaV.AccionID) { case Cat.VentasGarantiasAcciones.ArticuloNuevo: case Cat.VentasGarantiasAcciones.NotaDeCredito: // var oVenta = General.GetEntity<Venta>(q => q.Estatus && q.VentaID == iVentaID); var oResVale = VentasProc.GenerarNotaDeCredito(iValeClienteID.Value, mImporteDev, "", Cat.OrigenesNotaDeCredito.Garantia , oGarantiaV.VentaGarantiaID); // Se genera el pago negativo por la nota de crédito generada oResPagoNeg = VentasProc.GenerarPagoNegativoPorNotaDeCredito(iVentaID, mImporteDev, oResVale.Respuesta); break; case Cat.VentasGarantiasAcciones.Efectivo: oResPagoNeg = VentasProc.GenerarDevolucionDeEfectivo(iVentaID, mImporteDev); break; case Cat.VentasGarantiasAcciones.Cheque: case Cat.VentasGarantiasAcciones.Tarjeta: case Cat.VentasGarantiasAcciones.TarjetaDeDebito: case Cat.VentasGarantiasAcciones.Transferencia: int iFormaDePagoID = UtilDatos.FormaDePagoDeAccionGarantia(oGarantiaV.AccionID); var oVentaPago = Datos.GetEntity <VentaPago>(q => q.VentaID == iVentaID && q.Estatus); var oFormaPago = Datos.GetEntity <VentaPagoDetalle>(q => q.VentaPagoID == oVentaPago.VentaPagoID && q.TipoFormaPagoID == iFormaDePagoID && q.Estatus); // Se genera un pago negativo con la misma forma del pago a contrarestar oResPagoNeg = VentasProc.GenerarPago(iVentaID, (oFormaPago.Importe * -1), iFormaDePagoID, oFormaPago.BancoID.Valor(), oFormaPago.Folio, oFormaPago.Cuenta); break; } // Se guarda el dato del pago negativo correspondiente a la devolución, si aplica if (oResPagoNeg != null) { var oGarantia = Datos.GetEntity <VentaGarantia>(c => c.VentaGarantiaID == iGarantiaID && c.Estatus); // Se obtiene el primer registro de VentaPagoDetalle, y ese es el que se relaciona con la garantía, pues se supone que siempre habrá sólo uno var oPagoDet = Datos.GetEntity <VentaPagoDetalle>(c => c.VentaPagoID == oResPagoNeg.Respuesta && c.Estatus); oGarantia.VentaPagoDetalleID = oPagoDet.VentaPagoDetalleID; Datos.Guardar <VentaGarantia>(oGarantia); } } // Se verifica si es factura, en cuyo caso, se genera nota de crédito, según aplique if (oVentaV.Facturada) { var ResFactura = VentasLoc.GenerarFacturaDevolucionPorGarantia(iGarantiaID); if (ResFactura.Error) { UtilLocal.MensajeAdvertencia("Hubo un error al generar la factura de la devolución.\n\n" + ResFactura.Mensaje); } } // Se crea la póliza contable correspondiente, según el caso (AfeConta) if (oVentaV.Facturada) { if (oVentaV.ACredito) { if (oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.ArticuloNuevo || oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.NotaDeCredito) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GarantiaVentaCreditoFacturaVale, oGarantiaV.VentaGarantiaID , oGarantiaV.FolioDeVenta, oGarantiaV.MotivoObservacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GarantiaVentaCreditoFacturadaPago, oGarantiaV.VentaGarantiaID , oGarantiaV.FolioDeVenta, oGarantiaV.MotivoObservacion); } } else { if (oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.ArticuloNuevo || oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.NotaDeCredito) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GarantiaVentaValeFactura, oGarantiaV.VentaGarantiaID , oGarantiaV.FolioDeVenta, oGarantiaV.MotivoObservacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GarantiaVentaPagoFactura, oGarantiaV.VentaGarantiaID , oGarantiaV.FolioDeVenta, oGarantiaV.MotivoObservacion); } } } else { if (oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.ArticuloNuevo || oGarantiaV.AccionID == Cat.VentasGarantiasAcciones.NotaDeCredito) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.GarantiaVentaValeTicket, oGarantiaV.VentaGarantiaID , oGarantiaV.FolioDeVenta, oGarantiaV.MotivoObservacion); } // Si es tiecket a crédito, se hace ajuste temporal de pólizas if (oVentaV.ACredito) { ContaProc.BorrarPolizaTemporalTicketCredito(iVentaID); // Se actualizan los datos de la venta oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID); ContaProc.CrearPolizaTemporalTicketCredito(iVentaID, (oVentaV.Total - oVentaV.Pagado)); } } }
private void GuardarDatos() { // Se solicita la autorización var oResU = UtilLocal.ValidarObtenerUsuario("Administracion.Master.Modificar"); if (oResU.Error) { return; } int iUsuarioID = oResU.Respuesta.UsuarioID; // Se muestra progreso de avance this.IniciarTerminarProgreso(true); // Se inicia el proceso de guardado Datos.StartPersistentContext(); int iErroresVal = 0; var oCambios = new List <ParteCambio>(); var oVarCostos = new Dictionary <int, decimal>(); foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { this.pgrGuardar.EjecutarPaso(true); if (!Fila.Visible) { continue; } if (!Util.Logico(Fila.Cells["Procesar"].Value)) { continue; } int iParteID = Util.Entero(Fila.Cells["ParteID"].Value); bool bCambioParte = (Util.Entero(Fila.Cells["CambioParte"].Value) == Cat.TiposDeAfectacion.Modificar); bool bCambioPrecio = (Util.Entero(Fila.Cells["CambioPrecio"].Value) == Cat.TiposDeAfectacion.Modificar); // Se valida el Proveedor - Marca - Línea int iProveedorID = 0, iMarcaID = 0, iLineaID = 0; if (bCambioParte || bCambioPrecio) { iProveedorID = Util.Entero(Fila.Cells["ProveedorID"].Value); iMarcaID = Util.Entero(Fila.Cells["MarcaID"].Value); iLineaID = Util.Entero(Fila.Cells["LineaID"].Value); if (!Datos.Exists <ProveedorMarcaParte>(q => q.ProveedorID == iProveedorID && q.MarcaParteID == iMarcaID && q.Estatus) || !Datos.Exists <LineaMarcaParte>(q => q.MarcaParteID == iMarcaID && q.LineaID == iLineaID && q.Estatus)) { Fila.ErrorText = "Proveedor - Marca - Línea inválido."; // Fila.DefaultCellStyle.ForeColor = Color.Red; iErroresVal++; continue; } } // Se guardan los datos de la parte, si aplica if (bCambioParte) { var oParte = Datos.GetEntity <Parte>(q => q.ParteID == iParteID && q.Estatus); string sNumeroDeParte = Util.Cadena(Fila.Cells["NumeroDeParte"].Value); string sDescripcion = Util.Cadena(Fila.Cells["Descripcion"].Value); int iUnidadDeMedidaID = Util.Entero(Fila.Cells["UnidadDeMedidaID"].Value); decimal mUnidadDeEmpaque = Util.Decimal(Fila.Cells["UnidadDeEmpaque"].Value); decimal mTiempoDeReposicion = Util.Decimal(Fila.Cells["TiempoDeReposicion"].Value); bool bComision = Util.Logico(Fila.Cells["Comision"].Value); bool bServicio = Util.Logico(Fila.Cells["Servicio"].Value); bool bEtiqueta = Util.Logico(Fila.Cells["Etiqueta"].Value); bool bSoloUna = Util.Logico(Fila.Cells["SoloUna"].Value); bool bEsPar = Util.Logico(Fila.Cells["EsPar"].Value); string sCodigoDeBarras = Util.Cadena(Fila.Cells["CodigoDeBarra"].Value); // Para agregar registro de cambios if (Util.Cadena(oParte.NumeroParte) != sNumeroDeParte) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.NumeroDeParte, oParte.NumeroParte, sNumeroDeParte); oParte.NumeroParte = sNumeroDeParte; } if (Util.Cadena(oParte.NombreParte) != sDescripcion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Descripcion, oParte.NombreParte, sDescripcion); oParte.NombreParte = sDescripcion; } if (oParte.ProveedorID != iProveedorID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Proveedor, oParte.ProveedorID.ToString(), iProveedorID.ToString()); oParte.ProveedorID = iProveedorID; } if (oParte.LineaID != iLineaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Linea, oParte.LineaID.ToString(), iLineaID.ToString()); oParte.LineaID = iLineaID; } if (oParte.MarcaParteID != iMarcaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Marca, oParte.MarcaParteID.ToString(), iMarcaID.ToString()); oParte.MarcaParteID = iMarcaID; } if (oParte.MedidaID.Valor() != iUnidadDeMedidaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeMedida, oParte.MedidaID.ToString(), iUnidadDeMedidaID.ToString()); oParte.MedidaID = iUnidadDeMedidaID; } if (oParte.UnidadEmpaque != mUnidadDeEmpaque) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeEmpaque, oParte.UnidadEmpaque.ToString(), mUnidadDeEmpaque.ToString()); oParte.UnidadEmpaque = mUnidadDeEmpaque; } if (oParte.TiempoReposicion != mTiempoDeReposicion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.TiempoDeReposicion, oParte.TiempoReposicion.ToString(), mTiempoDeReposicion.ToString()); oParte.TiempoReposicion = mTiempoDeReposicion; } if (oParte.AplicaComision.Valor() != bComision) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.AplicaComision, this.CadenaDeBool(oParte.AplicaComision), bComision.ACadena()); oParte.AplicaComision = bComision; } if (oParte.EsServicio.Valor() != bServicio) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsServicio, this.CadenaDeBool(oParte.EsServicio), bServicio.ACadena()); oParte.EsServicio = bServicio; } if (oParte.Etiqueta.Valor() != bEtiqueta) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Etiqueta, this.CadenaDeBool(oParte.Etiqueta), bEtiqueta.ACadena()); oParte.Etiqueta = bEtiqueta; } if (oParte.SoloUnaEtiqueta.Valor() != bSoloUna) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.SoloUnaEtiqueta, this.CadenaDeBool(oParte.SoloUnaEtiqueta), bSoloUna.ACadena()); oParte.SoloUnaEtiqueta = bSoloUna; } if (oParte.EsPar.Valor() != bEsPar) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsPar, this.CadenaDeBool(oParte.EsPar), bEsPar.ACadena()); oParte.EsPar = bEsPar; } if (Util.Cadena(oParte.CodigoBarra) != sCodigoDeBarras) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CodigoDeBarras, oParte.CodigoBarra, sCodigoDeBarras); oParte.CodigoBarra = sCodigoDeBarras; } /* oParte.NumeroParte = Util.ConvertirCadena(Fila.Cells["NumeroDeParte"].Value); * oParte.NombreParte = Util.ConvertirCadena(Fila.Cells["Descripcion"].Value); * oParte.ProveedorID = Util.ConvertirEntero(Fila.Cells["ProveedorID"].Value); * oParte.LineaID = Util.ConvertirEntero(Fila.Cells["LineaID"].Value); * oParte.MarcaParteID = Util.ConvertirEntero(Fila.Cells["MarcaID"].Value); * oParte.MedidaID = Util.ConvertirEntero(Fila.Cells["UnidadDeMedidaID"].Value); * oParte.AplicaComision = Util.ConvertirBool(Fila.Cells["Comision"].Value); * oParte.EsServicio = Util.ConvertirBool(Fila.Cells["Servicio"].Value); * oParte.Etiqueta = Util.ConvertirBool(Fila.Cells["Etiqueta"].Value); * oParte.SoloUnaEtiqueta = Util.ConvertirBool(Fila.Cells["SoloUna"].Value); * oParte.CodigoBarra = Util.ConvertirCadena(Fila.Cells["CodigoDeBarra"].Value); */ Datos.Guardar <Parte>(oParte); } // Se guardan los datos de precios if (bCambioPrecio) { var oParte = Datos.GetEntity <PartePrecio>(q => q.ParteID == iParteID && q.Estatus); decimal mCosto = Util.Decimal(Fila.Cells["Costo"].Value); decimal mCostoConDescuento = Util.Decimal(Fila.Cells["CostoConDescuento"].Value); decimal mPorUtil1 = Util.Decimal(Fila.Cells["Por1"].Value); decimal mPorUtil2 = Util.Decimal(Fila.Cells["Por2"].Value); decimal mPorUtil3 = Util.Decimal(Fila.Cells["Por3"].Value); decimal mPorUtil4 = Util.Decimal(Fila.Cells["Por4"].Value); decimal mPorUtil5 = Util.Decimal(Fila.Cells["Por5"].Value); decimal mPrecio1 = Util.Decimal(Fila.Cells["Precio1"].Value); decimal mPrecio2 = Util.Decimal(Fila.Cells["Precio2"].Value); decimal mPrecio3 = Util.Decimal(Fila.Cells["Precio3"].Value); decimal mPrecio4 = Util.Decimal(Fila.Cells["Precio4"].Value); decimal mPrecio5 = Util.Decimal(Fila.Cells["Precio5"].Value); // Para agregar registro de cambios if (oParte.Costo.Valor() != mCosto) { // Para calcular la diferencia total en costo, por sucursal decimal mVarCosto = (mCosto - oParte.Costo.Valor()); var oExistencias = Datos.GetListOf <ParteExistencia>(c => c.ParteID == iParteID && c.Estatus); foreach (var oReg in oExistencias) { if (!oVarCostos.ContainsKey(oReg.SucursalID)) { oVarCostos.Add(oReg.SucursalID, 0); } oVarCostos[oReg.SucursalID] += (mVarCosto * oReg.Existencia.Valor()); } // this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Costo, this.CadenaDeDecimal(oParte.Costo), mCosto.ToString()); oParte.Costo = mCosto; } if (oParte.CostoConDescuento.Valor() != mCostoConDescuento) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CostoConDescuento , this.CadenaDeDecimal(oParte.CostoConDescuento), mCostoConDescuento.ToString()); oParte.CostoConDescuento = mCostoConDescuento; } if (oParte.PorcentajeUtilidadUno.Valor() != mPorUtil1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil1, this.CadenaDeDecimal(oParte.PorcentajeUtilidadUno), mPorUtil1.ToString()); oParte.PorcentajeUtilidadUno = mPorUtil1; } if (oParte.PorcentajeUtilidadDos.Valor() != mPorUtil2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil2, this.CadenaDeDecimal(oParte.PorcentajeUtilidadDos), mPorUtil2.ToString()); oParte.PorcentajeUtilidadDos = mPorUtil2; } if (oParte.PorcentajeUtilidadTres.Valor() != mPorUtil3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil3, this.CadenaDeDecimal(oParte.PorcentajeUtilidadTres), mPorUtil3.ToString()); oParte.PorcentajeUtilidadTres = mPorUtil3; } if (oParte.PorcentajeUtilidadCuatro.Valor() != mPorUtil4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil4, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCuatro), mPorUtil4.ToString()); oParte.PorcentajeUtilidadCuatro = mPorUtil4; } if (oParte.PorcentajeUtilidadCinco.Valor() != mPorUtil5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil5, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCinco), mPorUtil5.ToString()); oParte.PorcentajeUtilidadCinco = mPorUtil5; } if (oParte.PrecioUno.Valor() != mPrecio1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio1, this.CadenaDeDecimal(oParte.PrecioUno), mPrecio1.ToString()); oParte.PrecioUno = mPrecio1; } if (oParte.PrecioDos.Valor() != mPrecio2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio2, this.CadenaDeDecimal(oParte.PrecioDos), mPrecio2.ToString()); oParte.PrecioDos = mPrecio2; } if (oParte.PrecioTres.Valor() != mPrecio3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio3, this.CadenaDeDecimal(oParte.PrecioTres), mPrecio3.ToString()); oParte.PrecioTres = mPrecio3; } if (oParte.PrecioCuatro.Valor() != mPrecio4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio4, this.CadenaDeDecimal(oParte.PrecioCuatro), mPrecio4.ToString()); oParte.PrecioCuatro = mPrecio4; } if (oParte.PrecioCinco.Valor() != mPrecio5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio5, this.CadenaDeDecimal(oParte.PrecioCinco), mPrecio5.ToString()); oParte.PrecioCinco = mPrecio5; } /* oParte.Costo = Util.ConvertirDecimal(Fila.Cells["Costo"].Value); * oParte.PorcentajeUtilidadUno = Util.ConvertirDecimal(Fila.Cells["Por1"].Value); * oParte.PrecioUno = Util.ConvertirDecimal(Fila.Cells["Precio1"].Value); * oParte.PorcentajeUtilidadDos = Util.ConvertirDecimal(Fila.Cells["Por2"].Value); * oParte.PrecioDos = Util.ConvertirDecimal(Fila.Cells["Precio2"].Value); * oParte.PorcentajeUtilidadTres = Util.ConvertirDecimal(Fila.Cells["Por3"].Value); * oParte.PrecioTres = Util.ConvertirDecimal(Fila.Cells["Precio3"].Value); * oParte.PorcentajeUtilidadCuatro = Util.ConvertirDecimal(Fila.Cells["Por4"].Value); * oParte.PrecioCuatro = Util.ConvertirDecimal(Fila.Cells["Precio4"].Value); * oParte.PorcentajeUtilidadCinco = Util.ConvertirDecimal(Fila.Cells["Por5"].Value); * oParte.PrecioCinco = Util.ConvertirDecimal(Fila.Cells["Precio5"].Value); */ Datos.Guardar <PartePrecio>(oParte); } // Se restaura la fila if (bCambioParte || bCambioPrecio) { Fila.Cells["CambioParte"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.Cells["CambioPrecio"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.ErrorText = ""; // Fila.DefaultCellStyle.ForeColor = Color.Black; } } // Se generan los pólizas correspondientes por diferencias de costos string sObsPoliza = Util.Cadena(this.dgvDatos.Columns["Costo"].Tag); foreach (var oDif in oVarCostos) { if (oDif.Value != 0) { ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, sObsPoliza, Cat.ContaCuentasAuxiliares.Inventario, Cat.ContaCuentasAuxiliares.CapitalFijo , oDif.Value, "", null, null, oDif.Key); } } // Se guardan los cambios UtilLocal.MostrarNotificacion("Guardando registro de cambios..."); Application.DoEvents(); this.pgrGuardar.Inicializar(oCambios.Count, 1); DateTime dAhora = DateTime.Now; foreach (var oCambio in oCambios) { oCambio.Fecha = dAhora; oCambio.UsuarioID = iUsuarioID; Datos.Guardar <ParteCambio>(oCambio, false); this.pgrGuardar.EjecutarPaso(true); } Datos.EndPersistentContext(); // Se restaura el color de las celdas, si no hubo error foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { if (Fila.ErrorText == "") { foreach (DataGridViewCell Celda in Fila.Cells) { if (Celda.HasStyle) { Celda.Style.ForeColor = Color.Black; } } } } this.IniciarTerminarProgreso(false); UtilLocal.MostrarNotificacion("Proceso completado " + (iErroresVal > 0 ? "con errores." : "correctamente.")); }
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); }
private void CargarDatos() { Cargando.Mostrar(); var oFuenteT = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Bold); // Se limpian los datos this.dgvDatos.Rows.Clear(); foreach (var oSerie in this.chrPorSemana.Series) { oSerie.Points.Clear(); } // Se llenan las columnas del año int iAnio = Util.Entero(this.cmbAnio.Text); this.LlenarColumnasAnio(iAnio); // Se agrega la fila de ingresos int iFilaIngresos = this.dgvDatos.Rows.Add("+ Ingresos"); this.dgvDatos.Rows[iFilaIngresos].DefaultCellStyle.Font = oFuenteT; decimal mTotal = 0, mPromedio = 0; // Se agrega la fila de saldo inicial int iFilaSaldoInicial = this.dgvDatos.Rows.Add("Saldo inicial"); // Se obtienen los datos para las ventas // int iSucursalID = Util.ConvertirEntero(this.cmbSucursal.SelectedValue); DateTime dDesde = new DateTime(iAnio, 1, 1); DateTime dHasta = new DateTime(iAnio, 12, 31); DateTime dDesdeSemUno = UtilTheos.InicioSemanaSabAVie(dDesde); var oParams = new Dictionary <string, object>(); // oParams.Add("SucursalID", (iSucursalID == 0 ? null : (int?)iSucursalID)); oParams.Add("Pagadas", true); oParams.Add("Cobradas", false); oParams.Add("Solo9500", false); oParams.Add("OmitirDomingo", false); oParams.Add("Desde", dDesdeSemUno); oParams.Add("Hasta", dHasta); var oDatos = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams); var oSemanas = oDatos.Where(c => c.Fecha >= dDesdeSemUno) .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha) }) .Select(c => new { c.Key.Semana, PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual) }) .OrderBy(c => c.Semana); mTotal += oSemanas.Sum(c => c.PrecioSinIva).Valor(); mPromedio += oSemanas.Average(c => c.PrecioSinIva).Valor(); // Se agrega la fila de ventas int iFila = this.dgvDatos.Rows.Add("Ventas", oSemanas.Sum(c => c.PrecioSinIva), oSemanas.Average(c => c.PrecioSinIva)); foreach (var oReg in oSemanas) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.PrecioSinIva); this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.PrecioSinIva); } // Se obtienen datos para varios grupos DateTime dHastaMas1 = dHasta.AddDays(1); // DateTime dDesdeMas1 = dDesde.AddDays(1); var oReinversiones = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.FechaPoliza >= dDesdeSemUno && c.FechaPoliza < dHastaMas1 && ( c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || (c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo && c.ContaCuentaAuxiliarID != Cat.ContaCuentasAuxiliares.TarjetaDeCredito) || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos || c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo ) ); // Se agrega la fila de préstamos var oPrestamos = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo) .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())) .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Abono) }); mTotal += oPrestamos.Sum(c => c.Importe); decimal mPromedioAct = (oPrestamos.Count() > 0 ? oPrestamos.Average(c => c.Importe) : 0); mPromedio += mPromedioAct; iFila = this.dgvDatos.Rows.Add("Préstamos", oPrestamos.Sum(c => c.Importe), mPromedioAct); foreach (var oReg in oPrestamos) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.Importe); } // Se llenan los totales de ingresos this.dgvDatos["Total", iFilaIngresos].Value = mTotal; this.dgvDatos["Promedio", iFilaIngresos].Value = (mPromedio / 2); // Se agrega la fila de egresos int iFilaEgresos = this.dgvDatos.Rows.Add("- Egresos"); this.dgvDatos.Rows[iFilaEgresos].DefaultCellStyle.Font = oFuenteT; mTotal = mPromedio = 0; // Se obtienen los datos para los gastos oParams.Clear(); oParams.Add("Desde", dDesdeSemUno); oParams.Add("Hasta", dHasta); var oGastos = Datos.ExecuteProcedure <pauContaCuentasPorSemana_Result>("pauContaCuentasPorSemana", oParams); var oGastosSem = ContaProc.GastosSemanalizados(oGastos, Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name)); oGastosSem = oGastosSem.Where(c => c.Semana >= dDesdeSemUno) .GroupBy(c => new { c.Semana }).Select(c => new ContaProc.GastoSem() { Semana = c.Key.Semana, Importe = c.Sum(s => s.Importe) }).ToList(); mTotal += oGastosSem.Sum(c => c.Importe); mPromedio += oGastosSem.Average(c => c.Importe); // Se agrega la fila de los Gastos iFila = this.dgvDatos.Rows.Add("Gastos", oGastosSem.Sum(c => c.Importe), oGastosSem.Average(c => c.Importe)); foreach (var oReg in oGastosSem) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe); } // Para las compras var oCompras = Datos.GetListOf <ProveedoresPolizasDetalleAvanzadoView>(c => c.Fecha >= dDesdeSemUno && c.Fecha < dHastaMas1 && (c.OrigenID == Cat.OrigenesPagosAProveedores.PagoDirecto || c.OrigenID == Cat.OrigenesPagosAProveedores.PagoDeCaja)) .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha.Valor()) }) .Select(c => new { c.Key.Semana, Importe = c.Sum(s => s.Subtotal) }) .OrderBy(c => c.Semana); mTotal += oCompras.Sum(c => c.Importe); mPromedioAct = (oCompras.Count() > 0 ? oCompras.Average(c => c.Importe) : 0); mPromedio += mPromedioAct; // Se agrega la fila de compras iFila = this.dgvDatos.Rows.Add("Compras", oCompras.Sum(c => c.Importe), mPromedioAct); foreach (var oReg in oCompras) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe); } // Para las deudas var oDeudas = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos) .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())) .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) }); mTotal += oDeudas.Sum(c => c.Importe); mPromedioAct = (oDeudas.Count() > 0 ? oDeudas.Average(c => c.Importe) : 0); mPromedio += mPromedioAct; // Se agrega la fila de deudas iFila = this.dgvDatos.Rows.Add("Deudas", oDeudas.Sum(c => c.Importe), mPromedioAct); foreach (var oReg in oDeudas) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe); } // Para las inversiones var oInversiones = oReinversiones.Where(c => c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo) .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())) .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) }); mTotal += oInversiones.Sum(c => c.Importe); mPromedioAct = (oInversiones.Count() > 0 ? oInversiones.Average(c => c.Importe) : 0); mPromedio += mPromedioAct; // Se agrega la fila de deudas iFila = this.dgvDatos.Rows.Add("Inversiones", oInversiones.Sum(c => c.Importe), mPromedioAct); foreach (var oReg in oInversiones) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe); } // Para lo de Isidro y Don Isidro var oGastosSemEsp = ContaProc.GastosSemanalizados(Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesdeSemUno && c.Fecha < dHastaMas1) , Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name)); oGastosSemEsp = oGastosSemEsp.Where(c => c.Semana >= dDesdeSemUno).ToList(); mTotal += oGastosSemEsp.Sum(c => c.Importe); mPromedioAct = (oGastosSemEsp.Count() > 0 ? oGastosSemEsp.Average(c => c.Importe) : 0); mPromedio += mPromedioAct; // Se agregan las filas string sDuenio = ""; foreach (var oReg in oGastosSemEsp) { if (sDuenio != oReg.Grupo) { sDuenio = oReg.Grupo; iFila = this.dgvDatos.Rows.Add(sDuenio, oGastosSemEsp.Where(c => c.Grupo == sDuenio).Sum(c => c.Importe) , oGastosSemEsp.Where(c => c.Grupo == sDuenio).Average(c => c.Importe)); } string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe); } // Se llenan los totales de egresos this.dgvDatos["Total", iFilaEgresos].Value = mTotal; this.dgvDatos["Promedio", iFilaEgresos].Value = (mPromedio / 2); // Ajuste especial para el año 2015, se quitan los datos antes del 01 de Julio if (dDesde.Year == 2015) { DateTime dInicio = new DateTime(2015, 6, 1); foreach (DataGridViewRow oFila in this.dgvDatos.Rows) { mPromedio = 0; for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++) { DateTime dSem = Util.FechaHora(this.dgvDatos.Columns[iCol].Name); oFila.Cells["Total"].Value = 0; if (dSem >= dInicio) { mPromedio++; oFila.Cells["Total"].Value = (Util.Decimal(oFila.Cells["Total"].Value) + Util.Decimal(oFila.Cells[iCol].Value)); } else { oFila.Cells[iCol].Value = null; } } oFila.Cells["Promedio"].Value = (Util.Decimal(oFila.Cells["Total"].Value) / mPromedio); } } // Se agrega el saldo final int iFilaSaldo = this.dgvDatos.Rows.Add("= Saldo final"); this.dgvDatos.Rows[iFilaSaldo].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } // Se modifica el saldo inicial de la semana actual, y se suma a la fila de ingresos if (oCol.Index >= this.iColumnasFijas) { this.dgvDatos[oCol.Index, iFilaIngresos].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value) + Util.Decimal(this.dgvDatos[oCol.Index, iFilaSaldoInicial].Value) ); } decimal mSaldo = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaEgresos].Value) ); this.dgvDatos[oCol.Index, iFilaSaldo].Value = mSaldo; // Se llena el saldo inicial de la siguiente semana, si hay if (oCol.Index >= this.iColumnasFijas && oCol.Index < (this.dgvDatos.Columns.Count - 1)) { this.dgvDatos[oCol.Index + 1, iFilaSaldoInicial].Value = mSaldo; } } // Se llena la gráfica, en base al grid ya cargado for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++) { this.chrPorSemana.Series["Ventas"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos + 1].Value)); this.chrPorSemana.Series["Prestamos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos + 2].Value)); this.chrPorSemana.Series["Gastos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 1].Value)); this.chrPorSemana.Series["Compras"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 2].Value)); this.chrPorSemana.Series["Deudas"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 3].Value)); this.chrPorSemana.Series["Inversiones"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 4].Value)); if (this.dgvDatos.Rows.Count > 10) { this.chrPorSemana.Series["Isidro"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 5].Value)); this.chrPorSemana.Series["DonIsidro"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 6].Value)); } } Cargando.Cerrar(); }
private void CargarDatos() { Cargando.Mostrar(); var oFuenteT = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Bold); // Se limpian los datos this.dgvDatos.Rows.Clear(); foreach (var oSerie in this.chrPorSemana.Series) { oSerie.Points.Clear(); } // Se llenan las columnas del año int iAnio = Util.Entero(this.cmbAnio.Text); this.LlenarColumnasAnio(iAnio); // Se obtienen los datos para los ingresos int iSucursalID = Util.Entero(this.cmbSucursal.SelectedValue); DateTime dDesde = new DateTime(iAnio, 1, 1); DateTime dHasta = new DateTime(iAnio, 12, 31); var oParams = new Dictionary <string, object>(); oParams.Add("SucursalID", (iSucursalID == 0 ? null : (int?)iSucursalID)); oParams.Add("Pagadas", true); oParams.Add("Cobradas", false); oParams.Add("Solo9500", false); oParams.Add("OmitirDomingo", false); oParams.Add("Desde", dDesde); oParams.Add("Hasta", dHasta); var oDatos = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams); var oSemanas = oDatos.Where(c => c.Fecha >= dDesde) .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha), c.Sucursal }) .Select(c => new { c.Key.Semana, c.Key.Sucursal, PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual), Costo = c.Sum(s => s.CostoDescActual) }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Semana); // Se agrega la fila de ingresos int iFilaIngresos = this.dgvDatos.Rows.Add("+ Ingresos", oSemanas.Sum(c => c.PrecioSinIva), oSemanas.Average(c => c.PrecioSinIva)); this.dgvDatos.Rows[iFilaIngresos].DefaultCellStyle.Font = oFuenteT; // Se llenan los ingresos string sSucursal = ""; int iFila = 0; foreach (var oReg in oSemanas) { if (sSucursal != oReg.Sucursal) { sSucursal = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sSucursal, oSemanas.Where(c => c.Sucursal == sSucursal).Sum(c => c.PrecioSinIva) , oSemanas.Where(c => c.Sucursal == sSucursal).Average(c => c.PrecioSinIva)); } string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.PrecioSinIva); this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.PrecioSinIva); } // Se agrega la fila de Costos int iFilaCostos = this.dgvDatos.Rows.Add("- Costos", oSemanas.Sum(c => c.Costo), oSemanas.Average(c => c.Costo)); this.dgvDatos.Rows[iFilaCostos].DefaultCellStyle.Font = oFuenteT; // Se llenan los costos sSucursal = ""; foreach (var oReg in oSemanas) { if (sSucursal != oReg.Sucursal) { sSucursal = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sSucursal, oSemanas.Where(c => c.Sucursal == sSucursal).Sum(c => c.Costo) , oSemanas.Where(c => c.Sucursal == sSucursal).Average(c => c.Costo)); } string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Costo); this.dgvDatos[sSemana, iFilaCostos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaCostos].Value) + oReg.Costo); } // Se agrega la fila de margen bruto int iFilaMargen = this.dgvDatos.Rows.Add("= Margen Bruto"); this.dgvDatos.Rows[iFilaMargen].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaMargen].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaCostos].Value) ); } // Se obtienen los datos para los gastos oParams.Clear(); oParams.Add("Desde", dDesde); oParams.Add("Hasta", dHasta); var oGastos = Datos.ExecuteProcedure <pauContaCuentasPorSemana_Result>("pauContaCuentasPorSemana", oParams); var oGastosSemFijo = oGastos.GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha), c.Sucursal }) .Select(c => new ContaProc.GastoSem() { Semana = c.Key.Semana, Grupo = c.Key.Sucursal, Importe = c.Sum(s => s.ImporteDev).Valor() }); // Se obtiene los datos según el tipo de semanalización List <ContaProc.GastoSem> oGastosSem; if (this.rdbSemanalizar.Checked) { oGastosSem = ContaProc.GastosSemanalizados(oGastos, Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name)); } else { oGastosSem = oGastosSemFijo.OrderBy(c => c.Grupo).ThenBy(c => c.Semana).ToList(); } // Se agrega la fila de los Gastos int iFilaGastos = this.dgvDatos.Rows.Add("- Gastos", oGastosSem.Sum(c => c.Importe), oGastosSem.Average(c => c.Importe)); this.dgvDatos.Rows[iFilaGastos].DefaultCellStyle.Font = oFuenteT; // Se llenan los gastos sSucursal = ""; foreach (var oReg in oGastosSem) { if (sSucursal != oReg.Grupo) { sSucursal = oReg.Grupo; iFila = this.dgvDatos.Rows.Add(sSucursal, oGastosSem.Where(c => c.Grupo == sSucursal).Sum(c => c.Importe) , oGastosSem.Where(c => c.Grupo == sSucursal).Average(c => c.Importe)); } string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaGastos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaGastos].Value) + oReg.Importe); } // Se agrega la fila de utilidad, con cada una de las sucursales int iFilaUtilidad = this.dgvDatos.Rows.Add("= Utilidad"); this.dgvDatos.Rows[iFilaUtilidad].DefaultCellStyle.Font = oFuenteT; // Sucursales var oSucursales = Datos.GetListOf <Sucursal>(c => c.Estatus).OrderBy(c => c.NombreSucursal).ToList(); foreach (var oReg in oSucursales) { this.dgvDatos.Rows.Add(oReg.NombreSucursal); } // Se llenan los datos foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } // Utilidad total this.dgvDatos[oCol.Index, iFilaUtilidad].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaMargen].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos].Value) ); // Sucursales for (int i = 1; i <= oSucursales.Count; i++) { this.dgvDatos[oCol.Index, iFilaUtilidad + i].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos + i].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaCostos + i].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos + i].Value) ); } } // Se obtienen los datos de gastos especiales DateTime dHastaMas1 = dHasta.AddDays(1); // Se obtiene los datos según el tipo de semanalización List <ContaProc.GastoSem> oGastosSemEsp; var oGastosSemEspFijo = Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1) .GroupBy(c => new { c.Duenio, Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha) }) .Select(c => new ContaProc.GastoSem() { Semana = c.Key.Semana, Grupo = c.Key.Duenio, Importe = c.Sum(s => s.ImporteDev) }); if (this.rdbSemanalizar.Checked) { oGastosSemEsp = ContaProc.GastosSemanalizados(Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1) , Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name)); } else { oGastosSemEsp = oGastosSemEspFijo.OrderBy(c => c.Grupo).ThenBy(c => c.Semana).ToList(); } // Se agrega la fila de Especiales bool bHay = (oGastosSemEspFijo.Count() > 0); int iFilaEsp = this.dgvDatos.Rows.Add("- Especiales", (bHay ? oGastosSemEspFijo.Sum(c => c.Importe) : 0) , (bHay ? oGastosSemEspFijo.Average(c => c.Importe) : 0)); this.dgvDatos.Rows[iFilaEsp].DefaultCellStyle.Font = oFuenteT; // Se llenan los gastos string sDuenio = ""; foreach (var oReg in oGastosSemEsp) { if (sDuenio != oReg.Grupo) { sDuenio = oReg.Grupo; iFila = this.dgvDatos.Rows.Add(sDuenio, oGastosSemEspFijo.Where(c => c.Grupo == sDuenio).Sum(c => c.Importe) , oGastosSemEspFijo.Where(c => c.Grupo == sDuenio).Average(c => c.Importe)); } string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaEsp].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEsp].Value) + oReg.Importe); } // Se agrega la fila de utilidad neta int iFilaDividendos = this.dgvDatos.Rows.Add("= Dividendos"); this.dgvDatos.Rows[iFilaDividendos].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaDividendos].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaMargen].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaEsp].Value) ); } // Se obtienen los datos para lo de reinversión var oReinversiones = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.FechaPoliza >= dDesde && c.FechaPoliza < dHastaMas1 && ( c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || (c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo && c.ContaCuentaAuxiliarID != Cat.ContaCuentasAuxiliares.TarjetaDeCredito) || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos || (c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo && c.ContaCuentaDeMayorID != Cat.ContaCuentasDeMayor.Edificios) )); var oDeudas = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos) .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())) .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) }); var oInversiones = oReinversiones.Where(c => c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo) .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())).Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) }); // Se agrega la fila de Reinversión decimal mDeudas = (oDeudas.Count() > 0 ? oDeudas.Sum(c => c.Importe) : 0); decimal mDeudasProm = (oDeudas.Count() > 0 ? oDeudas.Average(c => c.Importe) : 0); decimal mInversiones = (oInversiones.Count() > 0 ? oInversiones.Sum(c => c.Importe) : 0); decimal mInversionesProm = (oInversiones.Count() > 0 ? oInversiones.Average(c => c.Importe) : 0); int iFilaReinversion = this.dgvDatos.Rows.Add("- Reinversión", (mDeudas + mInversiones), ((mDeudasProm + mInversionesProm) / 2)); this.dgvDatos.Rows[iFilaReinversion].DefaultCellStyle.Font = oFuenteT; // Se llenan los datos de reinversión // Deudas iFila = this.dgvDatos.Rows.Add("Deudas", mDeudas, mDeudasProm); foreach (var oReg in oDeudas) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaReinversion].Value) + oReg.Importe); } // Inversión iFila = this.dgvDatos.Rows.Add("Inversiones", mInversiones, mInversionesProm); foreach (var oReg in oInversiones) { string sSemana = oReg.Semana.ToShortDateString(); this.dgvDatos[sSemana, iFila].Value = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe); this.dgvDatos[sSemana, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaReinversion].Value) + oReg.Importe); } // Se agrega el saldo final int iFilaSaldo = this.dgvDatos.Rows.Add("= Saldo final"); this.dgvDatos.Rows[iFilaSaldo].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaSaldo].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaDividendos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaReinversion].Value) ); } // Se llena la gráfica, en base al grid ya cargado for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++) { this.chrPorSemana.Series["Ingresos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos].Value)); this.chrPorSemana.Series["Costos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaCostos].Value)); this.chrPorSemana.Series["Margen"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaMargen].Value)); this.chrPorSemana.Series["Gastos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaGastos].Value)); this.chrPorSemana.Series["Utilidad"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaUtilidad].Value)); this.chrPorSemana.Series["Especiales"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEsp].Value)); this.chrPorSemana.Series["Dividendos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaDividendos].Value)); } Cargando.Cerrar(); }
public static ResAcc RecibirTraspaso(int iUsuarioID, string sMotivo, List <modDetalleTraspaso> oDetalle, bool bValidarContingencia) { if (oDetalle.Count <= 0) { return(new ResAcc("No hay nada que recibir.")); } // Validar que lo recibido sea menor o igual que lo enviado foreach (var oReg in oDetalle) { if (oReg.Recibido > oReg.Cantidad) { return(new ResAcc("Existen uno o más artículos que tienen una cantidad recibida mayor a lo enviado.")); } } // Se verifica si existe alguna contingencia bool bExisteContingencia = false; foreach (var oReg in oDetalle) { if (oReg.Recibido < oReg.Cantidad) { bExisteContingencia = true; break; } } if (bExisteContingencia && bValidarContingencia) { return(new ResAcc("El traspaso tiene uno o más conflictos.", Cat.CodigosRes.ConflictoEnTraspasos)); } // Se valida el motivo, en caso de que haya habido contingencia if (bExisteContingencia && string.IsNullOrEmpty(sMotivo)) { return(new ResAcc("Debes especificar un motivo.")); } // Se obtiene el MovimientoInventario correspondiente al traspaso int iRecibirUnoID = oDetalle[0].MovimientoInventarioDetalleID; var oRecibirUno = Datos.GetEntity <MovimientoInventarioDetalle>(c => c.MovimientoInventarioDetalleID == iRecibirUnoID && c.Estatus); int iMovID = oRecibirUno.MovimientoInventarioID; var oTraspasoV = Datos.GetEntity <MovimientoInventarioView>(c => c.MovimientoInventarioID == iMovID); int iSucursalID = oTraspasoV.SucursalDestinoID.Valor(); // decimal mCostoTotal = 0; foreach (var oReg in oDetalle) { // Si la cantidad recibida es menor a lo enviado, almacenar la contingencia if (oReg.Recibido < oReg.Cantidad) { var contingencia = new MovimientoInventarioTraspasoContingencia() { MovimientoInventarioID = iMovID, MovimientoInventarioDetalleID = oReg.MovimientoInventarioDetalleID, ParteID = oReg.ParteID, CantidadEnviada = oReg.Cantidad, CantidadRecibida = oReg.Recibido, CantidadDiferencia = (oReg.Cantidad - oReg.Recibido), Comentario = sMotivo, UsuarioID = iUsuarioID, MovimientoInventarioEstatusContingenciaID = Cat.TraspasoEstatusContingencias.NoSolucionado }; Datos.Guardar <MovimientoInventarioTraspasoContingencia>(contingencia); } //Aumentar la existencia actual de la sucursal destino var oParte = Datos.GetEntity <Parte>(c => c.ParteID == oReg.ParteID && c.Estatus); if (!oParte.EsServicio.Valor()) { var existencia = Datos.GetEntity <ParteExistencia>(p => p.ParteID == oReg.ParteID && p.SucursalID == iSucursalID); if (existencia != null) { var inicial = existencia.Existencia; existencia.Existencia += oReg.Recibido; existencia.UsuarioID = iUsuarioID; existencia.FechaModificacion = DateTime.Now; Datos.Guardar <ParteExistencia>(existencia); var historial = new MovimientoInventarioHistorial() { MovmientoInventarioID = iMovID, ParteID = oReg.ParteID, ExistenciaInicial = Util.Decimal(inicial), ExistenciaFinal = Util.Decimal(existencia.Existencia), SucursalID = iSucursalID, UsuarioID = iUsuarioID }; Datos.Guardar <MovimientoInventarioHistorial>(historial); } } // Se agrega al Kardex var oPartePrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus); AdmonProc.RegistrarKardex(new ParteKardex() { ParteID = oReg.ParteID, OperacionID = Cat.OperacionesKardex.EntradaTraspaso, SucursalID = iSucursalID, Folio = iMovID.ToString(), Fecha = DateTime.Now, RealizoUsuarioID = iUsuarioID, Entidad = Util.Cadena(oTraspasoV.NombreProveedor), Origen = oTraspasoV.SucursalOrigen, Destino = oTraspasoV.SucursalDestino, Cantidad = oReg.Recibido, Importe = oPartePrecio.Costo.Valor() }); // Se suma el importe de cada parte, para crear la póliza mCostoTotal += oPartePrecio.Costo.Valor(); } // Se genera la póliza especial correspondiente (AfeConta) var oUsuario = Datos.GetEntity <Usuario>(c => c.UsuarioID == iUsuarioID && c.Estatus); var oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("TRASPASO ORIGEN {0:00} DESTINO {1:00}" , oTraspasoV.SucursalOrigenID, oTraspasoV.SucursalDestinoID), Cat.ContaCuentasAuxiliares.Inventario, 0, mCostoTotal , oUsuario.NombreUsuario, Cat.Tablas.MovimientoInventario, iMovID, iSucursalID); //Actualizar el movimiento con los datos (fecha y usuario que recibio) var movimiento = Datos.GetEntity <MovimientoInventario>(m => m.MovimientoInventarioID == iMovID); if (null != movimiento) { movimiento.ExisteContingencia = bExisteContingencia; movimiento.UsuarioRecibioTraspasoID = iUsuarioID; movimiento.FechaRecepcion = DateTime.Now; movimiento.FechaModificacion = DateTime.Now; Datos.Guardar <MovimientoInventario>(movimiento); } return(new ResAcc()); }
private void Ncf_CrearNotaDeCreditoFiscal() { // Se verifica si hay ventas seleccionadas if (this.dgvNcf_Facturas.ContarIncidencias("Ncf_Aplicar", true) == 0) { UtilLocal.MensajeAdvertencia("No hay ninguna venta seleccionada."); return; } // Se obtiene el concepto var oConcepto = UtilLocal.ObtenerValor("Concepto de Nota de Crédito:", "", MensajeObtenerValor.Tipo.TextoLargo); if (oConcepto == null) { return; } // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.NotasDeCreditoFiscales.Agregar"); if (oResU.Error) { return; } int iUsuarioID = oResU.Respuesta.UsuarioID; // Se solicita la validación de autorización var oResA = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.NotasDeCreditoFiscales.Agregar", "Autorización"); int?iAutorizoID = (oResA.Respuesta == null ? null : (int?)oResA.Respuesta.UsuarioID); // Se genera el detalle de la nota de crédito, para mandar a hacer la factura decimal mTotal = 0; var oNotaDetalle = new List <ProductoVenta>(); oNotaDetalle.Add(new ProductoVenta() { NombreDeParte = Util.Cadena(oConcepto), UnidadDeMedida = "." }); // Se meten las facturas afectadas foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); decimal mImporte = Util.Decimal(oFila.Cells["Ncf_Diferencia"].Value); mTotal += mImporte; var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == iVentaID && c.Estatus); oNotaDetalle.Add(new ProductoVenta() { NumeroDeParte = iVentaID.ToString(), // Se usa para mete la VentaID NombreDeParte = string.Format("FACTURA: {0}", oVenta.Folio), // Se usa para mostrar la factura Cantidad = 1, PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mImporte), Iva = UtilTheos.ObtenerIvaDePrecio(mImporte), UnidadDeMedida = "." }); } if (mTotal == 0) { return; } Cargando.Mostrar(); // Se manda hacer la nota de crédito fiscal var oRes = VentasLoc.GenerarNotaDeCreditoFiscal(oNotaDetalle, this.Cliente.ClienteID, iUsuarioID); if (oRes.Error) { Cargando.Cerrar(); UtilLocal.MensajeAdvertencia(string.Format("Ocurrió un error al hacer la Nota de Crédito Fiscal\n\n{0}", oRes.Mensaje)); return; } // Se modifica el detalle de la Nota de Crédito Fiscal, con datos adicionales de las ventas afectadas var oNcVentas = Datos.GetListOf <NotaDeCreditoFiscalDetalle>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta); foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); int iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID); var oNcVenta = oNcVentas.FirstOrDefault(c => c.VentaID == iVentaID); if (oNcVenta == null) { continue; } oNcVenta.ListaDePreciosUsada = iListaPre; oNcVenta.ImporteAntes = oVentaV.Total; Datos.Guardar <NotaDeCreditoFiscalDetalle>(oNcVenta); } // Se descuenta el importe en cada artículo de las ventas afectadas foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); int iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value); var oPartes = Datos.GetListOf <VentaDetalle>(c => c.VentaID == iVentaID && c.Estatus); decimal mPrecio = 0; foreach (var oReg in oPartes) { var oPrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus); switch (iListaPre) { case 1: mPrecio = oPrecio.PrecioUno.Valor(); break; case 2: mPrecio = oPrecio.PrecioDos.Valor(); break; case 3: mPrecio = oPrecio.PrecioTres.Valor(); break; case 4: mPrecio = oPrecio.PrecioCuatro.Valor(); break; case 5: mPrecio = oPrecio.PrecioCinco.Valor(); break; } // Se calcula el Iva oReg.PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mPrecio); oReg.Iva = (mPrecio - oReg.PrecioUnitario); Datos.Guardar <VentaDetalle>(oReg); } } // Se crea la póliza contable correspondiente (AfeConta) // Una póliza por cada venta afectada var oNotaV = Datos.GetEntity <NotasDeCreditoFiscalesView>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta); foreach (var oReg in oNcVentas) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.NotaDeCreditoDescuentoVenta, oReg.NotaDeCreditoFiscalDetalleID , (oNotaV.Serie + oNotaV.Folio), oNotaV.Cliente); } // Se guarda la autorización VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoFiscalCrear, "NotaDeCreditoFiscal", oRes.Respuesta, iAutorizoID); Cargando.Cerrar(); this.NcfLlenarFacturas(); }
private bool AccionGuardar() { if (!this.Validar()) { return(false); } // Se borran los "devengados", si hay foreach (int iDevBorrarID in this.EgresosDevBorrados) { ContaProc.DevengadoEliminar(iDevBorrarID); } // Se borran los especials, si hay foreach (int iDevID in this.DevEspecialBorrados) { ContaProc.DevengadoEspecialEliminar(iDevID); } // Se procesan los nuevos foreach (DataGridViewRow oFila in this.dgvDetalle.Rows) { if (oFila.Cells["RegistroID"].Value != null) { continue; } // Se genera el "devengado", según corresponda if (((TipoDev)oFila.Cells["colTipoDev"].Value) == TipoDev.Sucursal) { var oEgresoDev = new ContaEgresoDevengado() { ContaEgresoID = this.oEgreso.ContaEgresoID, Fecha = Util.FechaHora(oFila.Cells["Fecha"].Value), Importe = Util.Decimal(oFila.Cells["Importe"].Value), SucursalID = Util.Entero(oFila.Cells["SelID"].Value), }; // Se obtiene el detalle, si aplica var oDetalleDev = (oFila.Tag as List <ContaEgresoDetalleDevengado>); // Se manda guardar los datos ContaProc.GastoDevengar(oEgresoDev, oDetalleDev); } else { var oDevEsp = new ContaEgresoDevengadoEspecial() { ContaEgresoID = this.oEgreso.ContaEgresoID, Fecha = Util.FechaHora(oFila.Cells["Fecha"].Value), DuenioID = Util.Entero(oFila.Cells["SelID"].Value), Importe = Util.Decimal(oFila.Cells["Importe"].Value) }; // Datos.Guardar<ContaEgresoDevengadoEspecial>(oDevEsp); // Se obtiene el detalle, si aplica var oDetalleDev = (oFila.Tag as List <ContaEgresoDetalleDevengadoEspecial>); // Se manda guardar los datos ContaProc.GastoDevengarEspecial(oDevEsp, oDetalleDev); } } // Se muestra una notificación UtilLocal.MostrarNotificacion("Proceso completado correctamente."); return(true); }
private bool AccionGuardar() { if (!this.Validar()) { return(false); } Cargando.Mostrar(); // Se obtiene la póliza ContaPoliza oPoliza; if (this.iPolizaID > 0) { oPoliza = Datos.GetEntity <ContaPoliza>(c => c.ContaPolizaID == iPolizaID); } else { oPoliza = new ContaPoliza() { SucursalID = GlobalClass.SucursalID, RealizoUsuarioID = GlobalClass.UsuarioGlobal.UsuarioID, FueManual = true } }; // Se guarda la póliza oPoliza.Fecha = this.dtpFecha.Value; oPoliza.ContaTipoPolizaID = Util.Entero(this.cmbTipoPoliza.SelectedValue); oPoliza.Concepto = this.txtConcepto.Text; oPoliza.Origen = this.txtOrigen.Text; oPoliza.Error = false; Datos.Guardar <ContaPoliza>(oPoliza); // Se procede a guardar el detalle ContaPolizaDetalle oReg = null; foreach (DataGridViewRow oFila in this.dgvDetalle.Rows) { if (oFila.IsNewRow) { continue; } int iCuentaAuxID = Util.Entero(oFila.Cells["ContaCuentaAuxiliarID"].Value); int iId = this.dgvDetalle.ObtenerId(oFila); int iCambio = this.dgvDetalle.ObtenerIdCambio(oFila); switch (iCambio) { case Cat.TiposDeAfectacion.Agregar: case Cat.TiposDeAfectacion.Modificar: if (iCambio == Cat.TiposDeAfectacion.Agregar) { oReg = new ContaPolizaDetalle() { ContaPolizaID = oPoliza.ContaPolizaID } } ; else { oReg = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaDetalleID == iId); } oReg.ContaCuentaAuxiliarID = iCuentaAuxID; oReg.Cargo = Util.Decimal(oFila.Cells["Cargo"].Value); oReg.Abono = Util.Decimal(oFila.Cells["Abono"].Value); oReg.Referencia = Util.Cadena(oFila.Cells["Referencia"].Value); oReg.SucursalID = Util.Entero(oFila.Cells["SucursalID"].Value); Datos.Guardar <ContaPolizaDetalle>(oReg); break; case Cat.TiposDeAfectacion.Borrar: oReg = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaDetalleID == iId); Datos.Eliminar <ContaPolizaDetalle>(oReg); break; } // Se verifica si se afecta una cuenta bancaria, en cuyo caso, se crea un movimiento bancario if (iCambio == Cat.TiposDeAfectacion.Agregar) { var oCuentaAux = Datos.GetEntity <ContaCuentaAuxiliar>(c => c.ContaCuentaAuxiliarID == iCuentaAuxID); if ((oCuentaAux.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Bancos || oCuentaAux.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo) && oCuentaAux.RelacionID.HasValue) { var oMovBanc = new BancoCuentaMovimiento() { BancoCuentaID = oCuentaAux.RelacionID.Valor(), EsIngreso = (oReg.Cargo > 0), Fecha = oPoliza.Fecha, FechaAsignado = oPoliza.Fecha, SucursalID = oPoliza.SucursalID, Importe = (oReg.Cargo > 0 ? oReg.Cargo : oReg.Abono), Concepto = oPoliza.Concepto, Referencia = oReg.Referencia, TipoFormaPagoID = Cat.FormasDePago.Efectivo, RelacionID = oReg.ContaPolizaDetalleID }; ContaProc.RegistrarMovimientoBancario(oMovBanc); } } } Cargando.Cerrar(); return(true); }
protected override void btnGuardar_Click(object sender, EventArgs e) { if (!Validaciones()) { return; } try { var lista = new List <int>(); foreach (object itemChecked in clbPerfiles.CheckedItems) { Perfil castedItem = itemChecked as Perfil; lista.Add(castedItem.PerfilID); } if (EsNuevo) { var usr = new Usuario() { NombrePersona = txtNombrePersona.Text, NombreUsuario = txtNombreUsuario.Text, Contrasenia = UtilLocal.Encriptar(txtContrasenia.Text), FechaRegistro = DateTime.Now, Activo = cboEstatus.SelectedValue.Equals(1), TipoUsuarioID = (int?)this.cmbTipoDeUsuario.SelectedValue, Estatus = true, Actualizar = true, AlertaCalendarioClientes = this.clbAlertas.GetItemChecked(0), AlertaPedidos = this.clbAlertas.GetItemChecked(1), Alerta9500 = this.clbAlertas.GetItemChecked(2), AlertaTraspasos = this.clbAlertas.GetItemChecked(3), AlertaDevFacturaCreditoAnt = this.clbAlertas.GetItemChecked(4) }; Datos.SaveOrUpdate <Usuario>(usr); UpdateUsuarioPerfiles(usr.UsuarioID, lista); // Se crean las cuentas auxiliares indispensables ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Salarios, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.TiempoExtra, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.PremioDeAsistencia, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.PremioDePuntualidad, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Vacaciones, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.PrimaVacacional, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Aguinaldo, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Ptu, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Imss, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Ispt, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Infonavit, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.RetencionImss, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.SubsidioAlEmpleo, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.RetencionInfonavit, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.DeudoresDiversos, usr.UsuarioID); ContaProc.CrearCuentaAuxiliar(usr.NombrePersona, Cat.ContaCuentasDeMayor.Nomina2Por, usr.UsuarioID); } else { Usuario.NombrePersona = txtNombrePersona.Text; Usuario.NombreUsuario = txtNombreUsuario.Text; Usuario.Contrasenia = UtilLocal.Encriptar(txtContrasenia.Text); Usuario.FechaModificacion = DateTime.Now; Usuario.Activo = cboEstatus.SelectedValue.Equals(1); Usuario.TipoUsuarioID = (int?)this.cmbTipoDeUsuario.SelectedValue; //alertas Usuario.AlertaCalendarioClientes = this.clbAlertas.GetItemChecked(0); Usuario.AlertaPedidos = this.clbAlertas.GetItemChecked(1); Usuario.Alerta9500 = this.clbAlertas.GetItemChecked(2); Usuario.AlertaTraspasos = this.clbAlertas.GetItemChecked(3); Usuario.AlertaDevFacturaCreditoAnt = this.clbAlertas.GetItemChecked(4); Datos.SaveOrUpdate <Usuario>(Usuario); UpdateUsuarioPerfiles(Usuario.UsuarioID, lista); } new Notificacion("Usuario Guardado exitosamente", 2 * 1000).Mostrar(Principal.Instance); usuarios.Instance.CustomInvoke <usuarios>(m => m.ActualizarListado()); } catch (Exception ex) { Util.MensajeError(ex.Message, GlobalClass.NombreApp); } this.Close(); }
public static ResAcc VentaPago(VentaPago oPago, List <VentaPagoDetalle> Detalle) { // Se generan datos predeterminados o globales, en caso de que apliquen oPago.Fecha = (oPago.Fecha != DateTime.MinValue ? oPago.Fecha : DateTime.Now); oPago.SucursalID = (oPago.SucursalID > 0 ? oPago.SucursalID : Theos.SucursalID); // Se guarda el pago Datos.Guardar <VentaPago>(oPago); // Se guarda el detalle var oVentaV = Datos.GetEntity <VentasView>(q => q.VentaID == oPago.VentaID); foreach (var PartePago in Detalle) { PartePago.VentaPagoID = oPago.VentaPagoID; Datos.Guardar <VentaPagoDetalle>(PartePago); // Se afectan las notas de crédito, si hay alguna if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Vale && PartePago.Importe > 0) { int iNotaID = PartePago.NotaDeCreditoID.Valor(); var oNota = Datos.GetEntity <NotaDeCredito>(q => q.NotaDeCreditoID == iNotaID && q.Estatus); if (oNota != null) { // Se verifica si se usó el importe total o sólo una parte if (PartePago.Importe < oNota.Importe) { // Se crea una nueva nota, con el importe restante // 25/11/2015 - Se busca el vale original para usarlo como origen de todas las notas derivadas, en vez de el OrigenVentaID que se mandaba antes int iOrigenValeID = (oNota.OrigenID == Cat.OrigenesNotaDeCredito.ImporteRestante ? oNota.RelacionID.Valor() : oNota.NotaDeCreditoID); VentasProc.GenerarNotaDeCredito(oNota.ClienteID, (oNota.Importe - PartePago.Importe), "", Cat.OrigenesNotaDeCredito.ImporteRestante , iOrigenValeID); // oNota.Importe = PartePago.Importe; } // oNota.Valida = false; oNota.FechaDeUso = DateTime.Now; oNota.UsoVentaID = oPago.VentaID; Datos.Guardar <NotaDeCredito>(oNota); } } // Si es un pago bancario, se genera el movimiento correspondiente if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito || PartePago.TipoFormaPagoID == Cat.FormasDePago.Transferencia || PartePago.TipoFormaPagoID == Cat.FormasDePago.Cheque) { var oBanco = Datos.GetEntity <Banco>(c => c.BancoID == PartePago.BancoID && c.Estatus); var oMovBanc = new BancoCuentaMovimiento() { // BancoCuentaID = (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta ? (int?)Cat.CuentasBancarias.Banamex : null), EsIngreso = true, Fecha = oPago.Fecha, FechaAsignado = ((PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito) ? (DateTime?)oPago.Fecha : null), SucursalID = oPago.SucursalID, Importe = PartePago.Importe, Concepto = oVentaV.Cliente, Referencia = oVentaV.Folio, TipoFormaPagoID = PartePago.TipoFormaPagoID, DatosDePago = string.Format("{0}-{1}-{2}", oBanco.NombreBanco, PartePago.Folio, PartePago.Cuenta), RelacionTabla = Cat.Tablas.VentaPagoDetalle, RelacionID = PartePago.VentaPagoDetalleID, }; ContaProc.RegistrarMovimientoBancario(oMovBanc); } } // Se verifica el estatus de la venta, por si debe cambiar según el pago if (oVentaV.VentaEstatusID == Cat.VentasEstatus.Cobrada) { // Se obtiene el total de los pagos decimal mPagado = Datos.GetListOf <VentasPagosView>(q => q.VentaID == oVentaV.VentaID).Sum(q => q.Importe); if (mPagado >= oVentaV.Total) { var oVenta = Datos.GetEntity <Venta>(q => q.Estatus && q.VentaID == oPago.VentaID); oVenta.VentaEstatusID = Cat.VentasEstatus.Completada; // Se guarda con el nuevo estatus Datos.Guardar <Venta>(oVenta); } } return(new ResAcc(true)); }