2 using System.Collections.Generic;
27 private dynamic _oDocLinea = null;
28 private dynamic _oDocumento;
33 public dynamic _DocLinea
35 get {
return _oDocLinea; }
36 set { _oDocLinea = value; }
42 public dynamic _Documento
44 get {
return this._oDocumento; }
45 set { this._oDocumento = value; }
51 public docsven.UserControls.gridArtDocVenta _GridArt
53 get {
return _oGridArt; }
54 set { _oGridArt = value; }
56 private docsven.UserControls.gridArtDocVenta _oGridArt;
58 #endregion PROPIEDADES 66 this.Text =
"Descuentos totales";
68 this.Click +=
new EventHandler(btDescuentosTotal_Click);
71 void btDescuentosTotal_Click(
object sender, EventArgs e)
73 bool llMateixaMoneda =
false;
75 decimal lnDescuento = 0;
77 bool llTipoDescuen =
false;
78 decimal lnValorDto = 0;
80 string lcTipoIva =
string.Empty;
81 decimal lnTeorico = 0;
82 dynamic loLineaNueva = null;
86 if (this._Documento == null)
90 if (!this._Documento._Botones._Validar_Documento())
96 _Documento._MessageBox(
"Solo aplicable a documentos tipo ticket.", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.None);
100 if (_Documento._Documento_CobradoOPagado())
102 _Documento._MessageBox(
"No es posible aplicar descuentos lineales, el documento está cobrado.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
108 dynamic loLineaActual = null;
109 if (_oDocLinea != null)
111 loLineaActual = _oDocLinea;
115 loLineaActual = _oDocumento._Lineas[_oGridArt._Grid.CurrentRow.Index];
118 int lnIndice = this._oGridArt._Grid.CurrentRow.Index;
119 int lnLinia = this._oGridArt._Documento._Lineas[lnIndice]._Linea;
121 foreach (ewDocVentaLinTPV loLinea
in _Documento._Lineas)
123 if (!String.IsNullOrWhiteSpace(loLinea._TipoIva))
125 lcTipoIva = loLinea._TipoIva;
133 string[] lcParams =
new string[4];
136 if (this.__Abrir_Formulario_En() <= 1)
139 object[] loParametros =
new object[4]
141 this._Documento._Numero,
142 this._Documento._Letra,
143 this._Documento._Pie._TotalDocumento,
146 string lcValor = NETVFP._Ejecutar_Funcion_VFP(
"DESC_TOTAL_NET", loParametros);
149 if (
String.IsNullOrEmpty(lcValor))
152 lcParams = lcValor.Split(
'#');
153 if (lcParams.Length != 4)
157 string lcSeparator = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_separator"));
158 string lcPoint = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_point"));
161 lnDescuento = Convert.ToDecimal(lcParams[0].Replace(lcSeparator, lcPoint));
162 llNota = Convert.ToBoolean(lcParams[1] ==
"true");
163 llTipoDescuen = Convert.ToBoolean(lcParams[2] ==
"true");
164 lnValorDto = Convert.ToDecimal(lcParams[3].Replace(lcSeparator, lcPoint));
173 form._TipoDescuento = 1;
177 if (form.DialogResult ==
System.Windows.Forms.DialogResult.OK)
180 lnDescuento = form._TotalDescuento;
181 llNota = form._AnadirNota;
183 if (form._TipoDescuento == 1)
185 llTipoDescuen =
true;
186 lnValorDto = form._DtoImporte;
190 llTipoDescuen =
false;
191 lnValorDto = form._DtoTPC;
201 string lcDivisa = _Documento._Cabecera._Divisa;
202 string lcMoneda = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_moneda"));
203 string lcMascara = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_mascaramon"));
205 llMateixaMoneda = (lcDivisa == lcMoneda);
210 lnTeorico = this._Documento._Pie._TotalDocumento - lnDescuento;
213 lnDescuento = lnValorDto;
216 decimal lnTotalTicket = this._Documento._Pie._TotalDocumento;
222 while (lnDescuento != 0 && lnActual < 4)
225 _Aplicar_Dto_Diferencia(lnTotalTicket,lnDescuento,llTipoDescuen);
228 lnTotalTicket = _Documento._Pie._TotalDocumento;
230 lnDescuento = (lnTotalTicket - lnTeorico);
233 if (Math.Abs(lnDescuento) <= Convert.ToDecimal(0.01))
242 if (lnDescuento != 0)
245 _Documento._MessageBox(
"Se ha detectado una diferencia por aplicación de descuento por importe de " +
246 Convert.ToString(
this._Documento._Cabecera._oDivisa._MascaraImporte.Redondeo(lnValorDto)) +
System.Environment.NewLine +
247 "Se creará una línea de descuento adicional para cuadrar el importe total del ticket.", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, DialogResult.OK);
250 lnDescuento = lnDescuento * (-1);
253 loLineaNueva = this._Documento._AddLinea();
256 loLineaNueva._Cuenta = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_vcta_dol"));
257 if (
String.IsNullOrWhiteSpace(lcTipoIva))
258 lcTipoIva = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_viva_dol"));
260 loLineaNueva._TipoIva = lcTipoIva;
269 loLineaNueva._PrecioIva = lnDescuento;
270 loLineaNueva._PrecioDivisaIva = lnDescuento;
275 loLineaNueva._PrecioDivisaIva = lnDescuento;
279 if (_Documento._Cabecera._IvaInc)
282 decimal lnIva = Convert.ToDecimal(
sage.
ew.
db.
DB.SQLValor(
"TIPO_IVA",
"CODIGO", lcTipoIva,
"iva"));
283 decimal lnRecargo = Convert.ToDecimal(
sage.
ew.
db.
DB.SQLValor(
"TIPO_IVA",
"CODIGO", lcTipoIva,
"recarg"));
284 decimal lnDto = this._Documento._Cabecera._oDivisa._MascaraImporte.Redondeo(lnDescuento * 100 / (100+(lnIva + lnRecargo)));
288 loLineaNueva._Precio = lnDto;
289 loLineaNueva._PrecioDivisa = lnDto;
294 loLineaNueva._PrecioDivisa = lnDto;
300 loLineaNueva._Coste = lnDescuento;
301 loLineaNueva._Unidades = 1;
302 loLineaNueva._Definicion =
"Descuento total";
303 loLineaNueva._Escandal =
"INTERNAL";
305 loLineaNueva._Recalcular_Importe();
306 loLineaNueva._Save();
312 _Aplicar_Dto_Diferencia(lnTotalTicket,lnDescuento,llTipoDescuen);
319 loLineaNueva = _Documento._AddLinea();
327 lnValorDto = this._Documento._Cabecera._oDivisa._MascaraImporte.Redondeo(lnValorDto);
328 loLineaNueva._Definicion =
"DESCUENTO TOTAL " + lnValorDto.ToString(this._Documento._Cabecera._oDivisa._MascaraImporte._Mascara_Net) +
" " + this._Documento._Cabecera._oDivisa._Nombre;
340 lnValorDto = loMascaraDto.
Redondeo(lnValorDto);
341 loLineaNueva._Definicion =
"DESCUENTO TOTAL " + lnValorDto.ToString(loMascaraDto.
_Mascara_Net) +
" % ";
346 loLineaNueva._Tipo = 10;
347 loLineaNueva._Save();
356 private void _Aplicar_Dto_Diferencia(decimal tnTotalTicket, decimal tnDescuento,
bool tlTipoDescuen)
358 decimal lnActual = 0;
359 decimal lnTeorico = 0;
360 bool llPositivo =
false;
363 if (tnTotalTicket != 0 && tnDescuento != 0)
365 lnActual = _Documento._Pie._TotalDocumento;
369 lnTeorico = (tnTotalTicket - tnDescuento);
370 llPositivo = (lnTeorico > 0);
373 lnDto = Math.Round((tnDescuento / lnActual)*100,2);
381 foreach (ewDocVentaLinTPV loLinea
in _Documento._Lineas)
383 if (!
String.IsNullOrWhiteSpace(loLinea._TipoIva) && loLinea._Importe != 0)
385 if (loLinea._Dto1 == 0)
386 loLinea._Dto1 = lnDto;
388 loLinea._Dto1 = loLinea._Dto1 + lnDto;
390 loLinea._Recalcular_Importe();
392 lnActual = _Documento._Pie._TotalDocumento;
394 if (tlTipoDescuen && lnActual == lnTeorico)
Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
KeyDiccionarioMascara
Clave para diccionario de máscaras
btDescuentosTotal()
Constructor
Interfaz utilizada en los controles que se añaden en los perfiles
Botón de descuentos totales del TPV
Proporciona características adicionales de las máscaras de Eurowin
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
static System.Drawing.Bitmap total_discount
Busca un recurso adaptado de tipo System.Drawing.Bitmap.
decimal Redondeo(decimal tnImporte)
Aplica el redondeo segun los decimales de la moneda
string _Mascara_Net
Máscara convertida en formato .Net
Clase de negocio para la DIVISA (Moneda)
static decimal _Conversion_En_Divisa(decimal tnImporte, string tcEnMoneda, string tcToMoneda, string tcMascara, decimal tnCambioAplicado=0)
Función que convierte un importe expresado en una moneda a otra moneda.
Clase estática de acceso a Base de Datos