2 using System.Collections.Generic;
14 using System.ComponentModel;
18 namespace sage.ew.docsven
40 #region PROPIEDADES PÚBLICAS 47 public bool _SobreBase
49 get {
return _lSobreBase; }
50 set { _lSobreBase = value; }
52 private bool _lSobreBase =
false;
59 public decimal _ImporteRetencion
61 get {
return _nImporteRetencion; }
62 set { _nImporteRetencion = value; }
64 private decimal _nImporteRetencion = 0.0M;
71 public decimal _RetencionPorcen
73 get {
return _nRetencionPorcen; }
74 set { _nRetencionPorcen = value; }
76 private decimal _nRetencionPorcen = 0.0M;
83 public string _RetencionTipo
85 get {
return _cRetencionTipo; }
86 set { _cRetencionTipo = value; }
88 private string _cRetencionTipo =
"";
97 get {
return _eTipoRetFiscNoFisc; }
98 set { _eTipoRetFiscNoFisc = value; }
106 [DefaultValue(
false)]
107 public bool _HayRetencion
109 get {
return _lHayRetencion; }
110 set { _lHayRetencion = value; }
112 private bool _lHayRetencion =
false;
115 #endregion PROPIEDADES PÚBLICAS 118 #region PROPIEDADES PRIVADAS 124 private dynamic _oDocRef = null;
130 private string _lcMonedaEmpresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_moneda"));
136 private string _cAny = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_any"));
142 private int _lnDecimales = Convert.ToInt32(EW_GLOBAL._GetVariable(
"wn_decimales"));
148 private bool _lPverde = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_pverde"));
154 private bool _lRecivainc = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_recivainc"));
160 private bool _lDivisa = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_divisaventa"));
166 private Dictionary<String, DataTable> _DicRetEmpCli =
new Dictionary<String, DataTable>();
172 private Dictionary<String, DataTable> _DicRetSoporFact =
new Dictionary<String, DataTable>();
178 private Dictionary<String, Dictionary<string,object>> _DicIvareperFact =
new Dictionary<String, Dictionary<string, object>>();
183 private bool disposedValue =
false;
186 #endregion PROPIEDADES PRIVADAS 189 #region CONSTRUCTORES 197 this._lSobreBase =
false;
198 this._nImporteRetencion = 0.0M;
199 this._nRetencionPorcen = 0.0M;
200 this._cRetencionTipo =
"";
202 this._lHayRetencion =
false;
206 #endregion CONSTRUCTORES 209 #region MÉTODOS PÚBLICOS 221 public decimal
_Calcular_Retencion(dynamic toDocumento, Dictionary<string,object> toCondicionesRetencion = null)
223 decimal lnPrcReten = 0.0M, lnTotalBase = 0.0M, lnTotalDocumento = 0.0M, lnTotalPronto = 0.0M, lnImportePortes = 0.0M, lnImporteDivPortes = 0.0M, lnImportePortesIva = 0.0M, lnImporteDivPortesIva = 0.0M;
224 string lcEmpresa =
"", lcDivisa =
"", lcCliente =
"", lcIva_Portes =
"", lcTipoIva_Pverde =
"";
225 bool llSobreBase =
false, llRetNoFisc =
false, llIncluirProntoPagoPortes =
false, llRecEquivCliente =
false;
226 int lnDecimalesMonedaDocu=0;
228 this._oDocRef = toDocumento;
231 DataTable ldtReter =
new DataTable(), ldtRetMp =
new DataTable();
235 this._lHayRetencion =
false;
236 this._lSobreBase =
false;
237 this._nImporteRetencion = 0.0M;
238 this._cRetencionTipo =
"";
239 this._nRetencionPorcen = 0.0M;
242 lcEmpresa = toDocumento._Empresa;
243 lcCliente = toDocumento._Cabecera._oCliente._Codigo;
244 lcDivisa = toDocumento._Cabecera._Divisa;
247 lnTotalBase = toDocumento._Pie._TotalBase;
250 lnTotalPronto = toDocumento._Pie._TotalPP;
253 lnTotalDocumento = toDocumento._Pie._TotalDocumento - toDocumento._Pie._TotalRecFinan;
265 if (lnTotalBase == 0 && lnTotalDocumento == 0)
269 lnDecimalesMonedaDocu = toDocumento._Cabecera._oDivisa._Decimales;
275 loCliente = toDocumento._Cabecera._oCliente;
279 !
string.IsNullOrWhiteSpace(toDocumento._Asi)) ||
281 || toDocumento._TipoDocumento ==
eTipoDocumento.AlbaranVenta) && toDocumento._Cabecera._TpcRetNoFi != 0 ) )
296 llRetNoFisc = toDocumento._Cabecera._TpcRetNoFi != 0 ;
309 llRecEquivCliente = loCliente.
_Recargo;
313 decimal lnCuotaIvaNoSujeto = 0.0M;
317 this._lHayRetencion =
true;
323 lnPrcReten = toDocumento._Cabecera._TpcRetNoFi;
332 this._lSobreBase = (Convert.ToInt32(loCliente.
_Campo(
"modretnofi")) == 1);
339 int lnTiposIvaSujetos = toDocumento._NumTiposIvaSujetos;
343 int lnTiposIvaNoSujetos = toDocumento._NumTiposIvaNoSujetos;
346 if (this._lSobreBase)
358 if ((toDocumento._Pie._Portes._Importe != 0 || toDocumento._Pie._Portes._ImporteDivisa != 0) && toDocumento._Pie._Portes._Incluir_ProntoPago ==
false && toDocumento._Pie._Portes._Iva_Incluido ==
false)
360 lnImportePortes = !
string.IsNullOrWhiteSpace(toDocumento._Cabecera._Divisa) && toDocumento._Cabecera._Divisa != this._lcMonedaEmpresa ? toDocumento._Pie._Portes._ImporteDivisa : toDocumento._Pie._Portes._Importe;
363 lnTotalBase += lnImportePortes;
373 if (lnTiposIvaSujetos > 0 && lnTiposIvaNoSujetos > 0)
374 lnTotalBase -= toDocumento._Pie._ObtenerBaseIvaNoSujeto(out lnCuotaIvaNoSujeto);
376 this._nImporteRetencion = FUNCTIONS._Round((lnTotalBase - lnTotalPronto) * lnPrcReten / 100, lnDecimalesMonedaDocu);
387 if (lnTiposIvaSujetos > 0 && lnTiposIvaNoSujetos > 0)
389 lnTotalDocumento -= toDocumento._Pie._ObtenerBaseIvaNoSujeto(out lnCuotaIvaNoSujeto);
390 lnTotalDocumento -= lnCuotaIvaNoSujeto;
392 this._nImporteRetencion = FUNCTIONS._Round(lnTotalDocumento * lnPrcReten / 100, lnDecimalesMonedaDocu);
395 this._cRetencionTipo = $
"{(this._lSobreBase ? "Reten.No Fisc./Base
" : "Reten.No Fisc./TotalFra.
")} ({ loMascaraPorcent.StringFormatNet(lnPrcReten)})";
396 this._nRetencionPorcen = lnPrcReten;
400 return this._nImporteRetencion;
409 Dictionary<string, object> loDicCurReter;
410 if (toCondicionesRetencion != null)
411 loDicCurReter = toCondicionesRetencion;
414 loDicCurReter =
new Dictionary<string, object>();
415 loDicCurReter = this.Obtener_Condiciones_Retencion(toDocumento);
418 lnPrcReten = loDicCurReter.Count > 0 ? Convert.ToDecimal(loDicCurReter[
"retencion"]) : 0;
420 if (loDicCurReter.Count == 0 || lnPrcReten == 0)
429 this._lHayRetencion =
false;
430 this._lSobreBase =
false;
431 this._nImporteRetencion = 0.0M;
432 this._cRetencionTipo =
"";
433 this._nRetencionPorcen = 0.0M;
439 llSobreBase = Convert.ToBoolean(loDicCurReter[
"modo_ret"]);
442 if ( (lnTotalBase != 0 || lnTotalDocumento != 0) && lnPrcReten != 0)
444 string lcNumeroAlb =
new string(
'@', 10);
445 string lcLetraAlb =
new string(
'@', 2);
447 decimal lnTotalRetencion = 0.0M;
455 if (lin._Numero != lcNumeroAlb || lin._Letra != lcLetraAlb)
459 lnTotalRetencion = FUNCTIONS._Round(lnTotalRetencion, lnDecimalesMonedaDocu);
461 lnImportePortes = 0.0M;
462 lnImporteDivPortes = 0.0M;
464 this.Obtener_Importe_Portes(lcEmpresa, lin._Numero, lin._Letra, toDocumento, ref lnImportePortes, ref lnImporteDivPortes, ref lnImportePortesIva, ref lnImporteDivPortesIva, ref llIncluirProntoPagoPortes, ref lcIva_Portes);
467 if (lnImportePortes != 0.0M)
468 lnTotalRetencion += this.Retencion_Linea(
"", lcIva_Portes, lnImportePortes, lnImporteDivPortes, lnImportePortesIva, lnImporteDivPortesIva, 0.0M,
"", llRecEquivCliente, loDicCurReter, toDocumento,
true, llIncluirProntoPagoPortes, null);
470 lcNumeroAlb = lin._Numero;
471 lcLetraAlb = lin._Letra;
476 if (!
string.IsNullOrWhiteSpace(lin._TipoIva) && !lin._Suplido)
478 lcTipoIva_Pverde =
"";
479 if (this._lPverde && lin._PuntoVerde != 0)
480 lcTipoIva_Pverde = !
string.IsNullOrWhiteSpace(lin._TipoIvaPV) ? lin._TipoIvaPV : lin._TipoIva;
482 Articulo loArticulo = lin._oArticulo;
483 lnTotalRetencion += this.Retencion_Linea(lin._Articulo, lin._TipoIva, lin._Importe, lin._ImporteDivisa, lin._ImporteIva, lin._ImporteDivisaIva, lin._PuntoVerde, lcTipoIva_Pverde, llRecEquivCliente, loDicCurReter, toDocumento,
false,
true, loArticulo);
485 lin._oArticulo = null;
489 lnTotalRetencion = FUNCTIONS._Round(lnTotalRetencion, lnDecimalesMonedaDocu);
491 this._lSobreBase = llSobreBase;
492 this._nImporteRetencion = lnTotalRetencion;
493 this._cRetencionTipo = $
"{(this._lSobreBase ? "Reten./Base
" : "Reten./TotalFra.
")} ({loMascaraPorcent.StringFormatNet(lnPrcReten)})";
494 this._nRetencionPorcen = lnPrcReten;
495 this._lHayRetencion =
true;
501 this._lHayRetencion =
false;
502 this._cRetencionTipo =
"";
503 this._nRetencionPorcen = 0.0M;
504 this._nImporteRetencion = 0.0M;
506 this._lSobreBase =
false;
510 return this._nImporteRetencion;
522 public virtual bool _Calcular_Retencion(dynamic toDocumento, out decimal tnImporteRetencion, out decimal tnPorcentajeRetencion, out
string tcTipoRetencion)
524 tnImporteRetencion = this._Calcular_Retencion(toDocumento);
526 tnPorcentajeRetencion = this._nRetencionPorcen;
527 tcTipoRetencion = this._cRetencionTipo;
529 return this._lHayRetencion;
538 this._Control_Label_Retencion(toFormPare, tlHayRetencion, null, tlFiscal, tnTpc);
547 public virtual void _Control_Label_Retencion(dynamic toFormPare,
bool tlHayRetencion,
bool? tlSobreBase,
bool tlFiscal =
true, decimal tnTpc = 0)
550 Control[] loControls = toFormPare.Controls.Find(
"lblRetencion",
true);
551 if (loControls.Length > 0)
554 lcText =
"Ret.Fiscal";
556 lcText =
"Ret. No Fiscal";
558 lcText +=
" (" + tnTpc.ToString().Trim() +
"%" + (tlSobreBase != null ? ((bool)tlSobreBase ?
" Sb" :
" St") :
"") +
")";
560 loControls[0].Visible = tlHayRetencion;
561 loControls[0].Text = lcText;
576 GC.SuppressFinalize(
this);
585 foreach (KeyValuePair<string,DataTable> pair
in this._DicRetEmpCli)
587 FUNCTIONS._DisposeDatatable(pair.Value);
590 foreach (KeyValuePair<string, DataTable> pair
in this._DicRetSoporFact)
592 FUNCTIONS._DisposeDatatable(pair.Value);
595 foreach (KeyValuePair<
string,Dictionary<string,object>> pair
in this._DicIvareperFact)
600 this._DicRetEmpCli.Clear();
601 this._DicRetSoporFact.Clear();
602 this._DicIvareperFact.Clear();
607 #endregion MÉTODOS PÚBLICOS 610 #region MÉTODOS PRIVADOS 617 private void Dispose(
bool disposing)
625 this._ReleaseQueryCaches();
627 disposedValue =
true;
639 private DataTable _Informacion_RetEmpCli(
string tcEmpresa,
string tcCliente)
641 DataTable ldtDataTable =
new DataTable();
643 if (
string.IsNullOrWhiteSpace(tcEmpresa) ||
string.IsNullOrWhiteSpace(tcCliente))
646 if (!this._DicRetEmpCli.ContainsKey(tcEmpresa+
"/"+tcCliente))
649 string ldBdGestion =
"GESTION";
650 if (!
string.IsNullOrWhiteSpace(this._oDocRef._EjercicioDB) && this._oDocRef._EjercicioDB.Trim() !=
"GESTION" &&
651 this._oDocRef._EjercicioDB.Trim() != this._cAny.Trim())
652 ldBdGestion = this._oDocRef._EjercicioDB.Trim();
658 string lcSql =
"SELECT a.RETENCION, b.MODO_RET, " + DB.SQLFalse() +
" AS RECARGO, " + DB.SQLString(
"", 2) +
" AS TIPO_IVA " +
659 "FROM " + DB.SQLDatabase(ldBdGestion,
"TIPO_RET") +
" a " +
660 "INNER JOIN " + DB.SQLDatabase(ldBdGestion,
"RET_EMP") +
" b ON a.CODIGO=b.TIPO_RET " +
661 "WHERE b.empresa = " + DB.SQLString(tcEmpresa) +
" and b.cuenta = " + DB.SQLString(tcCliente);
663 DB.SQLExec(lcSql, ref ldtDataTable);
665 this._DicRetEmpCli.Add(tcEmpresa+
"/"+tcCliente, ldtDataTable);
668 return this._DicRetEmpCli[tcEmpresa +
"/" + tcCliente];
681 private DataTable _Informacion_RetSoporFact(dynamic toDocumento,
string tcFactura)
683 DataTable ldtDataTable =
new DataTable();
684 if (_Informacion_RetSoporFactContabilizada(toDocumento, ref ldtDataTable))
687 return _Informacion_RetSoporFactTabla(toDocumento._Empresa, tcFactura);
698 private bool _Informacion_RetSoporFactContabilizada(dynamic toDocumento, ref DataTable tdtDataTable)
701 if (!(toDocumento is
ewDocVentaFRA) || toDocumento._Asi.Trim() !=
"CONTABILIZADA")
706 if (_dicAlbaranes == null || _dicAlbaranes.Count == 0)
710 tdtDataTable.Columns.Add(
"tipo_ret", typeof(decimal));
711 tdtDataTable.Columns.Add(
"modo_ret", typeof(Int32));
714 DataRow ldrRow = tdtDataTable.NewRow();
717 tdtDataTable.Rows.Add(ldrRow);
730 private DataTable _Informacion_RetSoporFactTabla(
string tcEmpresa,
string tcFactura)
732 DataTable ldtDataTable =
new DataTable();
734 if (
string.IsNullOrWhiteSpace(tcEmpresa) ||
string.IsNullOrWhiteSpace(tcFactura))
737 if (!this._DicRetSoporFact.ContainsKey(tcEmpresa +
"/" + tcFactura))
740 string ldBdGestion =
"GESTION";
741 if (!
string.IsNullOrWhiteSpace(this._oDocRef._EjercicioDB) && this._oDocRef._EjercicioDB.Trim() !=
"GESTION" &&
742 this._oDocRef._EjercicioDB.Trim() != this._cAny.Trim())
743 ldBdGestion = this._oDocRef._EjercicioDB.Trim();
745 string lcSql =
"SELECT a.* " +
746 "FROM " + DB.SQLDatabase(ldBdGestion,
"RETSOPOR") +
" a " +
747 "INNER JOIN " + DB.SQLDatabase(ldBdGestion,
"TIPO_RET") +
" b ON a.CODIGO_RET=b.CODIGO " +
748 "WHERE a.empresa = " + DB.SQLString(tcEmpresa) +
" and a.numfra = " + DB.SQLString(tcFactura);
749 DB.SQLExec(lcSql, ref ldtDataTable);
751 this._DicRetSoporFact.Add(tcEmpresa +
"/" + tcFactura, ldtDataTable);
754 return this._DicRetSoporFact[tcEmpresa +
"/" + tcFactura];
765 private Dictionary<string, object> _Informacion_IvareperFact(
string tcEmpresa,
string tcFactura)
767 Dictionary<string, object> laCampos =
new Dictionary<string, object>();
769 if (
string.IsNullOrWhiteSpace(tcEmpresa) ||
string.IsNullOrWhiteSpace(tcFactura))
771 laCampos.Add(
"tipo_iva",
"");
772 laCampos.Add(
"recargo",
false);
776 if (!this._DicIvareperFact.ContainsKey(tcEmpresa +
"/" + tcFactura))
783 laCampos = DB.SQLValor(
"IVAREPER",
new String[] {
"empresa",
"numfra" },
new string[] { tcEmpresa, tcFactura },
new string[] {
"tipo_iva",
"recargo" });
785 this._DicIvareperFact.Add(tcEmpresa +
"/" + tcFactura, laCampos);
788 return this._DicIvareperFact[tcEmpresa +
"/" + tcFactura];
805 private void Obtener_Importe_Portes(
string tcEmpresa,
string tcNumero,
string tcLetra, dynamic toDocumento, ref decimal tnImportePortes, ref decimal tnImporteDivPortes, ref decimal tnImportePortesIva, ref decimal tnImporteDivPortesIva, ref
bool tlIncluirProntoPagoPortes, ref
string tcIva_Portes)
807 bool llIvaInc =
false;
811 ( toDocumento._TipoDocumento ==
eTipoDocumento.AlbaranVenta && !
string.IsNullOrWhiteSpace(toDocumento._Cabecera._Factura) ) )
814 Dictionary<string, object> loDicPortes =
new Dictionary<string, object>();
815 loDicPortes = DB.SQLREGValor(
"portes",
new string[] {
"empresa",
"albaran",
"letra" },
new string[] { tcEmpresa, tcNumero, tcLetra });
817 bool llInc_Fra = Convert.ToBoolean(loDicPortes[
"inc_fra"]);
820 tlIncluirProntoPagoPortes = Convert.ToBoolean(loDicPortes[
"inc_pp"]);
821 llIvaInc = Convert.ToBoolean(loDicPortes[
"iva_inc"]);
822 tcIva_Portes = Convert.ToString(loDicPortes[
"tipo_iva"]);
829 decimal lnTipoIva = 1 + (toDocumento._Informacion_Tipo_Iva(tcIva_Portes)[
"iva"] / 100);
833 tnImportePortesIva = Convert.ToDecimal(loDicPortes[
"importe"]);
834 tnImporteDivPortesIva = Convert.ToDecimal(loDicPortes[
"importediv"]);
836 tnImportePortes = FUNCTIONS._Round(tnImportePortesIva / lnTipoIva, this._lnDecimales);
837 tnImporteDivPortes = FUNCTIONS._Round(tnImporteDivPortesIva / lnTipoIva, toDocumento._Cabecera._oDivisa._Decimales);
841 tnImportePortes = Convert.ToDecimal(loDicPortes[
"importe"]);
842 tnImporteDivPortes = Convert.ToDecimal(loDicPortes[
"importediv"]);
844 tnImportePortesIva = FUNCTIONS._Round(tnImportePortes * lnTipoIva, this._lnDecimales);
845 tnImporteDivPortesIva = FUNCTIONS._Round(tnImporteDivPortes * lnTipoIva, toDocumento._Cabecera._oDivisa._Decimales);
850 tnImportePortesIva = 0;
851 tnImporteDivPortesIva = 0;
853 tnImporteDivPortes = 0;
863 if (toDocumento._Pie._Portes._Incluir_EnFactura)
866 tlIncluirProntoPagoPortes = toDocumento._Pie._Portes._Incluir_ProntoPago;
867 llIvaInc = toDocumento._Pie._Portes._Iva_Incluido;
875 tcIva_Portes = toDocumento._Pie._Portes._Tipo_Iva;
876 decimal lnTipoIva = 1 + (toDocumento._Informacion_Tipo_Iva(tcIva_Portes)[
"iva"] / 100);
880 tnImportePortesIva = toDocumento._Pie._Portes._Importe;
881 tnImporteDivPortesIva = toDocumento._Pie._Portes._ImporteDivisa;
883 tnImportePortes = FUNCTIONS._Round(tnImportePortesIva / lnTipoIva, this._lnDecimales);
884 tnImporteDivPortes = FUNCTIONS._Round(tnImporteDivPortesIva / lnTipoIva, toDocumento._Cabecera._oDivisa._Decimales);
888 tnImportePortes = toDocumento._Pie._Portes._Importe;
889 tnImporteDivPortes = toDocumento._Pie._Portes._ImporteDivisa;
891 tnImportePortesIva = FUNCTIONS._Round(tnImportePortes * lnTipoIva, this._lnDecimales);
892 tnImporteDivPortesIva = FUNCTIONS._Round(tnImporteDivPortes * lnTipoIva, toDocumento._Cabecera._oDivisa._Decimales);
897 tnImportePortesIva = 0;
898 tnImporteDivPortesIva = 0;
900 tnImporteDivPortes = 0;
926 private decimal Retencion_Linea(
string tcArticulo,
string tcTipoIva, decimal tnImporte, decimal tnImporteDivisa, decimal tnImporteIva, decimal tnImporteDivisaIva, decimal tnPuntoVerde,
string tcTipoIva_Pverde,
bool tlRecEquivCliente, Dictionary<string, object> toDicCurReter, dynamic toDocumento,
bool tlLineaPortes =
false,
bool tlIncluirProntoPago =
true,
Articulo toArticulo = null)
928 string lcCliente = toDocumento._Cabecera._Cliente, lcTipo_Iva =
"", lcTipoIvaReter =
"";
929 decimal lnPrcPronto = toDocumento._Pie._DtoPP, lnImportePverde = 0.0M, lnImportePVerdeIVA = 0.0M, lnImpPronto = 0.0M, lnRetencionLinea = 0.0M, lnPrcIvaPverde = 0.0M, lnRecarreg = 0.0M;
930 decimal lnRetencionReter = 0.0M;
931 bool ll_Divisa =
false, llModo_RetReter =
false, llRecargoReter =
false;
933 ll_Divisa = this._lDivisa;
934 llModo_RetReter = Convert.ToBoolean(toDicCurReter[
"modo_ret"]);
935 lnRetencionReter = Convert.ToDecimal(toDicCurReter[
"retencion"]);
936 lcTipoIvaReter = Convert.ToString(toDicCurReter[
"tipo_iva"]);
937 llRecargoReter = Convert.ToBoolean(toDicCurReter[
"recargo"]);
941 if (!tlIncluirProntoPago)
945 bool llAplicarRetencion =
false;
950 if (ll_Divisa ==
true && !
string.IsNullOrWhiteSpace(toDocumento._Cabecera._Divisa) && toDocumento._Cabecera._Divisa !=
this._lcMonedaEmpresa)
958 llAplicarRetencion =
true;
960 if (!
string.IsNullOrWhiteSpace(tcArticulo))
966 llAplicarRetencion = Convert.ToString(toArticulo._Campo(
"retencion")) !=
"N";
985 int lnTiposIvaSujetos = toDocumento._NumTiposIvaSujetos;
989 int lnTiposIvaNoSujetos = toDocumento._NumTiposIvaNoSujetos;
992 bool llNoSujeto = toDocumento._Informacion_Tipo_Iva(tcTipoIva)[
"exento"];
993 if (lnTiposIvaSujetos>0 && lnTiposIvaNoSujetos>0 && llNoSujeto)
994 llAplicarRetencion =
false;
996 if (llAplicarRetencion)
999 if (llRecargoReter && llModo_RetReter ==
false)
1001 if (!
string.IsNullOrWhiteSpace(tcTipoIva))
1002 lcTipo_Iva = tcTipoIva;
1005 if (!
string.IsNullOrWhiteSpace(lcTipoIvaReter))
1006 lcTipo_Iva = lcTipoIvaReter;
1008 lcTipo_Iva = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_tipo_iva"));
1013 lnImportePverde = this._lPverde && !
string.IsNullOrWhiteSpace(tcArticulo) ? tnPuntoVerde : 0.0M;
1015 if (llModo_RetReter)
1024 if (lnPrcPronto != 0)
1025 lnImpPronto = tnImporteDivisa * lnPrcPronto / 100;
1029 lnRetencionLinea += (tnImporteDivisa - lnImpPronto) * lnRetencionReter / 100;
1036 if (lnPrcPronto != 0)
1038 lnImpPronto = tnImporte * lnPrcPronto / 100;
1039 lnImpPronto += (lnImportePverde * lnPrcPronto / 100);
1042 lnRetencionLinea += (tnImporte + lnImportePverde - lnImpPronto) * lnRetencionReter / 100;
1055 if (lnPrcPronto != 0)
1056 lnImpPronto = tnImporteDivisaIva * lnPrcPronto / 100;
1060 lnRetencionLinea += (tnImporteDivisaIva - lnImpPronto) * lnRetencionReter / 100;
1067 if (lnPrcPronto != 0)
1068 lnImpPronto = tnImporteIva * lnPrcPronto / 100;
1070 lnImportePVerdeIVA = 0.0M;
1072 if (this._lPverde && lnImportePverde != 0 && !
string.IsNullOrWhiteSpace(tcArticulo) && !
string.IsNullOrWhiteSpace(tcTipoIva) && !
string.IsNullOrWhiteSpace(lcCliente))
1079 lnPrcIvaPverde = toDocumento._Informacion_Tipo_Iva(tcTipoIva_Pverde)[
"iva"];
1080 lnPrcIvaPverde += (tlRecEquivCliente && (this._lRecivainc || toDocumento._Cabecera._IvaInc ==
false)) ? Convert.ToDecimal(toDocumento._Informacion_Tipo_Iva(tcTipoIva_Pverde)[
"recarg"]) : 0.0M;
1082 lnImportePVerdeIVA = (lnImportePverde * (1 + lnPrcIvaPverde / 100));
1084 if (lnPrcPronto != 0)
1085 lnImpPronto = lnImpPronto + (lnImportePVerdeIVA * lnPrcPronto / 100);
1087 lnRetencionLinea += (tnImporteIva + lnImportePVerdeIVA - lnImpPronto) * lnRetencionReter / 100;
1098 lnRecarreg = toDocumento._Informacion_Tipo_Iva(lcTipo_Iva)[
"recarg"];
1100 if (lnRecarreg != 0)
1113 if (tlLineaPortes ==
false && (toDocumento._Cabecera._IvaInc ==
false || (toDocumento._Cabecera._IvaInc ==
true &&
this._lRecivainc)))
1123 if (lnPrcPronto != 0)
1124 lnImpPronto = tnImporteDivisa * lnPrcPronto / 100;
1126 lnRetencionLinea += (tnImporteDivisa - lnImpPronto) * lnRecarreg / 100 * lnRetencionReter / 100;
1131 if (lnPrcPronto != 0)
1132 lnImpPronto = tnImporte * lnPrcPronto / 100;
1135 lnRetencionLinea += (tnImporte - lnImpPronto) * lnRecarreg / 100 * lnRetencionReter / 100;
1137 if (this._lPverde && lnImportePverde != 0)
1142 lnRecarreg = toDocumento._Informacion_Tipo_Iva(tcTipoIva_Pverde)[
"recarg"]; ;
1145 if (lnPrcPronto != 0)
1146 lnImpPronto = (lnImportePverde * lnPrcPronto / 100);
1148 lnRetencionLinea += (lnImportePverde - lnImpPronto) * lnRecarreg / 100 * lnRetencionReter / 100;
1156 return lnRetencionLinea;
1168 private Dictionary<string, object> Obtener_Condiciones_Retencion(dynamic toDocumento)
1170 bool llEsFactura =
false, llRecargo =
false;
1171 string lcNumFra =
"", lcTipo_Iva =
"";
1172 DataTable ldtRetSopor = null, ldtReter = null;
1173 Dictionary<string, object> loDicCurReter =
new Dictionary<string, object>();
1175 string lcEmpresa = toDocumento._Empresa;
1176 string lcCliente = toDocumento._Cabecera._oCliente._Codigo;
1178 if (
string.IsNullOrWhiteSpace(lcEmpresa) ||
string.IsNullOrWhiteSpace(lcCliente))
1179 return loDicCurReter;
1189 ldtReter = this._Informacion_RetEmpCli(lcEmpresa, lcCliente);
1190 if (ldtReter.Rows.Count > 0)
1191 _lHayRetencion =
true;
1197 !
string.IsNullOrWhiteSpace(toDocumento._Cabecera._Factura) && !
string.IsNullOrWhiteSpace(toDocumento._Asi))
1201 lcNumFra = toDocumento._Cabecera._Factura;
1207 ldtRetSopor = this._Informacion_RetSoporFact(toDocumento, lcNumFra);
1208 if (ldtReter.Rows.Count == 0)
1210 DataRow loRow = ldtReter.NewRow();
1211 loRow[
"recargo"] =
false;
1212 loRow[
"tipo_iva"] =
"";
1213 ldtReter.Rows.Add(loRow);
1215 ldtReter.Rows[0][
"retencion"] = ldtRetSopor.Rows.Count > 0 ? Convert.ToDecimal(ldtRetSopor.Rows[0][
"tipo_ret"]) : 0.0M;
1216 ldtReter.Rows[0][
"modo_ret"] = ldtRetSopor.Rows.Count > 0 ? (Convert.ToInt32(ldtRetSopor.Rows[0][
"modo_ret"]) == 1 ? true :
false) :
false;
1218 Dictionary<string, object> loDicIvareper = this._Informacion_IvareperFact(lcEmpresa, lcNumFra);
1219 lcTipo_Iva = Convert.ToString(loDicIvareper[
"tipo_iva"]);
1220 llRecargo = Convert.ToDecimal(loDicIvareper[
"recargo"]) != 0.0M;
1223 if (ldtReter.Rows.Count == 0)
1225 return loDicCurReter;
1227 if (
string.IsNullOrWhiteSpace(lcTipo_Iva))
1231 Cliente loCliente = toDocumento._Cabecera._oCliente;
1236 ldtReter.Rows[0][
"tipo_iva"] = lcTipo_Iva;
1237 ldtReter.Rows[0][
"recargo"] = llRecargo;
1247 ldtReter.Rows[0][
"retencion"] = toDocumento._Pie._RetencionPorcen;
1257 ldtReter.Rows[0][
"modo_ret"] = (Convert.ToInt32(toDocumento._Pie._RetencionModo) == 1);
1263 loDicCurReter.Add(
"retencion", Convert.ToDecimal(ldtReter.Rows[0][
"retencion"]));
1264 loDicCurReter.Add(
"modo_ret", Convert.ToBoolean(ldtReter.Rows[0][
"modo_ret"]));
1265 loDicCurReter.Add(
"tipo_iva", lcTipo_Iva);
1266 loDicCurReter.Add(
"recargo", llRecargo);
1268 return loDicCurReter;
1272 #endregion MÉTODOS PRIVADOS
override object _Campo(string tcNombreCampo)
Override del metodo _Campo para los mantenimientos
Clase documento de venta TPV
virtual void _Control_Label_Retencion(dynamic toFormPare, bool tlHayRetencion, bool tlFiscal=true, decimal tnTpc=0)
Mostrar/ocultar el label/textbox de retención
void _ReleaseQueryCaches()
Al salir del documento eliminar todos los datos de las caches de consultas.
ewMascara()
Crea una nueva instancia de la classe ewMascara.
string _TipoIVA
Nos permitirá indicar el código de TIPO DE IVA aplicado a este cliente
decimal _RetencionNoFiscalTPC
Nos permitirá aplicar el % de retención no fiscal que trabaja el cliente En caso que el usuario no ha...
Classe documento Factura de venta
virtual bool _Calcular_Retencion(dynamic toDocumento, out decimal tnImporteRetencion, out decimal tnPorcentajeRetencion, out string tcTipoRetencion)
Devuelve el importe de la retención del documento actual
KeyDiccionarioMascara
Clave para diccionario de máscaras
Classe de negocio para el cálculo de retenciones en documento de venta.
TipoRetencionVentas
Enumeración para identificar los tipos de retención en ventas
Proporciona características adicionales de las máscaras de Eurowin
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
Classe base dels documents.
bool _Recargo
Nos permitirá asignar si un cliente permite trabajar con retención fiscal
bool _RetencionNoFiscal
Nos permitirá asignar si un cliente permite trabajar con retención fiscal
decimal _Calcular_Retencion(dynamic toDocumento, Dictionary< string, object > toCondicionesRetencion=null)
Devuelve el importe de la retención (fiscal o no fiscal) correspondiente al documento de venta recibi...
virtual void _Control_Label_Retencion(dynamic toFormPare, bool tlHayRetencion, bool? tlSobreBase, bool tlFiscal=true, decimal tnTpc=0)
Mostrar/ocultar el label/textbox de retención
void Dispose()
Este código se agrega para implementar correctamente el patrón descartable.