frmFormasCobro.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using sage.ew.formul.Forms;
10 using sage.ew.global;
11 using sage.ew.db;
12 using sage.ew.functions;
13 using sage.ew.contabilidad;
14 
15 namespace sage.ew.tpv.Forms
16 {
20  public partial class frmFormasCobro : FormMante
21  {
22  private Boolean _hera = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera"));
23 
27  private bool _lIsBinding = false;
28 
29  #region CONSTRUCTORES
30  public frmFormasCobro()
34  {
35  InitializeComponent();
36  this._Pantalla = "F_COBROS"; // PE-87741
37 
38  cmbDivisaVenta._Valor_Vacio = false;
39  cmbDivisaVenta._Refresh();
40  cmbDivisaVenta._Codigo = EW_GLOBAL._Empresa._Moneda;
41 
42  txtCuenta.Validated += new EventHandler(txtCuenta_Validated);
43  cmbDivisaVenta.Validated += new EventHandler(txtCuenta_Validated);
44  }
45 
46  #endregion CONSTRUCTORES
47 
48  #region METODOS OVERRIDE
49  protected override void _Binding()
53  {
54  _lIsBinding = true;
55 
56  base._Binding();
57 
58  txtComision.DataBindings.Clear();
59  txtComision.DataBindings.Add("Text", _ewMante, "_Comision");
60 
61  ckFormaCobroEfectivo.DataBindings.Clear();
62  ckFormaCobroEfectivo.DataBindings.Add("Checked", _ewMante, "_Efectivo");
63 
64  ckFormaCobroTarjeta.DataBindings.Clear();
65  ckFormaCobroTarjeta.DataBindings.Add("Checked", _ewMante, "_Tarjeta");
66 
67  txtCuenta.DataBindings.Clear();
68  txtCuenta.DataBindings.Add("_Codigo", _ewMante, "_Cuenta");
69 
70  ckFormaCobroCheque.DataBindings.Clear();
71  ckFormaCobroCheque.DataBindings.Add("Checked", _ewMante, "_Cheque");
72 
73 
74  if(!_hera)
75  {
76  txtCuentaComision.DataBindings.Clear();
77  txtCuentaComision.DataBindings.Add("_Codigo", _ewMante, "_CtaComision");
78 
79  //T114693
80  cmbDivisaVenta.DataBindings.Clear();
81  cmbDivisaVenta.DataBindings.Add("_Codigo", _ewMante, "_Moneda", true);
82  }
83 
84  _lIsBinding = false;
85  }
86 
90  protected override void _BloquearControles()
91  {
92  base._BloquearControles();
93 
94  // Declaración de variables
95  bool llEnabled = false;
96  FormasCobro loFormasCobro = (FormasCobro)_ewMante;
97 
98  // De momento podemos simplificar el código y unificarlo en 2 opciones los controles
99  switch (_ewMante._Estado)
100  {
101  case sage.ew.ewbase.ewMante._EstadosMantenimiento.EditandoRegistro:
102  case sage.ew.ewbase.ewMante._EstadosMantenimiento.EntrandoNuevo:
103  llEnabled = true;
104  break;
105 
106  case sage.ew.ewbase.ewMante._EstadosMantenimiento.EsperandoCodigo:
107  case sage.ew.ewbase.ewMante._EstadosMantenimiento.MostrandoRegistro:
108  llEnabled = false;
109  break;
110  }
111 
112  txtComision.Enabled = llEnabled;
113  ckFormaCobroEfectivo.Enabled = llEnabled;
114  ckFormaCobroTarjeta.Enabled = llEnabled;
115  txtCuenta._ReadOnly = !llEnabled;
116  txtCuentaComision._ReadOnly = !llEnabled;
117  cmbDivisaVenta._ReadOnly = !llEnabled || !loFormasCobro._NoEnUso();
118 
119  ckFormaCobroCheque.Enabled = false;
120  ckFormaCobroCheque.Visible = false;
121 
122  ckFormaCobroCheque.Enabled = false;
123  ckFormaCobroCheque.Visible = false;
124 
125  _BloquearControles_Adicionales();
126  }
127 
132  protected override bool _Guardar()
133  {
134  bool llOk = true;
135 
136  if (string.IsNullOrWhiteSpace(txtCuenta._Codigo))
137  {
138  this._ControlError(txtCuenta, "Debe introducir una cuenta contable");
139  llOk = false;
140  }
141 
142  //una forma de cobro en efectiu no pot tenir comisió
143  if(ckFormaCobroEfectivo.Checked && (txtComision.Value!=0 || !string.IsNullOrWhiteSpace(txtCuentaComision._Codigo)))
144  {
145  this._ControlError(ckFormaCobroEfectivo, "Una forma de cobro en efectivo no puede tener comisión");
146  llOk = false;
147  }
148 
149  //si el % de comisió es diferent de 0 s'ha d'indicar el compte de comisió per la facturació
150  if (ckFormaCobroEfectivo.Checked == false && txtComision.Value != 0 && string.IsNullOrWhiteSpace(txtCuentaComision._Codigo))
151  {
152  this._ControlError(txtCuentaComision, "Es necesario indicar la cuenta de comisión");
153  llOk = false;
154  }
155 
156  // Base guardar
157  llOk = llOk && base._Guardar();
158 
159  // PARTE 91926
160  // Refrescar controles
161  //if (llOk)
162  //{
163  // this._Refresh();
164  //}
165  // FPARTE 91926
166 
167 
168  return llOk;
169  }
170 
171  #endregion METODOS OVERRIDE
172 
173  #region METODOS PRIVADOS
174 
175  private void txtCuenta_Validated(object sender, EventArgs e)
176  {
177  if (!string.IsNullOrWhiteSpace(txtCuenta._Codigo))
178  {
179  Cuenta cuenta = new Cuenta(txtCuenta._Codigo);
180  if (cuenta._Divisa != cmbDivisaVenta._Codigo)
181  {
182  txtCuenta._Codigo = "";
183  _MessageBox("La divisa de la cuenta contable no es la misma que la definida en la forma de cobro. Modifique la divisa de la forma de cobro o añada otra cuenta contable cuya divisa sea igual a la definida para la forma de cobro.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
184  txtCuenta.Focus();
185  }
186  }
187  }
188 
189  private void _ControlFormaCobroEfectivo()
190  {
191  if (ckFormaCobroEfectivo.Enabled && ckFormaCobroEfectivo.Checked)
192  {
193  txtCuentaComision._ReadOnly = true;
194  txtCuentaComision._Codigo = "";
195  txtComision.Enabled = false;
196  txtComision.Value = 0;
197  }
198  else
199  {
200  txtCuentaComision._ReadOnly = (txtComision.Value == 0); // PARTE 91940
201  txtComision.Enabled = true;
202  }
203  }
204 
205  private void _BloquearControles_Adicionales()
206  {
207  if (_ewMante._Estado == ewbase.ewMante._EstadosMantenimiento.EditandoRegistro ||
208  _ewMante._Estado == ewbase.ewMante._EstadosMantenimiento.EntrandoNuevo)
209  {
210 
211  // PARTE 91940. Si no tenemos % de comisión vaciamos la cuenta de comisión si la tenemos
212  if ( txtComision.Value == 0 && String.IsNullOrWhiteSpace(txtCuentaComision._Codigo.Trim()) == false)
213  {
214  txtCuentaComision._Codigo = "";
215  }
216  // FPARTE 91940
217 
218  if (String.IsNullOrWhiteSpace(txtCuentaComision._Codigo.Trim()) && txtComision.Value == 0)
219  {
220  ckFormaCobroEfectivo.Enabled = true;
221  }
222  else
223  {
224  ckFormaCobroEfectivo.Enabled = false;
225  ckFormaCobroEfectivo.Checked = false;
226  }
227 
228  _ControlFormaCobroEfectivo();
229  }
230  }
231 
232  private void txtcuentacomision__codigo_cambiado()
233  {
234  _BloquearControles_Adicionales();
235  }
236 
237  private void ckFormaCobroEfectivo_CheckedChanged(object sender, EventArgs e)
238  {
239  if(ckFormaCobroEfectivo.Checked && !_lIsBinding)
240  {
241  if (!((FormasCobro)_ewMante)._ValidaUnicaFormaCobroDivisa())
242  {
243  _MessageBox(String.Format("Sólo puede haber una forma de cobro en efectivo {0}.", Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")) && Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_divisaventa")) ? "por divisa" : String.Empty), MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
244  ckFormaCobroEfectivo.Checked = false;
245  }
246  }
247 
248  if (ckFormaCobroEfectivo.Checked && ckFormaCobroCheque.Checked)
249  {
250  _MessageBox("No puede marcar forma de cobro en efectivo y forma de cobro tipo cheque al mismo tiempo.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
251  if (((CheckBox)sender).Checked)
252  {
253  ckFormaCobroEfectivo.Checked = false;
254  }
255  }
256  _ControlFormaCobroEfectivo();
257  }
258 
259  private void ckFormaCobroCheque_CheckedChanged(object sender, EventArgs e)
260  {
261  if (ckFormaCobroEfectivo.Checked && ckFormaCobroCheque.Checked)
262  {
263  _MessageBox("No puede marcar forma de cobro en efectivo y forma de cobro tipo cheque al mismo tiempo.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
264  if (((CheckBox)sender).Checked)
265  {
266  ckFormaCobroCheque.Checked = false;
267  }
268  }
269  }
270 
271  private void txtcomision_valuechanged(object sender, EventArgs e)
272  {
273  _BloquearControles_Adicionales();
274  }
275 
276  private void frmFormasCobro_Load(object sender, EventArgs e)
277  {
278  // Task 148164: desde el momento en que permitimos que via PAM se pueden programar adaptadores de diferentes datáfonos donde el código
279  // que procesa la transacción es externo al core de Sage50 (contrariamente a PayTEF), ya hemos de dejar la check "Forma cobro tarjeta" visible
280  // de forma permanente pues si no se hace así solo la mostraría caso de trabajar con PAYTEF (check activada en configuración de addon TPV) y
281  // caso de trabajar con otro sistema de datáfono (implementado via Plugin en la clase declarada en la propiedad MovCaja._oDatafono) no nos
282  // mostraría la check.
283  //
284  ckFormaCobroTarjeta.Visible = true;
285  //ckFormaCobroTarjeta.Visible = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_Paylink"));
286 
287  //T114693
288  ewPanelPercentComision.Visible = ewPanelComision.Visible = !_hera;
289 
290  cmbDivisaVenta.Visible = ewPanelDivisa.Visible = _Sage50 && Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_divisaventa"));
291  }
292 
293  #endregion METODOS PRIVADOS
294 
295  private void cmbDivisaVenta__Codigo_Cambiado()
296  {
297  // T115472
298  if (!_lIsBinding)
299  {
300  if (_ewMante != null && EW_GLOBAL._Empresa._ConfigTPV._ValesCodigo == _ewMante._Codigo && EW_GLOBAL._Empresa._Moneda != cmbDivisaVenta._Codigo)
301  {
302  //Bug 116327
303  _MessageBox("No se puede cambiar la divisa de la forma de cobro . Esta forma de cobro esta definida en la configuración de empresa para el cobro con vales, la divisa de esta forma de cobro debe ser la misma que la de la empresa.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
304  cmbDivisaVenta._Codigo = ((FormasCobro)_ewMante)._Moneda;
305  }
306 
307  if (ckFormaCobroEfectivo.Checked)
308  {
309  if (!((FormasCobro)_ewMante)._ValidaUnicaFormaCobroDivisa(cmbDivisaVenta._Codigo))
310  {
311  _MessageBox(String.Format("Sólo puede haber una forma de cobro en efectivo {0}.", Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")) && Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_divisaventa")) ? "por divisa" : String.Empty), MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
312  cmbDivisaVenta._Codigo = ((FormasCobro)_ewMante)._Moneda;
313  }
314  }
315  }
316  }
317  }
318 }
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
override void _BloquearControles()
Actualizamos el estado de bloqueo de los controles
Clase no visual que nos gestiona les formes de cobro
Definition: FormasCobro.cs:22
Clase de negocio del mantenimiento de cuentas contables
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
Definition: clsEwBase.cs:1671
Clase formulario formas de cobro
Base para los mantenimientos de Sage TPV
Definition: FormMante.cs:26
Boolean _NoEnUso()
T114693
Definition: FormasCobro.cs:354
override bool _Guardar()
validar i guardar