private void UsarNotaDeCredito(DataGridViewRow oFactura) { // Se obtienen las notas de créditos ya aplicadas aquí, con sus importes correspondientes var oNotasUsadas = new Dictionary<int, decimal>(); foreach (DataGridViewRow oFila in this.dgvAbonos.Rows) { if (Util.Cadena(oFila.Cells["abo_Origen"].Value) == "Nota de Crédito") { int iNotaID = Util.Entero(oFila.Cells["abo_NotaDeCreditoID"].Value); if (!oNotasUsadas.ContainsKey(iNotaID)) oNotasUsadas.Add(iNotaID, 0); oNotasUsadas[iNotaID] += Util.Decimal(oFila.Cells["abo_Importe"].Value); } } // Se obtienen las notas de crédito disponibles y se restan los importes ya usados var oNotas = Datos.GetListOf<ProveedoresNotasDeCreditoView>(c => c.ProveedorID == this.Proveedor.ProveedorID && c.Disponible); // Se modifica el subtotal de la nota, para ser usada como el total restante foreach (var oReg in oNotas) { // oReg.Subtotal = (oReg.Subtotal + oReg.Iva); if (oNotasUsadas.ContainsKey(oReg.ProveedorNotaDeCreditoID)) oReg.Restante -= oNotasUsadas[oReg.ProveedorNotaDeCreditoID]; } // Se muestra el formulario con las notas disponibles var frmNotas = new EdicionListadoTheos(oNotas) { Text = "Nota de crédito" }; frmNotas.MostrarColumnas("Folio", "Facturas", "Total", "Restante"); frmNotas.HabilitarColumnas(); // frmNotas.dgvListado.Columns["Subtotal"].HeaderText = "Restante"; frmNotas.AgregarColumnaEdicion("ImporteAUsar", "Usar"); frmNotas.AgregarColumnaSeleccion("Sel"); frmNotas.dgvListado.SelectionMode = DataGridViewSelectionMode.CellSelect; // Se agrega la validación para cuando se le de aceptar decimal mImporteFaltante = Util.Decimal(oFactura.Cells["fac_Final"].Value); frmNotas.Aceptado += new EventHandler<FormClosingEventArgs>((s, e) => { DataGridView oGrid = (s as EdicionListado).dgvListado; decimal mTotalNotas = 0; foreach (DataGridViewRow oFila in oGrid.Rows) { if (!Util.Logico(oFila.Cells["Sel"].Value)) continue; decimal mAUsar = Util.Decimal(oFila.Cells["ImporteAUsar"].Value); if (mAUsar > Util.Decimal(oFila.Cells["Restante"].Value)) { oFila.Cells["ImporteAUsar"].ErrorText = "El importe a usar no puede ser mayor que el importe restante."; e.Cancel = true; } mTotalNotas += mAUsar; } if (mTotalNotas > mImporteFaltante) { UtilLocal.MensajeAdvertencia("El importe total indicado es mayor al restante de de la factura seleccionada."); e.Cancel = true; } }); if (frmNotas.ShowDialog(Principal.Instance) == DialogResult.OK) { var oDatos = frmNotas.ObtenerResultado(); foreach (DataRow oFila in oDatos.Rows) { if (Util.Logico(oFila["Sel"]) && Util.Decimal(oFila["ImporteAUsar"]) > 0) { this.dgvAbonos.Rows.Add(true, null, oFactura.Cells["fac_MovimientoInventarioID"].Value, Cat.OrigenesPagosAProveedores.NotaDeCredito , null, oFila["ProveedorNotaDeCreditoID"], oFactura.Cells["fac_Factura"].Value, "Nota de Crédito", null, null, oFila["ImporteAUsar"] , oFila["Folio"], null); } } } frmNotas.Dispose(); this.CalcularDescuentos(); }
private void AgregarPagoDeCaja(DataGridViewRow oFactura) { // Se obtiene la cuenta auxiliar correspondiente al proveedor var oCuentaAux = Datos.GetEntity<ContaCuentaAuxiliar>(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.Proveedores && c.RelacionID == this.Proveedor.ProveedorID); if (oCuentaAux == null) { UtilLocal.MensajeAdvertencia("El proveedor actual no tiene una cuenta contable asignada. No se puede enlazar con los gastos de caja."); return; } // Se obtienen los pagos de caja ya aplicados aquí, con sus importes correspondientes var oUsados = new Dictionary<int, decimal>(); foreach (DataGridViewRow oFila in this.dgvAbonos.Rows) { if (Util.Cadena(oFila.Cells["abo_Origen"].Value) == "Pago de Caja") { int iEgresoID = Util.Entero(oFila.Cells["abo_CajaEgresoID"].Value); if (!oUsados.ContainsKey(iEgresoID)) oUsados.Add(iEgresoID, 0); oUsados[iEgresoID] += Util.Decimal(oFila.Cells["abo_Importe"].Value); } } // Se obtienen las notas de crédito disponibles y se restan los importes ya usados var oPagosCaja = Datos.GetListOf<CajaEgresosProveedoresView>(c => c.ContaCuentaAuxiliarID == oCuentaAux.ContaCuentaAuxiliarID && c.Facturado.HasValue && (!c.AfectadoEnProveedores.HasValue || !c.AfectadoEnProveedores.Value)); // Se modifica el subtotal de la nota, para ser usada como el total restante foreach (var oReg in oPagosCaja) { // oReg.Subtotal = (oReg.Subtotal + oReg.Iva); if (oUsados.ContainsKey(oReg.CajaEgresoID)) oReg.Restante -= oUsados[oReg.CajaEgresoID]; } // Se muestra el formulario con las notas disponibles var frmLista = new EdicionListadoTheos(oPagosCaja) { Text = "Agregar pago de caja" }; frmLista.MostrarColumnas("Fecha", "Concepto", "Total", "Restante"); frmLista.HabilitarColumnas(); frmLista.AgregarColumnaEdicion("ImporteAUsar", "Usar"); frmLista.AgregarColumnaSeleccion("Sel"); frmLista.dgvListado.SelectionMode = DataGridViewSelectionMode.CellSelect; // Se agrega la validación para cuando se le de aceptar decimal mImporteFaltante = Util.Decimal(oFactura.Cells["fac_Final"].Value); frmLista.Aceptado += new EventHandler<FormClosingEventArgs>((s, e) => { DataGridView oGrid = (s as EdicionListado).dgvListado; decimal mTotal = 0; foreach (DataGridViewRow oFila in oGrid.Rows) { if (!Util.Logico(oFila.Cells["Sel"].Value)) continue; decimal mAUsar = Util.Decimal(oFila.Cells["ImporteAUsar"].Value); if (mAUsar > Util.Decimal(oFila.Cells["Restante"].Value)) { oFila.Cells["ImporteAUsar"].ErrorText = "El importe a usar no puede ser mayor que el importe restante."; e.Cancel = true; } mTotal += mAUsar; } if (mTotal > mImporteFaltante) { UtilLocal.MensajeAdvertencia("El importe total indicado es mayor al restante de de la factura seleccionada."); e.Cancel = true; } }); // Se muestra el formulario if (frmLista.ShowDialog(Principal.Instance) == DialogResult.OK) { var oDatos = frmLista.ObtenerResultado(); foreach (DataRow oFila in oDatos.Rows) { if (Util.Logico(oFila["Sel"]) && Util.Decimal(oFila["ImporteAUsar"]) > 0) { this.dgvAbonos.Rows.Add(true, null, oFactura.Cells["fac_MovimientoInventarioID"].Value, Cat.OrigenesPagosAProveedores.PagoDeCaja , oFila["CajaEgresoID"], null, oFactura.Cells["fac_Factura"].Value, "Pago de Caja", null, null, Util.Decimal(oFila["ImporteAUsar"]) , null, oFila["Concepto"]); } } } frmLista.Dispose(); this.CalcularDescuentos(); }