frmAsientosIvaExento.cs
1 # region Usings
2 using System;
3 using System.Collections.Generic;
4 using System.ComponentModel;
5 using System.Data;
6 using System.Drawing;
7 using System.Linq;
8 using System.Text;
9 using System.Windows.Forms;
10 using sage.ew.formul.Forms;
11 using sage.ew.global;
12 using sage.ew.ewbase;
14 using sage.ew.functions;
15 #endregion Usings
16 
17 namespace sage.ew.contabilidad
18 {
23  {
24  #region Propiedades privadas
25  protected string _cIva = "IVA";
29 
33  protected string _cTipoIva = string.Empty;
34  private string _cCuentaOld = string.Empty;
35 
36  #endregion Propiedades privadas
37 
38  # region Constructor
39  public frmAsientosIvaExento()
43  {
44  InitializeComponent();
45 
46  if (!this.DesignMode)
47  this.ConfigurarFormulario();
48  }
49  # endregion Constructor
50 
51  # region Métodos privados
52  private void ConfigurarFormulario()
56  {
57  _cIva = Convert.ToString(EW_GLOBAL._GetVariable("wc_iva"));
58 
59  _eTipoAsiento = eTipoAsiento.AsientoFacturaVenta;
60 
61  this.Text = "Importe no sujeto a " + _cIva;
62  this.ewlblTipo_Iva.Text = "Tipo de " + _cIva;
63 
64  if (!Convert.ToBoolean(EW_GLOBAL._GetVariable("Wl_SerFact")) || !Convert.ToBoolean(EW_GLOBAL._GetVariable("Wl_FactSer"))) // TODO: el control de factura tiene un descuadre de un pixel. de momento lo apañamos en la pantalla. es un control un poco puñetero
65  this.txtNumfactVentaAsiento.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0);
66 
67  this._ConfigurarNumericUpdown(ewnumericupdownImporte);
68 
69  this.txtNumFacCompraAsiento._ValidarFacturaExistente = false; // Al modificar el número de factura no validamos si existe
70  this.txtNumfactVentaAsiento._ValidarFacturaExistente = false; // Al modificar el número de factura no validamos si existe
72 
73  gridDesgloseIva._EntradaIva = true;
74  gridDesgloseIva.BorderStyle = BorderStyle.None;
75  gridDesgloseIva._Grid.BorderStyle = BorderStyle.None;
76  }
77 
81  private void BindingFactura()
82  {
83  // Eliminamos los bindings
84  if (this.txtNumfactVentaAsiento.DataBindings.Count > 0) this.txtNumfactVentaAsiento.DataBindings.RemoveAt(0);
85  if (this.txtNumFacCompraAsiento.DataBindings.Count > 0) this.txtNumFacCompraAsiento.DataBindings.RemoveAt(0);
86 
87  if (_oAsientoLineaBind._DatosIvaExento._Tipo == 1) // Compras
88  this.txtNumFacCompraAsiento.DataBindings.Add("_Factura", _oAsientoLineaBind, "_Factura", true);
89  else
90  this.txtNumfactVentaAsiento.DataBindings.Add("_Factura", _oAsientoLineaBind, "_Factura", true);
91 
92  if (EsCompras()) //quan es compres
93  {
94  if (string.IsNullOrWhiteSpace(ewdateFechaRegistroContable.CustomFormat))
95  ewdateFechaRegistroContable.CustomFormat = "dd/MM/yy";
96  if (ewdateFechaRegistroContable.DataBindings.Count > 0) ewdateFechaRegistroContable.DataBindings.RemoveAt(0);
97  ewdateFechaRegistroContable.DataBindings.Add("Text", _oAsientoLineaBind._DatosIvaExento, "_FechaRegistro", true);
98  }
99  else
100  ewdateFechaRegistroContable.CustomFormat = " ";
101  }
102 
106  private void SubscripcionEventos()
107  {
108  if (this._ReadOnly)
109  return;
110 
111  txtCuenta._Codigo_Cambiado += TxtCuenta__Codigo_Cambiado;
112  txtTipoExento._Codigo_Cambiado += new txtbox.UserControls.ewtxtcodlabel.Delegar_Codigo_Cambiado(txtTipoExento__Codigo_Cambiado);
113  txtTipoIva._Codigo_Cambiado += new txtbox.UserControls.ewtxtcodlabel.Delegar_Codigo_Cambiado(txtTipoIva__Codigo_Cambiado); // Al cambiar el código de IVA debe de recalcular la base si tenemos IVA
114  txtTipoIva._Codigo_Cambiado_Before += new txtbox.UserControls.ewtxtcodlabel.Delegar_Codigo_Cambiado_Before(txtTipoIva__Codigo_Cambiado_Before); // Controlaremos que no se pueda asignar un Tipo ed IVA exento
115 
116  txtNumfactVentaAsiento.txtFacturaDocNum.Leave += new EventHandler(txtNumfactVentaAsiento_Leave); // Control de retroceder el contador de factura
117  txtNumfactVentaAsiento.txtFacturaDocNum.TextChanged += txtNumfactVentaAsiento_TextChanged;
118  txtNumfactVentaAsiento._SumaNumeroBefore += txtNumfactVentaAsiento__SumaNumeroBefore;
119 
120  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_factucom")))
121  txtNumFacCompraAsiento.txtFacturaCompra.Leave += new EventHandler(txtNumFacCompraAsiento_Leave); // Control de retroceder el contador de factura de compra
122 
123  txtNumFacCompraAsiento.txtFacturaCompra.TextChanged += txtNumFacCompraAsiento_TextChanged;
124  txtNumFacCompraAsiento._SumaNumeroBefore += txtNumFacCompraAsiento__SumaNumeroBefore;
125 
126  if (_oAsiento._PropuestaAutomatica)
127  gridDesgloseIva._Grid.CellValueChanged += _Grid_CellValueChanged;
128  }
129 
130 
136  private void _Grid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
137  {
138 
139  DataGridViewCell loCell = gridDesgloseIva._Grid.CurrentCell;
140 
141  if (loCell == null)
142  return;
143 
144  DialogResult loResult = DialogResult.Yes;
145  string lcColumna = loCell.OwningColumn.Name;
146  switch (lcColumna)
147  {
148  case "_Iva":
149  if (((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._Importe != 0)
150  loResult = _MessageBox("¿Desea calcular la base del " + _cIva + "?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No);
151 
152  if (loResult == DialogResult.Yes)
153  {
154  ((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._nImporte = 0;
155  ((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._RecalcularIva(((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._TipoIva);
156  gridDesgloseIva.Refresh();
157  }
158  break;
159 
160  case "_Recargo":
161  if (((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._PorcenRec != 0)
162  {
163  if (((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._Importe != 0)
164  loResult = _MessageBox("¿Desea calcular la base del " + _cIva + "?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No);
165 
166  if (loResult == DialogResult.Yes)
167  {
168  int lnDecimales = Convert.ToInt32(EW_GLOBAL._GetVariable("wn_decimales"));
169  ((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._Importe = FUNCTIONS._Round((((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._Recargo * 100) / ((AsientosDatosIvaExento)_oAsientoLineaBind._DatosIvaExento)._PorcenRec, lnDecimales);
170  gridDesgloseIva.Refresh();
171  }
172  }
173 
174  break;
175 
176  default:
177  break;
178  }
179  }
180 
186  private void txtNumFacCompraAsiento__SumaNumeroBefore(object sender, KeyPressEventArgs e)
187  {
188  if (!string.IsNullOrWhiteSpace(_cFactura) && (txtNumFacCompraAsiento._Factura != _cFactura))
189  {
190  CONTABILIDAD._Resta_Numero_Factura_Compra(_oAsientoLineaBind._Empresa, _cFactura);
191  _cFactura = string.Empty;
192  }
193  }
194 
195 
201  private void txtNumFacCompraAsiento_TextChanged(object sender, EventArgs e)
202  {
203  if (_oAsientoLinea._Factura != txtNumFacCompraAsiento._Factura && !ModificarNumeroFactura())
204  {
205  txtNumFacCompraAsiento._Factura = _oAsientoLinea._Factura;
206  return;
207  }
208  }
209 
210  private bool ModificarNumeroFactura()
211  {
212  if (_oAsientoLinea._EsIvaExento && !((Asientos)_oAsiento)._ConsultarPrevisionesAlbaranes(_oAsientoLinea._Factura, _oAsientoLinea._DatosIvaExento._Cuenta,tlAsiento:false))// Validación de si existe la previsión o documento en gestión
213  {
214  string lcMensaje = _oAsiento._Mensaje_Error + Environment.NewLine + "Si deseas modificar el número de factura debes borrar primero las previsiones relacionadas.";
215  _MessageBox(lcMensaje, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
216  _oAsiento._Mensaje_Error = string.Empty; // Vaciamos el mensaje de error
217 
218  return false;
219  }
220 
221  if (_oAsiento._EsTransitarioDUA) // si es transitario dua no hi pot haver dos factures
222  {
223  _MessageBox("No es posible modificar el número de factura. Este se ha generado a partir del documento Transitario - DUA", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
224  _oAsiento._Mensaje_Error = string.Empty; // Vaciamos el mensaje de error
225 
226  return false;
227  }
228  return true;
229  }
230 
236  private void txtNumFacCompraAsiento_Leave(object sender, EventArgs e)
237  {
238  if (!string.IsNullOrWhiteSpace(_cFactura) && (txtNumFacCompraAsiento._Factura != _cFactura))
239  {
240  CONTABILIDAD._Resta_Numero_Factura_Compra(_oAsientoLineaBind._Empresa, _cFactura);
241  _cFactura = string.Empty;
242  }
243 
244  if (txtNumFacCompraAsiento._ContadorAutomatico && !string.IsNullOrWhiteSpace(txtNumFacCompraAsiento._Factura))
245  {
246  _cFactura = txtNumFacCompraAsiento._Factura;
247  }
248 
249  if (string.IsNullOrWhiteSpace(txtNumFacCompraAsiento._Factura) && txtNumFacCompraAsiento._ContadorAutomatico)
250  txtNumFacCompraAsiento._ContadorAutomatico = false;
251  }
252 
253 
259  private void txtNumfactVentaAsiento__SumaNumeroBefore(object sender, KeyPressEventArgs e)
260  {
261  if (!string.IsNullOrWhiteSpace(_cFactura) && (txtNumfactVentaAsiento._Factura != _cFactura))
262  {
263  CONTABILIDAD._Resta_Numero_Factura_Venta(_oAsientoLineaBind._Empresa, _cFactura);
264  _cFactura = string.Empty;
265  }
266  }
267 
268 
274  private void txtNumfactVentaAsiento_TextChanged(object sender, EventArgs e)
275  {
276  if (_oAsientoLinea._Factura != txtNumfactVentaAsiento._Factura && !ModificarNumeroFactura())
277  {
278  txtNumfactVentaAsiento._Factura = _oAsientoLinea._Factura;
279  return;
280  }
281  }
282 
288  private void txtNumfactVentaAsiento_Leave(object sender, EventArgs e)
289  {
290  if (!string.IsNullOrWhiteSpace(_cFactura) && (txtNumfactVentaAsiento._Factura != _cFactura))
291  {
292  CONTABILIDAD._Resta_Numero_Factura_Venta(_oAsientoLineaBind._Empresa, _cFactura);
293  _cFactura = string.Empty;
294  }
295 
296  if (txtNumfactVentaAsiento._ContadorAutomatico && !string.IsNullOrWhiteSpace(txtNumfactVentaAsiento._Factura) && !string.IsNullOrWhiteSpace(txtNumfactVentaAsiento._Numero))
297  _cFactura = txtNumfactVentaAsiento._Factura;
298 
299  if (string.IsNullOrWhiteSpace(txtNumfactVentaAsiento._Factura) && txtNumfactVentaAsiento._ContadorAutomatico)
300  txtNumfactVentaAsiento._ContadorAutomatico = false;
301  }
302 
308  private bool TipoIVAExento(string tcTipoIva)
309  {
310  bool llOk = true;
311 
312  // Antes de hacer nada vamos a ver si el Tipo de IVA tiene la marca de exento
313  if (!string.IsNullOrWhiteSpace(tcTipoIva) && (!CONTABILIDAD._TipoIvaExento(tcTipoIva)))
314  {
315  DialogResult loResult = this._MessageBox("Únicamente puede asignar un tipo de " + _cIva + " no sujeto.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
316 
317  llOk = false;
318  }
319 
320  return llOk;
321  }
322 
328  private bool TipoIVAMayorQueZero(string tcTipoIva)
329  {
330  bool llOk = false;
331 
332  DataTable ldtTipos = CONTABILIDAD._TiposIVA();
333  if (ldtTipos != null && ldtTipos.Rows.Count > 0)
334  {
335  DataRow ldrow = ldtTipos.AsEnumerable().Where(i => Convert.ToString(i["codigo"]).Trim() == tcTipoIva).FirstOrDefault();
336  if (ldrow != null)
337  {
338  decimal lnTpc = Convert.ToDecimal(ldrow["iva"]);
339  llOk = lnTpc > 0;
340  }
341  }
342  FUNCTIONS._DisposeDatatable(ldtTipos);
343 
344  return llOk;
345  }
346 
350  private void TxtCuenta__Codigo_Cambiado()
351  {
352  BindingIva(this.txtCuenta._Codigo);
353  this.ModificarIVARecargo();
354  }
355 
360  private void txtTipoIva__Codigo_Cambiado_Before(ref bool tlOk)
361  {
362  string lcTipoIva = txtTipoIva._GetTextBox().Text;
363 
364  // Antes de hacer nada vamos a ver si el Tipo de IVA tiene la marca de no sujeto
365  if (!TipoIVAExento(lcTipoIva))
366  tlOk = false;
367  else
368  {
369  // Comprobar que el IVA No sujeto sea del 0% en compras
370  if (this.EsCompras() && TipoIVAMayorQueZero(lcTipoIva))
371  {
372  string lcMsg = "El código de " + _cIva + " introducido no es posible utilizarlo en asientos de facturas de compra, "+
373  "ya que se trata de un "+_cIva+" no sujeto con porcentaje mayor que cero.";
374 
375  this._MessageBox(lcMsg, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
376  tlOk = false;
377  }
378  }
379  }
380 
381 
385  private void txtTipoIva__Codigo_Cambiado()
386  {
387  string lcTipo_Iva = this.txtTipoIva._Codigo;
388 
389  //Validamos si ha cambiado el tipo de IVA o es cosa del txtcodlabel
390  if (lcTipo_Iva != null && this._oAsientoLineaBind._DatosIvaExento != null && this._oAsientoLineaBind._DatosIvaExento._TipoIva != lcTipo_Iva)
391  {
392  this.CalcularIva();
393  this.ModificarIVARecargo();
394  }
395  }
396 
400  private void CalcularIva()
401  {
402  // Asignamos el Tipo de IVA para que actualice los % . TODO: mirar si podemos controlarlo en otro método que no sea el código cambiado del txtcodlabel
403  this._oAsientoLineaBind._DatosIvaExento._TipoIva = this.txtTipoIva._Codigo;
404 
405  ((AsientosDatosIvaExento)(this._oAsientoLineaBind._DatosIvaExento))._RecalcularIva(this.txtTipoIva._Codigo);
406 
407  this.gridDesgloseIva.Refresh();
408  }
409 
413  private void ModificarIVARecargo()
414  {
415  this.gridDesgloseIva._ModificarRecargo = (this._oAsientoLineaBind._DatosIvaExento._PorcenRec > 0 && !this._ReadOnly);
416  this.gridDesgloseIva._ModificarIVA = (this._oAsientoLineaBind._DatosIvaExento._PorcenIVA > 0 && !this._ReadOnly);
417  }
418 
422  private void txtTipoExento__Codigo_Cambiado()
423  {
424  eTipoAsiento loeTipoAsiento = ((Asientos)this._oAsiento)._eTipoAsiento;
425 
426  this.txtTipoExento._Codigo_Cambiado -= new txtbox.UserControls.ewtxtcodlabel.Delegar_Codigo_Cambiado(txtTipoExento__Codigo_Cambiado);
427 
428  switch (loeTipoAsiento)
429  {
430  case eTipoAsiento.AsientoFacturaCompra:
431  if (!this.EsCompras())
432  {
433  this._MessageBox("No se puede cambiar el tipo de un asiento de factura de compras.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
434  this.txtTipoExento._Codigo = "1";
435  }
436  break;
437 
438  case eTipoAsiento.AsientoFacturaVenta:
439 
440  if (this.EsCompras())
441  {
442  this._MessageBox("No se puede cambiar el tipo de un asiento de factura de ventas.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
443  this.txtTipoExento._Codigo = "2";
444  }
445  break;
446  }
447 
448  if (this.txtTipoExento._Codigo == "2" && !string.IsNullOrWhiteSpace(this.txtNumFacCompraAsiento._Factura)) // Si tenemos número ha de retroceder el contador
449  {
450  this._RestarContadorFactura(eTipoAsiento.AsientoFacturaCompra, false);
451  this.txtNumFacCompraAsiento._Factura = string.Empty;
452  }
453 
454  if (this.txtTipoExento._Codigo == "1" && !string.IsNullOrWhiteSpace(this.txtNumfactVentaAsiento._Numero)) // Si tenemos número ha de retroceder el contador
455  {
456  this._RestarContadorFactura(eTipoAsiento.AsientoFacturaVenta, false);
457  this.txtNumfactVentaAsiento._Factura = string.Empty;
458  }
459 
460  this.txtTipoExento._Codigo_Cambiado += new txtbox.UserControls.ewtxtcodlabel.Delegar_Codigo_Cambiado(txtTipoExento__Codigo_Cambiado);
461 
462  this.TipoDocumento();
463  }
464 
468  private void TipoDocumento(bool tlInicial=false)
469  {
470  bool llCompras = EsCompras();
471 
472  txtNumfactVentaAsiento.Visible = !llCompras;
473  txtNumFacCompraAsiento.Visible = llCompras;
474  ewpanelFraExpedicion.Visible = !llCompras;
475  ewtabcontrolDetalle.Visible = !llCompras;
476  ewpanelImporte.Visible = llCompras;
477 
478  ewdateFechaRegistroContable.Enabled = !_ReadOnly && llCompras;
479 
480  BindingFactura(); // Refrescamos los bindings del campo factura
481 
482  _eTipoAsiento = (llCompras ? eTipoAsiento.AsientoFacturaCompra : eTipoAsiento.AsientoFacturaVenta);
483 
484  if (tlInicial && ewpanelFraExpedicion.Visible && !ewpanelImporte.Visible)
485  {
486  ewpanelFraExpedicion.Location = ewpanelImporte.Location;
487  ewtabcontrolDetalle.Top -= ewpanelFraExpedicion.Height;
488  }
489 
490  if (tlInicial && llCompras)
491  this.Height -= 100;
492  }
493 
498  private bool ExisteFacturaAsiento()
499  {
500  if (this.txtNumFacCompraAsiento.Visible)
501  {
502  int nLongFactCompra = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_factcompra));
503  string lcFactura = _oAsientoLineaBind._Factura.Trim().PadLeft(nLongFactCompra);
504 
505  if (((Asientos)_oAsientoBind)._ExisteFacturaAsiento(eTipoCuenta.IVASoportado, lcFactura, txtCuenta._Codigo)) // Validamos si existe la factura en otro asiento
506  {
507  this._MessageBox(this._oAsientoBind._Mensaje_Error, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
508  this._oAsientoBind._Mensaje_Error = string.Empty; // Vaciamos el mensaje de error
509 
510  this.txtNumFacCompraAsiento.Focus();
511 
512  return true;
513  }
514  }
515  else
516  {
517  if (((Asientos)_oAsientoBind)._ExisteFacturaAsiento(eTipoCuenta.IVARepercutido, _oAsientoLineaBind._Factura, txtCuenta._Codigo)) // Validamos si existe la factura en otro asiento
518  {
519  this._MessageBox(this._oAsientoBind._Mensaje_Error, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
520  this._oAsientoBind._Mensaje_Error = string.Empty; // Vaciamos el mensaje de error
521 
522  this.txtNumfactVentaAsiento.Focus();
523 
524  return true;
525  }
526  }
527 
528  return false;
529  }
530 
535  private bool EsCompras()
536  {
537  return (this.txtTipoExento._Codigo == "1");
538  }
539 
543  private bool ValidarFactura()
544  {
545  string lcFactura;
546 
547  if (this.EsCompras())
548  lcFactura = txtNumFacCompraAsiento._Factura;
549  else
550  lcFactura = txtNumfactVentaAsiento._Numero;
551 
552  if (string.IsNullOrWhiteSpace(lcFactura))
553  {
554  this._MessageBox("Es necesario indicar la factura.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
555 
556  PasarFocoFactura();
557 
558  return false;
559  }
560 
561  if (!this.EsCompras()) // Ahora me interesa el número de factura con la serie
562  lcFactura = txtNumfactVentaAsiento._Factura;
563 
564  if (!string.IsNullOrWhiteSpace(_oAsientoLineaBind._Factura) && ((_oAsientoLinea._Factura.Trim() != lcFactura.Trim()) && ((Asientos)_oAsiento)._EsUltimoRegistroIva(_oAsientoLinea._Linea, _oAsientoLinea._Factura) && !((Asientos)_oAsiento)._ConsultarPrevisionesAlbaranes(_oAsientoLineaBind._Factura, _oAsientoLineaBind._DatosIvaExento._Cuenta)))// Validación de si existe la previsión o documento en gestión
565  {
566  this._MessageBox(this._oAsiento._Mensaje_Error, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
567  this._oAsiento._Mensaje_Error = string.Empty; // Vaciamos el mensaje de error
568 
569  PasarFocoFactura();
570 
571  return false;
572  }
573 
574  return true;
575  }
576 
580  private void PasarFocoFactura()
581  {
582  if (this.txtNumfactVentaAsiento.Visible)
583  this.txtNumfactVentaAsiento.Focus();
584  else if (this.txtNumFacCompraAsiento.Visible)
585  this.txtNumFacCompraAsiento.Focus();
586  }
587 
592  private void BindingIva(string tcCuenta = "")
593  {
594  if (!string.IsNullOrWhiteSpace(tcCuenta)) // Si hemos cambiado la cuenta la asignamos para que refresque el IVA si hay cambios de % de recargo
595  _oAsientoLineaBind._DatosIvaExento._Cuenta = tcCuenta;
596 
597  // Asociamos las líneas
598  this.gridDesgloseIva._AsientoLinea = this._oAsientoLineaBind;
599  }
600 
604  private void PasarFocoGrid()
605  {
606  if (gridDesgloseIva != null && gridDesgloseIva._Grid != null && gridDesgloseIva._Grid.Rows.Count > 0)
607  {
608  gridDesgloseIva.Focus();
609  gridDesgloseIva._Grid.CurrentCell = gridDesgloseIva._Grid.Rows[0].Cells[0];
610  gridDesgloseIva._Grid.Rows[0].Cells[0].Selected = true;
611  }
612  }
613 
619  private void txtNumFraExpedicion_Leave(object sender, EventArgs e)
620  {
621  PasarFocoGrid();
622  }
623 
624  # endregion Métodos privados
625 
626  # region Métodos override
627  protected override void _Binding()
635  {
636  if (_oAsientoLinea == null)
637  return;
638 
639  base._Binding(); // Interesa que genere el registro inicial al entrar por primera vez
640 
641  if (txtTipoExento.DataBindings.Count > 0) txtTipoExento.DataBindings.RemoveAt(0);
642  txtTipoExento.DataBindings.Add("_Codigo", _oAsientoLineaBind._DatosIvaExento, "_Tipo", true);
643 
644  if (txtCuenta.DataBindings.Count > 0) txtCuenta.DataBindings.RemoveAt(0);
645  txtCuenta.DataBindings.Add("_Codigo", _oAsientoLineaBind._DatosIvaExento, "_Cuenta", true);
646 
647  if (ewdateFechaFactura.DataBindings.Count > 0) ewdateFechaFactura.DataBindings.RemoveAt(0);
648  ewdateFechaFactura.DataBindings.Add("Text", _oAsientoLineaBind._DatosIvaExento, "_Fecha", true);
649 
650  if (ewdateFechaOperacion.DataBindings.Count > 0) ewdateFechaOperacion.DataBindings.RemoveAt(0);
651  ewdateFechaOperacion.DataBindings.Add("Text", _oAsientoLineaBind._DatosIvaExento, "_FechaOper", true);
652 
653  if (ewnumericupdownImporte.DataBindings.Count > 0) ewdateFechaFactura.DataBindings.RemoveAt(0);
654  ewnumericupdownImporte.DataBindings.Add("Text", _oAsientoLineaBind._DatosIvaExento, "_Importe", true);
655 
656  if (txtTipoIva.DataBindings.Count > 0) txtTipoIva.DataBindings.RemoveAt(0);
657  txtTipoIva.DataBindings.Add("_Codigo", _oAsientoLineaBind._DatosIvaExento, "_TipoIva", true);
658 
659  // Número factura expedición
660  if (txtNumFraExpedicion.DataBindings.Count > 0) txtNumFraExpedicion.DataBindings.RemoveAt(0);
661  txtNumFraExpedicion.DataBindings.Add("Text", _oAsientoLineaBind._DatosIvaExento, "_SIIFraMod", true);
662 
663  BindingFactura();
664 
665  BindingIva();
666  }
667 
671  protected override void _VisibleChanged()
672  {
673  base._VisibleChanged();
674 
675  this.TipoDocumento(true); // Actualizamos el tipo del documento
676  this.ModificarIVARecargo();
677 
678  if (_lAsientoMultidivisa)
679  {
680  this.ewlabelImporteDivisa.Visible = true;
681  this.ewlabelImporteDivisa.Text = _cSimboloDivisaEmpresa;
682  }
683  else
684  this.ewlabelImporteDivisa.Visible = false;
685 
686  if (this._ReadOnly)
687  this.gridDesgloseIva._ReadOnly = true;
688 
689  this.SubscripcionEventos();
690  }
691 
696  protected override bool _Validar()
697  {
698  if (!this.ValidarFactura())
699  return false;
700 
701  if (string.IsNullOrWhiteSpace(this.txtCuenta._Codigo))
702  {
703  this._MessageBox("Es necesario indicar la cuenta contable.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
704  this.txtCuenta.Focus();
705  return false;
706  }
707 
708  if (string.IsNullOrWhiteSpace(_oAsientoLineaBind._DatosIvaExento._TipoIva.Trim()))
709  {
710  this._MessageBox("Es necesario indicar el tipo de " + _cIva + " no sujeto.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
711  txtTipoIva.Focus();
712  return false;
713  }
714 
715  if (!CONTABILIDAD._TipoIvaExento(_oAsientoLineaBind._DatosIvaExento._TipoIva))
716  {
717  this._MessageBox("Únicamente se puede asignar un tipo de " + _cIva + " no sujeto.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
718  txtTipoIva.Focus();
719  return false;
720  }
721 
722  if (_oAsientoBind._Facturas.Count > 0 && !string.IsNullOrWhiteSpace(_oAsientoLineaBind._DatosIvaExento._Factura) && _oAsientoLinea._DatosIvaExento._Fecha != _oAsientoLineaBind._DatosIvaExento._Fecha && FUNCTIONS._Comprovar_Mes_Cerrado(_oAsientoLineaBind._DatosIvaExento._Fecha))
723  {
724  _MessageBox("La fecha de factura/expedición pertenece a un mes cerrado.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
725  ewdateFechaFactura.Focus();
726 
727  return false;
728  }
729 
730  if (!((Asientos)_oAsientoBind)._ValidacionTipoOperacion(_oAsientoBind._Operacion, out string lcMensaje, _oAsientoLineaBind))
731  {
732  _MessageBox(lcMensaje, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
733  return false;
734  }
735 
736  if (_oAsientoBind._Facturas.Count > 1)
737  {
738  ((AsientosLinea)_oAsientoLineaBind)._ControlAsientoMismoTipo(_oAsientoLineaBind._DatosIvaExento._Cuenta);
739 
740  if (!string.IsNullOrWhiteSpace(((AsientosLinea)_oAsientoLineaBind)._cMensajeBloqueoMultifactura))
741  {
742  _MessageBox(((AsientosLinea)_oAsientoLineaBind)._cMensajeBloqueoMultifactura, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
743  return false;
744  }
745 
746  if (_oAsientoBind._Operacion != 0 && _oAsientoBind._Operacion != 1)
747  {
748  _MessageBox("Existe una factura contabilizada con un tipo de operación." + Environment.NewLine + Environment.NewLine + "Para contabilizar una nueva factura es necesario un nuevo asiento.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
749 
750  return false;
751  }
752 
753  DateTime? ldFecha = null;
754  bool llEsRectificativa = _oAsientoBind._EsFacturaRectificativa(ref ldFecha);
755  if (llEsRectificativa && ldFecha != null)
756  {
757  _MessageBox("No es posible introducir más de una factura en el mismo asiento si una de ellas es rectificativa.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
758 
759  return false;
760  }
761 
762  if (!((Asientos)_oAsiento)._MultiFactura && ((AsientosSII)_oAsientoBind._DatosSII)._EsSII)
763  {
764  _MessageBox("No es posible introducir más de una factura en el mismo asiento si se han entrado campos adicionales del SII.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2, DialogResult.No);
765 
766  return false;
767  }
768  }
769 
770  if (this.ExisteFacturaAsiento())
771  return false;
772 
773  return true;
774  }
775 
779  protected override void _AceptarBindings()
780  {
781  if (_oAsientoLinea._EsIvaExento)
782  _cCuentaOld = _oAsientoLinea._DatosIvaExento._Cuenta;
783 
784  bool llModifIVA = _oAsientoLineaBind._DatosIvaExento._Importe != _oAsientoLinea._DatosIvaExento._Importe;
785  base._AceptarBindings();
786 
787  // Realizamos la copia de la línea de IVA. Ojo no realizamos la copia entera del registro de asientos
788  _oAsientoLinea._DatosIvaExento._Clonar(_oAsientoLineaBind._DatosIvaExento);
789 
790  // Adicionalmente en cada pantalla se deberá de actualizar los campos que se pueden modificar y que estan bindeados con asientos
791  if (_oAsientoLinea._Factura.Trim() != _oAsientoLineaBind._Factura.Trim())
792  {
793  bool llRestarNumero = true;
794 
795  //si l'anterior numero hi ha previsions relacionades ja no fem la pregunta i nomes modifiquem el registre actual
796  if (!((Asientos)_oAsiento)._ConsultarPrevisionesAlbaranes(_oAsientoLinea._Factura, _oAsientoLinea._DatosIvaExento._Cuenta, tlAsiento: false))
797  {
798  llRestarNumero = false;
799  _oAsiento._Mensaje_Error = "";
800  }
801  else
802  {
803  if (!string.IsNullOrWhiteSpace(_oAsientoLinea._Factura) && _MessageBox("¿Desea actualizar todos los registros de " + Convert.ToString(EW_GLOBAL._GetVariable("wc_iva")) +
804  " de la factura " + _oAsientoLinea._Factura.Trim() + " con el número de factura " + _oAsientoLineaBind._Factura.Trim() + "?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No) == DialogResult.Yes)
805  llRestarNumero = ((Asientos)_oAsiento)._ActualizarFacturaIVA(_oAsientoLinea._Factura, _oAsientoLineaBind._Factura, _oAsientoLineaBind._DatosIvaExento._Cuenta, 0, _oAsientoLinea._Linea);
806  }
807 
808  string lcOldFactura = _oAsientoLinea._Factura;
809 
810  _oAsientoLinea._Factura = _oAsientoLineaBind._Factura;
811  if (llRestarNumero && !string.IsNullOrWhiteSpace(lcOldFactura))
812  {
813  if (lcOldFactura != _oAsientoLinea._Factura)
814  {
815  if (((Asientos)_oAsiento)._eTipoAsiento == eTipoAsiento.AsientoFacturaVenta)
816  CONTABILIDAD._Resta_Numero_Factura_Venta(_oAsientoLinea._Empresa, lcOldFactura);
817  else if (((Asientos)_oAsiento)._eTipoAsiento == eTipoAsiento.AsientoFacturaCompra)
818  CONTABILIDAD._Resta_Numero_Factura_Compra(_oAsientoLinea._Empresa, lcOldFactura);
819  }
820  }
821  }
822 
823  if (((AsientosLinea)_oAsientoLinea)._oAsiento._PropuestaAutomatica && (llModifIVA || !_oAsientoLinea._EsIvaExento))
824  ((AsientosLinea)_oAsientoLinea)._oAsiento._oPatrones._EjecutarPatron(eTipoPatron.PatronModificacionIvaNoSujeto, ((AsientosLinea)_oAsientoLinea)._oAsiento, _oAsientoLinea, eAccionAsientos.Nada);
825 
826  }
827 
832  protected override bool _Save()
833  {
834  bool llSave = (this._oAsientoLinea._DatosIvaExento._Save()); // Si todo ha ido correcto podemos salir
835 
836  if (llSave && _cCuentaOld != _oAsientoLineaBind._DatosIvaExento._Cuenta)
837  ((Asientos)_oAsiento)._ActualizarContrapartidaLinea(_oAsientoLinea, _cCuentaOld, _oAsientoLineaBind._DatosIvaExento._Cuenta);
838 
839  return llSave;
840  }
841 
846  protected override void _Delete()
847  {
848  DialogResult loResult = this._MessageBox("¿Seguro que desea borrar el registro no sujeto a " + _cIva + "?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, DialogResult.No);
849 
850  if (loResult == DialogResult.Yes)
851  {
852  if (this._oAsientoLinea._DatosIvaExento._Delete())
853  {
854  base._Delete();
855  this._lDelete = true; // Marcamos que estamos borrando el asiento. Realizamos la gestión al aceptar los cambios
856  this.btDocAceptar1.PerformClick(); // Es necesario hacer un aceptar para poder refrescar los cambios
857  // this.btDocCancelar1.PerformClick(); // Podemos cancelar no tengo de refrescar nada
858  }
859  else
860  this.PresentarMensajeError();
861  }
862  }
863  #endregion Métodos override
864 
865  #region Métodos public
866  public void _Set_oAsientoLineaBind_Letra_Factura(string letra)
870  {
871  int longitud_letra = letra.Length;
872 
873  if (!string.IsNullOrWhiteSpace(letra))
874  {
875  // Si no lo hago de longitud mayor de 10 y las letra a la izquierda no me coge bien el control la serie
876  if (_oAsientoLineaBind._Factura.Length <= longitud_letra || string.IsNullOrWhiteSpace(_oAsientoLineaBind._Factura.Substring(letra.Length)))
877  {
878  _oAsientoLineaBind._Factura = letra.ToString().PadRight(20) + "0";
879  }
880  else
881  {
882  _oAsientoLineaBind._Factura = letra + _oAsientoLineaBind._Factura.Substring(letra.Length).ToString().PadLeft(10-longitud_letra);
883  }
884  }
885  }
886 
891  public bool _EsCompras()
892  {
893  return EsCompras();
894  }
895 
896  #endregion Métodos public
897 
898  }
899 }
IAsientosSII _DatosSII
Task 111325. Datos SII
Definition: Asientos.cs:1444
_ReadOnly
_ReadOnly
Definition: clsPerfiles.cs:671
override void _Delete()
Borramos el registro de IVA, Retención. IVA exento ... No es necesario realizar la ejecución del códi...
override bool _Save()
En la mayoría de formularios vamos a realizar el _Save de la línea En el formulario de IVA exento vam...
eTipoAsiento
Enumeració per indicar quin tipo d&#39;assentament
bool _EsFacturaRectificativa(ref DateTime? tdFecha)
Nos devuelve si se trata de una factura rectificativa, si lo es nos devuelve la fecha por referencia...
Definition: Asientos.cs:4152
eAccionAsientos
Enumerado del tipo de acciones en formulario de asientos
Clase utilizada para realizar asientos contables.
Definition: Asientos.cs:36
KeyDiccionarioLenCampos
Clave del diccionario LenCampos
Definition: Diccionarios.cs:11
override bool _Validar()
Validamos que la información es coherente
bool _ValidarCambioSerie
Validamos si podemos cambiar de serie si tenemos número de factura
eTipoCuenta
Enumeració per indicar el tipo de cuenta
eTipoPatron
Enumerado los patrones asientos
static bool _Resta_Numero_Factura_Compra(string tcEmpresa, string tcNumero)
Restem número factura compra si hi ha activat opcflag wl_factucom
static bool _Resta_Numero_Factura_Venta(string tcEmpresa, string tcFactura)
Restar número al borrar una factura de venta
Clase que se utilizará para las lineas de los asientos contables.
bool _EsCompras()
Devuelve si es un IVA exento de compras
Control para entrar el número de factura en la pantallas relacionadas con asientos contables y genera...
override void _AceptarBindings()
Realizamos el volcado de la copia de la línea del asiento y los campos específicos bindeados sobre el...
bool _ValidarFacturaExistente
Validamos si existe la factura
List< IAsientosBaseDatosIva > _Facturas
Lista de facturas: Número de factura, {Cuenta,Orden,Nombre,ProveedorVarios,CifVarios} ...
Definition: Asientos.cs:1100
string _Mensaje_Error
Mensaje de error
Definition: Asientos.cs:881
override void _VisibleChanged()
Nos subscribimos a los eventos
Formulario base de Iva repercutido, Retenciones ...
static bool _TipoIvaExento(string tcTipoIva)
Gestionamos