From 3c205bda4472b369d9a87ad91c1a540569fc3362 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 23 Mar 2024 12:12:41 -0700 Subject: [PATCH 1/5] - activar la descarga personalizada --- Compras/RepCompras.aspx | 51 ++++++++++++----------- Compras/RepCompras.aspx.vb | 32 ++++++++++++--- Compras/RepComprasDetalle.aspx | 67 ++++++++++++++++++------------- Compras/RepComprasDetalle.aspx.vb | 22 ++++++++++ 4 files changed, 115 insertions(+), 57 deletions(-) diff --git a/Compras/RepCompras.aspx b/Compras/RepCompras.aspx index 9b735f488..c2c3b08bd 100644 --- a/Compras/RepCompras.aspx +++ b/Compras/RepCompras.aspx @@ -58,29 +58,34 @@ Reporte de Compras -
  • - PDF -
  • -
  • - Excel -
  • - - -
  • - Personalizar -
  • -
    -
    -
  • - Ver Dlls en pesos -
  • - - -
  • - Ver Grafica -
  • -
    -
    + + +
  • + PDF +
  • +
  • + Excel +
  • +
  • + Personalizar +
  • +
  • + Excel Personalizado +
  • +
  • + Ver Dlls en pesos +
  • + +
  • + Ver Grafica +
  • +
    + + + + + +
    diff --git a/Compras/RepCompras.aspx.vb b/Compras/RepCompras.aspx.vb index dc5b5fb03..9e5844ce5 100644 --- a/Compras/RepCompras.aspx.vb +++ b/Compras/RepCompras.aspx.vb @@ -8,7 +8,15 @@ Imports Microsoft.Reporting.WebForms Partial Class Compras_RepCompras Inherits ClsPaginas #Region "PROPIEDADES" + Private Property Personalizo As Integer + Get + Return ViewState("Personalizo").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("Personalizo") = value + End Set + End Property Private Property TCEspecifico As Double Get If ViewState("TCEspecifico") Is Nothing Then @@ -43,6 +51,7 @@ Partial Class Compras_RepCompras Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then + Personalizo = 0 CargaCombos() End If End Sub @@ -289,8 +298,16 @@ Partial Class Compras_RepCompras GvDatos.Columns(15).Visible = True Else GvDatos.Columns(15).Visible = False + End If + + + Personalizo = 1 + If Personalizo = 1 Then + ImgExcelPersonalizado.Visible = True + Else + ImgExcelPersonalizado.Visible = False End If - + UppAcciones.Update() UPDatos.Update() End Sub @@ -398,9 +415,14 @@ Partial Class Compras_RepCompras Protected Sub DdlVer_SelectedIndexChanged(sender As Object, e As EventArgs) CambioGrafica() - End Sub - + End Sub + #End Region - - + + Protected Sub ImgExcelPersonalizado_Click(sender As Object, e As EventArgs) Handles ImgExcelPersonalizado.Click + + GvDatos.ExportToExcel("Compras_" & NowADS().ToShortDateString) + 'GvDatos.ExportToExcelG("DetalleCompras_" & NowADS().ToShortDateString & ".xlsx") + End Sub + End Class diff --git a/Compras/RepComprasDetalle.aspx b/Compras/RepComprasDetalle.aspx index 820b840e8..df26c2813 100644 --- a/Compras/RepComprasDetalle.aspx +++ b/Compras/RepComprasDetalle.aspx @@ -3,37 +3,46 @@ <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> - <%----%> -
  • - Generar PDF -
  • + + + +
  • + Generar PDF +
  • -
  • - - Exportar Excel - -
  • -
  • - - Imprimir Remesa - -
  • - - -
  • - Personalizar -
  • -
    -
    -
  • - Ver Dlls en pesos -
  • - - -
  • - Ver Grafica -
  • +
  • + + Exportar Excel + +
  • +
  • + Excel Personalizado +
  • +
  • + + Imprimir Remesa + +
  • + +
  • + Personalizar +
  • + +
  • + Ver Dlls en pesos +
  • + +
  • + Ver Grafica +
  • +
    + + + + + +
    diff --git a/Compras/RepComprasDetalle.aspx.vb b/Compras/RepComprasDetalle.aspx.vb index b7e7c2946..669e79f5a 100644 --- a/Compras/RepComprasDetalle.aspx.vb +++ b/Compras/RepComprasDetalle.aspx.vb @@ -28,6 +28,15 @@ Partial Class Compras_RepComprasDetalle End Set End Property + Private Property Personalizo As Integer + Get + Return ViewState("Personalizo").ToString.ToEntero + End Get + + Set(value As Integer) + ViewState("Personalizo") = value + End Set + End Property Private Property TCEspecifico As Double Get If ViewState("TCEspecifico") Is Nothing Then @@ -62,6 +71,7 @@ Partial Class Compras_RepComprasDetalle Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then + Personalizo = 0 CargaCombos() CargaParametrosInicio() CargaDatos() @@ -460,10 +470,22 @@ Partial Class Compras_RepComprasDetalle GvDatos.Columns(14).Visible = ChkFecha.Checked GvDatos.Columns(15).Visible = ChkObs.Checked GvDatos.Columns(16).Visible = ChkDescripcion.Checked + + Personalizo = 1 + If Personalizo = 1 Then + ImgExcelPersonalizado.Visible = True + Else + ImgExcelPersonalizado.Visible = False + End If + UppAcciones.Update() UPDatos.Update() End Sub + Protected Sub ImgExcelPersonalizado_Click(sender As Object, e As EventArgs) Handles ImgExcelPersonalizado.Click + GvDatos.ExportToExcel("DetalleCompras_" & NowADS().ToShortDateString) + 'GvDatos.ExportToExcelG("DetalleCompras_" & NowADS().ToShortDateString & ".xlsx") + End Sub End Class From 8e1a8e8b4b6af5d8d74aeebc04f2acd73926750a Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 23 Mar 2024 12:13:08 -0700 Subject: [PATCH 2/5] --agregar lo de fraude --- Fraude/P1.aspx | 21 +++++++++++++++++++++ Fraude/P1.aspx.cs | 14 ++++++++++++++ Fraude/P1.png | Bin 0 -> 29450 bytes Fraude/P2.aspx | 21 +++++++++++++++++++++ Fraude/P2.aspx.cs | 14 ++++++++++++++ Fraude/P2.png | Bin 0 -> 26815 bytes Fraude/P3.aspx | 21 +++++++++++++++++++++ Fraude/P3.aspx.cs | 14 ++++++++++++++ Fraude/P3.png | Bin 0 -> 34618 bytes Fraude/P4.aspx | 21 +++++++++++++++++++++ Fraude/P4.aspx.cs | 14 ++++++++++++++ Fraude/P4.png | Bin 0 -> 31730 bytes Fraude/P5.aspx | 21 +++++++++++++++++++++ Fraude/P5.aspx.cs | 14 ++++++++++++++ Fraude/P5.png | Bin 0 -> 67283 bytes Fraude/P6.aspx | 21 +++++++++++++++++++++ Fraude/P6.aspx.cs | 14 ++++++++++++++ Fraude/P6.png | Bin 0 -> 68099 bytes 18 files changed, 210 insertions(+) create mode 100644 Fraude/P1.aspx create mode 100644 Fraude/P1.aspx.cs create mode 100644 Fraude/P1.png create mode 100644 Fraude/P2.aspx create mode 100644 Fraude/P2.aspx.cs create mode 100644 Fraude/P2.png create mode 100644 Fraude/P3.aspx create mode 100644 Fraude/P3.aspx.cs create mode 100644 Fraude/P3.png create mode 100644 Fraude/P4.aspx create mode 100644 Fraude/P4.aspx.cs create mode 100644 Fraude/P4.png create mode 100644 Fraude/P5.aspx create mode 100644 Fraude/P5.aspx.cs create mode 100644 Fraude/P5.png create mode 100644 Fraude/P6.aspx create mode 100644 Fraude/P6.aspx.cs create mode 100644 Fraude/P6.png diff --git a/Fraude/P1.aspx b/Fraude/P1.aspx new file mode 100644 index 000000000..b381e32dd --- /dev/null +++ b/Fraude/P1.aspx @@ -0,0 +1,21 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="P1.aspx.cs" Inherits="Fraude_P1" %> + + + + + + + Prevención y Detección de Fraudes + + + + + + + + + + + + + diff --git a/Fraude/P1.aspx.cs b/Fraude/P1.aspx.cs new file mode 100644 index 000000000..a2c27ca2e --- /dev/null +++ b/Fraude/P1.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P1 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P1.png b/Fraude/P1.png new file mode 100644 index 0000000000000000000000000000000000000000..efecff6332d0f5ca58f8172677637fc03e0e1456 GIT binary patch literal 29450 zcmc$`bzIb6zdeerAc`QMq=>YDGz_JrbPNMHl%lkB4yn?uz({ut9Wr!EGjw+|bPhS> z{owa|p65Q#J?GrtIropt>!maEVLr9@{_MThdas4QvZ6FTE*UNk4i3J|TM1PhoSP&# zIM=V;y$)=#5zko!Uar}yN{iv-cT=naA8s1GQFw!cQxuAK_Td)r`JUC=ceXe?Aeq#BB^d*qK;bJX13_1*eC?tRuecx0`MwPJP>MZQ8S~)J-z*oE2T!(qcJw#@)NGxR zYZO~_U*@;JJGE$Hs%6M_O;74FD(vj7d)?b1+aBSgN#MU8+n%H8Q>RK2QqnTuHgI0M zTomkIUIX4G;d>EWZ83f3b@ifrgXSji@`da!&DF=j-hI7KC#y;xhrfMA74fb%_4aam z9bcSMU(AhS6EA{1FvP&d`W_y9nkA3pIind7>AP3QeKx}E<+KoL^w)6~j|F&ujsH08 z>p$N~x-E7W*ownLAa?bV`IX?Rb6(^3kc+v(KJNrt9;SQWW@YALMH(G*C7!h;*8Kqb z5C_Mua2cPbcK7mP;X>)$8EV{{!Z~oY=a()6;)?;B$V<%VZ_yZ=lQQ>(1&I9Wf){vL3?_wjjRcX!c6zmKRz)L$hb^-OJ` z;TOfrbqlNRUQcC(oX;#nI3B;}7khHi$#CcN(Dg!T8Vo{=ieTIQ3G(bSqhC|mdEm+-XS$67Q0)Q zoc8`%=$#Ak?b4aErh=>cJNA%85SuF(&gHdStZ(y6e`vof->ZW+7UTn``a)`Ef1xt6 zetCS}b2*LJ7p05a6J4gd7&y8x*rs;nxfr>4_#}iHi{y(wJ1GOJ(*`JaUt)J!?Jp}B zfD6URF}4@;L+qV;To&on9d_*6dV3r%Qy;o+3=MBHp>&kHdF$VQH7?lgtAidsCtAi==8x9Unad zgtsnc_3&b^x~Kc;S-h~NQg?>-)#=wQh%Y4RuimkTLR@gK+HTh1zaK~cIxZ z@!9G@`e&Hso7~+!KN3A_EZY0)i#7`4eu)?RM%1py3&^Vz;ovKX{~4f+3(JF7pZ|-8 zlH>l04x8gVlycCO7c8-+j%}R~*6rzGaRag1g%uSQ4TE^%!P*!L-K~GXt}oVbHpfZD&hr1dmdR5rVy$$7|eh59}eJ3orx&7nrqma zs)Db^F%q>#1(vAfNqRz_85rQ2xy?d@4Am^QC}cY1dORkV9k(X?W{f}W%Y1n2r*6`S zR6aOX zD{s@edzZ^&OGarPV?v_UC`pqCb_Z)iEmDEFYM6JaSw6eF)_Fr4TvTq8wQepJ7K+ie zHF@pG;Y#_=HEvp0=<59Z?m{abxRQ}QCXU$fOgfb6fVnRpyk*0EN7!!VJ8$2dF>aJi zWcjuHVuH|HaQ_Dzo14MBIo?~(DgBJTg3cO!AD$8*GZk$~+lxN7;&Mq+#+&XyAvt+* z1yYs2IeB;>D>os8W~oHlq0}IVMSi!a<5rvvk~F@&MasV=2s5;IA}A=BLs7Q3dKfIu zVi%)7xVmbB7$Rn#MV1UCc2%ZNCYtuNwfS)kbq}92kwLdy^B^ymJ1ft}Hgn>2c4ibgxe7(9YyIys+q>A_@aSpCPMoGA_Lwbqq zX#vVuH@&mvWImQv7af+;J{C;Q7w1kDGa#6tV%A~lu-ZEfTc$*Gm~EoqEY`}>AryV| zia8})U(ZjEmWvyc6ayPT{S6UNX~ai6DC^*hX_JF6@|Q8$38Eg;CSbZEUNVY&zly)+kGibR23ER_$3?L3EUq!sVzU{?BWt%h+@*oj8mJc^O)Io z()8kp(GgHl*F?)`vgtndcRB2_9DABvsWBkE%}0N-sf@tVQOH%up`?x0GLdgIMtXad zQ95CDG~ldi7|m@>^$(=zx335EW_UEZ(9>F_qFRn}czJw-PI6gBLz_JY59@Au|MsTj zIh`FmaRp}6wrp>LdGef?s-^`$*?{NVo4O9y$uI)J^hVxKmENFV*tdpI5(PU7ePf91 z%IFR&P^~0T0j4NL1%--iC>T5ZGyX%)n7eSxS*eoXpvms9fXDQyU1C|lSVZ8H%~Msd z3Z}AJ)^5brz8}*$)}hC*5chqMp4<8Be5_InYFv}tq9rSwW8qOclW?8VDX7PZZE(XA zyuJrOv1d6?#VCZG2Sw#}VwqWyqVSFNbwS%D`OaGq*qj@&%C(t*!xjf1na|Rgy3jt{!F&Fs7Z$4Y=6-W^*KTougNPomdfWo; zqphh)BG5l%Ny)uJOy98hWf#-JCS})G)T4&Bwl?5lMIHhZQkO+%4&lf%cbpXG?s&oF zII+=Gh(>|#0kaAyPt)dP--J)*G?;J7Gsm>loXdS|N((X#CLNlbm{{i|-0P4vjnykv zfpSSY{vdXb%v~6Ix5v!dVoOY!p%}i`48BY%G3rS;V1^{vaKU3)2J-sP$}wdGpjha- z01{WP(k`pWK9bOT;xOZ9&I~FwCH~^`6zi?V#zx$`5cwgtst@;Bz4BX z6}*1V3ak-0uLBA6FMO%p5A$sQ#u#~GetZ{BK7S$IkVNp+xBdZq|Jy4p1kp6@7>U64 z3TkIB-C&fZx?G{ldL8sjzf6SW&8T z#$MrG6PUj^9)h9nVso_)n@`B>dQM&EVYg$SZe(b=YMFL9Z#EKfJRj?JB6uw5qPu<} zN%uH>rNFq6TKJ;f(tTb7f|;M0!j31p4P!6&Ydo-LiPZ>+jV)lvo!s(X+yzD^L6o+Nv^l30x06f0EB(n<14D3 z@f?3s@!sWjN$6S1Av!Nk{Osyjx$ywh7jk1iJ==CeJ$x#`bahNL_TAfc_FDi4K+$}^I{k3>o)5w0PLF8Nom;nH zojWWA7pgQV#$W?9z!iGfc~(8HT0y2Fm{CliHPp3otoUkR?s;!7t4=*VAjqUk$)%BtjpBFQf^VFGuedKx4gi}~MurZW`A)BB2fQxsHn4T4A#biH>k31E7WsS7t(22S zU+rMWnILxc`u{R0q340}iEir@m(Kwti1S5zfMEV~Ta@f#9`+ZftH_}7`sVwP`tlRr zqd%NQe&ElT$3gv{Q9+L%_v)b)j@#3~0zxh7K1nmfH8nLgQEEO>VQT~h?tw+@?zQ&{ zlhv?2xQ6cP>S|w8O->FAx|aVWUrSRnDlyRmv)Dde;{s*_?j@Aqdi`3J<95Q*dO_WV zGj!`knZ=ZRQc5LnF=m=eTWjfl> zAO;0)_TbUg_X7h1<9AMdWhp0K;o$J%{wtIHaKo3t)6)~Ud@gN1_Uc^#49jF4 zaE^T^(ansGj(%Vw!x&(-Mb-p z<2+&D_2zpW7qJzO!TCaC2lJz&QKVn-rBhE1Hz!PzKQ8joLcJJs2x}thQpd3Y zH*h}7vUuQHAFM%igj~;i589*Ky1KhF)NGlH%|`N(g)ji$KN5W}ZnnH|rcWvCj2uJc zHfJBMf?ZGcSCPHFShwpqnzT7P&j)sPcCO%9czAdKU1eqEy!GYmY*L~c<6PXC!k4pz zpMf%yD&Xe^1`kms{vnZA0{kzxGnG9{hrX^@Au}P? zgM@bo)#{AZ%3q_*gNT+FZ_tY}iDY6-`t=N?PUB5f5WYDk+uae>R*a64i{<$J`iP7h zq3(>XH{+OO1;LOCh>FKM3MXByULWfiHS+{Tx?g1TX-)2uCPuObw5i?Iiy4m)n3IEb zCYIAJ40HRP*C=MUSLrshk_GAsZwkUjy%iPW;zuR?@krS=rfamKp=$BgAY2AUby#k| zNXxxoagyb?8+~29rF{v;brN*hyu2#o(KufeOn`?toI$C@L)_HZ*x1^-FZ9&@o&W&j z6V*1xOFFpV3$3B82Zqkh&^ceiN`e-y;ICh=6%5($0!u%tZ>HSBM1QUGV{6Fj_-ZGL z(x3hpb4F)vt;nXGtLvme#40C3G2X^}UZG)i01;o{lckB$NjWV4U8L?S#K(uAm{~Kc z+jZDqQGxJqauV_^y4f6VymN#G-Ub%>c5JPJCafBcQWz@jOEirNj9$7^lsY}F%gS8b zn>{x6j?$03U?92sh`H}8cQ(wYrL#GZv_w5tLN80S#{YKE(R^LETCCe?F@}4!y6PMi z1Pda}MtLj6@y~TuN2>9+=qlGqYGkI_K<}4g6m3DL)3S-Aq`h7*IfuT=R;86gx-52` z5!1?dAk*>AJqVd#m69LB`8v-E-Yg8K%AH|}OS+=F$lg7%jP(ae8x2cq23 z&U?NS*um(=$HXuv{^^>Pjg=S7VB(YeYZBBVuA@~BPY39&zaiOWSjf25Pft&4coj2m z$J$6@)SLQ-_4$GCichsn0-S2*e`sXUzNW^U%jsp7GPfkhY}Sc5&IsfalwO z&;n~zmRZnJEk8_ zEuFJ1!Q_hE#crn#n;=$hr#}4QnJ6*I6!is`EURe-Q`jWF`S7fmeE)_M9&>DVU7znQ zjeKqY#=)#0otG2A8ReP1(S-QDyP)GvCeT5R*7;C%YqT{f?;=9RZGHEF0+3MXa?lX%il zUs){MAXdcx^k`dScDYj)lpNwDX*82q@ZE!hc|26bNYG)!3Jp4VWScFH*&Wbd`RPl5 z^BxTKo)K#r%1nCIvsW!ULf+$K*WSk?6xcVybVssA($oHVwII7XmE}7F zFpoy>nRwu?{Ig80K^is+;eixLhI4iMuf1-5cs45bK0dyHbdlHLydBk(a!s@e3g~;4 zjUTG`WWh{B${~>Pr=L3lWVv;08^$SKuvmyks5P9^V_6qv;lVG1%DO&{UBqcSOEV@g zBaiQ@4QDuM-k5;5#S1$22hgE)1|d&IyPA%IYQNXCx(Yp3bh9uJC&ei=$!!Rf?^+yD zR5;L|PHlTbIu5K+0Od4Oi3HWv6LEVF9hm6rKWF7L9-iKC9{wyXpu& zSy`Cd8FWDl<`2RQjf&k&OHaG(PWl6wyU4QeKUSO5=Y_td)sCNaA24D-^Irbr_BEk> zy`M=-9)FuNoOhuYN!xw$272>03wb3l<9);zzpEp-kT97AM%ek=jI-AppP(5QV&J;f zPDQVnMzS%RWkO({R@O~JK@^j=zc0ohflmYEap5Y-lRg2@Fq7YfHiCdoeGmwMgR_GFY#agq4-PyIzza!V9_P5fet&9 z8la77s7Ft}1y~XewDu|l5M@hvfp*ok+}DO^V8+P#WIUWv?%`KnQStFZ1}$a5B~P{m zvCQjbQSw|ECt;~L*m8F~GVUDj1@LMcLLXr*S2Y%5Q`um`JIgr_^MD$EhLqo2yS@Rj zj$}i~W#|#97SF(z<0E2C>UQ7YD~lTEA=tBNP9%b@5ik|)i&aDX7=konImZ>2&@$DE zEanYK%8zpw$P@K&@&aN$9@bBJWK>j#E@UyfnLaByfbxeZ5i--)Z;;LoUzw^1L-07* zH^;qP~LofS$0P>kbALdPSW&-M)k&h_-Qou&p!dUAe zvdREqwU?{_;tI@f?iZ!Go=dJEwYQ&r}0I&wba3AgE`q1m@{UdGp->UI5(6)uT4h*!1_-xxxTsS2B6YBtuiV=&!7nf4c+IFQc!Jl*qV&CxrX!F zt-9^z`@Bg2sLnO|;^E<$U?tbLwx%oX&CWDP0X~QNk3z{`P<`?vX1)0(cn-KH zVPRpD<-gCR2B%Uke)f;I)Lg?m+&_)`?d&Y6< zSO9P#lu9_}XHKSk+*pZm;lymtMZQkezJ`m8cy^AQ8F@M{q0ZnCrXgLpvb(ihWrdMj zK?cuQ$(3cv_8n`+pijy*D>Mo|fKWo9nX%7cD&gZRrX{5X1xok4`9$#gRgx81*Lv*k z_qac`=-np5iS5A^zw2g3&2RPIx;GCjxV2MkIH)dNXhw%m`Zoe#1H z$O8>CJ03vceLISH?0$8xEhfwRCMIHkm3~%9JT;S84R+#c;QsFVc-Nrq=-!tH^Ol*F z52!^bW-Kbs^q=a@GrMk03K%i}KlRVcs<@b0bfN9C}!!zG$OJVToWV5r_lDtT0DZNWpkP?D!QLvEALatQB!11&~ z6fSus1R8{5F>?rMQdxO2R9L+{<(~D~%4(ZOYeGy{w`+%>UvcV!e>-1$ve5#e;om>~ zs#`@jFDHzjL`Aq;?K%5~{BDRutTcXidqwwQDCjT;^pOQZ_>m_>GR4ZhFu9O-n`r1K zb*{r=m`d^R603@$U3@teT&4qZC*fgO1Z2oXR$?2iU^-A%dyp5g_SRI_o$x^8juz~f z#4RLBCwaPKAWI^gi0-Q*Oqn%*C+cN^2mKN+mg{V+c>y=_O07`HKczLt#1E^3}4;TqW$wnPUE_ z>L5%!cx&fZ^=(R(Vtt&Ql-x7P3=DV>XzZ5Mdu}sK@#>$)I7LLZI+K%=-?IErw;W43 z3nXP{)|<)O{dCsgjaO4sgA#Jy&vZa|nMl{t5dovs0YLc$@v*UT6~RWe)~rvTJb7CY z4Uh=fX0o{Ne0n^9x#SfTn81SZ(a{xlt6?20DTL+&eON&qp3L~}+_a37?~=sXS+d7a z`_n^n;vIMLby8rJ++x^f&Y%}4-YI__*d1B@P@$yRr$~J&M{-;7K>8YGhKp)zdMY^N zfvoS$D5G^x)$iH`&9T`yhsS0bu6W8_qqS~T10s~QyFU}b@pkrVdU|>yRNUX=h*DKz zr3+drdj0plBDtKZX_s@j+}3KIxS}F@-v&0YX3F2sW6{V@o218BXFiln*4WFon}u0E zUXe%?g7wo4-RK^~26Wlmp;YdyJrQ28E?Xb0`qCofs`~B0m>Z#4>~)45)J8oDI}Lm!P-^3uV1)|Jjr>D zT$fT1MbJD3>#~}X_9^0fVjK%ZLaptnY*@M1100MSo!Z7W%#>TvZ*m+e`6Ozr7uz1u z**UmspRCuK|9l5i$(;PLNVye9vL8RJ$bqA&#Bz^jUaoZZ47*qPMIdjx%HQ8Vif@Iy zH@dP@0vb8dfivkRI%d(`=h4AF50({i+IhyxtzGA?qt~j~%A>V8NcY>aRTkaE zR@y%#rlEk4mXgwEA@;-l$XozCf~dha0(D`Pl93z;2xO4LPB=to#VOS#Rk$RxbOpK6 z&d;85lKO?ses?%HRPj!_xUC{r7nycO;L+KcE7VxY8C#YkNBZ%ouxV>>4=XS<)|aIr zMrx9%eGZvSX#(mi^O=z8R5oe`kZz9`^BtvPN}0HmZ$OEtN5IF|7w%w)m;Fk=deo8& ztF<~V$32Ry%9OP|M=g0jX@PwqEl4$fRmPwE3mA?)R|@VI(ES9(0J+1XqY+B- zcqOAZGf=V`*~~lKYeG>SZz2P*UfHb}yJ;-k2u1r&t*-9&Pz?vKK9PUeEqE&3Wq%IE z=MzvsXTuK509#5>HUy04DI3@~cs7w0jmkHEQw%$*uAOIgOzZY9ctaUk_xYf`Yer11 z$M{9-@|4FA#(=A&wVY9H>n-MiWy?pI!LLksIG`5h%Ru=U-88jE0JMX%{Tu9?F}=_E zD)(tC0L>yTm(E)tc=aSZY+3@Pg+3e7%PN#L*F7x9#hp@B=GW~xwYTpx(CrG*(iSkE z_v{xEG+;Fuc9{d7)@gOu%L2?xq%!beHVb89gd9M(*kN57;sant{j3Sd{F~xdLlY=pa zZ>MFYBY$yv*M?QrlnJbST<^>IE)%ZPC4J7A;W|%rApFR;?W_ z{60h$h4=OPz>+WmF;ax#j3;&^lO8`0(cPt{p1*D97JPDQ_i2@KMmgcPU;YQ?RfXJU z9crCS)$A8~>7}bX>r@)+-&5ZiIfGJIqV*c?LE}t?u0>)#+lXBI9^u(vf7AExBN&$wZF6g;PBbBO zy-GE_f&_f{4VZq9nKS)0(BczVEY>N##5GW(DkRcdzag){zU221?}C5H0Xjq--C8J=H`^26x$AGfkn~b&_Lu%) zD(=GG7DBk9x2Bkr-oZklF*@O*)YS zxE`GFgLo|-wWKS9rYoMw_AVq#-Yv3Hn1u>y-tQDr@cXPobXv^LbFbi}@Ux-2ig9Tw zbl+Qf z%d~^fE+ajcZv4d|c@K-4?cA8;V4McIbasiir%mmezlDE|v3UX!af`ajGY97Gd*hLN zC9sGdN$IQ~(81ccyG4T5N=x=q*lL!^gi)P}-xbEygnjom+g$jKN&9LD72s#(afy*? zr#kW}@z(QcR(2^ReLg5kCKZwA@Rvv8$zyQ+I#W~kjczsk@kpibjGL}ZWi;Ei%M!4m z?|ke&zUAK7{5?aKJkI=ArUUvL&lhzz<51IJx;&R(CEb^#(fb4l|}lid$iJO zDvr|@jiileT73H1NMc*DVWTf3V2QFrV15L4sqff0^ua4sD;0dTM7Pt-O7W|P$)4*A z2|8IM6_Pd6ypQWmm2$jEGR@jcimKQMk_5_j>q2;RpA#f1F$)udqSRedN<{0ZBrTX0 zk>Cs~MqaSH$<^?4adGYK?d`@E+j9X>TS#bf=+{U(6JjSP;m^{67*^?;@6J#F{*n09-7% zGypY7uBvjmg8l#nknfTMiXVUT34kbd_w*pVAEf#KyoB|i)BvcK14}_00-Sh2o*+1b-03d4K?m=+Vj;of`FdezfgZ%+$% zjp%utA0Q`XET$^cGkuJJ%F%n<*)oFB7gT_TIWQ1T0tzC_SV{+~s9*3y2(HIA0cWnN zsu~dURcRz4A-STJ^|z((epS%7wk{%azf{ipNDdT63a|fN(Qz6R_Y-zGOjCpZ{{0(( zlNsKS|L_>$AQ4-4jO^^VQF>Jl3W17%pJ=(Lfj~?{Ung|n`tU8c+IOp+fVBwSmupxP zYx3(f<+|Y}vaIX~pt~jl;YYlQFL7|zfDWCNtehw;FLwf}Bt69?{30UmKzW+9K7h&T z2|2kOURPGm>B-5}l^Qn!{sN#Rq9doOE>)a@WYdcMSyf5Tz!1Ms1@ESyqzulR57{U& z8&RV_Ouyc(5yEHJ4qSZsYqSd>J*ujUtF1?C)8&O_ilTW-A?8JSFHrf7Eg$YG0lA$ zP#a)NW+WR&yM{&SmLO=IOkVIKw9P+cBKg7Al_fGLR7(Y)koA01Z|`@Knq8&$00Glv9YmcAAqI93yf~uxKU}iY-X=>#r60A z!&NSuFI!fYj~t-2Sp#;lA0asf8MF%v3#dV6$hv%Au3U7jqYHrP)9JQ0ZV#pEIGI~o z7BE}a=6Cr%ptPyY4w!kz?0Kc9g%Iu&5`J}PJYiW z=CNL2t=;E`|Frk)q3qljEO z(@^pPWX94Dhce??lfJf=u6oBW~3RLgc z4G;7_jTe3NrGIXc{ANT&M^JckFXvYGuB#X~w%q-^av;XEJk9VDcJkZvPVj*icle)+>~EdV?K)7Yuw*Qg1St2#Jy9g<-@~PzR%5lfNO~5u|DpA{mLA-d-=m67bYbS z8!C({H+B@^zNOIz<#~-&Y<$piAT>jlEm*iPQzMF9txqG-i1&R#lKm0xeIT8@{<=R2FNodb9yTUmjU&+nM?u3 zjrOB_r2vsI#e$&hfY7-;@WiAOrDB5mml4fN+i^=*rszsGeJZzaYDvw@c4MJhuD+QQ z2Sqj@QM`(?SOT0c_JyW2UKx)Qj+!V@+Lo4o!mA)~(vfkGEm~-X#8kH&q4#irNTb1cyICBWI$b z;!KD}NZv#`%|Ew(j!UU(WYK*JSTb#K7>*MkblR*WEAPAj?K;0%Mh=m5!WV0@*GF+1hw3r6VumNVrd{ zxla?GYC8vZ_Qd1hX!7Ndh#4OaIHg?Jt%d*MMBk<9>AUYT_S7~Vg$?Euz878|PKrAa zX?48w!BQVhehH7!!R&pJmd^ImAA>=D|Kfm%koM7#8ZyV&rqP=C#r`%eB-wkFq!6QA zneD2+Oy1K!GqW96Ek2lS2u_r>Zo`@keHh-X#Fw=lxT-e({>hN4O0@$E0eReVEBTg8 zXq1fsgDpP2q2glHIewc>J-;`hpJaMSVJV)TTf#SR%m9c+fEpYT%Org_PZVLEeU=a% z7Z+ry6Ym#+hf`mv84py+TB2T_Ncw5(>CHrQ83`4Y4<009T#0^Skk0c9mmG zSa*aHXo2-xq2)}i)7WcP|9eHeyH!gaAnSQAt$a+3rXW`tV7D6emIdZ04qX+$5z+ZF zf*94N%}%F0{@Ge}c0ldQ-J>$1tQ6BcugKI^jOrRZYH@;a^+lr>0d~6{nuAHi7xVAW}+m zskT-Rx%`zlKr){d(%lW1Gvm9l(_Vz*j{q!#v;G-P)AY5a?!k)~p0&zMe?QWJH6xuG zXNc{iydm{kNLKq-+ZT1%%3MIJQ;^qz&(N^#EVl4O=0HO7TXl1qqiC?V2$$vLKXlO3 z(@)wo-?Q%EMciKT(+-twap`2ziXL$eh_UEMmhCbdJ)nN{3J(>+zWkm?J?XN;=*bV)T4e4iDDT6Wk(y?c#E z`e1n^aNR@OaWPj`Mu{VTHot8m%D3E7$#P!iSLUAlW_wrsS*!^zr?7C%udM#;-kWCb z?zNbJ3!9j@xXC(?OOzothQO>6Y^FQZfbNKVNF@|S0#fqjD<~Nf25bHlQ3oXD4yjo{ zWoFE|Wapeq2MXL{3YQUAz*9i%Zti4Bi>OHKRcv6#X7oKf=d~{FT34*2$B|>zFgo!# zS1$2a-T6e_R5|b~9Gpcb+^-5L|Bgm+$SHuDfIomnmo9&Q4N3VAFpBfp$_s#N{{}|a zVgCw7fxYXz>ofkA+W!egb;dkgDS-e67a(>6Kbc?uH=_Qf&fV(AOG`^4$FrWTq129T zU$%jQL8&?UW&7Gt1NIi+oO>kpey<9)x5QFV-9Ipp>aU}rp@DL<-cSBFn~ZwE9`K-p zuHY%)TM_PB*8L|ueaC*3op@)N6z9u9t0hfgyD+ebAP@}y0oXMkbpwvxb--m4JNfS* zRo(0AuqRiCEh{e{y|>+}u{P>s{wxl#L=IE`oi@=uB+&0k5N3iHSXu1=?rxJ05CuiW z?#|9MZ=S;8gSyvwN>9i4&pv8>l#f$~WcQi?Fn2ZYmDdwW${L4FD73zEG}kTPvp+fg z)~7*M9UUE5TUueE_=&8MxrK$r=g%)$jWDyHhpMGKd@Pgy<`SnM2W?#!&)bTx@K;=beW@1|YrZ;`|h-ioumf6ciMA)JY^S zn@k|B0bF>?>GI3XbRRSQY|~ybxoHBwwZ5yXb~H5IG@dC&hiSl33Rouc zkWG}6NzO>Tg3ZlM2wnFG@lkKGc((?msEX4(|1dLZoEprg5UUo;36y5C&3RZY2KSLa zWUGR3*LUKxQmqWRys5xPAwfaqt=z?Gjuk`_(J)c36&biA1LK^6MDRUM9XY(Kwq1I?AP9lk>0 z5%WSy%vUJyI?iYHoXh6}A(Vm`Sc0(y!v7n)OAM!J#!6h&!&Oe$`H4M(=c9v6mkVYe z=yJ04GULis{1Vylwx~NAx|}>m7|Kbjg%*6sIue?)UN(@;pt~`Aa17vW#YhEt`ErP< zl)Ram(&v2hkEG057>=p~Im&K3#dMoc0a2iQ+KT@dv=rOd_3-dWCX&cWk?X*O6b`Gidi5Gi@5Pp{CIB^6g)BPnI1(^L zmB*#Ktbu-mN>WbN-+(cKVIV`UfbR!Jy~{W|UbUw`jy;`h@OYRD^UEfb`14Gya5@>Z z=|)9g`jKCEoB)8-cEvgZ7@muSng-1%{6e|$00W_`MQVx$IcF?ZH(Gw0AEj>6d>abz ztu?^kpz41cpS9U=3whUnLgPteNC2f;W&=qmySiK)fAd?#DADZV;$om8rzXd%_e^EU zQh>7jw#S02h&^IA4QVB1*S}Yg>y(}KXr6-oI!>X~)qTBOUR~I0dCUOllmk^l(xlx6 zMxAixWi)F4lia+aE~7lS0T@#?{&34P4bwv#NvfTdx5O&kfetb69K_;U?}HY_BvfRI zZ4ZhcT7CNT0?pPp_(CzonHHVzN0xe`18-jVHq6|kQ(RQUES|Z?v^GEiYEi;Um_e#9 zX=7{=#GCD{g(srVaoujJ#e&Al%0}K$O|wu^L+V~+{eFjq&A8gllAQ&INArt{(t=jK zf$M*sjBF7vt|A9k^njszG??gCfSwS&8E6G2wquM(-fj*`NV=u9HIzbNe*YITd0YC# z5@woTVgIQ`j`G7yt=o9~fT{oXjz6!7ZMNNf)4ein^qp*Xufl)AMEYKfV$Oy9WJ53O z@M(5oxr){}>K`&59(5UTMZR_4U#?IRLHq~y5xwpUOkPW9kz`nGWO_?e;MAsH7<^gr z{OKL7F-cXkyXMcR!Z`#ZFbnkfJ`J}1(Eaw{9|g|bV8?OP*JvN*xERBpbyTqSPmw4r z4j3eA3WF^*VI9@pxl5gmv70SV09wp)5r$y?^@83VLY;B@W)R@y`y22LZ9|P&W@bkw zg{N!VEPt_?eflI(OrZgRH4g3Bk7(zs0~TTGBPeT2Aho+n6SjY2{3Q_)kwpdD-tGfu zMf{x{(v+}W=3?BcfyYiwmNbJ@={o$0d=W06ot#Ds_>8A>#~^l2#qNw?;c@RWz&h`@ zWKvh89-DcNQj6^fwS$(sot92mGL;2X%6UUtiqdVWW#R-4m^bAWBIB7@sKm&<6_MRe zK^%$J@u^qLP9WoVl1cjMo9DBi!*44E;j%i<=RYj5Wz(rti$b~dnXym{tSzj5jrci{ zI)E70&MP-Ocn#fJ>z}i%1#8RrMthKAXFf9~K8ok}Ac{GWO$KDZHJd2JHb;7*IxbFq z_8Ro%c_UN2yhamXeM0%4p7csOySq=@I)A?VFS=oO>lIEp&%5~B>reEzY}j}kkLKj$ zM0Zw8-Uhi=*Z<|gNRj2bdG5$vL6R#dV&4M3``HFi_O6@~f4d6m1FYPy;b?jQxNNc1 zVk+kH&K*zy8DPRFMSdZkI|H7v3qY%DKR7%TfngQ_n+C9;tbHey8~nc+F^Zo5!6q}e zPo;If!vFRl3oZvoZf$J=81Uz1qq*kOKY+*oFB?DpmAnZcx&I>0`ro?x|0foX|DSRP zxHL_C7iYn9J+7RrxnDaxU@z0hlYV9jn*e|rr`~kpvl30lpi}AHf-s7c9j%m4H(}$wTuTxUjDv7CO z(Yq&k{VEB}oN>8%IapwpzkPjtGP=NRkP}lOPeWxH#hhGhhNDL=cTW>9Ym@}?>g(^_dg3nC*LfM|k|`Uf9`vZ>mN$!O z5H+~1b0hETWwn<7RZ8}`{#C0hk2s%^i0yvyu*{RGTi(ZgXmK$_dL~+@K1knnQ3I(? z9&9*$NR3cy1Y!je9uF`21~1RMKMcKocC~YEy|Wj=)wTVu6$WAqN=06_Ky*8Kh8}Z? z>LG~f+n9;1#-`UPzUvY&e3ed{qWn0SZ2aCIlJYoL`Yy*g-^?a1<-% zp?Wx8R}G zda&+JCv$0bo(MliY@Y|Bu0p@EJ?^Kae7g@>p}n>AbrTHpT@3aVfFpFBkWk^6z3BhVtJ!va8H{OV{|;ot4LOXK6f<$E+&8x~`H z2yg)<{w$nT;!i@J^M4fv-U+R|zHVe;vE}(tq{LA`VNf1YFLrFX}>mg@`HxeoXD)2?bJS+J`|^!=ZmuFm~$IR?!KG&c*W{>5eW z4>J0})`#FvV8Nc_@7!@=Unbhr1BwIccXm%PGBgCF`+@7FpDO^mv9e+e9ersh0m?`A zs-Du}IhEgeZ>t5nn`{YjlO)ratQ;0-8{<}Y6=)4Gk=+c1HMPsyUEpke_qPl*%+=3r zSbnatGD^y+e&@~|tur%U(*&|;5}fxRp&#xhcMJhy{ywn@U^JY+e*3d5pf#NY>D4$N z3}%750b5JC({9Ruab7{e_WtUC$%igu(s31NeX+$%ZM^Ebv4aC|dUjB7FpzKHX2q#* zK{gP~1K=MB2Fu_D7s%<=KYn}clP;kQ+~X5IPI%h@+iWLLbl{(fPQjO!me#=lR8*G* z?sx#)Y)z@v$DU}yBV|v^DVTY6XDY?eY>U$$mlKLy*4VR5p;7Nrr=4`d*NQE&kcjyXHUTiX1_Ihp1F!0nechNQ*cg~@ET zovOk%`AStMQiNe3vN%3n9^;~-3zJ%w&QLWMyDr#AHF+%BPI+!La=nv}{m4h+T3)c7 zt`dbG;g66TOlb;LAr>6wPg-O7+U=g{<~Uae^1G^->*mCb@;*?GHvNLPV!1D)E3SAz z3XQcypTLQvV-O|0{o`3gZ>j>F=U=BCs2j|j440{9)0P+~xG1%5b%&<1DSut@tsba` zxmTv%rbEJQw58POZ@>POo&A<28S*1U0;|1f{vCzyDeGL9LWVN;^Fgcir{=$Uwa*vA zr=C?RhVKnx(aO|0W>i!9WSTQtSXf1H3VFWm8^_D^8Ga<5HpI-+Xx?!uao|F#K1QDW zJ=Hk{0!Nn&o3j*jmE~-aT3{)Ra0KLpg0}Kv^axc%*7m^LWj?6d=n)T4 z)|;;=uC;1yX^HF3S_DXFzgXkJ`UoN;BQ9j*_Fy*nDKm*Q1aQ{eQ?wETNyuYxn;2L^QpVblXL9u(H8TynOY`Iz zx$p3XHbq>w8wSIS&5O(I)I`*qD;Nhf-pKM~ej3a@|5*pP3TGzz8m&!Z4y1rTVIU@3 zf@m&l1#IN07}P~p#8KhJnqQpWu%Zk;mtzDQ1<0e_!@ef-Lz1XR)9X89P@ZR18h?GO*t7Ah10qR}X*Dz-U~-K?(tJvz^Z zHUG6Y#ME|bdsnRN@#By(A%fQ)~xEuvou7-`m;VN#FMrIlRI=S5Z(c*z_2$0Y`VzeEZ^stlAnJ<4?l0>+;QlsrY z(uY$WFEKNW#bjls@o~&(W)IHii2jQq$p^Kn7QJ*03yUD=kk<%0eIBV@e#rWXa=ch9nBCJkEJIW$7)GAQgE1 ze&Pe$TKd-j{}*!Dh$2mYC7DBk({t(H&06&V*1()6ol$#}{#Thn)0C>nbW(hFlzMZ7 zFwiC>iI18Y9_+j@;1St|4n~R#IQQKfVy4X6##`iBm(XyK!+xX#8U`U>lJ~3o7lz{j z5EWVSQ#50`nV)=CGM2lDXAS%z5Vx61*xDRWy`g-M7DaRy+^pnWjkN#ziK=0s3x~0Kotj5D85P9RvkJM<7UVcSYUjp7WLSoiV;~ z|8xlCP2M+a&H2pd`K{U~MGQ!G0+abRz%#(C*G__2%mI@D-k_OPK0N7c^+?Zqzt!6g z4xge32rtz7&Y!0lps4zgnA21ldI&GhT}tnaNHLub)Js{ivI|;)mV*xzB<>XoXG(%W zGS;^yNi6&*Z`NqjwP6xzMl|K<~HUF+uk z*9*;<-NjRs&_g+?6qgi2q&G{sFPWuYE*%-f`@@@ktUAJcmgeiR)x|j0r}9tuzN?W_ z-K7^EtV8>W_^Rj~kvAzJ{`~&%@s4es-csVYD*m6HNYykj&u>1r{;y6XGzM(QxnKMt zf$U3Hq+l*Rxf*x_zTB}p2}*wnW-JNnJ()QmBqj=#=l*4Ox3Y$?@6<4^&u6LMqeCtv zFy}b6ivFm-v$T~R0V;=6!c$x>Gh8jCp}Zg#_icQPL(3}!>-~`|XbhuVt-Rs2jCv+) zBR6tGKX2l4qmUT2Vt}V_R7tlhws%BOVEi5R@{-e&-O(Sv-+4}aa%@o$hv0yaCs_IL zXCg0(owtt7{E?$5poUi;Y9in`7Bn&rFZS%jb%}JzK@Uxv_i;62m0-G)%22$&b#}Md zdH;xKzP2aw9A0>g^c*f_bvunLybY=UOi2o;vc0Ib#0497${iGD>orS0;cke?vqcjj z^&|+AV@k51iI62i!n})v#3$&4u0B2%#-4NIV7e5|?qF|k9}=P(^0C@gOItfKGIBW7 z^ld)7Z2uR6sy*&^)6Ttefw^qf>hEcg(>}Ix{<_WK(4Feg));-zIvS_| zI>B{c-wkT+7vz6mq@_^jNXgfagEIT)FlaFDpN2t~Bbg3coCIcU@NKX0p6|=mPEeX$ zye4}+4)VOG3|Ky>9HTJuGUE8Hz26ZJ)T$N~{CyxptR9%12hH@W<3D?kp10Hs_)mF5 z)E2|fdVk4^nxwd1Z}h9b=<5g-cl*_M%w#0{7OVqg&+;=s`C7Jg9VKiLMM{7C_~DQ< z*xQTru;B_u|Ep7}S`S@Gkggod0v0V=-lJhi;2+AIO8KYo^!?8Zqy7Tb;D^2&fv^Y& z`q5a_{A=@(o%b9unhM_#p!u3lO>2{RK#=>(7ZlalR8>~?7n`0^4H;GB9eS9?8o-Qb z%v^zy$u?B;bM0-^2&F^A_YlqDf5nlNDgLrF_0*o>;v#^F1^jBuJD%w^YimJT2pr) z9Cz(%<8&h=*4HCU%JJY=QdyrcMV|v+#YhN? zedDvJM_;Jh)ju;+_+G-O0QnsK*z;13tP45gb#+d-C!VP2PCuooS!Q#v-5(ejNK$7m zty@ovrdqnBK)4%}K0o7MpI;PhK5^K0xbTS1$``a&8ATeIK8Nnjnal;*9ie@pBZ;zT(aX%xSD#Vz&rL`)h*}tmoDzj7i5G_l7=_xdGkM0p7rlE= z3&l%xhRM7vbBX!W;L}Mn6W7O{c?4vh_svo*KKD_2f*c&-um0s>N9?nA(;}jGn-Qv4 z$r@K6HKz7c!Q{$u%^2Jzy(!bj{g^z@G})Jzmm&vLw9G>caS!ZQ8Qoz#@b7hkfB6=1m=wWTe zt!gK^+J}OZ*I4H=*je9IG4m9L{r-$X6N`d;q5U0xGTHvI-HuJkqM!ln03)Sn{AtIv zWKm)R=>I6*SK@0XBIwz@nqX7l=2R;4=_^ybl^im?{t<(Kv2Q-2<{xnUw34C8N)^x2=B~5B3JZkG!PB+3w(xGprPzl0#k%J$Jhc_g z@?AcVZXD)>mQHUGG4Gs|HYB|Zkju@D`O|LHZEoPb8AiG<;7lO`G+vDE_m;{J&gsQ=l!GEVLp6BF(SkS+I4Fqewo@?!OvAw3^_ zt)??r3|K3di;>|>nHEVXwNPtm3AAiF$T>fC&MPe<_Sh+OZ*iNkn#G^4KX@TQ^`TmBQexpCz zG+?vcokEp9`2cbO;s{n2q2AB;r&#DJB&j7i0s8HRw^%5JNmzWjy-}v5_+O#|+Qw-g z;}R0EgDWE!O?}|fnD$8VEzj&eI&oe0+J0$!*o**;Qzv-33G^U+-Rk77p5Em(0u@{A znasw6rWKUe0OLZ!KVgNbp}K{4d*w-B!lyOI8v)95Eaz2Vi{=`Ccg^9YUYY_Hp>U z`*o$Iuy|9R%2*r5VX4mU~N9opAm@V%=sBDBY*K7L9&!)DFrglMVgQBJs5b!k{yk{TXT z%M^^9P8mXtAx&(BcW{)~$-UbW^bqDp;|G4ax=Fd&WIToY^IXQ<^KpI1A%-&i=glae z+ZwnA6?@}xT=l322Thp0*%|ejoEdgeee-MWi6g!&j%y)1$5b>*#}G)|vHBWP!KUox7yIpYpjY>I|6 z8h;o@IJyubPUDdskLY!9#(DR4@yOSD7R?<22VfLERxq#))jYQeaO@&5x@~RmEFJ7Mh;X>AxXJv9 z`h%wIXLWh&;`Ye2YQGYg1Dt14r|}a*EnlkWe#J09knGD}OHae3M76+k_W0JXqKtyZ zna}ObXp=ky{C~`JZPahn8HH|>9Jg*#OP`)vwL>)G03rlxs-Kmnn2R>#0~li^|8F%@ z32s!wGuo1dtUYR7j5%@g|q(KY1Ui7)_mLQ{13TXax7fb>$g*0M)udI zVvUkJ<>pBY{O@2f`Au!DiCAX7XKh)Tgqj-FpHUaM0m|jKt)N(c>p6>$@=J$~g4MQY z0PuSIZG-mK}s zbGFZac&8{)0|eHt)Izi5xxhFMO`t{^zkfHRcX(Xu{409=FaHe?KfC+cY}7jk>hfYs z0i(uL3Uy2`XMG$*j{`ug7+b=aY+ub@=p}jSDlxkOf#`Athh&9X+hbZaOT1|R75%(S` zpFVMmPpx*QnusITaUdO#o^*Gf6S7bjJKU!=LXz5=h8$dKiXsA%o}&#E{pFRQ-qF&P zXK4A{txan@>8?OswH{Ke&SOkCg_RpFrwNz)$EbD=8#^TUc>QJsUC&aL{a}UD;Mym} zf9j4i$ik?!&5RNzTVJ9Q`8yKNba%z69y3u*ckfP*E38~!D-Eryu9g>-Ss8LJEwTV% z^Yaz&$JDvhLR6-hfrO|4jlObS_^FT>Dl<|?uQCc z+V2@mWT1bs+5s%CKN%xoFOWU5`fMYev7!ta_}2N0rcxIqYKn{OpT|)IkeeqpT#y2$ z)8BztD&pC-CW4vQct&nRM@u@#S|L{U&ls--ojY8@+%9GUn_eQgT+c(~!ZP~H%H6~( z{4R_;dhJ>|_vcUQqyw`XW<4P`*5P_qy=4$rPo~ZrY(7O|tvvd94w3Vi&4t!@nPW6O z664~ja%$HkZ&8LN=ZjFwSC9P!G5ob^S1i`9!bPKV>5@^iKAhw={gloD!AIfnkUT^u zoH{MI=>QmD0=i*n>^i6b&=Bet3ylrJ*Q65_==#eK1r&^OO<(ku{*I2sUKO&1X(Yc4Z z-0Vgn){h0b1zHu8&qa_G-3ur<%DM$!Sgj&Qa|z#cPr6jG8)DRRzkHs+5P@e#Mivd_ zT+Me2o<|7vCc-3fNh!4(1gkVN3-{ z-_V>iWv*tMEbmK2zqmYz7hLpxet&RhqsFiJobT-qKnFLOyIJivw$5)dig`JRn20zK zPPRc{ylox~ZglxB3;^s5s8joG7Vq4;byc)e*_cpe;IwEw5hp}ixP)^kS{~QyIsfPjrJzF^9d&L#zf zi~lZTPw-9xH{3MmcsqlYGQIre;n3ARfJ!pr^jsN6gW8f+%~a(VNg}jHzi-jhjVZojC$RXi%CmMqZC78+)u)Y zZq_hrH7g{4f3Tn`_vWpaxiJ$Sh82l@wP!n}7jT2eAuy-gxUNl=H12|&asHzYIWD!AKZ+<;gb4!&7|6T1~s-R&07npZ060+T=zoa=pCp z?*2M~nMio>?NRzEPa(TGLCXd+%@7TKz(7jyZHHZ@9oN+o3}=FK8gzFxx$&}yI%ti1 z$>=U75QpU@B$)OJ8mUfkv8P*Jp`i!BE0*C31qGn~s6=Po(0!+T1$LkdbMf%_D506B zc~4ElV~`hdD0{yX#aHJ~jk6{D`#R~9a|O<+Tj5Stm_68e_K8;iW_s33Z~9Z|vj8Ll z?i@+|!?0UJ@bcGpU>t5dl&1%iwA z4u(wZA?>`T4N{eJpl^e8Bwo~J`9n~9RmFgIul5mrVHus^m|{+4oKuKl;EHfQm8YlQ zEC;9vn7z5P_w>?B(`IH^HvO6T=+tU^N4l^*aJ7N164{mq1&x<0BJ7MD_!bSX6;*df zc^bwPRIxD_=P*^>^g^9>mlM$*de!a_I*@??>S*X>`K&svR6K`K%Fz(MghQIbD-w;F~!%{e@vfKP* zl;6D2(oco(@`>d9??Y8C2(X)Y+u|8RkmfNKgi-Ej1k)(;d=;$CiEgO1uA1ZRU13s}4Vl23z^Qenk~FGT>w z)Ec-&Xfn;w2EU4*g1;q7H(shl`TxV9`HyTHGjK~w{g!)sKhSDBUq75f1MLjBKpcLe zR!<&0SlBfRHLIiQvTs|99FI#Ld^oALvksj9)E}!c<89;&RRMx6_{aI?U&PD*#}%hv z3a0{4$2M2xf4P}tR|yA&^YRT+JpffoQhzMByI0+jAK|@%XjoaPK4=Zy-pwMUfLtkX z)}+FAmeeixTWta3UKmuHARC$o;7`UK&R-e|8z=i4t^o54Y@9Q6|09*AnpLvBQ&TN) z54lMh`1)?_J4}6j|D8E%bISY)6@!mly7M7xYjPlTkDGkp@J(Pe;+!&JJ<(=iYZHsH zRD2v9sCpoQYsZ^`Ygs#MDv)K=lZViIPFO~&60zO4dm?C#w4E>^uf-?xf>u(3rtO& z9QzsD;`Ki5QRxTs!J71XKY|ugZ44HGVd`MkTwIwuLNsJRVmZrKr1k;)lzNW@xDWK{ zEGpm#1V$<|lcqRF_D^0J-z9MA@&|MD`&l-y?a0vmZ=uTG*J8kl4KHG%q@b8=mDz)V zsst|XpeqA&>2g zAGFMh*AL1cgfsyF?${UVu>+2`6&omX;))*2woLb^z9S3G`4w@gmUNr#dFts24=QH`$uI$Or;0et@(C_cnfApnrSR0GjTo|6-Tmq{QV0VMlH|h`eBSRH@ zGJj1ssD~Snvi27qpA5~QemQ7fW;_0TMH)L0jRya|`aeceE+g_b&dkgJwWa%g^a(~r z&~eI(-in*OJDZdr5#KxjUVP?gC#yOD7&w`wuw}}E;cTVjA?Jiy>JcG*&7KiV!0pp* zV^4K?y=}Dx=_>HIKoraiIP`zoXZQf_2~3*>3^Qit=F(DAAswK7N@C-)6l<3`dUgy2W?5;PQRt@h9Ov1Z@ z(o@tw!s&60=8>SU9Y5+d(m~I38I28JXs z4RXD62jsRP$C5m$X>@Z68`Q~t~j>QU-CTpK0=$k8el)^jXcJzYaG-)#Q_^66 z|1=l4cg3}!AW36)S}zDM2wNQcu{b-Mnw4cl&oE^6?g_Sg#2k8i8XFRE!O+>-BBT$Z zOENYXLq3Q&HeBsi8p|YRO_&LfCj%AFFvStU`gFGFq@_z=+kj#kLisKo`AR?+a;6l4 z(1osBU{ie;G{2=Llr%Ind`?|7zL+~y2!;HG@rL7~8C#mnl(<*G$q%PpSkd|sdzr(_ z%MU`n_fUwgZIKTTFcz7q32^|dO2@K&4qPOZr5F^%ZjBe9(BHbu(_ z5(ngXa5ZJBK)wT{rY+giSb`(B3~M}P%fQ)L?i@9MC13t}o^Ti>z)SMh+Wc;UkL}#q zv+l4d#O&VQ-ZW>@gOr5VU6$Z{~^Esso524o$9B_CeApv7>cVT%n9t0?cfuMIB7f);>_WE@3Cv`cp*K8%cH zFoQJSQ_9Me{^uVn;E)W%oo`RTq}lS`=OlTI)4^HIeJum$G{VQFqd`lSJ(rH%Ak%zx zn4sk)SHH+3Xv1>OmKF5qVTBLou0FqY?*8ZzIvx0~NzP^KcP5o-1tQsXNwzP*839cR zwBw&;YQztma?XdG&wjSAd;J<$L?IcnwY*%G1@%8;>SL>VLj7MZk}|xQ+)(6}roUsy zYOofB9ThM1JAD(RloU(rJji;4B`T$$cQ$AxL)q`ucPd-o+g=(}<6bRKos#qAPM$d7 zhu!@wvy+e#bBQd+qdXbe7m$#46)@VaI>UOEmk7CB+{I%TO-{yw$kB`V^6KhpNIO(= zsWi_KKMxKDsYxWp?w_!=wWagpfcX@mI!q^4N8@dzr*kBSFcg)Jjt=442WLgKuI6|2 z@J=)D5nWC3&yy=c$BR7f%M3#dk0hX}RBh*M=W?=$NSLEiW`inln1`kG5f6T;a^k$d zfz!*s_}d(QKTpK@AGe_Y?VkO&n^iXH`ctsR#Kp%KM65|EDh~Gkl`J2TntGPo9Bv^E zAP`D+j@bphPT#1i7sl4>)^qS?&F)8l2>4p&-PUcRmHr{nys>k3Q#`D7GDr_uXkrr* zHrCdfa&iu%Z;RfE3PL`C&gE#jwZaw?iTq6iPb)hh z?{hl@%vo#S8OqS@?-H<*>|&M!b%E7VsN6eZ7dsN!zJMZm*>d+%b_s}d`_Z`rOC@Lp z6kXCz2$5z7H1Fp$r0pq48$|*giq!}1j50$(kX6x#c}oSlF?t9`M1G}iHY&#_z@=p5 zQq(&38Nq)W;b3HauO5cKgwB}3G8x2G61&P}%=T4qX)yGSDIDFFneZ%rE;h4`M7BSQ zbSJAu>ooIJ;?jBjr?u@XP-a!e&8$cbIHKu09fb~d-HyDaTTZxZx75TBCm(4s!o$hZ z2pvQPzb1-28h@S5W&BFOu)6dmH7+|Xm&Cpy$|+Dc6-Oi0A`~8c4O?>O0lqiDr4XvV z4fe8-+Y`X3oAz0uqM-rUn|Aa-gw4pnK(V5<)a}--^RCjvfU9Vj1(?}M1ow$21=@zr zSYUrrs=Mrxzb=^l$K*zh0hUL_?=Lp^+~T75PH!I7HJIvBpK>RSv6io92AdJzVTGv# zEnEi`O;sGUog7p9$$^$Hw5w0xcMzgNK>CUVK{G2&f*dda( zcx+Dq<&hB7+AwG+f*80TE~7lVHDK)Gluhy{bL2ZcCh=C8Otd1gC>~CX_7`k8$3$}B ziW7|BoYyy%(3*Gi`6I(xEIfG*awDmb>upY5^E6+_BmBWx@R=0av4+qmcEY(#pR&uY zMMcd5?5)qjz_%a3T8Jupf2rQXx}@d#ShVCA*{a;Hd7>>rO+Ce zB`%MwPcUbuQ*?PE)*jsyB@wBmglr!o#m@JeTHG5P)*FS?5K(f@xBbHlJ7opT_Q)MY z85TE2g&8uFhBZtPJe)(7>WBGQ6dQ}ob!Nlc+uQR^uUGIN<9_{!X)(Y3YEI?*FjJH$ z(9vnWD&pR|@xBL-Deu(g`?~>~6gYC#s-kG@oawdM?tc~PLI`nbUIu3%JGgOjAh!T>Y zYa_Eg(CzCmMRoi|n5wKSYXhA`TpZYOvtcV5InM%L4-P!o3;>G9>#-~lnZv7VbQS9= zEI{iS2t3f(wg`>osw_c2jmU-X=2Z*1SRSH|7HJ%7sN zxB}lf&aJ^tky4hx9y4IJGtcq3Us%cWVVq0W+Ib?+d5H>R7)p~Zx~%@R?{U@ToZ_IX zbAGgc{E<=R0UR|nDy1^g7~O~0zHQ{@aP|AYewVt18;QyvtD5rtfr2uvVmt?zEOSGI zMs6irV2QT4?v(}gD2J;(HvZ?~=_YYwIIWgKVJUjnk2(FA7ao?O^}a<5*o=NX8F9A? zPrPt4;+3 z1vlh& zRnrUf6c0c|aW{=NeaSbVWP&$lQ7*P;ljczT5S*?+#i~8L3+n9>$9;f_UxL1?bIv_|r*w*M|(>zE?D;2<_enozYi5d=+mau=#+S8EPmBf@BXs z#K9ZfXqiWEYC+cD|0wug%=I{S_QX}4_ cHTmEi>snZ8F0QK(?58xknuZ!B>bD;K7txES`2YX_ literal 0 HcmV?d00001 diff --git a/Fraude/P2.aspx b/Fraude/P2.aspx new file mode 100644 index 000000000..af816c8e0 --- /dev/null +++ b/Fraude/P2.aspx @@ -0,0 +1,21 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="P2.aspx.cs" Inherits="Fraude_P2" %> + + + + + + + Prevención y Detección de Fraudes + + + + + + + + + + + + + diff --git a/Fraude/P2.aspx.cs b/Fraude/P2.aspx.cs new file mode 100644 index 000000000..0ee0cb8bc --- /dev/null +++ b/Fraude/P2.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P2 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P2.png b/Fraude/P2.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7fca5a70d639229aee4cdb4fa8e0057195e3b0 GIT binary patch literal 26815 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 X + + + + + + + Prevención y Detección de Fraudes - Tablero + + + + + + + + + + + + + diff --git a/Fraude/P3.aspx.cs b/Fraude/P3.aspx.cs new file mode 100644 index 000000000..d1599310b --- /dev/null +++ b/Fraude/P3.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P3 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P3.png b/Fraude/P3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f07a64ab3a081ba173e863dea61eb2b3c91356c GIT binary patch literal 34618 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 V-I`mCjsAb`Ylg6f*BV~H{SOJSN>l&< literal 0 HcmV?d00001 diff --git a/Fraude/P4.aspx b/Fraude/P4.aspx new file mode 100644 index 000000000..f4e20aee3 --- /dev/null +++ b/Fraude/P4.aspx @@ -0,0 +1,21 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="P4.aspx.cs" Inherits="Fraude_P4" %> + + + + + + + Prevención y Detección de Fraudes - Tablero - Compras - Mayo 2021 + + + + + + + + + + + + + diff --git a/Fraude/P4.aspx.cs b/Fraude/P4.aspx.cs new file mode 100644 index 000000000..2767f7c56 --- /dev/null +++ b/Fraude/P4.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P4 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P4.png b/Fraude/P4.png new file mode 100644 index 0000000000000000000000000000000000000000..4c25c460716b913968b82cb9a457598d4b51e6e3 GIT binary patch literal 31730 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%0AaLHuPT`ISqUrue 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 VC!VMR9NLYcqNu4*C1(-#KLGJQ+M56X literal 0 HcmV?d00001 diff --git a/Fraude/P5.aspx b/Fraude/P5.aspx new file mode 100644 index 000000000..74dec20b7 --- /dev/null +++ b/Fraude/P5.aspx @@ -0,0 +1,21 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="P5.aspx.cs" Inherits="Fraude_P5" %> + + + + + + + Prevención y Detección de Fraudes - Tablero - Compras - Mayo 2021 – José Pérez Córdova + + + + + + + + + + + + + diff --git a/Fraude/P5.aspx.cs b/Fraude/P5.aspx.cs new file mode 100644 index 000000000..047682c10 --- /dev/null +++ b/Fraude/P5.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P5 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P5.png b/Fraude/P5.png new file mode 100644 index 0000000000000000000000000000000000000000..e90c361643fd9ca71436028ff0ecedc70f8c46a3 GIT binary patch literal 67283 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

    #xqMX+D}6?p^DqHKD@vHJ!bS2#=j2ig4a!3QcDT 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 literal 0 HcmV?d00001 diff --git a/Fraude/P6.aspx b/Fraude/P6.aspx new file mode 100644 index 000000000..eb110cb52 --- /dev/null +++ b/Fraude/P6.aspx @@ -0,0 +1,21 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="P6.aspx.cs" Inherits="Fraude_P6" %> + + + + + + + Prevención y Detección de Fraudes - Matriz de Grado de Riesgo - Mayo 2021 + + + + + + + + + + + + + diff --git a/Fraude/P6.aspx.cs b/Fraude/P6.aspx.cs new file mode 100644 index 000000000..c32e64d93 --- /dev/null +++ b/Fraude/P6.aspx.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +public partial class Fraude_P6 : System.Web.UI.Page +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/Fraude/P6.png b/Fraude/P6.png new file mode 100644 index 0000000000000000000000000000000000000000..737534ca2c12ff38ce873dc76dbaeff17e57bbd9 GIT binary patch literal 68099 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

    VUgedjh}%QmG=4aX{g);D;iej1d*D!a&!_x}Hso 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 literal 0 HcmV?d00001 From 8d370d29eaffe6387346492f3fffb19958834ef1 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 23 Mar 2024 12:13:47 -0700 Subject: [PATCH 3/5] =?UTF-8?q?--=20poner=20en=20la=20informaci=C3=B3n,=20?= =?UTF-8?q?el=20folio=20que=20se=20est=C3=A1=20cobrando?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/PVCobranza.aspx | 10 ++++++---- Ventas/PVCobranza.aspx.vb | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Ventas/PVCobranza.aspx b/Ventas/PVCobranza.aspx index 8c6f9e746..6007e8cf2 100644 --- a/Ventas/PVCobranza.aspx +++ b/Ventas/PVCobranza.aspx @@ -292,7 +292,7 @@ + DataKeyNames="CveVenta,TipoDocto,Saldo,AtencionA,CveFormaPago33,SerieFolio"> @@ -316,12 +316,14 @@

    Nombre:
    -
             
    +
             
    - +
    Folio:
    +
      
    +
    -
    +
    diff --git a/Ventas/PVCobranza.aspx.vb b/Ventas/PVCobranza.aspx.vb index 65db297c0..6e73a915f 100644 --- a/Ventas/PVCobranza.aspx.vb +++ b/Ventas/PVCobranza.aspx.vb @@ -268,6 +268,7 @@ Partial Class Ventas_PVCobranza HdnTotal.Value = GvRow.DataKey("Saldo") TxtImporteEfectivo.Focus() LtlNombre.Text = GvRow.DataKey("AtencionA") + LtlFolio.Text = GvRow.DataKey("SerieFolio") LtlSaldo.Text = GvRow.DataKey("Saldo").ToDecimal.FormatoNumero Catch ex As Exception TieneError = True From c6950f0bb0a821c9cbb755458642ee7ee5383d35 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 23 Mar 2024 12:14:20 -0700 Subject: [PATCH 4/5] -- ya no se utiliza --- Ventas/VentasMedicas.aspx | 3240 --------- Ventas/VentasMedicas.aspx.vb | 12763 --------------------------------- 2 files changed, 16003 deletions(-) delete mode 100644 Ventas/VentasMedicas.aspx delete mode 100644 Ventas/VentasMedicas.aspx.vb diff --git a/Ventas/VentasMedicas.aspx b/Ventas/VentasMedicas.aspx deleted file mode 100644 index 7bf65e2a3..000000000 --- a/Ventas/VentasMedicas.aspx +++ /dev/null @@ -1,3240 +0,0 @@ -<%@ Page Title="Ventas Medicas" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="VentasMedicas.aspx.vb" Inherits="VentasMedicas" EnableEventValidation="false" %> - -<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> -<%--Necesario para el modal que no se cierra--%> - - - - - - - - - - - - -
  • - Agregar Producto -
  • -
    - - -
    - -
    - - - - - - - -
    - - -
    -
    - - - - - - - - -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Nombre:  - - -
    - - : -
    -
    - - -
    -
    - -
    -
    -
    - - - - -
    Dirección:  - Colonia: -
    Ciudad, Edo:  - , C.P.: -
    RFC:  - - - Teléfono: -
    Folio OP:  - - -  
    Empresa:  - Enviar Mail: -
    RFC:  -
    Medio de Captación::  -
    Medico: - - Seleccione uno - - Procedimiento: - - Seleccione uno - -
    - Requiere Técnico: - - - - Fecha de Orden: - - -
    -
    -
    -
    -
    - - - - - - -
    -
    - - DATOS DE EMISIÓN - -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - -
    Tipo: - - - - - - -
    - - - - - - - - -
    -
    - Sucursal: - - -
    -
    -
    -
    - - - -
    -
    -
    - - Estatus: - -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Corte:  - -
    Saldo:  - - -
    Estatus:  - -
    Contabilizada: - - -
    Se timbró:  -
    Envió Mail:  -
    Usuario creó:  -
    Fecha registró:  -
    - -
    -
    -
    - -
    -
    - - - -
    - Turno: - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - Presupuesto de Ingreso: - - - - - - -
    -
    -
    - -
    - - - -
    - - - <%--0--%> - - -   - - - <%--1--%> - - - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    - <%--2--%> - - - - - - - <%--3--%> - - - - - -
    - -
    - -
    - <%--4--%> - - - - - - - <%--5--%> - - - - - - - <%--6--%> - - - - - - <%--7 POR SI SE EMPIEZAN A METER MUCHOS SIMILARES SE PUSO PARA TODOS - MANEJO EN EL GvPS_RowDataBound--%> - - - - - - <%--8--%> - - - - - - - - - <%--9--%> - - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    - <%--10--%> - - - - - - - <%--11--%> - - - - - - - <%--12--%> - - -
    - -
    -
    - <%--13--%> - - -
    - -
    -
    - <%--14--%> - - <%--15--%> - - <%--16--%> - - - - - - <%--17--%> - - - - - - <%--18--%> - - - - - - <%--19--%> - - - <%----%> - - - <%--20--%> - - - <%----%> - - - <%----%> - - - <%--21--%> - - - - - - <%--22--%> - -
    - - - -
    -
    - -
    -
    -
    - - -
    - - - - Factura - - - - - - -
    -
    -
    - - - -
    - - - - - Factura - - - - - - - - - - - - - - - Factura - - - - - - - - - - - -
    -
    -
    -
    - - - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - -
    Descuento Adicional Por Pago: -   -
    Total Original: -   -
    Total a Pagar: -   -
    - - - - - <%-- --%> - - - - - - - - - - - -
    Descuentos RNC: -   -
    Pronto Pago: -   -
    Total a Pagar: -   -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%----%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SubTotal: -   - -
    - -   - - <%----%>
    Amort. Ant.: -   -
    SubTotal 2: - - <%-- --%> -
    IVA: - - 8% - 16% - 0% - -
    - - - - - - - - - - - - - - - - - - - IEPS: -
    - - - - - - - - - - - - - - -
    Total: - - - - - - - - - - - - - Moneda: - -
    - - Conv. Pesos: - T.C.: - - - - -
    - - Conv. Dlls: - T.C.: - - - -
    -
    -
    -
    -
    - - - - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    -
    - - - -
    -
    - - Condiciones de Pago -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - - <%-- - - - --%> - -
    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - -
    Forma de entrega: - - - -
    Uso CFDI: - - - - - - -
    Método de Pago: - - - - - -
    Forma de Pago: - - - - - - -
    Tipo Relación - - - -
    -
    -
    -
    -
    -
    -
    -
    - - -
    - - -
    -
    - - Observaciones -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - - - - - - - - - - -
    Observaciones Generales: 
    -
    Orden de Compra:   - - -
    -
    -
    -
    -
    - -
    -
    -
    - - - - - - -
    -
    - - Acciones -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    - - - - - - - - - - - -
    - -
    - -
    - - -
    - - -
    - - - - <%----%> - <%----%> - <%-- - - - - - - - - - --%> - - - -
    -
    -
    -
    -
    -
    - - - - - -
    -
    -
    - - - - - - - - - -
    - - - - - diff --git a/Ventas/VentasMedicas.aspx.vb b/Ventas/VentasMedicas.aspx.vb deleted file mode 100644 index 2fa15c65e..000000000 --- a/Ventas/VentasMedicas.aspx.vb +++ /dev/null @@ -1,12763 +0,0 @@ -Option Explicit On -Option Strict On -Option Infer On - -Imports System.Data -Imports System.Data.SqlClient -Imports System.Diagnostics -Imports System.IO -Imports System.Net.Http -Imports System.Security.Cryptography.X509Certificates -Imports ADSNetLibrary.SIGAPI.Models.CRM.Request -Imports ADSNetLibrary.SIGAPI.Services.CRM -Imports ADSTimbrado - -Imports Extensiones -Imports Microsoft.Reporting.WebForms -Imports Newtonsoft.Json.Linq - - -Partial Class VentasMedicas - Inherits ClsPaginas - -#Region "Propiedades" - Private Const NumeroDecimales As Integer = 2 - - Dim ColumnaDescuento As Integer = 10 - Dim ColumnaPredial As Integer = 11 - Dim ColumnaIVA As Integer = 12 - Dim ColumnaIEPS As Integer = 13 - Dim ColumnaRetIVA As Integer = 14 - Dim ColumnaRetISR As Integer = 15 - Dim ColumnaEditar As Integer = 17 - Dim ColumnaEliminar As Integer = 18 - - 'Factura de ventas - Dim DTConceptos As DataTable - Private Property Version As String - Private Property Fecha As String - Private Property SerieXML As String - Private Property FolioXML As String - Private Property SubTotal As Decimal - Private Property Total As Decimal = 0 - ' Private Property Descuentos As Decimal = 0 - Private Property EmisorRFC As String - Private Property ReceptorRFC As String - Private Property TrasladoIVA As Decimal = 0 - Private Property RetencionIVA As Decimal = 0 - Private Property RetencionISR As Decimal = 0 - Private Property TrasladoIEPS As Decimal = 0 - Private Property TFDUUID As String = "" - Private Property Moneda As String = "" - Private Property TipoComprobante As String = "" - Private Property OtrosImpuestos As Decimal = 0 - Private Property TotalRetenciones As Decimal = 0 - Private Property SumaTotalRetenciones As Decimal = 0 - Private Property TotalTraslados As Decimal = 0 - Private Property SumaTotalTraslados As Decimal = 0 - Private Property SubTotalConceptos As Decimal = 0 - Private Property Redondeo As Decimal = 0 - Private Property NumRow As Integer - Private Property EsSupervisor As Boolean = False - Private Property MandarCorreoSupervisor As Boolean = False - Private ReadOnly Property ExFolioFactura As Boolean - Get - Return CBool(ViewState("ExFolioFactura")) - End Get - End Property - Private Property CveFactura As Integer - Get - Return ViewState("CveFactura").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveFactura") = value - End Set - End Property - - Private Property CuentasContablesInvalidas As StringBuilder - Get - Return CType(ViewState("CuentasContablesInvalidas"), StringBuilder) - End Get - Set(value As StringBuilder) - ViewState("CuentasContablesInvalidas") = value - End Set - End Property - - 'Local - Private Property DtPorcentajeMarcas As DataTable - Get - Return If(IsNothing(ViewState("DtPorcentajeMarcas")), Nothing, CType(ViewState("DtPorcentajeMarcas"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtPorcentajeMarcas") = value - End Set - End Property - Private Property TmpDT As DataTable - Get - Return If(IsNothing(ViewState("TmpDT")), Nothing, CType(ViewState("TmpDT"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDT") = value - End Set - End Property - Private Property TmpDTDescNC As DataTable - Get - Return If(IsNothing(ViewState("TmpDTDescNC")), Nothing, CType(ViewState("TmpDTDescNC"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTDescNC") = value - End Set - End Property - Private Property TmpDTDescNCBonificacion As DataTable - Get - Return If(IsNothing(ViewState("TmpDTDescNCBonificacion")), Nothing, CType(ViewState("TmpDTDescNCBonificacion"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTDescNCBonificacion") = value - End Set - End Property - Private Property TmpDTBonificacion As DataTable - Get - Return If(IsNothing(ViewState("TmpDTBonificacion")), Nothing, CType(ViewState("TmpDTBonificacion"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTBonificacion") = value - End Set - End Property - Private Property TmpDTRNCBonificacionesCliente As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCBonificacionesCliente")), Nothing, CType(ViewState("TmpDTRNCBonificacionesCliente"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCBonificacionesCliente") = value - End Set - End Property - Private Property TmpDTRNCBonificacionesSeleccionadas As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCBonificacionesSeleccionadas")), Nothing, CType(ViewState("TmpDTRNCBonificacionesSeleccionadas"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCBonificacionesSeleccionadas") = value - End Set - End Property - Private Property TmpDTRNCDetalle As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCDetalle")), Nothing, CType(ViewState("TmpDTRNCDetalle"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCDetalle") = value - End Set - End Property - Private Property TmpDTRNCDetalleSelecciondas As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCDetalleSelecciondas")), Nothing, CType(ViewState("TmpDTRNCDetalleSelecciondas"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCDetalleSelecciondas") = value - End Set - End Property - - Private Property TmpDTRNCBonificacionDetalle As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCBonificacionDetalle")), Nothing, CType(ViewState("TmpDTRNCBonificacionDetalle"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCBonificacionDetalle") = value - End Set - End Property - - Private Property TmpDTRNCBonificacionDetalleSeleccionadas As DataTable - Get - Return If(IsNothing(ViewState("TmpDTRNCBonificacionDetalleSeleccionadas")), Nothing, CType(ViewState("TmpDTRNCBonificacionDetalleSeleccionadas"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTRNCBonificacionDetalleSeleccionadas") = value - End Set - End Property - - Private Property TmpDTError As DataTable - Get - Return If(IsNothing(ViewState("TmpDTError")), Nothing, CType(ViewState("TmpDTError"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTError") = value - End Set - End Property - - Private Property TmpDTImpuestos As DataTable - Get - Return If(IsNothing(ViewState("TmpDTImpuestos")), Nothing, CType(ViewState("TmpDTImpuestos"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTImpuestos") = value - End Set - End Property - Private Property TmpDTImpuestosIVAIEPS As DataTable - Get - Return If(IsNothing(ViewState("TmpDTImpuestosIVAIEPS")), Nothing, CType(ViewState("TmpDTImpuestosIVAIEPS"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTImpuestosIVAIEPS") = value - End Set - End Property - Private Property TmpDTDocumentosRelacionados As DataTable - Get - Return If(IsNothing(ViewState("TmpDTDocumentosRelacionados")), Nothing, CType(ViewState("TmpDTDocumentosRelacionados"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTDocumentosRelacionados") = value - End Set - End Property - Private Property TmpDTNCVinculadas As DataTable - Get - Return If(IsNothing(ViewState("TmpDTNCVinculadas")), Nothing, CType(ViewState("TmpDTNCVinculadas"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTNCVinculadas") = value - End Set - End Property - Private Property TmpDTEnvioDireccion As DataTable - Get - Return If(IsNothing(ViewState("TmpDTEnvioDireccion")), Nothing, CType(ViewState("TmpDTEnvioDireccion"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTEnvioDireccion") = value - End Set - End Property - Private Property TmpDTDireccionCP As DataTable - Get - Return If(IsNothing(ViewState("TmpDTDireccionCP")), Nothing, CType(ViewState("TmpDTDireccionCP"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTDireccionCP") = value - End Set - End Property - - Private Property IdPoliza As Integer - Get - Return ViewState("IdPoliza").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("IdPoliza") = value - End Set - End Property - Private Property CveAlmacenDevolucion As Integer - Get - Return ViewState("CveAlmacenDevolucion").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAlmacenDevolucion") = value - End Set - End Property - - Private Property EraCotizacion As Integer - Get - Return ViewState("EraCotizacion").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("EraCotizacion") = value - End Set - End Property - Private Property FacturaMateriales As Integer - Get - Return ViewState("FacturaMateriales").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("FacturaMateriales") = value - End Set - End Property - Private Property TmpDTDeducciones As DataTable - Get - Return If(IsNothing(ViewState("TmpDTDeducciones")), Nothing, CType(ViewState("TmpDTDeducciones"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTDeducciones") = value - End Set - End Property - - Private Property TmpDTComplementos As DataTable - Get - Return If(IsNothing(ViewState("TmpDTComplementos")), Nothing, CType(ViewState("TmpDTComplementos"), DataTable)) - End Get - Set(value As DataTable) - ViewState("TmpDTComplementos") = value - End Set - End Property - Private Property DTmpC As DataTable - Get - Return If(IsNothing(ViewState("DTmpC")), Nothing, CType(ViewState("DTmpC"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTmpC") = value - End Set - End Property - Private Property DTmpF As DataTable - Get - Return If(IsNothing(ViewState("DTmpF")), Nothing, CType(ViewState("DTmpF"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTmpF") = value - End Set - End Property - Private Property DTSucursal As DataTable - Get - Return If(IsNothing(ViewState("DTSucursal")), Nothing, CType(ViewState("DTSucursal"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTSucursal") = value - End Set - End Property - Private Property DTOrdenesCompra As DataTable - Get - Return If(IsNothing(ViewState("DTOrdenesCompra")), Nothing, CType(ViewState("DTOrdenesCompra"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTOrdenesCompra") = value - End Set - End Property - Private Property DTOrdenesCompraPS As DataTable - Get - Return If(IsNothing(ViewState("DTOrdenesCompraPS")), Nothing, CType(ViewState("DTOrdenesCompraPS"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTOrdenesCompraPS") = value - End Set - End Property - Private Property DtOCTmpDT As DataTable - Get - Return If(IsNothing(ViewState("DtOCTmpDT")), Nothing, CType(ViewState("DtOCTmpDT"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtOCTmpDT") = value - End Set - End Property - Private Property DTRemisiones As DataTable - Get - Return If(IsNothing(ViewState("DTRemisiones")), Nothing, CType(ViewState("DTRemisiones"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTRemisiones") = value - End Set - End Property - Private Property ListaDescuentos As List(Of Modelos.VentaDescuentos) - Get - Return If(IsNothing(ViewState("ListaDescuentos")), Nothing, CType(ViewState("ListaDescuentos"), List(Of Modelos.VentaDescuentos))) - End Get - Set(value As List(Of Modelos.VentaDescuentos)) - ViewState("ListaDescuentos") = value - End Set - End Property - Private Property RemisionesLista As List(Of Integer) - Get - Return If(IsNothing(ViewState("RemisionesLista")), Nothing, CType(ViewState("RemisionesLista"), List(Of Integer))) - End Get - Set(value As List(Of Integer)) - ViewState("RemisionesLista") = value - End Set - End Property - Private Property ListaRemisionesNC As List(Of Modelos.Factura) - Get - Return If(IsNothing(ViewState("ListaRemisionesNC")), Nothing, CType(ViewState("ListaRemisionesNC"), List(Of Modelos.Factura))) - End Get - Set(value As List(Of Modelos.Factura)) - ViewState("ListaRemisionesNC") = value - End Set - End Property - Private Property ListaNCDesc As List(Of Modelos.Factura) - Get - Return If(IsNothing(ViewState("ListaNCDesc")), Nothing, CType(ViewState("ListaNCDesc"), List(Of Modelos.Factura))) - End Get - Set(value As List(Of Modelos.Factura)) - ViewState("ListaNCDesc") = value - End Set - End Property - Private Property ListaNCBonificacion As List(Of Modelos.Factura) - Get - Return If(IsNothing(ViewState("ListaNCBonificacion")), Nothing, CType(ViewState("ListaNCBonificacion"), List(Of Modelos.Factura))) - End Get - Set(value As List(Of Modelos.Factura)) - ViewState("ListaNCBonificacion") = value - End Set - End Property - Private Property Pedidos2Lista As List(Of Integer) - Get - Return If(IsNothing(ViewState("Pedidos2Lista")), Nothing, CType(ViewState("Pedidos2Lista"), List(Of Integer))) - End Get - Set(value As List(Of Integer)) - ViewState("Pedidos2Lista") = value - End Set - End Property - Private Property DtRemisionesPS As DataTable - Get - Return If(IsNothing(ViewState("DtRemisionesPS")), Nothing, CType(ViewState("DtRemisionesPS"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtRemisionesPS") = value - End Set - End Property - Private Property DtCotizaciones As DataTable - Get - Return If(IsNothing(ViewState("DtCotizaciones")), Nothing, CType(ViewState("DtCotizaciones"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtCotizaciones") = value - End Set - End Property - Private Property CotizacionesLista As List(Of Integer) - Get - Return If(IsNothing(ViewState("CotizacionesLista")), Nothing, CType(ViewState("CotizacionesLista"), List(Of Integer))) - End Get - Set(value As List(Of Integer)) - ViewState("CotizacionesLista") = value - End Set - End Property - Private Property DtCotizacionesPS As DataTable - Get - Return If(IsNothing(ViewState("DtCotizacionesPS")), Nothing, CType(ViewState("DtCotizacionesPS"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtCotizacionesPS") = value - End Set - End Property - Private Property DtCotizacionTmpDT As DataTable - Get - Return If(IsNothing(ViewState("DtCotizacionTmpDT")), Nothing, CType(ViewState("DtCotizacionTmpDT"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtCotizacionTmpDT") = value - End Set - End Property - Private Property DtRemisionesTmpDT As DataTable - Get - Return If(IsNothing(ViewState("DtRemisionesTmpDT")), Nothing, CType(ViewState("DtRemisionesTmpDT"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtRemisionesTmpDT") = value - End Set - End Property - Private Property DtPedidos2TmpDT As DataTable - Get - Return If(IsNothing(ViewState("DtPedidos2TmpDT")), Nothing, CType(ViewState("DtPedidos2TmpDT"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtPedidos2TmpDT") = value - End Set - End Property - Private Property DtRemConceptosSurtidos As DataTable - Get - Return If(IsNothing(ViewState("DtRemConceptosSurtidos")), Nothing, CType(ViewState("DtRemConceptosSurtidos"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtRemConceptosSurtidos") = value - End Set - End Property - Private Property HuboCambioRemi As Boolean - Get - Return If(IsNothing(ViewState("HuboCambioRemi")), False, CType(ViewState("HuboCambioRemi"), Boolean)) - End Get - Set(value As Boolean) - ViewState("HuboCambioRemi") = value - End Set - End Property - Private Property AplicaGastoContrato As Boolean - Get - Return If(IsNothing(ViewState("AplicaGastoContrato")), False, CType(ViewState("AplicaGastoContrato"), Boolean)) - End Get - Set(value As Boolean) - ViewState("AplicaGastoContrato") = value - End Set - End Property - Private Property EsCreaApartirDe As Boolean - Get - Return If(IsNothing(ViewState("EsCreaApartirDe")), False, CType(ViewState("EsCreaApartirDe"), Boolean)) - End Get - Set(value As Boolean) - ViewState("EsCreaApartirDe") = value - End Set - End Property - Private Property RequiereAlmacenDestino As Boolean - Get - Return If(IsNothing(ViewState("RequiereAlmacenDestino")), False, CType(ViewState("RequiereAlmacenDestino"), Boolean)) - End Get - Set(value As Boolean) - ViewState("RequiereAlmacenDestino") = value - End Set - End Property - Private Property RequiereAlmacenOrigen As Boolean - Get - Return If(IsNothing(ViewState("RequiereAlmacenOrigen")), False, CType(ViewState("RequiereAlmacenOrigen"), Boolean)) - End Get - Set(value As Boolean) - ViewState("RequiereAlmacenOrigen") = value - End Set - End Property - - Private Property AplicoNCFacturaActual As Boolean - Get - Return If(IsNothing(ViewState("AplicoNCFacturaActual")), False, CType(ViewState("AplicoNCFacturaActual"), Boolean)) - End Get - Set(value As Boolean) - ViewState("AplicoNCFacturaActual") = value - End Set - End Property - Private Property EmpresaActual As Empresa - Get - Return CType(ViewState("EmpresaActual"), Empresa) - End Get - Set(value As Empresa) - ViewState("EmpresaActual") = value - End Set - End Property - - Property CargaDocumentoOC As Boolean - Get - If ViewState("CargaDocumentoOC") Is Nothing Then - Return False - Else - Return DirectCast(ViewState("CargaDocumentoOC"), Boolean) - End If - End Get - Set(value As Boolean) - ViewState("CargaDocumentoOC") = value - End Set - End Property - Private Property DTFacNC As DataTable - Get - Return If(IsNothing(ViewState("DTFacNC")), Nothing, CType(ViewState("DTFacNC"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DTFacNC") = value - End Set - End Property - Private Property DtPromociones As DataTable - Get - Return If(IsNothing(ViewState("DtPromociones")), Nothing, CType(ViewState("DtPromociones"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtPromociones") = value - End Set - End Property - Private ReadOnly Property CveCliente As Integer - Get - Return ViewState("CveCliente").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property CveClienteAnterior As Integer - Get - Return ViewState("CveClienteAnterior").ToString().ToEntero() - End Get - End Property - - Private Property CveClienteSucursal As Integer - Get - If ViewState("CveClienteSucursal") Is Nothing Then - Return -1 - Else - Return ViewState("CveClienteSucursal").ToString().ToEntero() - End If - End Get - Set(value As Integer) - ViewState("CveClienteSucursal") = value - End Set - End Property - Private Property CveAnticipo As Integer - Get - If ViewState("CveAnticipo") Is Nothing Then - Return -1 - Else - Return ViewState("CveAnticipo").ToString().ToEntero() - End If - End Get - Set(value As Integer) - ViewState("CveAnticipo") = value - End Set - End Property - - Private Property CveUsuarioActual As Integer - Get - Return ViewState("CveUsuarioActual").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveUsuarioActual") = value - End Set - End Property - Private ReadOnly Property Mail As String - Get - Return IfNull(ViewState("Mail"), "").ToString() - End Get - End Property - Private ReadOnly Property MailCC As String - Get - Return IfNull(ViewState("MailCC"), "").ToString() - End Get - End Property - Public ReadOnly Property CveVenta As Integer - Get - Return ViewState("CveVenta").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property CveSubProyectoVenta As Integer - Get - Return If(IsNothing(ViewState("CveSubProyectoVenta")), -1, ViewState("CveSubProyectoVenta").ToString().ToEntero()) - End Get - End Property - Private Property CveVentaPadre As Integer - Get - Return If(IsNothing(ViewState("CveVentaPadre")), -1, ViewState("CveVentaPadre").ToString().ToEntero()) - End Get - Set(value As Integer) - ViewState("CveVentaPadre") = value - End Set - End Property - Private Property CveEstatusFacturaPadre As Integer - Get - Return If(IsNothing(ViewState("CveEstatusFacturaPadre")), -1, ViewState("CveEstatusFacturaPadre").ToString().ToEntero()) - End Get - Set(value As Integer) - ViewState("CveEstatusFacturaPadre") = value - End Set - End Property - Private Property CveMovimientoDetalle As Integer - Get - Return If(IsNothing(ViewState("CveMovimientoDetalle")), -1, ViewState("CveMovimientoDetalle").ToString().ToEntero()) - End Get - Set(value As Integer) - ViewState("CveMovimientoDetalle") = value - End Set - End Property - Private ReadOnly Property CveDevolucion As Integer - Get - Return ViewState("CveDevolucion").ToString().ToEntero() - End Get - End Property - - Private Property CveVentaRelacion As Integer - Get - Return If(IsNothing(ViewState("CveVentaRelacion")), -1, ViewState("CveVentaRelacion").ToString().ToEntero()) - End Get - Set(value As Integer) - ViewState("CveVentaRelacion") = value - End Set - End Property - - Private Property ImporteRelacion As Double - Get - Return If(IsNothing(ViewState("ImporteRelacion")), 0, ViewState("ImporteRelacion").ToString().ToDouble) - End Get - Set(value As Double) - ViewState("ImporteRelacion") = value - End Set - End Property - - Private Property IsTotalxConcepto As Boolean - Get - Return If(IsNothing(ViewState("IsTotalxConcepto")), False, CBool(ViewState("IsTotalxConcepto").ToString())) - End Get - Set(value As Boolean) - ViewState("IsTotalxConcepto") = value - End Set - End Property - Private ReadOnly Property CveAlmacenTransitorio As Integer - Get - Return ViewState("CveAlmacenTransitorio").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property NuevaFactura As Integer - Get - Return ViewState("NuevaFactura").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property VentaFolio As String - Get - Return ViewState("VentaFolio").ToString() - End Get - End Property - Private ReadOnly Property SelloCancelacion As String - Get - Return ViewState("SelloCancelacion").ToString() - End Get - End Property - Private ReadOnly Property FechaCancelacion As DateTime - Get - Return ViewState("FechaCancelacion").ToString().ToDateTime - End Get - End Property - Private ReadOnly Property EstablecioFolio As Boolean - Get - Return CBool(ViewState("EstablecioFolio")) - End Get - End Property - Private ReadOnly Property FolioFiscal As String - Get - Return ViewState("FolioFiscal").ToString() - End Get - End Property - Private ReadOnly Property Ruta As String - Get - Return UsuarioActual.Empresa.Ruta - End Get - End Property - Private ReadOnly Property RutaPruebas As String - Get - Return String.Format("{0}Empresas/1/", ModExtensiones.DirectorioBaseEmpresas) - End Get - End Property - Private ReadOnly Property TipoCambio As Decimal - Get - Return ViewState("TipoCambio").ToString().ToDecimal - End Get - End Property - Private ReadOnly Property ProcesoCorrecto As Boolean - Get - Return CBool(ViewState("ProcesoCorrecto")) - End Get - End Property - - 'FUENTES RECAUDACIÓN - Private Property DTPresupuestoIngresos As DataTable - Get - Return CType(ViewState("DTPresupuestoIngresos"), DataTable) - End Get - Set(value As DataTable) - ViewState("DTPresupuestoIngresos") = value - End Set - End Property - 'Folios - Private ReadOnly Property CveFolio As Integer - Get - Return ViewState("CveFolio").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property NumAprobacion As Long - Get - Return CLng(ViewState("NumAprobacion").ToString()) - End Get - End Property - Private ReadOnly Property FechaAprobacion As Date - Get - Return ViewState("FechaAprobacion").ToString().ToDate - End Get - End Property - Private ReadOnly Property FolioActual As String - Get - Return ViewState("FolioActual").ToString() - End Get - End Property - 'Sucursal - Private ReadOnly Property Serie As String - Get - Return ViewState("Serie").ToString() - End Get - End Property - Private ReadOnly Property Folio As Integer - Get - Return ViewState("Folio").ToString().ToEntero() - End Get - End Property - Private ReadOnly Property FormatoFactura As String - Get - Return ViewState("FormatoFactura").ToString() - End Get - End Property - Private ReadOnly Property TipoFormato As String - Get - Return ViewState("TipoFormato").ToString() - End Get - End Property - Private ReadOnly Property IVA As Decimal - Get - Return ViewState("IVA").ToString().ToDecimal - End Get - End Property - 'Private ReadOnly Property SubProyectoPorcentajeIVA As Decimal - ' Get - ' Return ViewState("SubProyectoPorcentajeIVA").ToString().ToDecimal - ' End Get - 'End Property - Private ReadOnly Property ClienteRetIVA As Decimal - Get - Return ViewState("ClienteRetIVA").ToString().ToDecimal - End Get - End Property - Private ReadOnly Property ClienteRetISR As Decimal - Get - Return ViewState("ClienteRetISR").ToString().ToDecimal - End Get - End Property - - Private ReadOnly Property ClienteDesglosaIEPS As Boolean - Get - Return CType(ViewState("ClienteDesglosaIEPS").ToString(), Boolean) - End Get - End Property - Private ReadOnly Property ClienteNODesglosaIVA As Boolean - Get - Return CType(ViewState("ClienteNODesglosaIVA").ToString(), Boolean) - End Get - End Property - - 'Cliente - Private ReadOnly Property NombreCliente As String - Get - Return ViewState("NombreCliente").ToString() - End Get - End Property - Private ReadOnly Property Vendedor As String - Get - Return ViewState("Vendedor").ToString() - End Get - End Property - - Private ReadOnly Property CodCliente As String - Get - Return ViewState("CodCliente").ToString() - End Get - End Property - Private ReadOnly Property CliNoExt As String - Get - Return ViewState("CliNoExt").ToString() - End Get - End Property - Private ReadOnly Property CliNoInt As String - Get - Return ViewState("CliNoInt").ToString() - End Get - End Property - Private ReadOnly Property CliLocalidad As String - Get - Return ViewState("CliLocalidad").ToString() - End Get - End Property - Private ReadOnly Property CliPais As String - Get - Return ViewState("CliPais").ToString() - End Get - End Property - Private ReadOnly Property SucCalle As String - Get - Return ViewState("SucCalle").ToString() - End Get - End Property - Private ReadOnly Property CliCorreoCot As String - Get - If ViewState("CliCorreoCot") Is Nothing Then - Return "" - Else - Return ViewState("CliCorreoCot").ToString() - End If - End Get - End Property - Private ReadOnly Property SucNoExt As String - Get - Return ViewState("SucNoExt").ToString() - End Get - End Property - Private ReadOnly Property SucNoInt As String - Get - Return ViewState("SucNoInt").ToString() - End Get - End Property - Private ReadOnly Property SucColonia As String - Get - Return ViewState("SucColonia").ToString() - End Get - End Property - Private ReadOnly Property SucLocalidad As String - Get - Return ViewState("SucLocalidad").ToString() - End Get - End Property - Private ReadOnly Property SucMunicipio As String - Get - Return ViewState("SucMunicipio").ToString() - End Get - End Property - Private ReadOnly Property SucEstado As String - Get - Return ViewState("SucEstado").ToString() - End Get - End Property - Private ReadOnly Property SucPais As String - Get - Return ViewState("SucPais").ToString() - End Get - End Property - Private ReadOnly Property SucCP As String - Get - Return ViewState("SucCP").ToString() - End Get - End Property - Private ReadOnly Property MatCalle As String - Get - Return ViewState("MatCalle").ToString() - End Get - End Property - Private ReadOnly Property MatNoExt As String - Get - Return ViewState("MatNoExt").ToString() - End Get - End Property - Private ReadOnly Property MatNoInt As String - Get - Return ViewState("MatNoInt").ToString() - End Get - End Property - Private ReadOnly Property MatColonia As String - Get - Return ViewState("MatColonia").ToString() - End Get - End Property - Private ReadOnly Property MatLocalidad As String - Get - Return ViewState("MatLocalidad").ToString() - End Get - End Property - Private ReadOnly Property MatMunicipio As String - Get - Return ViewState("MatMunicipio").ToString() - End Get - End Property - Private ReadOnly Property MatEstado As String - Get - Return ViewState("MatEstado").ToString() - End Get - End Property - Private ReadOnly Property MatPais As String - Get - Return ViewState("MatPais").ToString() - End Get - End Property - Private ReadOnly Property MatCP As String - Get - Return ViewState("MatCP").ToString() - End Get - End Property - Private Property ImprimeNombreSucursal As Boolean - Get - Return CBool(ViewState("ImprimeNombreSucursal")) - End Get - Set(value As Boolean) - ViewState("ImprimeNombreSucursal") = value - End Set - End Property - Private ReadOnly Property AplicaFEMSA As Boolean - Get - Return CBool(ViewState("AplicaFEMSA")) - End Get - End Property - Private ReadOnly Property AplicaComercioExterior As Boolean - Get - Return CBool(ViewState("AplicaComercioExterior")) - End Get - End Property - Private ReadOnly Property CveTipoOperacion As Integer - Get - Return CInt(ViewState("CveTipoOperacion")) - End Get - End Property - Private ReadOnly Property CvePedimento As Integer - Get - Return CInt(ViewState("CvePedimento")) - End Get - End Property - Private ReadOnly Property CveIncoterm As Integer - Get - Return CInt(ViewState("CveIncoterm")) - End Get - End Property - Private ReadOnly Property AplicaDetallista As Boolean - Get - Return CBool(ViewState("AplicaDetallista")) - End Get - End Property - Private ReadOnly Property AplicaFord As Boolean - Get - Return CBool(ViewState("AplicaFord")) - End Get - End Property - Private Property CveOS As Integer - Get - Return ViewState("CveOS").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveOS") = value - End Set - End Property - - - Private ReadOnly Property SaldoVenta As Decimal - Get - Return If(IsNothing(ViewState("SaldoVenta")), 0, ViewState("SaldoVenta").ToString().ToDecimal) - End Get - End Property - Private Property CvePSAmortizacion As Integer - Get - Return ViewState("CvePSAmortizacion").ToString().ToEntero() - End Get - - Set(value As Integer) - ViewState("CvePSAmortizacion") = value - End Set - End Property - - 'Inventarios - Private Property DtInv As DataTable - Get - Return CType(ViewState("DtInv"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtInv") = value - End Set - End Property - - Private Property CvePrePoliza As Integer - Get - Return ViewState("CvePrePoliza").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePrePoliza") = value - End Set - End Property - Private ReadOnly Property SeGuardoPrePoliza As Boolean - Get - Return CBool(ViewState("SeGuardoPrePoliza")) - End Get - End Property - Private Property CveVentaFacturada As Integer - Get - Return ViewState("CveVentaFacturada").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveVentaFacturada") = value - End Set - End Property - Private ReadOnly Property AplicarVentaFacturada As Boolean - Get - Return CBool(ViewState("AplicarVentaFacturada")) - End Get - End Property - 'Estimaciones - Private Property CveContrato As Integer - Get - Return ViewState("CveContrato").ToString().ToEntero() - End Get - - Set(value As Integer) - ViewState("CveContrato") = value - End Set - End Property - Private Property CvePedido As Integer - Get - Return ViewState("CvePedido").ToString().ToEntero() - End Get - - Set(value As Integer) - ViewState("CvePedido") = value - End Set - End Property - Private Property CvePedido2 As Integer - Get - Return ViewState("CvePedido2").ToString().ToEntero() - End Get - - Set(value As Integer) - ViewState("CvePedido2") = value - End Set - End Property - Private Property TipoContrato As Integer - Get - Return ViewState("TipoContrato").ToString().ToEntero() - End Get - - Set(value As Integer) - ViewState("TipoContrato") = value - End Set - End Property - Private Property Opcion As String - Get - Return ViewState("Opcion").ToString() - End Get - - Set(value As String) - ViewState("Opcion") = value - End Set - End Property - Private Property CorreoNotificacionPedDev As String - Get - Return If(IsNothing(ViewState("CorreoNotificacionDevPed")), "", ViewState("CorreoNotificacionDevPed").ToString()) - End Get - - Set(value As String) - ViewState("CorreoNotificacionDevPed") = value - End Set - End Property - - 'Presupuesto - Private Property CvePresupuesto As Integer - Get - Return ViewState("CvePresupuesto").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePresupuesto") = value - End Set - End Property - Private Property TotalOtrosConceptos As Decimal - Get - Return ViewState("TotalOtrosConceptos").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("TotalOtrosConceptos") = value - End Set - End Property - Private Property TipoCambioFactura As Decimal - Get - Return ViewState("TipoCambioFactura").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("TipoCambioFactura") = value - End Set - End Property - - Private Property DtPagos As DataTable - Get - Return CType(ViewState("DtPagos"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtPagos") = value - End Set - End Property - Private Property DevolucionAlmacen As Integer - Get - Return ViewState("DevolucionAlmacen").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("DevolucionAlmacen") = value - End Set - End Property - Private Property DevolucionAlmacenNC As Integer - Get - Return IfNull(ViewState("DevolucionAlmacenNC"), 2, ViewState("DevolucionAlmacenNC").ToString().ToString()).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("DevolucionAlmacenNC") = value - End Set - End Property - Private ReadOnly Property TipoDoctoDevolucion As String - Get - Return ViewState("TipoDoctoDevolucion").ToString() - End Get - End Property - Private Property PlazoCobranza As Integer - Get - Return ViewState("PlazoCobranza").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("PlazoCobranza") = value - End Set - End Property - Private Property PlazoCobranzaRemision As Integer - Get - Return ViewState("PlazoCobranzaRemision").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("PlazoCobranzaRemision") = value - End Set - End Property - - 'CvePAC - Private Property CvePAC As Integer - Get - Return ViewState("CvePAC").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePAC") = value - End Set - End Property - - Private Property AplicaDevolucion As Boolean - Get - Return If(IsNothing(ViewState("AplicaDevolucion")), False, CType(ViewState("AplicaDevolucion"), Boolean)) - End Get - Set(value As Boolean) - ViewState("AplicaDevolucion") = value - End Set - End Property - - Private Property CveVentaDevolucion As Integer - Get - Return If(IsNothing(ViewState("CveVentaDevolucion")), 0, CType(ViewState("CveVentaDevolucion"), Integer)) - End Get - Set(value As Integer) - ViewState("CveVentaDevolucion") = value - End Set - End Property - Private Property SaldoVentaDevolucion As Decimal - Get - Return ViewState("SaldoVentaDevolucion").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("SaldoVentaDevolucion") = value - End Set - End Property - Private Property ContratoOC As Boolean - Get - Return If(IsNothing(ViewState("ContratoOC")), False, CType(ViewState("ContratoOC"), Boolean)) - End Get - Set(value As Boolean) - ViewState("ContratoOC") = value - End Set - End Property - - Private Property TieneAlmacen As Boolean - Get - Return If(IsNothing(ViewState("TieneAlmacen")), False, CType(ViewState("TieneAlmacen"), Boolean)) - End Get - Set(value As Boolean) - ViewState("TieneAlmacen") = value - End Set - End Property - Private Property PorcentajeIVA As Decimal - Get - Return ViewState("PorcentajeIVA").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("PorcentajeIVA") = value - End Set - End Property - Private Property CveEstatusRefacturacion As Integer - Get - Return If(IsNothing(ViewState("CveEstatusRefacturacion")), 0, CType(ViewState("CveEstatusRefacturacion"), Integer)) - End Get - Set(value As Integer) - ViewState("CveEstatusRefacturacion") = value - End Set - End Property - Private Property RefacturarCancelada As Boolean - Get - Return If(IsNothing(ViewState("RefacturarCancelada")), False, CBool(ViewState("RefacturarCancelada"))) - End Get - Set(value As Boolean) - ViewState("RefacturarCancelada") = value - End Set - End Property - - Private Property CveEstadoCancelacion As Integer - Get - Return If(IsNothing(ViewState("CveEstadoCancelacion")), 0, CType(ViewState("CveEstadoCancelacion"), Integer)) - End Get - Set(value As Integer) - ViewState("CveEstadoCancelacion") = value - End Set - End Property - - Private Property PermiteCredito As Boolean - Get - Return If(IsNothing(ViewState("PermiteCredito")), False, CBool(ViewState("PermiteCredito"))) - End Get - Set(value As Boolean) - ViewState("PermiteCredito") = value - End Set - End Property - - Private Property DtAnticipoAmortizacion As DataTable - Get - Return CType(ViewState("DtAnticipoAmortizacion"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtAnticipoAmortizacion") = value - End Set - End Property - Private Property SaldoAnticipo As Decimal - Get - Return If(IsNothing(ViewState("SaldoAnticipo")), 0, ViewState("SaldoAnticipo").ToString().ToDecimal()) - End Get - Set(value As Decimal) - ViewState("SaldoAnticipo") = value - End Set - End Property - Private Property CorreoEntregaAlmacen As String - Get - Return If(IsNothing(ViewState("CorreoEntregaAlmacen")), "", ViewState("CorreoEntregaAlmacen").ToString()) - End Get - - Set(value As String) - ViewState("CorreoEntregaAlmacen") = value - End Set - End Property - - Private Property CveVentaUsadoDevolucionEfectivo As Integer - Get - Return If(IsNothing(ViewState("CveVentaUsadoDevolucionEfectivo")), 0, CType(ViewState("CveVentaUsadoDevolucionEfectivo"), Integer)) - End Get - Set(value As Integer) - ViewState("CveVentaUsadoDevolucionEfectivo") = value - End Set - End Property - - - Private Property RFCReceptorVenta As String - Get - Return If(IsNothing(ViewState("RFCReceptorVenta")), "", ViewState("RFCReceptorVenta").ToString()) - End Get - - Set(value As String) - ViewState("RFCReceptorVenta") = value - End Set - End Property - Private Property RegimenFiscalCliente As String - Get - Return IfNull(ViewState("RegimenFiscalCliente"), "").ToString() - End Get - Set(value As String) - ViewState("RegimenFiscalCliente") = value - End Set - End Property - Private Property RegimenSociedad As String - Get - Return IfNull(ViewState("RegimenSociedad"), "").ToString() - End Get - Set(value As String) - ViewState("RegimenSociedad") = value - End Set - End Property - Private Property TipoPersona As Boolean - Get - Return CBool(IfNull(ViewState("TipoPersona"), False)) - End Get - Set(value As Boolean) - ViewState("TipoPersona") = value - End Set - End Property - Private Property Adjunto As String - Get - Return If(IsNothing(ViewState("Adjunto")), "", ViewState("Adjunto").ToString()) - End Get - - Set(value As String) - ViewState("Adjunto") = value - End Set - End Property - - Private Property VentaActual As Venta - Get - Return DirectCast(ViewState("VentaActual"), Venta) - End Get - Set(value As Venta) - ViewState("VentaActual") = value - End Set - End Property - - Private Property ListaAnticiposAplicados As List(Of Modelos.MAnticipoRelacionado) - Get - Return If(IsNothing(ViewState("ListaAnticiposAplicados")), Nothing, CType(ViewState("ListaAnticiposAplicados"), List(Of Modelos.MAnticipoRelacionado))) - End Get - Set(value As List(Of Modelos.MAnticipoRelacionado)) - ViewState("ListaAnticiposAplicados") = value - End Set - End Property - - Private Property CveTimbreCartaPorteVenta As Integer - Get - Return If(IsNothing(ViewState("CveTimbreCartaPorteVenta")), -1, ViewState("CveTimbreCartaPorteVenta").ToString().ToEntero()) - End Get - Set(value As Integer) - ViewState("CveTimbreCartaPorteVenta") = value - End Set - End Property -#End Region - -#Region "Propiedades PuntoVenta" - - Private Property CveCorte As Integer - Get - Return ViewState("CveCorte").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveCorte") = value - End Set - End Property - - Private Property Entrega As String - Get - Return ViewState("Entrega").ToString() - End Get - Set(value As String) - ViewState("Entrega") = value - End Set - End Property - - Private Property Vigencia As String - Get - Return ViewState("Vigencia").ToString() - End Get - Set(value As String) - ViewState("Vigencia") = value - End Set - End Property - - Private Property DineroCaja As Double - Get - Return ViewState("DineroCaja").ToString().ToDouble - End Get - Set(value As Double) - ViewState("DineroCaja") = value - End Set - End Property - - Private ReadOnly Property CveCicloComercial As Integer - Get - Return ViewState("CveCicloComercial").ToString().ToEntero() - End Get - End Property - -#End Region - -#Region "Propiedades Contratos" - - Private Property DtContratos As DataTable - Get - Return If(IsNothing(ViewState("DtContratos")), Nothing, CType(ViewState("DtContratos"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtContratos") = value - End Set - End Property - Private Property NumeroContrato As String - Get - Return ViewState("NumeroContrato").ToString() - End Get - Set(value As String) - ViewState("NumeroContrato") = value - End Set - End Property - Private Property DescripcionContrato As String - Get - Return ViewState("DescripcionContrato").ToString() - End Get - Set(value As String) - ViewState("DescripcionContrato") = value - End Set - End Property - Private Property NumeroLicitacion As String - Get - Return ViewState("NumeroLicitacion").ToString() - End Get - Set(value As String) - ViewState("NumeroLicitacion") = value - End Set - End Property - Private Property CveAlmacenExistenciasContrato As Integer - Get - Return ViewState("CveAlmacenExistenciasContrato").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAlmacenExistenciasContrato") = value - End Set - End Property - Private Property CveAlmacenOrigenContrato As Integer - Get - Return ViewState("CveAlmacenOrigenContrato").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAlmacenOrigenContrato") = value - End Set - End Property - Private Property DtContratosSerieDetalle As DataTable - Get - Return If(IsNothing(ViewState("DtContratosSerieDetalle")), Nothing, CType(ViewState("DtContratosSerieDetalle"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtContratosSerieDetalle") = value - End Set - End Property - Private Property CvePSSerie As Integer - Get - Return CType(ViewState("CvePSSerie"), Integer) - End Get - Set(value As Integer) - ViewState("CvePSSerie") = value - End Set - End Property - Private Property CveUMSerie As Integer - Get - Return CType(ViewState("CveUMSerie"), Integer) - End Get - Set(value As Integer) - ViewState("CveUMSerie") = value - End Set - End Property - Private Property CveConsecSerie As Integer - Get - Return CType(ViewState("CveConsecSerie"), Integer) - End Get - Set(value As Integer) - ViewState("CveConsecSerie") = value - End Set - End Property - Private Property LimitaCantidadSerie As Integer - Get - Return CType(ViewState("LimitaCantidadSerie"), Integer) - End Get - Set(value As Integer) - ViewState("LimitaCantidadSerie") = value - End Set - End Property - - - Private Property PorAmortizacionAnticipo As Integer - Get - - If ViewState("PorAmortizacionAnticipo") Is Nothing Then - Return 0 - Else - Return CType(ViewState("PorAmortizacionAnticipo"), Integer) - End If - - End Get - Set(value As Integer) - ViewState("PorAmortizacionAnticipo") = value - End Set - End Property - - - - - Private Property AmortizacionSujeridaContrato As Decimal - Get - - If ViewState("AmortizacionSujeridaContrato") Is Nothing Then - Return 0 - Else - Return ViewState("AmortizacionSujeridaContrato").ToString.ToDecimal - End If - - End Get - Set(value As Decimal) - ViewState("AmortizacionSujeridaContrato") = value - End Set - End Property - - Private Property EscontratoObra As Boolean - Get - If ViewState("EscontratoObra") Is Nothing Then - Return False - Else - Return Boolean.Parse(ViewState("EscontratoObra").ToString) - End If - - End Get - Set(value As Boolean) - ViewState("EscontratoObra") = value - End Set - End Property - - - - - - -#End Region - -#Region " PROPIEDADES NUEVAS | GUARDAR - IMPRESION " - Private Property ErrorList As List(Of String) - Get - Return CType(ViewState("ErrorList"), List(Of String)) - End Get - Set(value As List(Of String)) - ViewState("ErrorList") = value - End Set - End Property - Private Property MensajeAlert As StringBuilder - Get - Return CType(ViewState("MensajeAlert"), StringBuilder) - End Get - Set(value As StringBuilder) - ViewState("MensajeAlert") = value - End Set - End Property - Private Property ObjFactura As Modelos.Factura - Get - Return CType(ViewState("ObjFactura"), Modelos.Factura) - End Get - Set(value As Modelos.Factura) - ViewState("ObjFactura") = value - End Set - End Property - Private Property ObjFacturaDevolucion As Modelos.Factura - Get - Return CType(ViewState("ObjFacturaDevolucion"), Modelos.Factura) - End Get - Set(value As Modelos.Factura) - ViewState("ObjFacturaDevolucion") = value - End Set - End Property - Private Property ObjFacturaBonificacion As Modelos.Factura - Get - Return CType(ViewState("ObjFacturaBonificacion"), Modelos.Factura) - End Get - Set(value As Modelos.Factura) - ViewState("ObjFacturaBonificacion") = value - End Set - End Property - Private Property ObjFacturaNC As Modelos.Factura - Get - Return CType(ViewState("ObjFacturaNC"), Modelos.Factura) - End Get - Set(value As Modelos.Factura) - ViewState("ObjFacturaNC") = value - End Set - End Property - - - - - - - - -#End Region - -#Region " PROPIEDADES NUEVAS " - Private Property CveOC As Integer - Get - Return ViewState("CveOC").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveOC") = value - End Set - End Property - - Private Property RegistroxOC As Boolean - Get - Return CBool(IfNull(ViewState("RegistroxOC"), False)) - End Get - Set(value As Boolean) - ViewState("RegistroxOC") = value - End Set - End Property - - - Private Property EnviarCorreoCliente As Boolean - Get - Return CBool(IfNull(ViewState("EnviarCorreoCliente"), False)) - End Get - Set(value As Boolean) - ViewState("EnviarCorreoCliente") = value - End Set - End Property - Private Property EstatusCliente As Boolean - Get - Return CBool(ViewState("EstatusCliente").ToString()) - End Get - Set(value As Boolean) - ViewState("EstatusCliente") = value - End Set - End Property - - 'Private Property CveMetodoPagoCliente As Integer - ' Get - ' Return ViewState("CveMetodoPagoCliente").ToString().ToEntero() - ' End Get - ' Set(value As Integer) - ' ViewState("CveMetodoPagoCliente") = value - ' End Set - 'End Property - - Private Property Modalidad As String - Get - Return ViewState("Modalidad").ToString() - End Get - Set(value As String) - ViewState("Modalidad") = value - End Set - End Property - Private Property Index As Integer - Get - Return ViewState("Index").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("Index") = value - End Set - End Property - Private Property TotAnt As Decimal - Get - Return ViewState("TotAnt").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("TotAnt") = value - End Set - End Property - Private Property TotalOriginal As Double - Get - Return ViewState("TotalOriginal").ToString().ToDouble - End Get - Set(value As Double) - ViewState("TotalOriginal") = value - End Set - End Property - - Private Property AplicaCancelarRemision As Boolean - Get - Return CBool(ViewState("AplicaCancelarRemision").ToString()) - End Get - Set(value As Boolean) - ViewState("AplicaCancelarRemision") = value - End Set - End Property - Private Property TipoVentaSucursal As Integer - Get - Return ViewState("TipoVentaSucursal").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("TipoVentaSucursal") = value - End Set - End Property - Private Property MensajeCveSAT As StringBuilder - Get - If ViewState("MensajeCveSAT") Is Nothing Then ViewState("MensajeCveSAT") = New StringBuilder - Return CType(ViewState("MensajeCveSAT"), StringBuilder) - End Get - Set(value As StringBuilder) - ViewState("TipoVentaSucursal") = value - End Set - End Property - Private Property EditoRemision As Boolean - Get - Return CBool(ViewState("EditoRemision").ToString()) - End Get - Set(value As Boolean) - ViewState("EditoRemision") = value - End Set - End Property - Private Property AplicaNC As Boolean - Get - Return CBool(ViewState("AplicaNC").ToString()) - End Get - Set(value As Boolean) - ViewState("AplicaNC") = value - End Set - End Property - Private Property DtVentasNC As DataTable - Get - Return CType(ViewState("DtVentasNC"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtVentasNC") = value - End Set - End Property - Private Property AplicaNCMasiva As Boolean - Get - Return CBool(ViewState("AplicaNCMasiva").ToString()) - End Get - Set(value As Boolean) - ViewState("AplicaNCMasiva") = value - End Set - End Property - Private Property RefacturacionGeneroNC As Boolean - Get - Return CBool(ViewState("RefacturacionGeneroNC").ToString()) - End Get - Set(value As Boolean) - ViewState("RefacturacionGeneroNC") = value - End Set - End Property - Private Property ModalidadEdicion As Boolean - Get - Return CBool(ViewState("ModalidadEdicion").ToString()) - End Get - Set(value As Boolean) - ViewState("ModalidadEdicion") = value - End Set - End Property - Private Property ConversionRemision As String - Get - Return ViewState("ConversionRemision").ToString() - End Get - Set(value As String) - ViewState("ConversionRemision") = value - End Set - End Property - Private Property TipoCambioRemision As Decimal - Get - Return ViewState("TipoCambioRemision").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("TipoCambioRemision") = value - End Set - End Property - Private Property TieneContrato As Boolean - Get - Return CBool(ViewState("TieneContrato").ToString()) - End Get - Set(value As Boolean) - ViewState("TieneContrato") = value - End Set - End Property - Private Property CveOrdenCompraContrato As Integer - Get - Return ViewState("CveOrdenCompraContrato").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveOrdenCompraContrato") = value - End Set - End Property - Private Property ContratosConOC As StringBuilder - Get - If ViewState("ContratosConOC") Is Nothing Then ViewState("ContratosConOC") = New StringBuilder - Return CType(ViewState("ContratosConOC"), StringBuilder) - End Get - Set(value As StringBuilder) - ViewState("ContratosConOC") = value - End Set - End Property - Private Property RequiereOC As Boolean - Get - Return CBool(ViewState("RequiereOC").ToString()) - End Get - Set(value As Boolean) - ViewState("RequiereOC") = value - End Set - End Property - Private Property PorcentajeCredito As Decimal - Get - Return ViewState("PorcentajeCredito").ToString().ToDecimal - End Get - Set(value As Decimal) - ViewState("PorcentajeCredito") = value - End Set - End Property - Private Property CvePedidoA As Integer - Get - Return ViewState("CvePedidoA").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePedidoA") = value - End Set - End Property - - Private Property CveAcercamiento As Integer - Get - If ViewState("CveAcercamiento") Is Nothing Then - ViewState("CveAcercamiento") = -1 - End If - Return ViewState("CveAcercamiento").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAcercamiento") = value - End Set - End Property - - Private Property CveEmpresaCRM As Integer - Get - Return ViewState("CveEmpresaCRM").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveEmpresaCRM") = value - End Set - End Property - - - Private Property CveAcercamientoCRM As Integer - Get - Return ViewState("CveAcercamientoCRM").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAcercamientoCRM") = value - End Set - End Property - - - Private Property CorreoContactoCRM As String - Get - If ViewState("CorreoContactoCRM") Is Nothing Then - ViewState("CorreoContactoCRM") = "" - End If - Return ViewState("CorreoContactoCRM").ToString() - End Get - Set(value As String) - ViewState("CorreoContactoCRM") = value - End Set - End Property - - - Private Property DtPedidos2 As DataTable - Get - Return CType(ViewState("DtPedidos2"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtPedidos2") = value - End Set - End Property - Private Property DtPedidos2PS As DataTable - Get - Return CType(ViewState("DtPedidos2PS"), DataTable) - End Get - Set(value As DataTable) - ViewState("DtPedidos2PS") = value - End Set - End Property - - Private Property CveEstatus As Integer - Get - Return ViewState("CveEstatus").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveEstatus") = value - End Set - End Property - - Private Property CveEstatusCotizacion As Integer - Get - Return (IfNull(ViewState("CveEstatusCotizacion"), "-1", ViewState("CveEstatusCotizacion"))).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveEstatusCotizacion") = value - End Set - End Property - - Private Property CveMetodoPago33Venta As Integer - Get - Return (IfNull(ViewState("CveMetodoPago33Venta"), "-1", ViewState("CveMetodoPago33Venta"))).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveMetodoPago33Venta") = value - End Set - End Property - - Private Property CveFormaPago33Venta As Integer - Get - Return (IfNull(ViewState("CveFormaPago33Venta"), "-1", ViewState("CveFormaPago33Venta"))).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveFormaPago33Venta") = value - End Set - End Property - Private Property CveMetodoPago33Cliente As Integer - Get - Return If(IsNothing(ViewState("CveMetodoPago33Cliente")), -1, ViewState("CveMetodoPago33Cliente")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveMetodoPago33Cliente") = value - End Set - End Property - Private Property CveFormaPago33Cliente As Integer - Get - Return If(IsNothing(ViewState("CveFormaPago33Cliente")), -1, ViewState("CveFormaPago33Cliente")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveFormaPago33Cliente") = value - End Set - End Property - - Private Property CveVendedorVenta As Integer - Get - Return (IfNull(ViewState("CveVendedorVenta"), "-1", ViewState("CveVendedorVenta"))).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveVendedorVenta") = value - End Set - End Property - Private Property CveVendedorCliente As Integer - Get - Return If(IsNothing(ViewState("CveVendedorCliente")), -1, ViewState("CveVendedorCliente")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveVendedorCliente") = value - End Set - End Property - Private Property CveVendedorClienteSucursal As Integer - Get - Return If(IsNothing(ViewState("CveVendedorClienteSucursal")), -1, ViewState("CveVendedorClienteSucursal")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveVendedorClienteSucursal") = value - End Set - End Property - - Private Property CveVendedorContrato As Integer - Get - Return If(IsNothing(ViewState("CveVendedorContrato")), -1, ViewState("CveVendedorContrato")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveVendedorContrato") = value - End Set - End Property - Private Property CveVendedorEmpresaCRM As Integer - Get - Return If(IsNothing(ViewState("CveVendedorEmpresaCRM")), -1, ViewState("CveVendedorEmpresaCRM")).ToString().ToEntero - End Get - Set(value As Integer) - ViewState("CveVendedorEmpresaCRM") = value - End Set - End Property - Private Property DiasCredito As Integer - Get - Return ViewState("DiasCredito").ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("DiasCredito") = value - End Set - End Property - Private Property EsDiasCreditoFijo As Boolean - Get - Return CBool(ViewState("EsDiasCreditoFijo").ToString()) - End Get - Set(value As Boolean) - ViewState("EsDiasCreditoFijo") = value - End Set - End Property - Private Property TieneDiasVencidos As Boolean - Get - Return CBool(IfNull(ViewState("TieneDiasVencidos"), "False", ViewState("TieneDiasVencidos"))) - End Get - Set(value As Boolean) - ViewState("TieneDiasVencidos") = value - End Set - End Property - - Private Property DiasVencidosCliente As Integer - Get - Return IfNull(ViewState("DiasVencidosCliente"), "0", ViewState("DiasVencidosCliente")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("DiasVencidosCliente") = value - End Set - End Property - Private Property SeCancelaRemisionProceso As Boolean - Get - Return CBool(ViewState("SeCancelaRemisionProceso").ToString()) - End Get - Set(value As Boolean) - ViewState("SeCancelaRemisionProceso") = value - End Set - End Property - - Private Property CvePrecioLista As Integer - Get - Return IfNull(ViewState("CvePrecioLista"), 0, ViewState("CvePrecioLista").ToString().ToEntero()).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePrecioLista") = value - End Set - End Property - Private Property CvePrecioListaCliente As Integer - Get - Return IfNull(ViewState("CvePrecioListaCliente"), 0, ViewState("CvePrecioListaCliente").ToString().ToEntero()).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CvePrecioListaCliente") = value - End Set - End Property - - Private Property FacturarSucursal As Boolean - Get - Return CBool(IfNull(ViewState("FacturarSucursal"), "False", ViewState("FacturarSucursal"))) - End Get - Set(value As Boolean) - ViewState("FacturarSucursal") = value - End Set - End Property - - Private Property ClienteSucursal As Modelos.SucursalModel - Get - Return CType(ViewState("ClienteSucursal"), Modelos.SucursalModel) - End Get - Set(value As Modelos.SucursalModel) - ViewState("ClienteSucursal") = value - End Set - End Property - - Private Property VentaDesglosaIEPS As Boolean - Get - Return CBool(IfNull(ViewState("VentaDesglosaIEPS"), "False", ViewState("VentaDesglosaIEPS"))) - End Get - Set(value As Boolean) - ViewState("VentaDesglosaIEPS") = value - End Set - End Property - Private Property VentaNODesglosaIVA As Boolean - Get - Return CBool(IfNull(ViewState("VentaNODesglosaIVA"), "False", ViewState("VentaNODesglosaIVA"))) - End Get - Set(value As Boolean) - ViewState("VentaNODesglosaIVA") = value - End Set - End Property - - Private Property SerieVenta As String - Get - Return IfNull(ViewState("SerieVenta"), "", ViewState("SerieVenta")).ToString() - End Get - Set(value As String) - ViewState("SerieVenta") = value - End Set - End Property - Private Property AplicaDocumentoNuevoNC As Boolean - Get - Return CBool(IfNull(ViewState("AplicaDocumentoNuevoNC"), "False", ViewState("AplicaDocumentoNuevoNC"))) - End Get - Set(value As Boolean) - ViewState("AplicaDocumentoNuevoNC") = value - End Set - End Property - Private Property AplicaRNCXDetalle As Boolean - Get - Return CBool(IfNull(ViewState("AplicaRNCXDetalle"), "False", ViewState("AplicaRNCXDetalle"))) - End Get - Set(value As Boolean) - ViewState("AplicaRNCXDetalle") = value - End Set - End Property - Private Property AplicaRNCBonificacionXDetalle As Boolean - Get - Return CBool(IfNull(ViewState("AplicaRNCBonificacionXDetalle"), "False", ViewState("AplicaRNCBonificacionXDetalle"))) - End Get - Set(value As Boolean) - ViewState("AplicaRNCBonificacionXDetalle") = value - End Set - End Property - Private Property AplicaRelacionManual As Boolean - Get - Return CBool(IfNull(ViewState("AplicaRelacionManual"), "False", ViewState("AplicaRelacionManual"))) - End Get - Set(value As Boolean) - ViewState("AplicaRelacionManual") = value - End Set - End Property - Private Property TmpDTFacturasRelacionadas As DataTable - Get - If ViewState("TmpDTFacturasRelacionadas") IsNot Nothing Then - Return CType(ViewState("TmpDTFacturasRelacionadas"), DataTable) - Else - Return Nothing - End If - End Get - Set(value As DataTable) - ViewState("TmpDTFacturasRelacionadas") = value - End Set - End Property - - Private Property CveAutorizacion As Integer - Get - Return (IfNull(ViewState("CveAutorizacion"), "-1", ViewState("CveAutorizacion"))).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveAutorizacion") = value - End Set - End Property - - Private Property EsGarantia As Boolean - Get - Return CBool(IfNull(ViewState("EsGarantia"), False, ViewState("EsGarantia"))) - End Get - Set(value As Boolean) - ViewState("EsGarantia") = value - End Set - End Property - - Private Property TipoCambioOriginal As Decimal - Get - Return (IfNull(ViewState("TipoCambioOriginal"), 0, ViewState("TipoCambioOriginal"))).ToString().ToDecimal() - End Get - Set(value As Decimal) - ViewState("TipoCambioOriginal") = value - End Set - End Property - - Private Property DtMercancias As DataTable - Get - Return If(IsNothing(ViewState("DtMercancias")), Nothing, CType(ViewState("DtMercancias"), DataTable)) - End Get - Set(value As DataTable) - ViewState("DtMercancias") = value - End Set - End Property - - - Private Property ClienteCodigoRegimenFiscal As String - Get - - If ViewState("ClienteCodigoRegimenFiscal") Is Nothing Then - ViewState("ClienteCodigoRegimenFiscal") = "" - End If - Return ViewState("ClienteCodigoRegimenFiscal").ToString - - End Get - Set(value As String) - ViewState("ClienteCodigoRegimenFiscal") = value - End Set - End Property - - - Private Property ClienteRegimenFiscal As String - Get - - If ViewState("ClienteRegimenFiscal") Is Nothing Then - ViewState("ClienteRegimenFiscal") = "" - End If - Return ViewState("ClienteRegimenFiscal").ToString - - End Get - Set(value As String) - ViewState("ClienteRegimenFiscal") = value - End Set - End Property - Private Property CveLineaAdicionalVenta As Integer - Get - Return IfNull(ViewState("CveLineaAdicionalVenta"), "-1", ViewState("CveLineaAdicionalVenta")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveLineaAdicionalVenta") = value - End Set - End Property - - Private Property SaldoLineaAdicional As Decimal - Get - Return (IfNull(ViewState("SaldoLineaAdicional"), "0", ViewState("SaldoLineaAdicional"))).ToString().ToDecimal() - End Get - Set(value As Decimal) - ViewState("SaldoLineaAdicional") = value - End Set - End Property - Private Property SaldoIngresosLineaAdicional As Decimal - Get - Return (IfNull(ViewState("SaldoIngresosLineaAdicional"), "0", ViewState("SaldoIngresosLineaAdicional"))).ToString().ToDecimal() - End Get - Set(value As Decimal) - ViewState("SaldoIngresosLineaAdicional") = value - End Set - End Property - - Private Property CveCategoriaLineaAdicional As Integer - Get - Return IfNull(ViewState("CveCategoriaLineaAdicional"), "-1", ViewState("CveCategoriaLineaAdicional")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveCategoriaLineaAdicional") = value - End Set - End Property - - Private Property CveMonedaLineaAdicional As Integer - Get - Return IfNull(ViewState("CveMonedaLineaAdicional"), "-1", ViewState("CveMonedaLineaAdicional")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveMonedaLineaAdicional") = value - End Set - End Property - Private Property HabilitoFacturacionIngresoLineaAdicional As Boolean - Get - Return If(IsNothing(ViewState("HabilitoFacturacionIngresoLineaAdicional")), False, CType(ViewState("HabilitoFacturacionIngresoLineaAdicional"), Boolean)) - End Get - Set(value As Boolean) - ViewState("HabilitoFacturacionIngresoLineaAdicional") = value - End Set - End Property - - Private Property CveContratoTipo As Integer - Get - Return IfNull(ViewState("CveContratoTipo"), "-1", ViewState("CveContratoTipo")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("CveContratoTipo") = value - End Set - End Property - - Private Property HabilitaRemisionPublicoGeneral As Integer - Get - Return IfNull(ViewState("HabilitaRemisionPublicoGeneral"), "0", ViewState("HabilitaRemisionPublicoGeneral")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("HabilitaRemisionPublicoGeneral") = value - End Set - End Property - - Private Property TieneBloqueoPorAutorizacion As Integer - Get - Return IfNull(ViewState("TieneBloqueoPorAutorizacion"), "0", ViewState("TieneBloqueoPorAutorizacion")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("TieneBloqueoPorAutorizacion") = value - End Set - End Property - - Public Property IndicePSActual As Integer - Get - Return IfNull(ViewState("IndicePSActual"), "-1", ViewState("IndicePSActual")).ToString().ToEntero() - End Get - Set(value As Integer) - ViewState("IndicePSActual") = value - End Set - End Property - - Public Property CantidadOriginal As Decimal - Get - Return IfNull(ViewState("CantidadOriginal"), "-1", ViewState("CantidadOriginal")).ToString().ToDecimal() - End Get - Set(value As Decimal) - ViewState("CantidadOriginal") = value - End Set - End Property - -#End Region - - - - Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load - - If Not IsPostBack Then - - - - Modalidad = "" - Opcion = "" - Index = 0 - TotAnt = 0 - 'CargoComercioExterior = False - ' DdlBPPS.setEsWebService(True) - 'DdlBPPS.ddlWS.Attributes.Add("data-clear", "1") - ViewState("ProcesoCorrecto") = True - ViewState("CargoUsado") = True - ViewState("NuevaFactura") = -1 - ViewState("CveDevolucion") = -1 - ViewState("CvePedido") = -1 - ViewState("CvePedido2") = -1 - ViewState("TipoContrato") = -1 - ViewState("CveVenta") = -1 - ViewState("CveCliente") = -1 - ViewState("CveClienteAnterior") = -1 - ViewState("CveOS") = -1 - ViewState("CveOC") = -1 - ViewState("CveAnticipo") = -1 - ViewState("CveFactura") = -1 - ViewState("CveCicloComercial") = -1 - ViewState("Entrega") = "" - ViewState("Vigencia") = "" - ViewState("AplicarVentaFacturada") = False - ViewState("SeGuardoPrePoliza") = False - ViewState("TipoDoctoDevolucion") = "" - ViewState("EditoRemision") = False - ViewState("RequiereOC") = False - ViewState("ClienteDesglosaIEPS") = False - ViewState("ClienteNODesglosaIVA") = False - ViewState("ClienteRetIVA") = 0 - ViewState("ClienteRetISR") = 0 - ViewState("CvePrecioLista") = 0 - ViewState("CvePrecioListaCliente") = 0 - HdnCargarInventario.Value = "True" - Me.CveVendedorVenta = -1 - Me.CveVendedorCliente = -1 - Me.CveVendedorClienteSucursal = -1 - Me.CveVendedorContrato = -1 - Me.CveVendedorEmpresaCRM = -1 - Me.EsGarantia = False - CveEmpresaCRM = 0 - CveAcercamientoCRM = 0 - EstatusCliente = False - RemisionesLista = New List(Of Integer) - Pedidos2Lista = New List(Of Integer) - CotizacionesLista = New List(Of Integer) - ListaDescuentos = New List(Of Modelos.VentaDescuentos) - - CuentasContablesInvalidas = New StringBuilder - CvePrePoliza = 0 - TotalOtrosConceptos = 0 - CveUsuarioActual = UsuarioActual.CveUsuario - EmpresaActual = UsuarioActual.Empresa - IdPoliza = 0 - CveCorte = -1 - CveContrato = -1 - DevolucionAlmacen = 0 - CvePSAmortizacion = 0 - EraCotizacion = 0 - FacturaMateriales = 0 - CvePedidoA = 0 - EsCreaApartirDe = False - RequiereAlmacenDestino = False - RequiereAlmacenOrigen = False - TmpDTComplementos = New DataTable - DtRemConceptosSurtidos = Nothing - TipoVentaSucursal = 0 - PlazoCobranza = 0 - PlazoCobranzaRemision = 0 - TipoCambioFactura = 1 - NumeroContrato = "" - DescripcionContrato = "" - NumeroLicitacion = "" - ImprimeNombreSucursal = False - RegistraScript("SetDisabledTxtTotal(true);") - TrVistaPrevia.Visible = False - 'CveMetodoPagoCliente = 1 - CveAlmacenExistenciasContrato = -1 - UpFacturar.Update() - 'CargaTiposDocumentos() - TrEmitir.Visible = False - - ViewState("EstablecioFolio") = False - 'ViewState("SubProyectoPorcentajeIVA") = 0 - RefacturacionGeneroNC = False - ModalidadEdicion = False - ConversionRemision = "" - TipoCambioRemision = 1 - CveOrdenCompraContrato = -1 - TieneContrato = False - AplicaNC = False - TieneAlmacen = False - CveEstatus = -1 - PorcentajeIVA = 0 - EsDiasCreditoFijo = False - DiasCredito = 0 - AplicaCancelarRemision = False - SeCancelaRemisionProceso = False - TotalOriginal = 0 - CveAlmacenDevolucion = 0 - Me.CveEstadoCancelacion = 0 - - - 'TxtFechaOS.Text = NowADS().ToDateTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(" ", "T") - - If UsuarioActual.TienePermisoProceso(177) Then - DdlTipoComprobante.Items.Insert(4, New ListItem("Pedido de Contrato", "Ped")) - End If - - - - - - If Not UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - LnkAgregarCliente.Visible = False - End If - - DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Pd2")) - - If UsuarioActual.Empresa.Funcionalidad(344).ToString() = "1" Then - DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("NC de Remisión", "RNC")) - End If - - - SetValues() - - CvePresupuesto = 0 - - 'MODALIDADES - If Request("Op") IsNot Nothing AndAlso Request("Op").ToString() <> "" Then - Opcion = Request("Op").ToString() - LblTitulo.Text = "Registro de Cotizaciones" - TrTipo.Visible = False - - divcondicionespago.Visible = UsuarioActual.Empresa.CvePlataforma = 1 'SI ES PLATAFORMA ERP SIEMPRE VSIBLE ESTE PORLET - ImgAntiPend.Visible = False - - TrOC.Visible = False - DdlTipoComprobante.SelectedValue = "Op" - Else - Opcion = "Ing" - DdlTipoComprobante.SelectedValue = "Ing" - End If - - - LblUsuario.Text = UsuarioActual.Usuario - LblFechaRegistro.Text = NowADS().ToShortDateString() - - - ImgDescTotal.Visible = False - - ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '2'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = ''; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = 'none'; $get('BtnAplicarDescG').style.display = ''; $get('TrMotivoDescuento').style.display = '';") - ImgAntiPend.Attributes.Add("onclick", "$get('HdnTipoDescuento').value = '3'; MuestraAnticipos();") - ImgOtrosConceptos.Attributes.Add("onclick", "javascript:$('#ModalOtrosConceptos').modal();") - - - - - - CreaDTmpC() - CreaDTmpF() - CreaDTDocumentosRelacionados() - CargaDdlSubProyectos() - 'CargaProyecto() - 'CargaSucursales() - CargaClasificaciones() - CargaPS(-1, DdlPS) - CreaDTVentas() - CargaMetodosPago() - CargaUsoCFDI() - CargaMonedas() - - CargaAgentes() - CargaProcedimientos() - CargaTiposVenta() - CargaDdlClientes() - - - - 'SI USUARIO USA AMORTIZACIÓN CONTABLE, se carga las tablas para usarlas mas adelante - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) - DdlTipoComprobante.Items.Add(New ListItem("Compromisos", "Com")) - DdlTipoComprobante.Items.Add(New ListItem("Orden Pago", "OP")) - - Dim AC As New ClsAC - If AC.GetPresupuestoIngresos(-1, NowADS().Year, True, UsuarioActual.CveEmpresa) Then - DdlFuenteRecaudacion.DataSource = AC.DtResultados() - DTPresupuestoIngresos = AC.DtResultados() - ViewState("DTFuenteRecaudacion") = AC.DtResultados() - 'GenerarPolizasAC() - End If - AC.Dispose() - 'columna de Fuente de recaudacion - GvPS.Columns(21).Visible = True - 'nomostrar.Visible = True - 'nomostrar2.Visible = True - 'GvPS.Width = 1250 - DdlFuenteRecaudacion.DataBind() - Else - TFuenteRecaudacion.Visible = False - End If - - 'Carga cliente - If Request("CveCliente") IsNot Nothing AndAlso IsNumeric(Request("CveCliente")) AndAlso Request("CveCliente").ToEntero() > 0 AndAlso Request("CveFactura") Is Nothing Then - ViewState("CveCliente") = Request("CveCliente") - HdnCveCliente.Value = Request("CveCliente") - CargaCliente(CveCliente) - - Else - ViewState("CveCliente") = -1 - HdnCveCliente.Value = "-1" - End If - - 'Carga empresa CRM - If Request("CveEmpresaCRM") IsNot Nothing AndAlso IsNumeric(Request("CveEmpresaCRM")) AndAlso Request("CveEmpresaCRM").ToEntero() > 0 Then - ViewState("CveEmpresaCRM") = Request("CveEmpresaCRM") - CargaEmpresaCRM(CveEmpresaCRM) - Else - ViewState("CveEmpresaCRM") = -1 - End If - - If Request("CveAcercamientoCRM") IsNot Nothing AndAlso IsNumeric(Request("CveAcercamientoCRM")) AndAlso Request("CveAcercamientoCRM").ToEntero() > 0 Then - ViewState("CveAcercamientoCRM") = Request("CveAcercamientoCRM") - - Dim cRMService As ICRMService = New CRMService(System.Configuration.ConfigurationManager.ConnectionStrings("Conexion").ConnectionString) - Dim AcercamientoModel As New RequestAcercamiento(UsuarioActual.CveEmpresa, CveAcercamientoCRM) - Dim objAcercamiento = cRMService.GetAceracamientoCRM(AcercamientoModel) - - If objAcercamiento.Result.Count > 0 Then - CorreoContactoCRM = objAcercamiento.Result(0).CorreoContacto - End If - - Else - ViewState("CveAcercamientoCRM") = -1 - End If - - 'mensaje de confirmación al guardar - BtnEmitirImprimir.OnClientClick = $"ValidaGuardar({ If(ImprimeNombreSucursal = True, 1, 0)},0);" - BtnEmitirImprimir.Attributes.Add("data-toggle", "confirmation") - BtnEmitirImprimir.Attributes.Add("data-popout", "true") - BtnEmitirImprimir.Attributes.Add("data-original-title", "confirmar") - BtnEmitirImprimir.Attributes.Add("data-btn-ok-label", "Guardar") - BtnEmitirImprimir.Attributes.Add("data-html", "true") - - If UsuarioActual.CveEmpresa.Contiene(126) Then ' cuando la empresa se relaciona a ua orden de producción, Citrus Game - TrOP.Visible = True - CargaOrdenProduccion() - End If - - - - If Request("CveOrdenProduccion") IsNot Nothing AndAlso IsNumeric(Request("CveOrdenProduccion")) AndAlso Request("CveOrdenProduccion").ToEntero() > 0 Then - DdlSubProyectoDatos.SelectedValueExist(11954) - Using ObjVentas As New ClsNominas - - If ObjVentas.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, "", -Request("CveOrdenProduccion").ToEntero()) Then - TmpDT = ObjVentas.DtResultados - TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) - TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) - TmpDT.Columns.Add("TieneProntoPago", GetType(String)) - TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) - TmpDT.Columns.Add("CveMarca", GetType(Integer)) - TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) - TmpDT.Columns.Add("PrecioLista", GetType(String)) - TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) - TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) - TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) - TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) - TmpDT.Columns("NumTurnos").DefaultValue = 0D - TmpDT.Columns.Add("NumeroPedimento", GetType(String)) - - GvPS.DataSource = ObjVentas.DtResultados - GvPS.DataBind() - - 'IEPS A NIVEL DETALLE - 'TxtIEPS.Text = If(TmpDT.SUM("IEPS") > 0, TmpDT.SUM("IEPS").FormatoNumero, TxtIEPS.Text) - End If - End Using - End If - - If Request("CveEmbarqueManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveEmbarqueManifiesto")) AndAlso Request("CveEmbarqueManifiesto").ToEntero() > 0 Then - DdlMoneda.SelectedValueExist(2) - CambiaMoneda() - Using ObjVentas As New ClsNominas - If ObjVentas.EmbarqueManifiestoGet(-1, -1, -1, Request("CveEmbarqueManifiesto").ToString().ToEntero()) And ObjVentas.DtResultados.Rows.Count > 0 Then - DdlSubProyectoDatos.SelectedValueExist(ObjVentas.DtResultados.Rows(0)("CveSubProyecto").ToString()) - End If - If ObjVentas.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, "", Request("CveEmbarqueManifiesto").ToEntero()) Then - TmpDT = ObjVentas.DtResultados - TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) - TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) - TmpDT.Columns.Add("TieneProntoPago", GetType(String)) - TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) - TmpDT.Columns.Add("CveMarca", GetType(Integer)) - TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) - TmpDT.Columns.Add("PrecioLista", GetType(String)) - TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) - TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) - TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) - TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) - TmpDT.Columns("NumTurnos").DefaultValue = 0D - TmpDT.Columns.Add("NumeroPedimento", GetType(String)) - - GvPS.DataSource = ObjVentas.DtResultados - GvPS.DataBind() - - 'IEPS A NIVEL DETALLE - 'TxtIEPS.Text = If(TmpDT.SUM("IEPS") > 0, TmpDT.SUM("IEPS").FormatoNumero, TxtIEPS.Text) - End If - End Using - End If - - - - 'SI ES VENTA NUEVA, NO RECARGAR TAB DE ALMACEN - If CveVenta <= 0 Then - 'REMOVER EVENTO PARA RECARGAR ALMACEN - HdnCargarInventario.Value = "False" - 'spanAlmacen.Attributes.Remove("onclick") - UpParametros.Update() - End If - - CargaEstatusFactura(Opcion) - - If Opcion = "Ing" Then - 'DdlEstatus.Enabled = False - If UsuarioActual.Empresa.TipoFacturacion = "CBB" Then - 'DdlEstatus.SelectedValue = "3" - CveEstatus = 3 - ElseIf UsuarioActual.Empresa.TipoFacturacion = "CFDi" Then - 'DdlEstatus.SelectedValue = "2" - CveEstatus = 2 - End If - End If - - - - - 'CARGA PARA FACTURAR - ViewState("CveRemision") = IfNull(Request("CveRemision").ToEntero(), 0) - ViewState("CveCotizacion") = IfNull(Request("CveCotizacion").ToEntero(), 0) - - 'If ViewState("CveCotizacion").ToString().ToEntero() > 0 Then - ' EsCreaApartirDe = True - 'End If - - If ViewState("CveRemision").ToString().ToEntero() > 0 Or ViewState("CveCotizacion").ToString().ToEntero() > 0 Then - - - ImgAddObs.Visible = True - CargaEventoBitacora() - - DdlTipoComprobante.Enabled = False - DdlTipoComprobante.SelectedValue = "Ing" - - CargaEstatusFactura() - 'DdlEstatus.SelectedValueExist("2") - - ConfiguraTipoDocto() - - - BtnEmitirImprimir.Text = "Facturar" - BtnEmitirImprimir.Visible = True - - UpnTools.Update() - - End If - - If Not ExFolioFactura Then SetPermisos() - If CveVenta < 1 Then CargaFolios() - - - - If CveVenta <= 0 AndAlso UsuarioActual.CveEmpresa.Contiene(7, 122) Then - TxtCantidad.Width = New Unit("100%") - End If - - InicializaImprimirNew() - - TxtSubTotal.Attributes.Add("onKeyUp", "FnSuma()") - TxtIVA.Attributes.Add("onKeyUp", "FnSuma()") - TxtIEPS.Attributes.Add("onKeyUp", "FnSuma()") - TxtRetIVA.Attributes.Add("onKeyUp", "FnSuma()") - TxtRetISR.Attributes.Add("onKeyUp", "FnSuma()") - - CargaFormatoSucursal() - - 'SELECCIONA SUCURSAL DEL USUARIO CUANDO SEA VENTA NUEVA Y SIN CLIENTE - If Not (CveCliente > 0 Or CveVenta > 0) Then - DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) - - If UsuarioActual.TienePermisoProceso(152) Then - DdlSubProyectoDatos.Enabled = False - End If - CambiaSucursal() - UpParametros.Update() - - End If - - 'CUANDO SEA COTIZACION Y SEA COMPUPROVEEDORES (EMPRESA 72) NO DEBE ENVIAR CORREO AL CLIENTE - EnviarCorreoCliente = True - - If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then - EnviarCorreoCliente = False - End If - - 'MOSTRAR LA OPCION DE AGREGAR PS EN BDH - If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveVenta <= 0 Then - ImgOtrosConceptos.Visible = False - GvPS.Columns(8).Visible = False - For Each Gvr As GridViewRow In GvPS.Rows - Gvr.FCLinkButton("imgE").Visible = False - Next - End If - - If UsuarioActual.Empresa.CvePlataforma = 2 Then - ImgOtrosConceptos.Visible = False - GvPS.Columns(8).Visible = False - For Each Gvr As GridViewRow In GvPS.Rows - Gvr.FCLinkButton("imgE").Visible = False - Gvr.FCLinkButton("imgEPyME").Visible = True - Next - - End If - - - If Request("CveVenta") IsNot Nothing AndAlso IsNumeric(Request("CveVenta")) AndAlso Request("CveVenta").ToEntero() = -1 AndAlso UsuarioActual.CveTipoDocumento.Length = 3 Then - CargaDdlSubProyectos() - UpParametros.Update() - DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) - CambiaTipoDocto() - - End If - - - - If Not CveVenta > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(403).ToString() = "1" Then - If (DdlTipoComprobante.Items.FindByValue("Ing") IsNot Nothing) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) - End If - End If - - - - - LtlTareaNueva.Text = String.Format(" Tarea", CveVenta) - - 'SI ESTA CARGANDO UNA REFACTURACION. VALIDAR QUE LA FACTURA ANTERIOR ESTE CANCELADA - If Me.ObjFacturaNC IsNot Nothing Then - - If Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1 Then - Dim TipoEstatus As Integer = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.ObjFacturaNC.CveEstatusFactura}").ToEntero() - If TipoEstatus <> 5 Then - 'ESTATUS DE CANCELACION PENDIENTE - If Not Me.ObjFacturaNC.CveEstatusFactura = 23 Then - Alert($"El documento de tipo '{Me.ObjFacturaNC.TipodeComprobante}' a refacturar no ha sido cancelado. Favor de verificar el documento", TipoMensaje.MsgAdvertencia) - BtnEmitirImprimir.Visible = False - UpFacturar.Update() - End If - End If - End If - End If - - 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO - If Not CveVenta > 0 AndAlso Not BtnEmitirImprimir.Visible AndAlso Request("Op") IsNot Nothing AndAlso Request("Op").ToString() <> "" Then - If DdlTipoComprobante.SelectedValue.Contiene("Cot") Then - BtnEmitirImprimir.Visible = True - TrVistaPrevia.Visible = True - End If - End If - - If Request("CveCotizacion") IsNot Nothing AndAlso IfNull(Request("CveCotizacion"), 0).ToString().ToEntero() > 0 Then - If UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") Then - 'VERIFICA SI NO ESTA AUTORIZADA - If CveEstatusCotizacion <> 8 Then - BtnEmitirImprimir.Enabled = False - BtnEmitirImprimir.Visible = False - Alert("La cotización no esta autorizada", TipoMensaje.MsgAdvertencia) - End If - End If - - End If - - - - If DdlTipoComprobante.SelectedValue.Contiene("Rem") Then - ' IPP 15 Julio 2017 - ERA FALSE - ImgAntiPend.Visible = False - UpPS.Update() - End If - - - BloqueaCondiconesPago() - - - - - - - End If - - End Sub - - Private Sub CargaDdlClientes() - If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then - DdlClientesWS.setEsWebService(True) - Else - DdlClientesWS.setEsWebService(False) - If Not UsuarioActual.Empresa.Funcionalidad(105) = "1" Then - DdlClientesWS.ddl.Items.Clear() - DdlClientesWS.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) - DdlClientesWS.DataBind() - DdlClientesWS.ddl.Items.Insert(0, New ListItem("Todos", "-1")) - End If - End If - End Sub - - - Private Sub BloqueaClasificaciones() - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then - DdlClasificacion.Enabled = False - DdlUnidadMedida.Enabled = False - End If - End Sub - - Private Sub BloqueaCondiconesPago() - If UsuarioActual.TienePermisoProceso(289) Then - - DdlUsoCFDI.Enabled = False - DdlMetodoPago33.Enabled = False - DdlFormaPago33.Enabled = False - DdlTiposRelacion.Enabled = False - - End If - - UPCondicionesPago.Update() - End Sub - - Private Sub ConfiguraEmpresa() - Select Case UsuarioActual.CveEmpresa - Case 119 - TxtObsPS.Attributes.Add("onkeypress", "setFocus(event,'TxtPrecio');") - End Select - End Sub - - - - - -#Region "C A R G A S" - - Private Sub CargaOrdenProduccion(Optional Opcion As Integer = 1, Optional CveVenta As Integer = -1) - DdlOrdenProduccion.Items.Clear() - Dim CveOrdenProduccion As String = "-1" - Dim ObjCGame As New ClsCGame - If ObjCGame.GetOrdenProduccion(-1, UsuarioActual.CveEmpresa, -1, "-1", MinFecha, MaxFecha, -1) Then - If Opcion = 1 Then - DdlOrdenProduccion.DataSource = ObjCGame.DtResultados.FiltraParametros(String.Format("CveVenta IS NULL ")) - ElseIf Opcion = 2 Then - LnkActualizarOrdenProduccion.Visible = True - DdlOrdenProduccion.DataSource = ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta} OR CveVenta IS NULL") - If ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta}").Rows.Count > 0 Then - CveOrdenProduccion = ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta}").Rows(0)("CveOrdenProduccion").ToString() - End If - End If - DdlOrdenProduccion.Items.Insert(0, New ListItem("Seleccione", "-1")) - End If - ObjCGame.Dispose() - DdlOrdenProduccion.DataBind() - DdlOrdenProduccion.SelectedValueExist(CveOrdenProduccion) - End Sub - Private Sub CargaEstatusFactura(Optional TipoDocto As String = "Ing") - - Dim FiltroCompromiso As String = If(TipoDocto = "Com", "And CveEstatusFactura In (2, 9)", "And CveEstatusFactura Not In (9)") - If TipoDocto.ToUpper.Contiene("EGS", "COM", "ANT") Then TipoDocto = "Ing" - - - - End Sub - Private Sub CargaOS(CveOS As Integer) - Dim OS As New ClsOS - Dim DtDetalle As DataTable = Nothing - Dim DtDetalleMateriales As DataTable = Nothing - - If OS.GetOrdenesServicios(CveOS, -1, -1, -1, -1, UsuarioActual.CveEmpresa) Then - - HdnCveCliente.Value = OS.CveCliente.ToString() - ViewState("CveCliente") = OS.CveCliente - CargaCliente(CveCliente) - - If OS.GetOrdenesServiciosDetalleAFacturar(CveOS) Then - Dim Cons As Integer = 1 - For Each dr As DataRow In OS.DtResultados.FiltraParametros("SeFacturara = 1 ").Rows - - AgregarProductoServicio(dr("Cantidad").ToString().ToDecimal, dr("CveUM").ToString().ToEntero(), dr("UM").ToString(), -1, "", dr("CvePS").ToString().ToEntero(), "", dr("Obs").ToString(), dr("PU").ToString().ToDecimal, 0, -1, "", - dr("CveSubProyecto").ToString().ToEntero(), dr("SubProyecto").ToString()) - 'Dim drt As DataRow = TmpDT.NewRow - - 'drt("Consec") = Cons - 'drt("CvePS") = dr("CvePS") - 'drt("CveClasificacion") = dr("CveClasificacion") - 'drt("Clasificacion") = dr("Clasificacion") - 'drt("PS") = dr("PS") - 'drt("CveOSDetalle") = dr("CveOSDetalle") - 'drt("CodigoPS") = dr("CodigoPS") - 'drt("Cantidad") = dr("Cantidad") - 'drt("CveSubProyecto") = dr("CveSubProyecto") - 'drt("SubProyecto") = dr("SubProyecto") - 'drt("Obs") = dr("Obs") - 'TmpDT.Rows.Add(drt) - 'Cons = Cons + 1 - Next - TmpDT.AcceptChanges() - DtDetalle = OS.DtResultados.FiltraParametros("SeFacturara = 1 ") - End If - - For Each Row As DataRow In DtDetalle.Rows - If OS.GetDetalleMateriales(Row("CveOSDetalle").ToString().ToEntero(), CveOS) Then - If OS.DtResultados.FiltraParametros("SeFacturara = 1").Rows.Count > 0 Then - Alert("Hay materiales en la Orden de Servicio, ¿Desea facturar los materiales?", TipoMensaje.MsgConfirmacion, "BtnMateriales()") - End If - End If - Next - - OS.Dispose() - - - - - CalculaTotalesVenta(False) - - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - - 'JJMQ 20160506: Se agrego para la validacion de pago de contado. - 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") - - - UpPS.Update() - End If - End Sub - - - Private Sub CargaTiposDocumentos() - DdlTipoComprobante.DataSource = GlobalDTTiposDocumentos() - DdlTipoComprobante.DataBind() - End Sub - Private Sub CargaNuevaFactura(OVenta As ClsVentas) - Dim ObjVentas As ClsVentas - - If OVenta IsNot Nothing Then - ObjVentas = OVenta - Else - ObjVentas = New ClsVentas() - End If - - If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then - If ObjVentas.DtResultados IsNot Nothing AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then - Dim drv As DataRow = ObjVentas.DtResultados.Rows(0) - - 'CargaCliente - Dim CveCliente As Integer = drv("CveCliente").ToString().ToEntero() - - HdnCveCliente.Value = CveCliente.ToString() - ViewState("CveCliente") = CveCliente - CargaCliente(CveCliente) - - DdlSucursalCliente.SelectedValueExist(drv("CveClienteSucursal").ToString()) - DdlSubProyectoDatos.SelectedValueExist(drv("CveSubProyecto").ToString()) - - If CveDevolucion > 0 Then - CambiaSucursalGeneral() - End If - CargaClienteSucursal(drv("CveClienteSucursal").ToString().ToEntero()) - - 'CargaDetalle - If ObjVentas.GetVentaDetalle(CveVenta) Then - - - For Each dr As DataRow In ObjVentas.DtResultados.Rows - AgregarProductoServicio(dr("Cantidad").ToString().ToDecimal, dr("CveUM").ToString().ToEntero(), dr("UM").ToString(), dr("CveClasificacion").ToString().ToEntero(), dr("Clasificacion").ToString(), - dr("CvePS").ToString().ToEntero(), dr("PS").ToString(), dr("Obs").ToString(), dr("PU").ToString().ToDecimal, dr("Descuento").ToString().ToDecimal, - dr("CveProyecto").ToString().ToEntero(), dr("Proyecto").ToString(), dr("CveSubProyecto").ToString().ToEntero(), dr("SubProyecto").ToString(), - CveContratoDetalle:=dr("CveContratoDetalle").ToString().ToEntero(), CveVentaDetalleCotizacion:=dr("CveVentaDetalleCotizacion").ToString().ToEntero(), - CveVentaDetalle:=dr("CveVentaDetalle").ToString().ToEntero(), RegeneraIEPS:=False, SeActualiza:=True) - - - Next - - - - ObjVentas.DtResultados.Columns.Add("TieneProntoPago", GetType(String)) - ObjVentas.DtResultados.Columns.Add("ImporteProntoPago", GetType(Decimal)) - - ObjVentas.DtResultados.Columns("TieneProntoPago").DefaultValue = "No" - ObjVentas.DtResultados.Columns("ImporteProntoPago").DefaultValue = 0 - - GvPS.DataSource = ObjVentas.DtResultados - GvPS.DataBind() - End If - - 'CARGA IMPUESTOS LOCALES - If ObjVentas.GetVentaImpuestosLocales(CveVenta) Then - If ObjVentas.DtResultados.Rows.Count > 0 Then - TrOtros.Visible = True - TmpDTImpuestos = ObjVentas.DtResultados - GvImpuestosLocales2.DataSource = ObjVentas.DtResultados - GvImpuestosLocales2.DataBind() - - If (NuevaFactura = 1) Then - GvImpuestosLocales2.Enabled = True - Else - GvImpuestosLocales2.Enabled = False - End If - - GvImpuestosLocales2.Visible = True - End If - End If - - 'Carga Totales - ViewState("TipoDoctoDevolucion") = drv("TipoDocto").ToString() - TxtSubTotal.Text = drv("SubTotal").ToString().FormatoNumero(2) - LblDescuentos.Text = drv("Descuento").ToString().FormatoNumero(2) - LblAmortizacion.Text = drv("Amortizacion").ToString().FormatoNumero(2) - TxtSubTotal2.Text = (TxtSubTotal.Text.Replace(",", "").Trim.Trim.ToDouble - LblDescuentos.Text.Replace(",", "").Trim.Trim.ToDouble - LblAmortizacion.Text.Replace(",", "").Trim.Trim.ToDouble).FormatoNumero(2) - TxtIVA.Text = drv("IVA").ToString().FormatoNumero(2) - TxtRetIVA.Text = drv("RetIVA").ToString().FormatoNumero(2) - If TxtRetIVA.Text.ToDecimal() > 0 Then - TrRetIVA.Style.Add("display", "") - UsuarioActual.Empresa.MostrarRetIVA = True - End If - TxtRetISR.Text = drv("RetISR").ToString().FormatoNumero(2) - TxtTotal.Text = drv("Total").ToString().FormatoNumero(2) - TotalOriginal = Math.Round(drv("Total").ToString().ToDouble, 2) - HdnVentaSaldo.Value = drv("Total").ToString() - - TxtObsFact.Text = drv("Observaciones").ToString() - DdlMoneda.SelectedValue = drv("CveMoneda").ToString() - CambiaMoneda() - TxtTipoCambio.Text = drv("TipoCambio").ToString() - CvePAC = drv("CvePAC").ToString().ToEntero() - - DdlUsoCFDI.SelectedValueExist(drv("CveUsoCFDI").ToString()) - DdlMetodoPago33.SelectedValueExist(drv("CveMetodoPago33").ToString()) - CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) - DdlFormaPago33.SelectedValueExist(drv("CveFormaPago33").ToString()) - - DdlTipoComprobante.SelectedValueExist(drv("TipoDocto").ToString()) - DdlTipoComprobante.Enabled = False - - HdnIVAOriginal.Value = TxtIVA.Text - HdnAmortizacion.Value = "0" 'LblAmort.Text.ToDouble.ToString() - HdnSubTotalDescuestos.Value = (TxtSubTotal.Text.Replace(",", "").ToDouble - LblDescuentos.Text.Replace(",", "").ToDouble - LblAmortizacion.Text.Trim.Replace(",", "").ToDouble - TxtRetISR.Text.Replace(",", "").ToDouble).FormatoNumero(2) - - 'JJMQ 20160506: Se agrego para la validacion de pago de contado. - 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") - - CveContrato = drv("CveContrato").ToString().ToEntero() - - Updatetabs.Update() - UpPS.Update() - - - End If - End If - - If OVenta Is Nothing Then - ObjVentas.Dispose() - End If - End Sub - - Private Sub CargaMetodosPago() - - 'FACTURACION 3.3 - DdlMetodoPago33.DataSource = GlobalDTVtaMetodoPago - - DdlMetodoPago33.DataBind() - DdlMetodoPago33.SelectedValueExist("3") - - CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) - - 'End If - - End Sub - Private Sub CargaFormaPago(CveMetodoPago As Integer) - Dim dtt As DataTable = Nothing - If CveMetodoPago > 0 Then - dtt = GlobalDTVtaFormaPago.FiltraParametros(If(CveMetodoPago = 1, " CveFormaPago <> 20 ", "CveFormaPago = 20")) - Else - dtt = GlobalDTVtaFormaPago - End If - DdlFormaPago33.Items.Clear() - DdlFormaPago33.DataSource = dtt - DdlFormaPago33.SelectedValue = dtt.FiltroPrimeroValor("CveFormaPago", "") - DdlFormaPago33.DataBind() - - - - If UsuarioActual.CveRol = 1 AndAlso CveMetodoPago = 1 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso TbDescuentosAdicionales.Visible Then - If TmpDT.SUMD("Descuento") > 0 Then - Dim TotalDescuento As Decimal = TmpDT.SUMD("Total", "Descuento > 0") * 0.05D - Dim RowDescuentos As DataRow() = TmpDT.Select("Descuento > 0") - - If RowDescuentos IsNot Nothing Then - LblDescuentoAdicional.Text = TotalDescuento.FormatoNumero(2) - CalculaTotalesVenta() - End If - Else - LblDescuentoAdicional.Text = "0.00" - End If - UpPS.Update() - End If - 'End If - End Sub - Private Sub CargaUsoCFDI() - DdlUsoCFDI.Items.Clear() - 'DdlSucursalUsoCFDI.Items.Clear() - - Dim EsPersonaMoral As Boolean = (TipoPersona = True) - - DdlUsoCFDI.DataSource = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente) - 'DdlSucursalUsoCFDI.DataSource = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente) - - DdlUsoCFDI.DataBind() - 'DdlSucursalUsoCFDI.DataBind() - - If Not UsuarioActual.CveEmpresa.Contiene(76, 15) Then - If DdlUsoCFDI.DataSource IsNot Nothing Then - If DdlUsoCFDI.Items.FindByValue("25") IsNot Nothing Then - DdlUsoCFDI.Items.Remove(DdlUsoCFDI.Items.FindByValue("25")) - End If - End If - End If - - DdlUsoCFDI.Items.Insert(0, New ListItem("Seleccione", "-1")) - ' DdlSucursalUsoCFDI.Items.Insert(0, New ListItem("Seleccione", "-1")) - - End Sub - - - - - - - Private Sub CargaMonedas() - DdlMoneda.DataSource = GlobalDTMonedas - DdlMoneda.DataBind() - - End Sub - 'Private Sub CargaProyecto() - ' Dim CveSubProyecto As Integer = 0 - ' Dim dtt As DataTable = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) - - ' DdlProyecto.DataSource = dtt - ' DdlProyecto.DataBind() - 'CveSubProyecto = GetSubProyectoSucursal() - ' CargaSubProyecto(CveSubProyecto) - - 'End Sub - Private Function GetSubProyectoSucursal() As Integer - Dim Retorno As Integer = 0 - - 'Dim dr As DataRow = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1).FiltroPrimero($"CveSubProyecto = {If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue)}") - ''Dim dr As DataRow = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero($"CveSubProyecto = {If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue)}") - - ''si hay un proyecto relacionado con el subproyecto - 'If dr IsNot Nothing AndAlso dr("CveSubProyecto").ToString().ToEntero() > 0 Then - ' DdlProyecto.SelectedValueExist(dr("CveProyecto")) - ' Retorno = dr("CveSubProyecto").ToString().ToEntero() - 'End If - - Return Retorno - - End Function - 'Private Sub CargarAlmacenes() - ' If UsuarioActual.Empresa.UsaInventarios Then - ' If (CveVenta > 0 And DdlTipoComprobante.SelectedValue <> "Cot") AndAlso Not (UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso EsCreaApartirDe) Then - ' DivAlmacen.Visible = False - ' Else - ' Dim DTAlmacen As DataTable - ' ddlAlmacen.Items.Clear() - - ' DTAlmacen = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") - ' ddlAlmacen.DataSource = DTAlmacen - - ' ddlAlmacen.Items.Insert(0, New ListItem("Seleccione ", "-1")) - ' ddlAlmacen.SelectedValueExist("-1") - - ' ddlAlmacen.DataBind() - - ' If GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").Rows.Count > 0 Then - ' 'SI ES DEL MISMO SUB PROYECTO SUGIERE EL ALMACEN ASIGNADO AL USUARIO - ' If UsuarioActual.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() Then - ' ddlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) - ' Else - ' Dim CveAlmacen As Integer = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").ToEntero() - ' ddlAlmacen.SelectedValueExist(CveAlmacen) - ' End If - - ' End If - - ' End If - - ' 'SI TIENE CONTRATO NO SE MUEVE - ' If Not CveContrato > 0 Then - ' DdlAlmacenAsignado.Items.Clear() - ' DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} AND CveTipoAlmacen IN (4,10)") - ' DdlAlmacenAsignado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) - ' DdlAlmacenAsignado.SelectedValue = "-1" - ' DdlAlmacenAsignado.DataBind() - ' DdlAlmacenAsignado.SelectedValueExist(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").ToString().ToEntero()) - ' End If - - ' If CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then - ' DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") - ' DdlAlmacenAsignado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) - ' DdlAlmacenAsignado.SelectedValue = "-1" - ' DdlAlmacenAsignado.DataBind() - ' DdlAlmacenAsignado.SelectedValueExist(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero()) - ' End If - ' Else - ' ddlAlmacen.DataSource = Nothing - ' ddlAlmacen.DataBind() - ' End If - - ' UpINV.Update() - 'End Sub - Private Sub CargaSubProyecto(Optional CveSubProyecto As Integer = -1, Optional FiltraPorProyecto As Boolean = False) - 'DdlSubProyecto.Items.Clear() - 'DdlSubProyecto.SelectedValue = Nothing - 'If DdlProyecto.SelectedValue.ToEntero() > 0 Then - ' DdlSubProyecto.DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1) - ' 'DdlSubProyecto.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("", "", {"CveSubProyecto", "SubProyecto"}) - 'End If - 'DdlSubProyecto.DataBind() - 'DdlSubProyecto.Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) - - 'If FiltraPorProyecto Then - ' DdlSubProyecto.Items.Clear() - - ' Using ObjSubP As New ClsSubProyectos - ' If ObjSubP.GetSubProyectos(UsuarioActual.CveEmpresa) Then - ' DdlSubProyecto.DataSource = ObjSubP.DtResultados.FiltraParametros(String.Format("CveProyecto = {0}", DdlProyecto.SelectedValue)) - ' End If - ' End Using - - ' DdlSubProyecto.DataBind() - ' DdlSubProyecto.Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) - 'End If - - 'If CveSubProyecto > 0 Then DdlSubProyecto.SelectedValueExist(CveSubProyecto) - End Sub - - Private Sub CargaEmpresaCRM(CveEmpresaCRM As Integer) - Dim ObjCRM As New ClsCRM - If ObjCRM.GetEmpresasCRM(UsuarioActual.CveEmpresa, CveEmpresaCRM) Then - If ObjCRM.DtResultados.Rows.Count > 0 Then - ViewState("CveCliente") = IIf(ObjCRM.DtResultados.Rows(0)("CveCliente").ToString().ToEntero() > 0, ObjCRM.DtResultados.Rows(0)("CveCliente"), -1) - HdnCveCliente.Value = CveCliente.ToString() - If (CveCliente > 0) Then - CargaCliente(CveCliente) - - - 'DESACTIVA CAMBIO DE CLIENTE - HlCliente.Attributes.Remove("class") - HlCliente.Attributes.Add("class", "Texto disabled") - TxtCodigo.ReadOnly = True - - UpCliente.Visible = True - - 'UpEmpresaCRM.Visible = False - Else - LblEmpresaCRM.Text = ObjCRM.DtResultados.Rows(0)("Empresa").ToString() - LblRFCCRM.Text = ObjCRM.DtResultados.Rows(0)("RFC").ToString() - LblMedioCaptacionCRM.Text = ObjCRM.DtResultados.Rows(0)("MedioCaptacion").ToString() - - - UPCondicionesPago.Visible = True - - - trNombreCliente.Visible = False - trsucursalciente.Visible = False - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - TrOP.Visible = False - 'trDireccionEnvio.Visible = False - - - trCRM1.Visible = True - trCRM2.Visible = True - trCRM3.Visible = True - - LblTituloPorletCliente.Text = "EMPRESA CRM" - - End If - Me.CveVendedorEmpresaCRM = ObjCRM.DtResultados.Rows(0)("CveVendedorAsignado").ToString().ToEntero() - - - LbAgregar.Enabled = True - - 'TrAtencionA.Visible = True - TrOC.Visible = True - - End If - - - - GvPS.Columns(5).Visible = True - - End If - ObjCRM.Dispose() - End Sub - - Private Sub CargaCliente(CveCliente As Integer, Optional Estatus As Integer = -1) - - If CveCliente <= 0 Then Exit Sub - - - - Dim ObjCliente As New ClsClientes() - - If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, Estatus, TipoCliente:=-1) Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - TxtCodigo.Text = ObjCliente.Codigo - LblCliente.Text = String.Format("{1}", CveCliente, ObjCliente.NombreComercial) - ViewState("NombreCliente") = ObjCliente.Nombre - - ViewState("RequiereOC") = ObjCliente.RequiereOC - EnviarCorreoCliente = ObjCliente.EnviarFactura - EstatusCliente = ObjCliente.Estatus - - Me.PermiteCredito = ObjCliente.PermiteCredito - LnkAgregarCliente.Visible = False - - 'ClienteEsDistribuidor = Boolean.Parse(ObjCliente.DtResultados.Rows(0)("EsDistribuidor").ToString()) - TieneDiasVencidos = Boolean.Parse(ObjCliente.DtResultados.Rows(0)("TieneDiasVencidos").ToString()) - DiasVencidosCliente = ObjCliente.DtResultados.Rows(0)("DiasVencidosCliente").ToString().ToEntero() - - ClienteCodigoRegimenFiscal = ObjCliente.DtResultados.Rows(0)("CodigoRegimenFiscal").ToString() - ClienteRegimenFiscal = ObjCliente.DtResultados.Rows(0)("RegimenFiscal").ToString() - - If EstatusCliente = False And Not DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") And (CveVenta <= 0 Or EsCreaApartirDe) Then - Alert("El Cliente seleccionado no esta activo", TipoMensaje.MsgAdvertencia) - BtnEmitirImprimir.Visible = EstatusCliente - TrVistaPrevia.Visible = EstatusCliente - End If - - If ViewState("CveDevolucion") IsNot Nothing AndAlso ViewState("NuevaFactura") IsNot Nothing Then - If (CveDevolucion > 0 AndAlso NuevaFactura = 1) Then - BtnEmitirImprimir.Visible = EstatusCliente - TrVistaPrevia.Visible = EstatusCliente - End If - End If - - 'CUANDO SEA COTIZACION Y SEA COMPUPROVEEDORES (EMPRESA 72) NO DEBE ENVIAR CORREO AL CLIENTE - - - ViewState("Mail") = If(DdlTipoComprobante.SelectedValue = "Cot", ObjCliente.MailCotizacion, ObjCliente.Mail) - ViewState("MailCC") = ObjCliente.NotificarA - CorreoEntregaAlmacen = ObjCliente.DtResultados(0)("CorreoEntregaAlmacen").ToString - LblDireccion.Text = ObjCliente.Direccion - LblColonia.Text = ObjCliente.Colonia - LblCiudad.Text = ObjCliente.Ciudad - LblEstado.Text = ObjCliente.Estado - LblCP.Text = ObjCliente.CP - LblRFC.Text = ObjCliente.RFC - LblTelefono.Text = ObjCliente.Telefono - LblRetIVA.Text = ObjCliente.RetIVA.ToString().FormatoNumero(5) - LblRetISR.Text = ObjCliente.RetISR.ToString().FormatoNumero(5) - If UsuarioActual.Empresa.MostrarRetISR AndAlso ObjCliente.RetISR > 0 Then - ' TrRetISR.Style.Add("display", "none") - TrRetISR.Visible = True - Else - TrRetISR.Visible = False - End If - ViewState("ClienteRetIVA") = ObjCliente.RetIVA / 100 - ViewState("ClienteRetISR") = ObjCliente.RetISR / 100 - - If CveVenta <= 0 OrElse EsCreaApartirDe Then - DdlTipoRetencion.SelectedValueExist(ObjCliente.DtResultados(0)("CveTipoRetencion").ToString()) - DdlTipoRetencion_SelectedIndexChanged(DdlTipoRetencion, EventArgs.Empty) - - ViewState("RetIVAFletes") = ObjCliente.RetieneIVAFletes - If ObjCliente.RetieneIVAFletes Then - TrRetIVA.Style.Add("display", "") - UsuarioActual.Empresa.MostrarRetIVA = True - End If - End If - - ViewState("Vendedor") = ObjCliente.Vendedor - ViewState("CodCliente") = ObjCliente.Codigo - - ViewState("CvePrecioLista") = ObjCliente.CvePrecioLista - ViewState("CvePrecioListaCliente") = ObjCliente.CvePrecioLista - - ViewState("CliNoExt") = ObjCliente.NoExt - ViewState("CliNoInt") = ObjCliente.NoInt - ViewState("CliLocalidad") = If(ObjCliente.Localidad.Trim.Length = 0, ObjCliente.Ciudad.Trim, ObjCliente.Localidad.Trim) - ViewState("CliPais") = ObjCliente.Pais - ImprimeNombreSucursal = ObjCliente.ImprimeNombreSucursal - - RegimenFiscalCliente = ObjCliente.DtResultados(0)("CodigoRegimenFiscal").ToString() - RegimenSociedad = ObjCliente.DtResultados(0)("RegimenSociedad").ToString() - TipoPersona = CBool(ObjCliente.DtResultados(0)("TipoPersona")) - CargaUsoCFDI() - 'ViewState("NumCtaPago") = ObjCliente.NumCtaPago - ViewState("ClienteDesglosaIEPS") = ObjCliente.DesglosaIEPS - - - ViewState("CargoUsado") = ObjCliente.CargoUsados - - Dim dr As DataRow = Nothing - dr = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal = 1 And Estatus = 'Activo' AND CveEmpresa = " & UsuarioActual.CveEmpresa) - If dr IsNot Nothing Then - ViewState("MatCalle") = dr("Calle") - ViewState("MatNoExt") = dr("NoExt") - ViewState("MatNoInt") = dr("NoInt") - ViewState("MatColonia") = dr("Colonia") - ViewState("MatLocalidad") = dr("Localidad") - ViewState("MatMunicipio") = dr("Municipio") - ViewState("MatEstado") = dr("Estado") - ViewState("MatPais") = dr("Pais") - ViewState("MatCP") = dr("CP") - End If - - - If CveCliente = 239903 AndAlso UsuarioActual.CveEmpresa = 119 Then - DdlMetodoPago33.Enabled = False - 'ObjCliente.CveMetodoPago = 1 ' PUE, y que no se pueda modificar - Else - DdlMetodoPago33.Enabled = True - End If - - Dim CveCotizacion As Integer = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() - - Me.CveMetodoPago33Cliente = ObjCliente.CveMetodoPago33 - Me.CveFormaPago33Cliente = ObjCliente.CveFormaPago33 - - If (CveVenta <= 0 AndAlso CveCotizacion <= 0) Or EsCreaApartirDe Or NuevaFactura = 1 OrElse ModalidadEdicion Then - - DdlMetodoPago33.SelectedValueExist(ObjCliente.CveMetodoPago33) - CambiaMetodoPago33() - DdlFormaPago33.SelectedValueExist(ObjCliente.CveFormaPago33) - - - DdlUsoCFDI.SelectedValueExist(ObjCliente.CveUsoCFDI) - 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES - If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then - 'S01 Sin efectos fiscales. - DdlUsoCFDI.SelectedValueExist("23") - DdlUsoCFDI.Enabled = False - RegimenFiscalCliente = "616" - ClienteCodigoRegimenFiscal = "616" - End If - - End If - - PlazoCobranza = ObjCliente.PlazoCobranza - PlazoCobranzaRemision = ObjCliente.PlazoCobranzaRemision - - - - 'funcionalidad EnviarSMSTimbrado - If CveVenta <= 0 And UsuarioActual.Empresa.Funcionalidad(152) <> "" And DdlTipoComprobante.SelectedValue = "Ing" Then - If ObjCliente.CobranzaTelefono <> "" Then - LblMensaje.Text = $"Se enviará mensaje SMS a {ObjCliente.CobranzaTelefono}" - Else - LblMensaje.Text = $"El Cliente no tiene teléfono para envío SMS " - End If - LblMensaje.Visible = True - End If - - 'If Not ObjCliente.RFC = "XAXX010101000" Then - ' TxtNumCtaPago.Text = ObjCliente.NumCtaPago - 'End If - - 'Complementos - - - 'COMERCIO EXTERIOR - ViewState("AplicaComercioExterior") = ObjCliente.AplicaComercioExterior - ViewState("CveTipoOperacion") = ObjCliente.CveTipoOperacion - ViewState("CvePedimento") = ObjCliente.CvePedimento - ViewState("CveIncoterm") = ObjCliente.CveIncoterm - - - ViewState("AplicaFEMSA") = ObjCliente.AplicaFEMSA - - ViewState("AplicaDetallista") = ObjCliente.AplicaDetallista - - - ViewState("AplicaFord") = ObjCliente.AplicaFord - - - If ObjCliente.DtResultados(0)("CveVendedor").ToString().ToEntero() > 0 Then - CveVendedorCliente = ObjCliente.DtResultados(0)("CveVendedor").ToString().ToEntero() - End If - - UpFacturar.Update() - UpnTools.Update() - - If Not CveVenta > 0 Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - If UsuarioActual.TienePermisoProceso(152) Then - DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) - DdlSubProyectoDatos.Enabled = False - Else - DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) ' DdlSubProyectoDatos.SelectedValueExist(ObjCliente.CveSubProyecto) - End If - 'RECARGA LOS VALORES DE LA SUCURSAL - CambiaSucursal() - UpParametros.Update() - End If - End If - - DdlSucursalCliente.Items.Clear() - If ObjCliente.GetSucursales(CveCliente) Then - DdlSucursalCliente.DataSource = ObjCliente.DtResultados - If ObjCliente.DtResultados.Rows.Count > 0 Then - trsucursalciente.Visible = True - Else - trsucursalciente.Visible = False - End If - Else - trsucursalciente.Visible = False - DdlSucursalCliente.DataSource = Nothing - End If - DdlSucursalCliente.Items.Insert(0, New ListItem("Matriz", "-1")) - DdlSucursalCliente.DataBind() - - 'SI UTILIZA EL RFC GENERICO PERMITE FACTURAR SUCURSAL - If (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") AndAlso (CveVenta <= 0 OrElse NuevaFactura = 1) AndAlso LblRFC.Text.Trim() = "XAXX010101000" Then - HabilitarFacturacionSucursal() - End If - - 'CargaFolios() - - - If ObjCliente.GetClienteImpuestosLocales(CveCliente) AndAlso CveVenta <= 0 Then - 'se cargan impuestos locales - Dim DtClienteImpuesto As DataTable = ObjCliente.DtResultados.FiltraParametros("Seleccionado = 1", "Orden") - - If DtClienteImpuesto IsNot Nothing AndAlso DtClienteImpuesto.Rows.Count > 0 Then - - ' If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Else TmpDTImpuestos.Rows.Clear() - TmpDTImpuestos = DtClienteImpuesto - - GvImpuestosLocales2.DataSource = TmpDTImpuestos - GvImpuestosLocales2.DataBind() - - - If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then - TrOtros.Visible = True - GvImpuestosLocales2.Visible = True - TrOtros.Style.Add("display", "") - Else - TrOtros.Visible = False - GvImpuestosLocales2.Visible = False - End If - DtClienteImpuesto.Dispose() - - End If - UpImpuestos.Update() - - End If - - If DdlTipoComprobante.SelectedValue.Contiene("Cot") Then - 'TrAtencionA.Visible = True - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - 'tdTelefonoGen.Visible = False - 'tdTxtTelefonoGen.Visible = False - ElseIf ObjCliente.RFC = "XAXX010101000" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ret") Then - 'TrAtencionA.Visible = True - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - 'tdTelefonoGen.Visible = True - 'tdTxtTelefonoGen.Visible = True - Else - 'TrAtencionA.Visible = False - TrDireccion.Visible = True - TrCiudad.Visible = True - TrRFC.Visible = True - 'tdTelefonoGen.Visible = False - 'tdTxtTelefonoGen.Visible = False - 'TxtAtencionA.Text = "" - 'TxtTelefonoGenerico.Text = "" - End If - - 'TrAtencionA.Visible = True - 'tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") - 'tdFechaVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") - - LbAgregar.Enabled = True - - - - If UsuarioActual.CveEmpresa.Contiene(72, 80, 1, 119) Then - BtnEmitirImprimir.OnClientClick = $"ValidaGuardar({ If(ImprimeNombreSucursal = True, 1, 0)});" - BtnEmitirImprimir.Attributes.Add("data-toggle", "confirmation") - BtnEmitirImprimir.Attributes.Add("data-popout", "true") - BtnEmitirImprimir.Attributes.Add("data-original-title", "confirmar") - BtnEmitirImprimir.Attributes.Add("data-btn-ok-label", "Guardar") - BtnEmitirImprimir.Attributes.Add("data-html", "true") - End If - - 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO - If DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") Or TipoContrato >= 0 Then 'SI VIENE DE PEDIDO DE AF DESDE CONTRATO NO BLOQUEA CUANDO EL CLIENTE ESTA INACTIVO - BtnEmitirImprimir.Visible = True - TrVistaPrevia.Visible = True - 'Else - ' BtnEmitirImprimir.Visible = EstatusCliente - ' TrVistaPrevia.Visible = EstatusCliente - End If - - TrVistaPrevia.Visible = True - - - - ' si es empresa acumuladores - If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - CargaPorcentajeMarcas() - End If - - 'CargaFacturasARelacionar() - - UpFacturar.Update() - UpEstatus.Update() - UpPS.Update() - UpParametros.Update() - UPCondicionesPago.Update() - - UpCliente.Update() - - - - - UpnTools.Update() - Else - Alert("Ocurrió un error al cargar los datos del cliente. Por favor vuelva a intentar.", TipoMensaje.MsgError) - End If - End If - ObjCliente.Dispose() - - - - - BloqueaCondiconesPago() - DeshabilitarAplicarNotaDeCredito(LblRFC.Text) - - Dim CveVentaRef As Integer = -1 - - If Me.CveVenta > 0 AndAlso Not EsCreaApartirDe Then - CveVentaRef = Me.CveVenta - End If - - CargaRestriccionesCreditoCliente(True, CveVentaRef) - - If CveVenta <= 0 Then - 'CalculaLineasAdicionales() - HabilitaRemisionPublicoGeneral = 0 - HabilitarRemisionesPublicoGeneral() - End If - - - 'If UsuarioActual.Empresa.Funcionalidad(705) = "1" Then - ' Using ObjVentas As New ClsVentas - ' If ObjVentas.GetLineasAdicionales(-1, CveCliente, -1, -1, DdlMoneda.SelectedValue.ToEntero(), MinFecha, MaxFecha, 0, UsuarioActual.CveEmpresa) Then - ' If ObjVentas.DtResultados.Rows.Count > 0 Then - ' TrLineaAdicional.Visible = True - ' End If - ' End If - ' End Using - 'End If - End Sub - - Private Sub HabilitarRemisionesPublicoGeneral() - If UsuarioActual.Empresa.Funcionalidad(381).Trim() <> "" Then - 'SI ESTA BLOQUEADO POR AUTORIZACION, HABILITAR LA OPCION DE REMISION PARA PUBLICO EN GENERAL - If UsuarioActual.Empresa.Funcionalidad(381).Trim() = CveCliente.ToString() Then - Dim DeshabilitarAutorizacion As Boolean = CBool(GlobalDTSubProyectos(-1, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("DeshabilitaAutorizacion")) - - 'SI ESTA BLOQUEADO POR AUTORZACION O QUE TENGA LA OPCION DE AUTORIZACIONES Y NO SEA DEL MODULO DE COTIZACIONES - If (DdlTipoComprobante.SelectedValue.Contiene("PA") OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso DdlTipoComprobante.Items.FindByValue("PA") IsNot Nothing AndAlso Not IfNull(Request("Op"), "").ToString() = "Cot")) AndAlso DeshabilitarAutorizacion Then - If DdlTipoComprobante.Items.FindByValue("Rem") Is Nothing Then - DdlTipoComprobante.Items.Insert(0, New ListItem("Remisión", "Rem")) - End If - DdlTipoComprobante.SelectedValueExist("Rem") - HabilitaRemisionPublicoGeneral = 1 - End If - - 'SI TUVO HABILITADO EL BLOQUEO POR AUTORIZACION PERO DESPUES SE CAMBIO MANUAL A REMISION - If DdlTipoComprobante.SelectedValue.Contiene("Rem") AndAlso TieneBloqueoPorAutorizacion = 1 Then - HabilitaRemisionPublicoGeneral = 1 - End If - - 'SI TIENE LA HABILITACION DE REMISION ACTIVA Y LA SUCURSAL NO LO PERMITE - If Not DeshabilitarAutorizacion AndAlso HabilitaRemisionPublicoGeneral = 1 Then - HabilitaRemisionPublicoGeneral = 0 - DdlTipoComprobante.SelectedValueExist("PA") - If DdlTipoComprobante.Items.FindByValue("Rem") IsNot Nothing Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - End If - End If - - UpParametros.Update() - - End If - Else - HabilitaRemisionPublicoGeneral = 0 - End If - End Sub - - Private Function ValidaImportePublicoGeneral() As Boolean - Dim retorno As Boolean = False - - If DdlTipoComprobante.SelectedValue = "Rem" AndAlso HabilitaRemisionPublicoGeneral = 1 AndAlso UsuarioActual.Empresa.Funcionalidad(381).Trim() = CveCliente.ToString() Then - Dim Total As Decimal = TxtTotal.Text.ToDecimal() - - If DdlMoneda.SelectedValue = "1" Then - If Total <= 5000D Then - retorno = True - Else - Alert("No puede generar una remisión con un valor mayor a 5,000 MXN. Debe cambiar el tipo de documento a 'Autorización'", TipoMensaje.MsgAdvertencia) - End If - End If - - If DdlMoneda.SelectedValue = "2" Then - If TxtTipoCambio.Text.ToDecimal() > 0 Then - Dim TotalPesos As Decimal = (Total * TxtTipoCambio.Text.ToDecimal()) - If TotalPesos <= 5000D Then - retorno = True - Else - Alert($"No puede generar una remisión con un valor mayor a {(5000 / TxtTipoCambio.Text.ToDecimal()).RoundSQL(2)} USD. Debe cambiar el tipo de documento a 'Autorización'", TipoMensaje.MsgAdvertencia) - End If - Else - Alert("No se ha especificado un tipo de cambio", TipoMensaje.MsgAdvertencia) - End If - - End If - Else - retorno = True - End If - - Return retorno - End Function - - - - - - - Private Sub CargaRestriccionesCreditoCliente(Optional Alertas As Boolean = False, Optional CveVenta As Integer = -1) - - Dim ValorAutorizacion As String = UsuarioActual.Empresa.Funcionalidad(595) - - 'OBLIGAR PAGO DE CONTADO SI EL CLIENTE NO PERMITE CREDITO - If (Not UsuarioActual.Empresa.Funcionalidad(702).Contiene("1", "2")) AndAlso Me.PermiteCredito = False AndAlso ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem") AndAlso CveVenta < 1) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso EsCreaApartirDe) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) Then - - 'GENERAR UNA AUTORIZACIÓN SI EL CLIENTE NO PERMITE CREDITO - If UsuarioActual.Empresa.Funcionalidad(595) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(268) Then - 'SI LLEGÓ POR LA OPCIÓN DE COTIZACIÓN NO DEBE DE RESTRINGUIR - If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then - DdlTipoComprobante.SelectedValue = "Cot" - BtnGenerarRemision.Visible = False - Else - DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") - DdlTipoComprobante.SelectedValue = "PA" - - TieneBloqueoPorAutorizacion = 1 - End If - - - - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) - If Not UsuarioActual.TienePermisoProceso(325) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) - End If - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - BtnsFacturar.Visible = False - End If - UPCondicionesPago.Update() - 'CARGAR CREDITO DISPONIBLE AL GENERAR UNA FACTURA - End If - - 'If ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso CveVenta <= 0) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) AndAlso PermiteCredito Then - ' 'FUNCIONALIDAD 702 - NO VERIFICAR LIMITE DE CRÉDITO Y CANDADOS DE VENTA - ' If Not UsuarioActual.Empresa.Funcionalidad(702) = "1" Then - - ' Dim CreditoDispo As Decimal = CargaCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) - - ' If CreditoDispo > 0 Then - ' TrCreditoDisponible.Visible = True - ' LblCreditoDisponible.Text = CreditoDispo.FormatoNumero - ' If PorcentajeCredito > 80 Then TrPorcentajeCredito.Visible = True : LblPorcentajeCredito.Text = $"{PorcentajeCredito.FormatoNumero}%" - - ' If Not UsuarioActual.TienePermisoProceso(268) AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "PA") OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) AndAlso (Not UsuarioActual.Empresa.Funcionalidad(702).Contiene("2")) Then - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - ' If Opcion > 0 Then - ' 'si la cotización no debe de existir este canddado - ' If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - ' 'RBLPago.SelectedValue = "2" - ' 'RBLPago.Items(0).Enabled = False - - ' UPCondicionesPago.Update() - - ' If Not EsCreaApartirDe AndAlso (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then - ' DdlTipoComprobante.SelectedValueExist("Cot") - ' Else - ' If UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then - ' DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") - ' DdlTipoComprobante.SelectedValue = "PA" - - ' TieneBloqueoPorAutorizacion = 1 - ' End If - ' End If - - - ' 'si llegó por la opción de cotización no debe de restringuir - ' If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValue = "Cot" - - ' 'quito remisión y factura - ' If UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) - ' If Not UsuarioActual.TienePermisoProceso(325) Then - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) - ' End If - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - ' End If - - - ' 'SI ES AUTORIZACION DEBE PERMITIR GENERARLA - ' If (Not DdlTipoComprobante.SelectedValue.Contiene("PA")) AndAlso UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then - ' BtnEmitirImprimir.Visible = False - ' BtnsFacturar.Visible = False - ' LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) - ' BtnGenerarRemision.Visible = False - ' 'LnkPedido2SinFacturar.Visible = False - ' LnkCotizaciones.Visible = False - ' LnkOCs.Visible = False - ' End If - - ' If DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - ' Dim Autorizacion As Integer = 0 - - ' Dim ObjVentas As New ClsVentas - ' If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then - ' Dim RowAutorizacion As DataRow = Nothing - ' 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO - ' If TieneDiasVencidos Then - ' RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") - ' Else - ' RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") - ' End If - - ' If RowAutorizacion IsNot Nothing Then - ' Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() - ' End If - ' End If - ' ObjVentas.Dispose() - - ' 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO - ' If Autorizacion > 0 Then - ' BtnsFacturar.Visible = True - ' End If - ' End If - - - ' Else - ' ' el cliente tiene crédito disponible, no tiene bloqueo - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("PA")) - ' Dim EsCotizacion As Boolean = False - ' If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then - ' EsCotizacion = True - ' End If - - ' If UsuarioActual.TienePermisoProceso(199) Then DdlTipoComprobante.SelectedValueExistInsert("Rem", "Remisión") ' puede remisionar - ' If UsuarioActual.TienePermisoProceso(60) Then DdlTipoComprobante.SelectedValueExistInsert("Ing", "Ingresos") 'puede facturar - - ' DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) - ' If EsCotizacion Then - ' DdlTipoComprobante.SelectedValueExistInsert("Cot", "Cotización") - ' End If - - - ' If EsCotizacion AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - ' Dim Autorizacion As Integer = 0 - - ' Dim ObjVentas As New ClsVentas - ' If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then - ' Dim RowAutorizacion As DataRow = Nothing - ' 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO - ' If TieneDiasVencidos Then - ' RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") - ' Else - ' RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") - ' End If - - ' If RowAutorizacion IsNot Nothing Then - ' Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() - ' End If - ' End If - ' ObjVentas.Dispose() - - ' 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO - ' If Autorizacion > 0 Then - ' BtnsFacturar.Visible = True - ' End If - ' End If - - ' End If - - - ' End If - ' Else - ' 'GENERAR AUTORIZACION SI TIENE EXCEDIO EL LIMITE DE CREDITO - ' Select Case ValorAutorizacion - ' Case "1" 'CREAR DOCUMENTO DE AUTORIZACION PA - ' If Not UsuarioActual.TienePermisoProceso(268) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "Ant", "PA") AndAlso Not (UsuarioActual.Empresa.Funcionalidad(702).Contiene("2")) AndAlso UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then - - ' 'VERIFICAR CANDADOS DE VENTA, REMISIONES SIN FACTURAR, FACTURAS QUE NO TENGAN VENCIDAS - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - ' If Opcion > 0 Then - ' 'If Opcion = 1 Then - ' ' BtnEmitirImprimir.Visible = False - ' ' BtnsFacturar.Visible = False - ' 'End If - ' If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - ' Else - ' If Alertas Then Alert("El cliente tiene su límite de crédito agotado.", TipoMensaje.MsgAdvertencia) - ' End If - - - - ' UPCondicionesPago.Update() - ' DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") - ' DdlTipoComprobante.SelectedValue = "PA" - ' TieneBloqueoPorAutorizacion = 1 - - - ' 'si llegó por la opción de cotización no debe de restringuir - ' If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValue = "Cot" - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) - ' If Not UsuarioActual.TienePermisoProceso(325) Then - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) - ' End If - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - ' BtnsFacturar.Visible = False - ' LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) - ' BtnGenerarRemision.Visible = False - ' 'LnkPedido2SinFacturar.Visible = False - ' LnkCotizaciones.Visible = False - ' LnkOCs.Visible = False - - ' Else - - - ' If DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0 Then - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - ' If Opcion > 0 Then - ' BtnsFacturar.Visible = False - ' BtnGenerarRemision.Visible = False - ' Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - ' End If - ' End If - ' End If - ' Case "2" 'Autorizacion desde una solicitud del catalogo de autorizaciones - ' 'RMF. validacion temporal - ' 'verifica si tiene autorizaciones de Nota de crédito autorizadas - ' Dim ObjVentas As New ClsVentas - ' If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, -1, "Ing", CveEstatus:=1) Then - ' Dim RowAutorizacion As DataRow = ObjVentas.DtResultados.FiltroPrimero($"CveVenta IS NULL AND CveTipoDocumento='Egs'", Orderby:="TipoAutorizacion") - ' If RowAutorizacion IsNot Nothing Then - ' DdlTipoComprobante.SelectedValueExistInsert("Egs", "Egresos") - ' End If - ' End If - ' ObjVentas.Dispose() - ' Case Else 'SI NO TIENE NINGUN TIPO DE AUTORIZACION CONFIGURADO - ' 'RMF. codigo temporal para pruebas - ' If Alertas AndAlso UsuarioActual.CveEmpresa = 140 Then - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - ' If Opcion > 0 Then - ' LnkSolicitarCredito.Visible = True - ' Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - ' End If - ' Else - ' 'VERIFICAR CANDADOS DE VENTA - ' If DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0 Then - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - ' If Opcion > 0 Then - ' BtnsFacturar.Visible = False - ' BtnGenerarRemision.Visible = False - ' Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) - ' End If - ' End If - - ' End If - ' End Select - - ' End If - ' End If - - 'Else - - - - 'End If - - - - 'Puede hacer pedido - If CveVenta <= 0 Then - If Not UsuarioActual.TienePermisoProceso(177) Then - If DdlTipoComprobante.Items.FindByValue("Pd2") IsNot Nothing Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Pd2")) - End If - End If - End If - - - - End Sub - - - Private Sub CargaClienteSucursal(CveClienteSuc As Integer, Optional ByRef ObjVentas As ClsVentas = Nothing) - Me.ClienteSucursal = Nothing - Me.FacturarSucursal = False - LtlTitleRFCSucursal.Text = "" - LtlRFCSucursal.Text = "" - - Dim ObjCliente As New ClsClientes - If CveClienteSuc > 0 Then - If ObjCliente.GetSucursales(CveCliente, CveClienteSuc) Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - Dim Correo As String = ObjCliente.DtResultados.Rows(0)("Correo").ToString() - If Correo.Trim.Length > 0 Then - ViewState("Mail") = Correo - End If - LblDireccion.Text = ObjCliente.DtResultados.Rows(0)("Direccion").ToString() - LblColonia.Text = ObjCliente.DtResultados.Rows(0)("Colonia").ToString() - LblCiudad.Text = ObjCliente.DtResultados.Rows(0)("Ciudad").ToString() - LblEstado.Text = ObjCliente.DtResultados.Rows(0)("Estado").ToString() - 'TxtNumCtaPago.Text = ObjCliente.DtResultados.Rows(0)("NumCtaPago").ToString() - LblTelefono.Text = ObjCliente.DtResultados.Rows(0)("Telefono").ToString() - - ViewState("CliLocalidad") = ObjCliente.DtResultados.Rows(0)("Localidad").ToString() - ViewState("CliPais") = ObjCliente.DtResultados.Rows(0)("Pais").ToString() - ViewState("CliNoExt") = ObjCliente.DtResultados.Rows(0)("NoExt").ToString() - ViewState("CliNoInt") = ObjCliente.DtResultados.Rows(0)("NoInt").ToString() - Me.CveVendedorClienteSucursal = ObjCliente.DtResultados.Rows(0)("CveVendedor").ToString().ToEntero() - ViewState("CveClienteSucursal") = ObjCliente.DtResultados(0)("CveClienteSucursal").ToString() - ViewState("CliCorreoCot") = ObjCliente.DtResultados.Rows(0)("CorreoCotizacion").ToString() - - 'If ObjCliente.DtResultados.Rows(0)("Estatus").ToString() <> "Activo" Then - ' Alert("La Sucursal/Departamento del cliente se encuentra inactivo", TipoMensaje.MsgAdvertencia) - 'Else - - ' Dim CreditoDispo As Decimal = CargaCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero(), ObjVentas) - - ' TrCreditoDisponible.Visible = True - ' LblCreditoDisponible.Text = CreditoDispo.FormatoNumero - ' UPPCreditoDisponible.Update() - ' UpParametros.Update() - 'End If - - 'SI EL CLIENTE TIENE RFC GENERICO Y LA SUCURSAL TIENE RFC DEBE FACTURAR LA SUCURSAL - If (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") AndAlso LblRFC.Text.Trim() = "XAXX010101000" AndAlso Not String.IsNullOrEmpty(ObjCliente.DtResultados.Rows(0)("RFC").ToString()) Then - Me.FacturarSucursal = True - - LtlTitleRFCSucursal.Text = "RFC:" - LtlRFCSucursal.Text = ObjCliente.DtResultados.Rows(0)("RFC").ToString() - - Me.ClienteSucursal = New Modelos.SucursalModel - Me.ClienteSucursal.Nombre = ObjCliente.DtResultados.Rows(0)("SucursalCliente").ToString() - Me.ClienteSucursal.RFC = ObjCliente.DtResultados.Rows(0)("RFC").ToString() - Me.ClienteSucursal.NoExt = CliNoExt - Me.ClienteSucursal.NoInt = CliNoInt - Me.ClienteSucursal.Localidad = CliLocalidad - Me.ClienteSucursal.Direccion = LblDireccion.Text - Me.ClienteSucursal.Colonia = LblColonia.Text - Me.ClienteSucursal.Municipio = LblCiudad.Text - Me.ClienteSucursal.Estado = LblEstado.Text - Me.ClienteSucursal.CP = LblCP.Text - Me.ClienteSucursal.Pais = CliPais - Me.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() - Me.ClienteSucursal.TelefonoSucursal = LblTelefono.Text - Me.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") - Me.ClienteSucursal.ImprimeNombreSucursal = ImprimeNombreSucursal.ToString() - - End If - - If CveVenta <= 0 Then - 'CveMetodoPagoCliente = ObjCliente.DtResultados.Rows(0)("CveMetodoPago").ToString().ToEntero() - - DdlMetodoPago33.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveMetodoPago33").ToString()) - DdlMetodoPago33_SelectedIndexChanged(DdlMetodoPago33, EventArgs.Empty) - - DdlFormaPago33.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveFormaPago33").ToString()) - DdlUsoCFDI.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveUsoCFDI").ToString()) - 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES - If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then - 'S01 Sin efectos fiscales. - DdlUsoCFDI.SelectedValueExist("23") - DdlUsoCFDI.Enabled = False - RegimenFiscalCliente = "616" - ClienteCodigoRegimenFiscal = "616" - End If - - End If - - - End If - Else - Alert("No se pudieron cargar los datos de la sucursal", TipoMensaje.MsgAdvertencia) - End If - Else - If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, TipoCliente:=-1) Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - ViewState("Mail") = If(DdlTipoComprobante.SelectedValue = "Cot", ObjCliente.MailCotizacion, ObjCliente.Mail) - LblDireccion.Text = ObjCliente.Direccion - LblColonia.Text = ObjCliente.Colonia - LblCiudad.Text = ObjCliente.Ciudad - LblEstado.Text = ObjCliente.Estado - LblCP.Text = ObjCliente.CP - LblTelefono.Text = ObjCliente.Telefono - Me.CveVendedorClienteSucursal = -1 - Me.CveVendedorCliente = ObjCliente.DtResultados.Rows(0)("CveVendedor").ToString().ToEntero() - ViewState("CliNoExt") = ObjCliente.NoExt - ViewState("CliNoInt") = ObjCliente.NoInt - PlazoCobranza = ObjCliente.PlazoCobranza - - Dim CveCotizacion As Integer = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() - - If CveVenta <= 0 AndAlso CveCotizacion <= 0 Then - 'CveMetodoPagoCliente = ObjCliente.CveMetodoPago - - DdlMetodoPago33.SelectedValueExist(ObjCliente.CveMetodoPago33) - DdlMetodoPago33_SelectedIndexChanged(DdlMetodoPago33, EventArgs.Empty) - - DdlFormaPago33.SelectedValueExist(ObjCliente.CveFormaPago33) - DdlUsoCFDI.SelectedValueExist(ObjCliente.CveUsoCFDI) - 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES - If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then - 'S01 Sin efectos fiscales. - DdlUsoCFDI.SelectedValueExist("23") - DdlUsoCFDI.Enabled = False - RegimenFiscalCliente = "616" - ClienteCodigoRegimenFiscal = "616" - End If - - End If - - End If - End If - End If - - ''SI LA SUCURSAL DEL CLIENTE NO TIENE VENDEDOR SELECCIONAMOS EL DEL USUARIO - 'If Not -1 > 0 Then - ' DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor.ToString()) - 'End If - - - - - ObjCliente.Dispose() - - - UpEstatus.Update() - UPCondicionesPago.Update() - UpCliente.Update() - 'UpEmitirTransitorio.Update() - End Sub - Private Function CargaCreditoDisponible(tCveCliente As Integer, tCveSucursalCliente As Integer, Optional ByRef ObjVentas As ClsVentas = Nothing) As Decimal - Dim Retorno As Decimal = 0 - Dim ObjVentasAplciar As ClsVentas = Nothing - If ObjVentas IsNot Nothing Then - ObjVentasAplciar = ObjVentas - Else - ObjVentasAplciar = New ClsVentas - End If - - If ObjVentasAplciar.ObtenerCreditoRestante(tCveCliente, tCveSucursalCliente) Then - If ObjVentasAplciar.DtResultados.Rows.Count > 0 Then - - If tCveSucursalCliente > 0 Then - - Dim LimiteRestanteSucursal As Decimal = ObjVentasAplciar.DtResultados(0)("LimiteRestanteSucursal").ToString().ToDecimal - Dim PorcentajeSaldoSucursal As Decimal = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoSucursal").ToString().ToDecimal - - Dim LimiteRestanteCliente As Decimal = ObjVentasAplciar.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal - Dim PorcentajeSaldoCliente As Decimal = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoCliente").ToString().ToDecimal - - 'SI EL LIMITE DE LA SUCURSAL ES MAYOR AL DEL CLIENTE DEBE LIMITAR AL DEL CLIENTE - If LimiteRestanteSucursal > LimiteRestanteCliente Then - Retorno = LimiteRestanteCliente - PorcentajeCredito = PorcentajeSaldoCliente - ElseIf LimiteRestanteSucursal < LimiteRestanteCliente Then - Retorno = LimiteRestanteSucursal - PorcentajeCredito = PorcentajeSaldoSucursal - ElseIf LimiteRestanteSucursal = LimiteRestanteCliente Then - Retorno = LimiteRestanteSucursal - PorcentajeCredito = PorcentajeSaldoSucursal - End If - Else - Retorno = ObjVentasAplciar.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal - PorcentajeCredito = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoCliente").ToString().ToDecimal - End If - End If - End If - - If ObjVentas Is Nothing Then - ObjVentasAplciar.Dispose() - End If - Return Retorno - End Function - Private Sub CargaDdlSubProyectos() - Dim dtt As New DataTable - dtt = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1) - DdlSubProyectoDatos.DataSource = dtt.FiltraParametros("EsSucursal = True ") - DdlSubProyectoDatos.DataBind() - - 'DdlSubProyectoCobranza.DataSource = dtt.FiltraParametros("EsSucursal = True ") - 'DdlSubProyectoCobranza.DataBind() - - 'DdlSubProyectoEjecucion.DataSource = dtt.FiltraParametros("EsSucursal = True ") - 'DdlSubProyectoEjecucion.DataBind() - - 'DdlSubProyectoFiltroAF.DataSource = dtt - 'DdlSubProyectoFiltroAF.DataBind() - 'DdlSubProyectoFiltroAF.Items.Insert(0, New ListItem("Todos", "-1")) - - dtt.Dispose() - End Sub - Private Sub CargaClasificaciones() - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby:="Clasificacion") - Else - DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltraParametros("UsoClasificacion IN (1,3) and Estado = 1", Orderby:="Clasificacion") - End If - 'DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) - DdlClasificacion.DataBind() - End Sub - Private Sub CargaPS(CveClasificacion As Integer, Objeto As ADServerControl.Dropdownlost, Optional AplicaParaVenta As Boolean = True) - - Objeto.setEsWebService(UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1") - - If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then - Objeto.ddl.Items.Clear() - 'Objeto.ddl.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, AplicaParaVenta:=1, Estatus:=1) - Objeto.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, Estatus:=1, AplicaParaVenta:=If(AplicaParaVenta, 1, -1)) - Objeto.ddl.DataBind() - Objeto.ddl.Items.Insert(0, New ListItem("*** Actualizar listado de Productos o Servicios ***", "-2")) - Objeto.ddl.Items.Insert(0, New ListItem("Seleccione el Producto", "-1")) - Else - If Me.CveVenta > 0 Then - DdlSubProyectoDatos.SelectedValueExist(CveSubProyectoVenta) - End If - - Dim cvesubproyecto As String = DdlSubProyectoDatos.SelectedValue - If UsuarioActual.Empresa.Funcionalidad(558) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - 'cuando es empresa llantera (558) o cuando es empresa acumuladores - cvesubproyecto = "-1" - End If - - Objeto.Attributes.Add("data-cvesubproyecto", cvesubproyecto) - Objeto.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString()) - Objeto.ddlWS.Attributes.Add("data-Estatus", "1") - If AplicaParaVenta Then - Objeto.ddlWS.Attributes.Add("data-pagina", "ventas/ventas") - Objeto.ddlWS.Attributes.Add("data-AplicaparaVenta", "1") - End If - End If - - End Sub - - Private Sub CargaTiposVenta() - RBLTipoVenta.DataSource = GlobalDTTipoVenta().FiltraParametros("Estatus = 'True' ") - RBLTipoVenta.DataBind() - - RegistraScript("$('#DvModalTipoVenta').modal({ backdrop: 'static', keyboard: false });") - End Sub - - Private Sub CargaProcedimientos() - DdlMedico.DataSource = GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") - DdlMedico.DataBind() - - DdlMedicoModal.DataSource = GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") - DdlMedicoModal.DataBind() - End Sub - - Private Sub CargaAgentes() - DdlProcedimiento.DataSource = GlobalDTProcedimientos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") - DdlProcedimiento.DataBind() - - DdlProcedimientoModal.DataSource = GlobalDTProcedimientos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") - DdlProcedimientoModal.DataBind() - - End Sub - - Private Sub CargaPSRemision(CveClasificacion As Integer, Objeto As ADServerControl.Dropdownlost) - - Objeto.setEsWebService(UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1") - - If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then - Objeto.ddl.Items.Clear() - 'Objeto.ddl.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, AplicaParaVenta:=1, Estatus:=1) - Objeto.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, Estatus:=1, AplicaParaVenta:=1) - Objeto.ddl.DataBind() - Objeto.ddl.Items.Insert(0, New ListItem("*** Actualizar listado de Productos o Servicios ***", "-2")) - Objeto.ddl.Items.Insert(0, New ListItem("Seleccione el Producto", "-1")) - Else - Dim cvesubproyecto As String = "-1" - - Objeto.Attributes.Add("data-cvesubproyecto", cvesubproyecto) - Objeto.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString()) - Objeto.ddlWS.Attributes.Add("data-pagina", "ventas/ventas") - Objeto.ddlWS.Attributes.Add("data-Estatus", "1") - Objeto.ddlWS.Attributes.Add("data-AplicaparaVenta", "1") - End If - - End Sub - - -#End Region - -#Region "G R I D V I E W S" - - Protected Sub GvPS_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvPS.RowDataBound - If e.Row.RowType = DataControlRowType.DataRow Then - e.Row.Attributes("id") = e.Row.RowIndex.ToString() - If e.Row.RowIndex = 0 Then - End If - - - If e.Row.RowState = DataControlRowState.Edit OrElse e.Row.RowState = 5 Then - 'MODO EDICION - - If UsuarioActual.Empresa.UsaInventarios Then - e.Row.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTProductosServiciosEquivalencias(e.Row.DBCampo("CvePS").ToEntero(), -1, UsuarioActual.CveEmpresa) - Else - e.Row.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) - End If - e.Row.FCDropDownList("DdlUnidadMedida").DataBind() - e.Row.FCDropDownList("DdlUnidadMedida").SelectedValueExist(e.Row.DBCampo("CveUM")) - - e.Row.FCDropDownList("DdlClasificacion").DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1) - e.Row.FCDropDownList("DdlClasificacion").DataBind() - e.Row.FCDropDownList("DdlClasificacion").SelectedValue = e.Row.DBCampo("CveClasificacion") - CargaPS(e.Row.FCDropDownList("DdlClasificacion").SelectedValue.ToEntero(), e.Row.FCDropDownLost("DdlPS")) - e.Row.FCDropDownLost("DdlPS").SelectedText = e.Row.DBCampo("PS") - e.Row.FCDropDownLost("DdlPS").SelectedValue = e.Row.DBCampo("CvePS") - - - If e.Row.DBCampo("CveSubProyecto") = "-1" Then - 'cargo todos las opciones para - 'e.Row.FCDropDownList("DdlProyecto").DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) - 'e.Row.FCDropDownList("DdlProyecto").DataBind() - 'e.Row.FCDropDownList("DdlProyecto").Items.Insert(0, New ListItem("Sin Proyecto Asignado", "-1")) - - 'e.Row.FCDropDownList("DdlSubProyecto").DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1) - 'e.Row.FCDropDownList("DdlSubProyecto").DataBind() - 'e.Row.FCDropDownList("DdlSubProyecto").Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) - - Else - 'Dim dr As DataRow = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, e.Row.DBCampo("CveSubProyecto").ToEntero(), 1).FiltroPrimero("") - - 'If dr IsNot Nothing Then - ' e.Row.FCDropDownList("DdlProyecto").DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) - ' e.Row.FCDropDownList("DdlProyecto").DataBind() - ' e.Row.FCDropDownList("DdlProyecto").SelectedValue = dr("CveProyecto").ToString() - ' e.Row.FCDropDownList("DdlSubProyecto").DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, dr("CveProyecto").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, 1) - ' e.Row.FCDropDownList("DdlSubProyecto").DataBind() - ' e.Row.FCDropDownList("DdlSubProyecto").SelectedValueExist(e.Row.DBCampo("CveSubProyecto")) - - 'End If - - End If - - If UsuarioActual.TienePermisoProceso(68) Then - e.Row.FCTextBox("TxtPrecio").Enabled = False - e.Row.FCTextBox("TxtDescuento").Enabled = False - End If - - - If Not EsCreaApartirDe Then - 'Si es una devolucion - If NuevaFactura = 0 Then - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False - e.Row.FCDropDownList("DdlClasificacion").Enabled = False - e.Row.FCDropDownLost("DdlPS").Enabled = False - 'e.Row.FCDropDownList("DdlProyecto").Enabled = False - 'e.Row.FCDropDownList("DdlSubProyecto").Enabled = False - e.Row.FCTextBox("TxtPrecio").Enabled = False - ElseIf NuevaFactura = 1 Or CveContrato > 0 Then - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False - e.Row.FCDropDownList("DdlClasificacion").Enabled = False - e.Row.FCDropDownLost("DdlPS").Enabled = False - e.Row.FCTextBox("TxtCantidad").Enabled = False - e.Row.FCTextBox("TxtPrecio").Enabled = False - e.Row.FCTextBox("TxtDescuento").Enabled = False - - If TieneAlmacen Then e.Row.FCLinkButton("imgD").Visible = False - - If UsuarioActual.TienePermisoProceso(222) Then - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = True - e.Row.FCDropDownList("DdlClasificacion").Enabled = True - e.Row.FCDropDownLost("DdlPS").Enabled = True - e.Row.FCTextBox("TxtCantidad").Enabled = True - e.Row.FCTextBox("TxtPrecio").Enabled = True - e.Row.FCTextBox("TxtDescuento").Enabled = True - End If - - End If - End If - - 'Si es facturacion de OC o Contrato - If CveContrato > 0 AndAlso Not CveVenta > 0 AndAlso Not CveCicloComercial > 0 Then - e.Row.FCLinkButton("imgClone").Visible = False - e.Row.FCTextBox("TxtOrden").Visible = True - e.Row.FCTextBox("TxtCantidad").Enabled = False - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False - e.Row.FCDropDownList("DdlClasificacion").Enabled = False - e.Row.FCDropDownLost("DdlPS").Enabled = False - 'e.Row.FCDropDownList("DdlProyecto").Enabled = False - 'e.Row.FCDropDownList("DdlSubProyecto").Enabled = False - e.Row.FCTextBox("TxtPrecio").Enabled = False - End If - - If CveContrato > 0 AndAlso CveContratoTipo = 33 Then - e.Row.FCTextBox("TxtCantidad").Enabled = True - e.Row.FCTextBox("TxtPrecio").Enabled = True - End If - - If DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 Then - e.Row.FCLinkButton("imgClone").Visible = False - e.Row.FCTextBox("TxtOrden").Visible = True - e.Row.FCTextBox("TxtCantidad").Enabled = False - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False - e.Row.FCDropDownList("DdlClasificacion").Enabled = False - ' e.Row.FCDropDownList("DdlProyecto").Enabled = False - 'e.Row.FCDropDownList("DdlSubProyecto").Enabled = False - e.Row.FCLiteral("LtlPSEdit").Visible = True - e.Row.FCDropDownLost("DdlPS").Visible = False - e.Row.FCDropDownLost("DdlPS").Enabled = False - e.Row.FCTextBox("TxtPrecio").Enabled = True - End If - - If CveCicloComercial > 0 Then - e.Row.FCTextBox("TxtPrecio").Enabled = True - End If - - 'CUANDO SE QUIERE FACTURAR UNA REMISIÓN NO PERMITE EDITAR SU PRECIO - If DtRemisionesPS IsNot Nothing AndAlso DtRemisionesPS.Rows.Count > 0 AndAlso (e.Row.DBCampo("CveVentaDetalle").ToEntero() > 0 Or e.Row.DBCampo("CveVentaDetalleRemision").ToEntero() > 0) Then - e.Row.FCTextBox("TxtPrecio").Enabled = False - End If - - 'PERMISO EDITAR REM - If e.Row.DBCampo("TipoDocto") = "Rem" And ModalidadEdicion Then - 'LO PERMITIDO MODIFICAR - e.Row.FCTextBox("TxtPrecio").Enabled = True - e.Row.FCTextBox("TxtObsPS").Enabled = True - e.Row.FCTextBox("TxtCantidad").Attributes.Add("onblur", $"ValidarCantidadMenor(this,{e.Row.DBCampo("CantidadInventario").ToDouble})") - - 'LO NO PERMITIDO MODIFICAR - e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False - If UsuarioActual.CveEmpresa = 119 Then - e.Row.FCTextBox("TxtCantidad").Enabled = False - End If - - 'cuando ya tiene una salida, no se puede cambiar el producto - If e.Row.DBCampo("CantidadInventario").ToDouble > 0 Then - e.Row.FCDropDownList("DdlClasificacion").Enabled = False - e.Row.FCDropDownLost("DdlPS").Enabled = False - e.Row.FCDropDownLost("DdlPS").ddlWS.Attributes.Add("disabled", "disabled") - End If - - e.Row.FCTextBox("TxtTiempoEntrega").Enabled = False - 'e.Row.FCDropDownList("DdlProyecto").Enabled = False - 'e.Row.FCDropDownList("DdlSubProyecto").Enabled = False - - e.Row.FCLinkButton("imgD").Visible = False - End If - - If UsuarioActual.CveEmpresa.Contiene(7, 122) Then - e.Row.FCTextBox("TxtCantidad").Width = New Unit("100%") - e.Row.FCLabel("LblTurnoEditar").Visible = True - e.Row.FCTextBox("TxtNumTurnosEditar").Visible = True - End If - - 'If UsuarioActual.CveEmpresa = 119 Then - ' e.Row.FCTextBox("TxtDescuento").Enabled = False - 'End If - - Else - 'MODO NORMAL - - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - e.Row.FCDropDownList("DdlFR").DataSource = DTPresupuestoIngresos - e.Row.FCDropDownList("DdlFR").DataBind() - e.Row.FCDropDownList("DdlFR").SelectedValue = e.Row.DBCampo("CvePresupuestoIngreso") - 'e.Row.FCDropDownList("DdlFR").Enabled = False - End If - - If e.Row.DataKey("IEPS").ToDouble > 0 Then : TrIEPS.Visible = True : End If - - If NuevaFactura = 1 Then - If Not UsuarioActual.TienePermisoProceso(222) Then - e.Row.FCLinkButton("imgD").Visible = False - e.Row.FCLinkButton("imgE").Visible = False - End If - If TieneAlmacen Then - e.Row.FCLinkButton("imgD").Visible = False - End If - End If - - If (CveContrato > 0 AndAlso Not CveVenta > 0) Then - e.Row.FCLinkButton("imgD").Visible = False - End If - - 'If DdlContratosModal.DataSource IsNot Nothing AndAlso CveCicloComercial <= 0 Then - ' e.Row.FCLinkButton("imgE").Visible = False - 'End If - - - - 'Si es facturacion de OC - If DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 Then - e.Row.FCLinkButton("imgClone").Visible = False - e.Row.FCTextBox("TxtOrden").Visible = True - End If - - If UsuarioActual.Empresa.CvePlataforma = 2 Then - e.Row.FCLinkButton("imgE").Visible = False - e.Row.FCLinkButton("imgEPyME").Visible = True - End If - - If UsuarioActual.Empresa.Tipo_CentroCosto = 2 Or UsuarioActual.Empresa.Tipo_CentroCosto = 1 Then - e.Row.FCLabel("LblProyecto").Visible = False - End If - - If CveVenta > 0 Then 'And e.Row.DBCampo("TipoDocto") = "Rem" - If ModalidadEdicion Then - e.Row.FCLinkButton("imgE").Visible = Not e.Row.DBCampo("CantidadFacturadaRem").ToDouble > 0 - e.Row.FCLinkButton("imgD").Visible = Not e.Row.DBCampo("CantidadInventario").ToDouble > 0 - ElseIf Not CveDevolucion > 0 Then - e.Row.FCLinkButton("imgE").Visible = False - e.Row.FCLinkButton("imgD").Visible = False - End If - - 'EN BDH NO DEBE PODER EDITAR LOS PS - If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - If ModalidadEdicion Then - e.Row.FCLinkButton("imgE").Visible = True - e.Row.FCLinkButton("imgD").Visible = False - Else - e.Row.FCLinkButton("imgE").Visible = False - e.Row.FCLinkButton("imgD").Visible = False - End If - End If - End If - - If UsuarioActual.Empresa.Funcionalidad(360) = "1" AndAlso e.Row.DBCampo("CvePrecioLista").ToEntero() > 0 Then - e.Row.FCLiteral("LtlPrecioLista").Visible = True - End If - - If UsuarioActual.CveEmpresa.Contiene(7, 122) AndAlso e.Row.DBCampo("NumTurnos").ToDecimal() > 0 Then - e.Row.FCLiteral("LtlNumTurnos").Visible = True - End If - - 'CANTIDAD FACTURADA - Select Case e.Row.DBCampo("TipoDocto") - Case "Cot" - e.Row.FCLiteral("LtCantidadFacturada").Text = e.Row.DBCampo("CantidadFacturadaCot").ToDecimal.ToString("#,##0.##") - Case "Pd2" - e.Row.FCLiteral("LtCantidadFacturada").Text = e.Row.DBCampo("CantidadFacturadaPed2").ToDecimal.ToString("#,##0.##") - End Select - - If EsCreaApartirDe Then - e.Row.FCLinkButton("imgD").Visible = True - e.Row.FCLinkButton("imgE").Visible = True - End If - - 'If GvInv.Rows.Count > 0 AndAlso ModalidadEdicion AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso e.Row.DataKey("CveVentaDetalle").ToString().ToEntero() > 0 Then - ' e.Row.FCLinkButton("imgE").Enabled = False - ' e.Row.FCLinkButton("imgE").ToolTip = "No se puede editar debido a que ya hay un movimiento de almacen." - 'End If - - End If - End If - End Sub - Protected Sub GvPS_RowEditing(sender As Object, e As EventArgs) Handles GvPS.RowEditing - - 'ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs - ' - LimpiaAgregar() - - Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) - IndicePSActual = GvRow.RowIndex - - CantidadOriginal = GvRow.DataKey("Cantidad").ToDecimal - TxtCantidad.Text = GvRow.DataKey("Cantidad") - DdlClasificacion.SelectedValueExist(GvRow.DataKey("CveClasificacion")) - - If UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then - DdlPS.txtValue.Value = GvRow.DataKey("CvePS") - DdlPS.txtText.Value = GvRow.DataKey("CodigoPS") - Else - DdlPS.ddl.SelectedValueExist(GvRow.DataKey("CvePS")) - End If - - TxtObsPS.Text = GvRow.DataKey("Obs") - TxtPrecio.Text = GvRow.DataKey("PU") - - TxtCantidad.Focus() - - UpDVAddPS.Update() - - RegistraScript("$('#DVAddPS').modal();") - - - - '''************ - 'GvPS.EditIndex = e.NewEditIndex - 'GvPS.DataSource = TmpDT - 'DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - 'GvPS.DataBind() - 'If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlUnidadMedida").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlClasificacion").Enabled = False - 'End If - - ''SI ES LLANTERA NO DEBE BLOQUEAR EL TEXTBOX - 'If GvPS.Rows(e.NewEditIndex).DataKey("CvePromocionDetalle").ToString().ToEntero() > 0 AndAlso (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") Then - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").ToolTip = "No se puede editar el descuento porque viene de una promoción" - 'End If - - 'If Me.CveVenta > 0 AndAlso UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot") Then - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").Enabled = False - 'End If - - 'If CveVenta > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtCantidad").Enabled = False - - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlUnidadMedida").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownLost("DdlPS").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownLost("DdlPS").ddlWS.Attributes.Add("disabled", "disabled") - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlUnidadMedida").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlClasificacion").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlProyecto").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCDropDownList("DdlSubProyecto").Enabled = False - - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtObsPS").Enabled = True - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtPrecio").Enabled = False - ' GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").Enabled = False - 'End If - - End Sub - 'Protected Sub GvPS_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvPS.RowCancelingEdit - ' GvPS.EditIndex = -1 - ' GvPS.DataSource = TmpDT - ' DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - ' GvPS.DataBind() - 'End Sub - - - 'Protected Sub GvPS_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvPS.RowUpdating - - - ' 'Dim TipoDescuento As Integer - ' Dim Cantidad, PU, CantidadInventario As Decimal - ' Dim ObjDescuento As New Modelos.VentaDescuentos - ' Dim CuentaPredial As String - ' Cantidad = GvPS.Rows(e.RowIndex).FCTextBox("TxtCantidad").Text.ToDecimal - ' PU = (GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Text.ToDecimal).RoundSQL(6) - - ' Dim DescuentoManual As Decimal = (GvPS.Rows(e.RowIndex).FCTextBox("TxtDescuento").Text.ToDecimal).RoundSQL(NumeroDecimales) - - ' ObjDescuento.ImporteDescuento = DescuentoManual - ' CuentaPredial = GvPS.Rows(e.RowIndex).FCTextBox("TxtPredial").Text.Trim - - ' If PU <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - ' Alert("El precio debe ser mayor a 0", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' If UsuarioActual.CveEmpresa = 140 OrElse DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then - ' ObjDescuento = CalcularDescuentos(TmpDT.Rows(e.RowIndex)("CvePS").ToString().ToEntero(), Cantidad, PU) - ' End If - - ' 'SI ESTA HABILITADO LA OPCION DE DESCUENTO, SE AGREGO UN DESCUENTO MANUAL Y NO TIENE PROMOCION - ' If GvPS.Rows(e.RowIndex).FCTextBox("TxtDescuento").Enabled AndAlso (ObjDescuento.CvePromocionDetalle <= 0 AndAlso ObjDescuento.ImporteDescuento <= 0) AndAlso DescuentoManual > 0 Then - ' ObjDescuento.ImporteDescuento = DescuentoManual - ' End If - - ' 'VERIFICA SI EL DESCUENTO SUPERA EL SUBTOTAL - ' If ObjDescuento.ImporteDescuento.RoundSQL(2) > (Cantidad * PU).RoundSQL(2) Then - ' Alert("El descuento no puede ser mayor al subtotal", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' Dim CantidadOriginal As Decimal = GvPS.Rows(e.RowIndex).DataKey("Cantidad").ToDecimal() - - ' Dim DatarowPS As DataRow = Nothing - ' DatarowPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=TmpDT.Rows(e.RowIndex)("CvePS").ToString().ToEntero()).FiltroPrimero("") ' Estado = -1 - - ' 'verifica si tiene ventaminima - ' If Cantidad > 0 AndAlso DatarowPS("VentaMinima").ToString().ToDecimal > 0 AndAlso (DdlTipoComprobante.SelectedValue = "Rem" Or DdlTipoComprobante.SelectedValue = "Ing") Then - ' 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15... - ' If Cantidad Mod DatarowPS("VentaMinima").ToString().ToDecimal <> 0 Then - ' Alert(String.Format("El producto se vende solo en cantidades de {0}", DatarowPS("VentaMinima").ToString())) - ' Exit Sub - ' End If - ' End If - - - ' 'si es remisión, ingreso, anticipo debe de considerar el preciominimo - - ' If Not UsuarioActual.TienePermisoProceso(169) Then ' NO VALIDA EXISTENCIAS NI COSTO - PERMISO PARA NO VALIDAR - ' Dim CvePS As Integer = DatarowPS("CvePS").ToString().ToEntero() - ' Dim CveUM As Integer = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida").SelectedValue.ToEntero() 'DatarowPS("CveUM").ToString().ToEntero() - ' Dim CveTipoPS As Integer = DatarowPS("CveTipoPS").ToString().ToEntero() - - ' CantidadInventario = GvPS.Rows(e.RowIndex).DataKey("CantidadInventario").ToDecimal - ' Dim CveUMInicial As Integer = GvPS.Rows(e.RowIndex).DataKey("CveUM").ToEntero - - ' Dim ValidaExistencia As Boolean = True - ' If (CantidadInventario > 0) OrElse (Cantidad <= CantidadOriginal) Then 'si ya hay algo surtido, que no valide existencia - ' ValidaExistencia = False - ' End If - ' If CveUM <> CveUMInicial Then ValidaExistencia = True - - ' 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS - ' If UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119))) Then - ' Dim ObjInventarios As New ClsInventarios - ' Dim Existencia As Decimal - ' If ValidaExistencia Then - ' Existencia = ObjInventarios.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=-1, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1) - ' End If - - ' Dim Costo As Decimal = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - - ' 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - ' If Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, -1, CveTipoAlmacen:=1) - - ' ObjInventarios.Dispose() - ' Dim PrecioMinimo As Decimal = 0 - ' 'RMF. condicion temporal, para reubicación, precio mínimo - ' If UsuarioActual.CveEmpresa = 119 Then - ' 'Dim CvePrecioLista As Integer = 38 - ' Dim objPS As New ClsProductosServicios - ' If objPS.GetPSSucursalesALL(CvePS, UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) Then - ' PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal - ' 'If PrecioMinimo > 0 Then - ' ' Costo = PrecioMinimo - ' 'End If - ' End If - ' objPS.Dispose() - - ' End If - - ' If ValidaExistencia AndAlso DdlTipoComprobante.SelectedValue <> "Cot" AndAlso Not RegistroxOC Then - ' 'VALIDA EXISTENCIA - ' If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 140, 153}) Then - ' 'SI ES VENTA NUEVA TOMA EN CUENTA LO DEL TMPDT - ' If CveVenta <= 0 Then - ' If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - ' Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - ' Else - ' If DdlTipoComprobante.SelectedValue = "Rem" Then - ' Dim CantidadVenta As Double = 0 - ' Using ObjVentas As New ClsVentas - ' If ObjVentas.GetVentaDetalle(CveVenta) Then - ' CantidadVenta = ObjVentas.DtResultados.SUM("Cantidad", $"CvePS = {CvePS}") - ' End If - ' End Using - - ' 'SUMA LO YA RESTADO EN PENDIENTE POR SURTIR QUE PERTENESCA A LA VENTA. - ' 'PARA QUE NO RESTE LA EXISTENCIA 2 VECES Y PUEDAS COMPARAR LO REAL - ' If (Existencia + CantidadVenta) - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - ' Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - ' End If - - ' End If - - ' End If - ' End If - - ' 'VALIDA COSTOS - ' If Not CveContrato > 0 Then - - ' 'BANDERAS PARA VALIDACIONES - ' Dim EsValido As Boolean = False - ' Dim EsValidoMayor As Boolean = False - ' Dim CostoMenor As Decimal = 0 - ' Dim CostoMayor As Decimal = 0 - - ' 'PRECIO MINIMO - ' If UsuarioActual.Empresa.Funcionalidad(129).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - ' '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo - ' If PrecioMinimo > 0 Then - ' 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - ' If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC - ' EsValido = True - ' End If - ' Else - ' CostoMenor = Costo + ((UsuarioActual.Empresa.Funcionalidad(129).ToDecimal / 100) * Costo) - ' 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - ' If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then - ' EsValido = True - ' End If - ' End If - ' Else - ' EsValido = True - ' End If - - ' 'PRECIO MAXIMO - ' If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - ' CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) - ' 'SI EL PRECIO ES MAYOR AL COSTO MAXIMO, SI PASA - ' If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) <= CostoMayor Then - ' EsValidoMayor = True - ' End If - ' Else - ' EsValidoMayor = True - ' End If - - - - ' 'NO DEJA REGISTRAR MENOS AL PRECIO MINIMO - ' Dim MensajeCosto As New StringBuilder - ' Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) - ' If Not EsValido Then - ' MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio menor de su Costo
    ", DatarowPS("PS").ToString()) - ' If TienePermisoImportes Then - ' MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - ' MensajeCosto.AppendFormat("El rango menor aceptado es: {0:#,###.00}% ${1}
    ", UsuarioActual.Empresa.Funcionalidad(129).ToEntero(), CostoMenor) - ' MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - ' End If - - - ' Alert(String.Format(MensajeCosto.ToString()), TipoMensaje.MsgAdvertencia) - ' MensajeCosto.Clear() - ' e.Cancel = True - ' Exit Sub - ' End If - - ' 'NO DEJA REGISTRAR MAS AL PRECIO MAXIMO - ' If Not EsValidoMayor Then - ' MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", HdnPS.Value) - ' If TienePermisoImportes Then - ' MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - ' MensajeCosto.AppendFormat("El rango mayor aceptado es: {0}% ${1:#,###.00}
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) - ' MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - ' End If - ' Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) - ' MensajeCosto.Clear() - ' e.Cancel = True - ' Exit Sub - ' End If - - ' End If - ' End If - ' End If - - ' If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then - ' Dim ConsecEliminar As Integer = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() - ' If ConsecEliminar > 0 Then - ' Dim descEliminar As Modelos.VentaDescuentos = ListaDescuentos.FirstOrDefault(Function(x) x.Consec = ConsecEliminar) - ' If descEliminar IsNot Nothing Then - ' ListaDescuentos.Remove(descEliminar) - ' End If - ' End If - ' End If - - ' If TmpDT.Rows(e.RowIndex)("CvePS").ToString() <> GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue Then - ' 'eliminar y cargar el ps *** - ' Dim DdlUM As DropDownList = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida") - ' Dim DdlCla As DropDownList = GvPS.Rows(e.RowIndex).FCDropDownList("DdlClasificacion") - - ' If DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then - ' ObjDescuento = CalcularDescuentos(GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue.ToEntero(), Cantidad, PU) - ' End If - - ' Dim NumTurnos As Decimal = 0 - ' If UsuarioActual.CveEmpresa.Contiene(7, 122) Then - ' NumTurnos = GvPS.Rows(e.RowIndex).FCTextBox("TxtNumTurnosEditar").Text.ToDecimal() - ' End If - - ' TmpDT.Rows.Remove(TmpDT.Rows(e.RowIndex)) - ' 'CalculaUsados() - ' AgregarProductoServicio(Cantidad, DdlUM.SelectedValue.ToEntero(), DdlUM.SelectedItem.Text, DdlCla.SelectedValue.ToEntero(), DdlCla.SelectedItem.Text, - ' GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue.ToEntero(), GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedText, - ' GvPS.Rows(e.RowIndex).FCTextBox("TxtObsPS").Text.Trim, PU, ObjDescuento.ImporteDescuento, - ' GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedValue.ToEntero(), GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedItem.Text, - ' GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedValue.ToEntero(), GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedItem.Text, - ' CuentaPredial:=CuentaPredial, CveVentaDetalle:=GvPS.Rows(e.RowIndex).DataKey("CveVentaDetalle").ToString().ToEntero(), SeActualiza:=True, CvePromocionDetalle:=ObjDescuento.CvePromocionDetalle, - ' ObjDescuento:=ObjDescuento, NumTurnos:=NumTurnos) - - ' ' TmpDT.Rows(e.RowIndex)("CveUM") = Ddl.SelectedValue - ' ' TmpDT.Rows(e.RowIndex)("UM") = Ddl.SelectedItem.Text - ' GvPS.EditIndex = -1 - ' GvPS.DataSource = TmpDT - ' DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - ' GvPS.DataBind() - - - ' Else - ' Dim DrPS As DataRow = Nothing - ' DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=TmpDT.Rows(e.RowIndex)("CvePS").ToString().ToEntero()).FiltroPrimero("") - - ' If Not ClienteDesglosaIEPS Then - ' PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - ' TmpDT.Rows(e.RowIndex)("PorcentajeIEPS") = 0 - ' End If - - ' Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (ObjDescuento.ImporteDescuento)) - ' Dim TotalCalculableImpuestosIVA As Decimal = 0 - ' TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + TmpDT.Rows(e.RowIndex)("PorcentajeIEPS").ToString().ToDecimal) - - ' Dim ClienteRetIVA As Decimal = Me.ClienteRetIVA - ' If ClienteRetIVA <= 0 Then - ' If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then - ' ClienteRetIVA = 0.106667D - ' ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then - ' ClienteRetIVA = 0.04D - ' End If - ' End If - - ' If DrPS("IVA").ToString().Contiene("-1", "") Then - ' TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = PorcentajeIVA - ' Else - ' TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = DrPS("IVA") - ' End If - - ' If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso LblRFC.Text = "XEXX010101000" Then - ' TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = 0 - ' TmpDT.Rows(e.RowIndex)("ImporteIVA") = 0 - ' End If - - ' TmpDT.Rows(e.RowIndex)("CveUM") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida").SelectedValue.ToEntero() - ' TmpDT.Rows(e.RowIndex)("UM") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida").SelectedItem.Text - ' TmpDT.Rows(e.RowIndex)("Cantidad") = Cantidad - ' TmpDT.Rows(e.RowIndex)("Obs") = GvPS.Rows(e.RowIndex).FCTextBox("TxtObsPS").Text.TrimEnd - ' TmpDT.Rows(e.RowIndex)("TiempoEntrega") = GvPS.Rows(e.RowIndex).FCTextBox("TxtTiempoEntrega").Text.Trim - ' TmpDT.Rows(e.RowIndex)("PU") = PU - ' TmpDT.Rows(e.RowIndex)("Descuento") = ObjDescuento.ImporteDescuento - ' TmpDT.Rows(e.RowIndex)("Total") = (Cantidad * PU) - ' TmpDT.Rows(e.RowIndex)("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("ImporteIVA") = (TmpDT.Rows(e.RowIndex)("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("ImporteIEPS") = (TmpDT.Rows(e.RowIndex)("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("RetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - ' TmpDT.Rows(e.RowIndex)("PorcentajeRetIVA") = ClienteRetIVA - ' TmpDT.Rows(e.RowIndex)("PorcentajeRetISR") = ClienteRetISR - ' TmpDT.Rows(e.RowIndex)("CuentaPredial") = CuentaPredial - - ' Dim NumTurnos As Decimal = 0 - ' If UsuarioActual.CveEmpresa.Contiene(7, 122) Then - ' NumTurnos = GvPS.Rows(e.RowIndex).FCTextBox("TxtNumTurnosEditar").Text.ToDecimal() - ' End If - ' TmpDT.Rows(e.RowIndex)("NumTurnos") = NumTurnos - - ' If ObjDescuento IsNot Nothing Then - ' TmpDT.Rows(e.RowIndex)("CvePromocionDetalle") = ObjDescuento.CvePromocionDetalle - ' End If - - ' If GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").Items.Count = 0 Then - ' TmpDT.Rows(e.RowIndex)("Proyecto") = "Sin Proyecto Asignado" - ' TmpDT.Rows(e.RowIndex)("CveSubProyecto") = -1 - ' Else - ' TmpDT.Rows(e.RowIndex)("Proyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedItem.Text - ' End If - - - ' If GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").Items.Count = 0 Then - ' TmpDT.Rows(e.RowIndex)("SubProyecto") = "Sin SubProyecto Asignado" - ' Else - ' 'si está visible en el encabezado, si no esta visible que no actualice, porque generar error, selecciona el primer item - - ' TmpDT.Rows(e.RowIndex)("SubProyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedItem.Text - ' TmpDT.Rows(e.RowIndex)("CveSubProyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedValue - - ' End If - - - ' 'RELACIONAL PS CON EL DESCUENTO - ' If ObjDescuento IsNot Nothing Then - ' ObjDescuento.Consec = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() - ' End If - - - ' DrPS = Nothing - - ' GvPS.EditIndex = -1 - ' GvPS.DataSource = TmpDT - ' DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - ' GvPS.DataBind() - - ' End If - - ' If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then - ' ListaDescuentos.Add(ObjDescuento) - ' End If - - ' CalculaTotalesVenta() - - ' UpPS.Update() - - - - 'End Sub - Protected Sub GvPS_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvPS.RowDeleting - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing Then - Dim ConsecEliminar As Integer = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() - If ConsecEliminar > 0 Then - Dim descEliminar As Modelos.VentaDescuentos = ListaDescuentos.FirstOrDefault(Function(x) x.Consec = ConsecEliminar) - If descEliminar IsNot Nothing Then - ListaDescuentos.Remove(descEliminar) - End If - End If - End If - - Dim DbRow As DataRow = Nothing - DbRow = TmpDT.Rows(e.RowIndex) - TmpDT.Rows.Remove(DbRow) - - 'CalculaUsados() - - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - 'CargaGVInv(DtInv) - CalculaTotalesVenta() - - Alert("Eliminado Correctamente.", TipoMensaje.MsgInformacion) - 'JJMQ 20160506: Se agrego para la validacion de pago de contado. - 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") - - - End Sub - - - -#End Region - - - -#Region " EMITIR IMPRIMIR - GUARDAR " - Protected Sub BtnEmitirImprimir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnEmitirImprimir.Click - Try - EmitirImprimir() - Catch ex As Exception - OnError(ex.ToString(), ex) - End Try - End Sub - - Private Sub EmitirImprimir(Optional TipoDoctoViejo As String = "") - - DtRemisionesTmpDT = TmpDT.Copy - DtPedidos2TmpDT = TmpDT.Copy - DtCotizacionTmpDT = TmpDT.Copy - DtOCTmpDT = TmpDT.Copy - TmpDTError = TmpDT.Copy - - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Egs", "Dev") Then - If RegimenFiscalCliente.Contiene("-1", "") Then - Alert("El cliente no tiene asignado un régimen fiscal.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If DdlUsoCFDI.SelectedValue.ToEntero() <= 0 Then - Alert("No se ha seleccionado el Uso CFDI o el cliente no tiene asignado el correcto.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Egs", "Dev") Then - - If LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso RegimenFiscalCliente <> "616" Then - Alert("El Regimen fiscal del cliente debe ser '616 - Sin obligaciones fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlUsoCFDI.SelectedValue <> "23" Then - Alert("El uso cfdi del cliente debe ser 'S01 - Sin efectos fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If Not LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso RegimenFiscalCliente = "616" Then - Alert("El Regimen fiscal del cliente no puede ser '616 - Sin obligaciones fiscales' si no se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - Dim EsPersonaMoral As Boolean = Me.TipoPersona - Dim DtUsosCFDI As DataTable = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente).FiltraParametros($"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") - - If DtUsosCFDI.Rows.Count = 0 Then - Alert("El Uso CFDI no corresponde con el tipo de persona (fisca, moral) y el régimen fiscal.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - If Not ValidaImportePublicoGeneral() Then - Exit Sub - End If - - If (Me.FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) Then - Alert("La sucursal no tiene asignada un RFC.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - - 'VALIDACIONES - If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then - Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If TmpDT Is Nothing OrElse TmpDT.Rows.Count = 0 Then - Alert("Es necesario tener al menos un concepto registrado.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'Subproyecto Obligatorio - If UsuarioActual.Empresa.Funcionalidad(120) = "1" AndAlso TmpDT.FiltraParametros("ISNULL(CveSubProyecto,0) <= 0").Rows.Count > 0 Then - Alert("El Subproyecto de los conceptos es obligatorio, Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'VENDEDOR OBLIGATORIO - If -1 <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then - Alert("Debe seleccionar un vendedor.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'SI TIENE ANTICIPOS Y ESTA AMORTIZADO AL 100% EL DOCUMENTO (SALDO = 0) | NO VALIDA PU DEL CONCEPTO - If Not (LblAmortizacion.Text.ToDouble > 0 And TxtTotal.Text.ToDouble <= 0) Then - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant", "DPe") Then - If UsuarioActual.CveEmpresa.Contiene(72, 80) Then - If TmpDT.FiltraParametros($"TotalImporte = 0").Rows.Count > 0 Then - Alert("El importe de cada concepto debe ser mayor a cero. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - End If - - Dim CveContratoTipo As Integer = 0 - If CveContrato > 0 Then - Dim ObjContrato As New ClsContratos - If ObjContrato.GetContratos(CveContrato, UsuarioActual.CveEmpresa) Then - If ObjContrato.DtResultados.Rows.Count > 0 Then - CveContratoTipo = ObjContrato.DtResultados.Rows(0)("CveContratoTipo").ToString().ToEntero() - End If - End If - ObjContrato.Dispose() - End If - - Me.CveAutorizacion = -1 - 'SI ES A CREDITO DEBE VERIFICAR SI TIENE AUTORIZACIONES - If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveCliente > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs") Then - Dim TipoDocumentoAutorizacion As String = "" - Dim ImporteAutorizacion As Decimal = 0 - Dim TipoAutorizacion As Integer = 0 - Dim DiasVencidosAutorizacion As Integer = 0 - Dim CveVendedor As Integer = -1 - Dim ObjVentas As New ClsVentas - - ObjVentas.Dispose() - - If TipoDocumentoAutorizacion = "Ing" Then - If TipoAutorizacion = 1 Then - - If TieneDiasVencidos Then - CveAutorizacion = -1 - Alert($"El crédito no esta autorizado. El cliente tiene días vencidos", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If ImporteAutorizacion < TxtTotal.Text.ToDecimal() Then - Dim BloquearCredito As Boolean = True - CveAutorizacion = -1 - - 'VERIFICA SI TIENE CREDITO DISPONIBLE DENTRO DEL CLIENTE - Dim ObjCred As New ClsVentas - If ObjCred.ObtenerCreditoRestante(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) AndAlso ObjCred.DtResultados.Rows.Count > 0 Then - 'SI TIENE CREDITO DISPONIBLE NO BLOQUEAR AUNQUE LA AUTORIZACION NO TENGA EL IMPORTE DEL DOCUMENTO - If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then - If (ObjCred.DtResultados(0)("LimiteRestanteSucursal").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal)) > 0 Then - BloquearCredito = False - End If - Else - If (ObjCred.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal)) > 0 Then - BloquearCredito = False - End If - End If - End If - ObjCred.Dispose() - - - If BloquearCredito Then - Alert($"El crédito autorizado es insuficiente. Crédito Disponible:{ImporteAutorizacion:N2}", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - End If - - End If - - 'If TipoAutorizacion = 2 Then - ' If DiasVencidosCliente > DiasVencidosAutorizacion Then - ' CveAutorizacion = -1 - ' Alert($"El crédito no esta autorizado. Los días vencidos del cliente son mayores a lo autorizado", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - 'End If - - 'SI NO SE ENCONTRO NINGUA AUTORIZACION - If TipoAutorizacion = 0 Then - If TieneDiasVencidos Then - CveAutorizacion = -1 - Alert($"El crédito no esta autorizado. El cliente tiene días vencidos", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - - If TieneDiasVencidos AndAlso DdlTipoComprobante.SelectedValue = "Egs" AndAlso CveAutorizacion <= 0 Then - CveAutorizacion = -1 - Alert($"El crédito no esta autorizado. No tiene autorización para generar notas de crédito. El cliente tiene días vencidos", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If TipoDocumentoAutorizacion = "Egs" Then - If TipoAutorizacion = 1 Then - If ImporteAutorizacion < TxtTotal.Text.ToDecimal() Then - CveAutorizacion = -1 - Alert($"El crédito autorizado es insuficiente. Crédito Disponible:{ImporteAutorizacion:N2}", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - End If - - 'SI TIENE LINEA ADICIONAL NO VERIFICAR LIMITE DE CREDITO - 'SI NO TIENE AUTORIZACION VERIFICAR LIMITE DE CREDITO Y CANDADOS DE VENTA - 'No exceder el limite de credito, Si no tiene contrato limita el credito, si tiene no hace nada. Si no tiene remisiones tampoco hace nada. - 'If DdlLineaAdicional.SelectedValue.ToEntero() <= 0 AndAlso Me.CveAutorizacion <= 0 AndAlso (Not CveContrato > 0 Or CveContratoTipo.Contiene(28)) AndAlso (Not NuevaFactura = 1) AndAlso RBLPago.SelectedValue = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant") AndAlso RemisionesLista.Count <= 0 AndAlso TxtTotal.Text.ToDecimal > 0 AndAlso Not CvePedidoA > 0 Then - ' 'If UsuarioActual.Empresa.Funcionalidad(518) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(185) Then - - ' If Not UsuarioActual.Empresa.Funcionalidad(702) = "1" Then - ' Dim ObjVentas As New ClsVentas - - ' If ObjVentas.ObtenerCreditoRestante(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) Then - ' If ObjVentas.DtResultados.Rows.Count > 0 Then - - ' If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then - ' If ObjVentas.DtResultados(0)("LimiteRestanteSucursal").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal) < 0 Then - ' ObjVentas.Dispose() - ' Alert("Se está excediendo el límite de credito permitido de la Sucursal del Cliente.", TipoMensaje.MsgInformacion) - ' Exit Sub - ' End If - ' Else - ' If ObjVentas.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal) < 0 Then - ' ObjVentas.Dispose() - ' Alert("Se está excediendo el límite de credito permitido del Cliente.", TipoMensaje.MsgInformacion) - ' Exit Sub - ' End If - ' End If - - ' Else - ' ObjVentas.Dispose() - ' Alert("Ocurrio un error al obtener el limite de credito del cliente", TipoMensaje.MsgError) - ' Exit Sub - ' End If - ' Else - ' ObjVentas.Dispose() - ' Alert("Ocurrio un error al obtener el limite de credito del cliente", TipoMensaje.MsgError) - ' Exit Sub - ' End If - ' ObjVentas.Dispose() - - ' 'VERIFICA SI TIENE BLOQUEO POR DIAS VENCIDOS - ' If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - ' Dim Vta As New ClsVentas - ' Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa, TipoVerificacion:=2) - ' Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) - ' Vta.Dispose() - - ' If Opcion = 2 Then - ' Alert(OpcionMsg, TipoMensaje.MsgError) - ' Exit Sub - ' End If - ' End If - - ' End If - - ' 'End If - 'End If - - - - - - 'VALIDA PRECIO AL AGREGAR A ALMACEN - If Not UsuarioActual.TienePermisoProceso(169) Then - If (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") AndAlso NuevaFactura <> 1) Or (DdlTipoComprobante.SelectedValue = "Cot" AndAlso BtnEmitirImprimir.Text = "Facturar") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119)) Then - Dim MensajeCosto As New StringBuilder - Dim CostoMenor As Decimal = 0.0D - Dim CostoMayor As Decimal = 0.0D - Dim Costo As Decimal = 0.0D - Dim EsValido As Boolean = False 'BANDERA - Dim EsValidoMayor As Boolean = False - Dim EsValidoPU As Boolean = True 'SOLO SE VALIDA CUANDO EL TXTPU = 0 Y LO INVALIDA ALGUNA PROMOCION - - 'VALIDA PROMOCIONES Y EXISTENCIAS - Dim ObjVentas As New ClsVentas - If ObjVentas.GetPromocionesPS(-1, NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, -1, 1, UsuarioActual.CveEmpresa) Then - DtPromociones = ObjVentas.DtResultados - End If - ObjVentas.Dispose() - - - Dim ObjInventarios As New ClsInventarios - Dim PU As Decimal = 0.0D - Dim Cantidad As Double - Dim CveUnidad As Integer - Dim CveProducto As Integer - Dim Existencia As Double - ' Dim CveAlmacen As Integer = ddlAlmacen.SelectedValue.ToEntero() - For Each dr As DataRow In TmpDT.FiltraParametros("CveTipoPS = 2").Rows - - If DdlTipoComprobante.SelectedValue <> "Cot" Then - 'VALIDA EXISTENCIA - CveProducto = dr("CvePS").ToString().ToEntero() - CveUnidad = dr("CveUM").ToString().ToEntero() - Cantidad = TmpDT.SUM("Cantidad", $"CvePS = {CveProducto} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") 'VALIDA CONTRA LA SUMA DEL MISMO PS - If UsuarioActual.Empresa.UsaInventarios AndAlso RemisionesLista.Count < 1 AndAlso dr("EntregaDirecta").ToString().ToEntero() < 1 Then - Existencia = ObjInventarios.GetExistenciasPS(CveProducto, CveUnidad, UsuarioActual.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=-1, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1) - If Existencia < Cantidad Then - MensajeCosto.AppendFormat("
    El Producto {0}. No cuenta con la cantidad suficiente en inventario. Cuenta con {1}.", dr("CodigoPS").ToString(), Existencia.FormatoNumero(2)) - Continue For - End If - End If - End If - - EsValido = False - EsValidoMayor = False - EsValidoPU = True - PU = dr("PU").ToString().ToDecimal * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) - Costo = ObjInventarios.GetCostoPS(dr("CvePS").ToString().ToEntero(), dr("Cantidad").ToString().ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - - Dim PrecioMinimo As Decimal = 0 - 'RMF. condicion temporal, para reubicación, precio mínimo - If UsuarioActual.CveEmpresa = 119 Then - 'Dim CvePrecioLista As Integer = 38 - Dim objPS As New ClsProductosServicios - If objPS.GetPSSucursalesALL(dr("CvePS").ToString().ToEntero(), UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) Then - PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal - 'If PrecioMinimo > 0 Then - ' Costo = PrecioMinimo - 'End If - End If - objPS.Dispose() - - End If - - 'PRECIO MINIMO - If UsuarioActual.Empresa.Funcionalidad(129).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo - If PrecioMinimo > 0 Then - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC - EsValido = True - End If - Else - CostoMenor = Costo + ((UsuarioActual.Empresa.Funcionalidad(129).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then - EsValido = True - End If - End If - Else - EsValido = True - End If - - If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU <= CostoMayor Then - EsValidoMayor = True - End If - Else - EsValidoMayor = True - End If - - 'VALIDA PROMOCION: SI TIENE PROMOCION Y EL PRECIO ES MENOR AL PRECIO DE PROMOCION, NO PASA | SI YA CUMPLE NO VUELVE A VALIDAR - If Not EsValido Or PU = 0 Then - If DtPromociones.FiltraParametros($"CvePS = {dr("CvePS").ToString().ToEntero()}").Rows.Count > 0 Then - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {dr("CvePS").ToString().ToEntero()}").ToDecimal Then - EsValido = True - Else - EsValidoPU = False ' SI NO ENTRA DENTRO DE LA PROMOCION NO SE PUEDE VENDER A 0 - End If - Else - EsValidoPU = False ' SI NO TIENE PROMOCION NO SE PUEDE VENDER A 0 - End If - End If - 'NO DEJA REGISTRAR CON VALIDACION DE COSTO ALMACEN O PROMOCION - Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) - If Not EsValido Then - - MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio menor de su Costo ni a un precio mayor de su rango aceptado
    ", dr("PS").ToString()) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: {0:#,###.00}$
    ", Costo) - MensajeCosto.AppendFormat("El rango menor aceptado es: {0} {1:#,###.00}$
    ", UsuarioActual.Empresa.Funcionalidad(129).ToEntero(), CostoMenor) - MensajeCosto.AppendFormat("El precio indicado es: {0:#,###.00}$ ({1}% de ganancia)
    ", PU.FormatoNumero, If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)) - End If - End If - - If Not EsValidoMayor Then - MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", dr("PS").ToString()) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: {0:#,###.00}$
    ", Costo) - MensajeCosto.AppendFormat("El rango mayor aceptado es: {0} {1:#,###.00}$
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) - MensajeCosto.AppendFormat("El precio indicado es: {0:#,###.00}$ ({1}% de ganancia)
    ", PU.FormatoNumero, If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)) - End If - End If - - ' SOLO SI TIENE LA FUNCIONALIDAD DE RESTRICCION VALIDA EL IMPORTE CERO - If UsuarioActual.Empresa.Funcionalidad(139).ToString().ToEntero() > 0 Then - If Not EsValidoPU Then - MensajeCosto.AppendFormat($"El producto {dr("PS").ToString()}. No se puede vender a un importe de cero ($0)", TipoMensaje.MsgAdvertencia) - End If - End If - - Next - ObjInventarios.Dispose() - - If MensajeCosto.ToString().Length > 1 Then - Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) - MensajeCosto.Clear() - Exit Sub - End If - - End If - End If - 'Valida si en caso de que el detalle tenga llantas o polizas se agreguén kilometraje/serie en la parte de observaciones(solo para el caso de empresas llanteras) - If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - - - - If TxtObsFact.Text = "" Then - Dim FaltaObservacion As Integer = -1 - - FaltaObservacion = TmpDT.FiltroPrimeroValor("CveClasificacion", "CveClasificacion = 20345").ToEntero() - 'cuando es la clasificacion de polizas - If FaltaObservacion = 20345 Then - Alert("No se ha especificado la serie para la poliza en la sección de Observaciones", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - - If UsuarioActual.Empresa.Funcionalidad(135) = "1" And DdlTipoComprobante.SelectedValue = "Cot" Then - Alert("Se mando autorización al supervisor.", TipoMensaje.MsgInformacion) - MandarCorreoSupervisor = True - Dim CorreoSupervisor As String = "" - Dim Objeto As New ClsVtaVendedores - Dim DTSupervisores As New DataTable - If Objeto.GetVendedores(UsuarioActual.CveEmpresa) Then - DTSupervisores = Objeto.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", -1)) - 'Verifico si el supervisor tiene correo para proceder - If DTSupervisores.Rows.Count > 0 Then - CorreoSupervisor = DTSupervisores.Rows(0)("CorreoSupervisor").ToString() - End If - End If - DTSupervisores.Dispose() - Objeto.Dispose() - If MandarCorreoSupervisor = True And CorreoSupervisor <> "" Then - ViewState("Mail") = CorreoSupervisor - End If - MandarCorreoSupervisor = False - End If - - If RequiereOC AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Ing") AndAlso Not CveDevolucion > 0 Then - If Not CargaDocumentoOC Then - Alert("Tiene que cargar un archivo de orden de compra", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If TxtOrdenCompra.Text.Trim = "" Then - Alert("Tiene que especificar un folio de orden de compra", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - 'If DivAlmacen.Visible AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Dev") AndAlso GvInv.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("cbInv").Checked) > 0 AndAlso ddlAlmacen.SelectedValue.ToEntero() <= 0 Then - ' Alert("Tiene que seleccionar un almacén para la salida de almacén", TipoMensaje.MsgAdvertencia) - ' Exit Sub - 'End If - - EmitirImprimirNew(TipoDoctoViejo) - - End Sub -#End Region - -#Region " NNNNEEEEEEEWWWWWW " - Private Sub InicializaImprimirNew() - Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta)) - Dim Archivo2 As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta)) - - Dim ArchivoSti As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.mrt", UsuarioActual.Empresa.Ruta)) - Dim ArchivoSti2 As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.mrt", UsuarioActual.Empresa.Ruta)) - Dim ArchivoSti3 As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) - UpnTools.Update() - End Sub - - Protected Sub EmitirImprimirNew(Optional TipoDoctoViejo As String = "") - - 'If Not ValidaVentaContratoObra() Then - ' Exit Sub - 'End If - - 'If ValidaPagosContado(TipoDoctoViejo:=TipoDoctoViejo) Then - ' Exit Sub - 'End If - 'validaciones, si es Anticipo solo permitir "servicios de facturación" y si es ingreso todos menos serv. factu - If UsuarioActual.CveEmpresa = 119 Then - If DdlTipoComprobante.SelectedValue = "Ing" Then - Dim tCont As Integer = TmpDT.FiltraParametros("SATClaveProdServ='84111506'").Rows.Count - If tCont > 0 Then - Alert("Existen productos con código SAT '84111506' no permitido al facturar ingresos.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - If DdlTipoComprobante.SelectedValue = "Ant" Then - Dim tCont As Integer = TmpDT.FiltraParametros("SATClaveProdServ<>'84111506'").Rows.Count - If tCont > 0 Then - Alert("Al facturar 'Anticipos' solo son permitidos código SAT '84111506'.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - - 'CREA UNA COPIA DE SEGURIDAD PARA LOS DATOS DEL TMPDT - If TmpDTError Is Nothing OrElse TmpDTError.Rows.Count = 0 Then - TmpDTError = TmpDT.Copy() - End If - - If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso TbDescuentosAdicionales.Visible Then - If LblDescuentoAdicional.Text.ToDecimal() > 0 Then - Dim TotalDescuento As Decimal = LblDescuentoAdicional.Text.ToDecimal() / (1D + TmpDT.MAX("PorcentajeIVA").ToString().ToDecimal()) - Dim RowDescuentos As DataRow() = TmpDT.Select("Descuento > 0") - - If RowDescuentos IsNot Nothing Then - - Dim Row As DataRow = RowDescuentos(0) - Row("Descuento") = Row("Descuento").ToString().ToDecimal() + TotalDescuento - - Dim TotalCalculableImpuestos As Decimal = (Row("Cantidad").ToString().ToDecimal() * Row("PU").ToString().ToDecimal()) - Row("Descuento").ToString().ToDecimal() - Row("ImporteIVA") = (TotalCalculableImpuestos * Row("PorcentajeIVA").ToString().ToDecimal()).RoundSQL(2) - - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - - 'UpPS.Update() - 'VALIDA EL CALCULO DE LOS DESCUENTOS - If (LblTotalOriginal.Text.ToDecimal() - LblDescuentoAdicional.Text.ToDecimal()) <> TxtTotal.Text.ToDecimal() Then - TmpDT = TmpDTError.Copy() - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - Alert("Ocurrió un error al procesar los datos de la Venta. Los descuentos no coinciden con el importe final", TipoMensaje.MsgError) - Exit Sub - End If - End If - End If - End If - - CreaObjetosVenta(TipoDoctoViejo:=TipoDoctoViejo) - - If ObjFactura Is Nothing OrElse (ObjFactura.Cliente Is Nothing And Not CveEmpresaCRM > 0) Then - Alert("Ocurrió un error al procesar los datos de la Venta.", TipoMensaje.MsgError) - ObjFactura = Nothing - Exit Sub - End If - - - - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant", "DPe") Then - If UsuarioActual.CveEmpresa.Contiene(72, 80) Then - If ObjFactura.SubTotal <= 0 Then - Alert("Es necesario especificar el importe en los conceptos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If - - - - If ObjFactura.CveCliente > 0 Or CveEmpresaCRM > 0 Then - If TmpDT.Rows.Count > 0 Then - - Dim ObjVentas As New ClsVentas() - Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) - Dim ObjInventario As New ClsInventarios(ObjVentas.IniciaTransacSQL()) - Dim ObjContr As New ClsContratos(ObjVentas.IniciaTransacSQL()) - Dim ObjOS As New ClsOS(ObjVentas.IniciaTransacSQL()) - Dim ObjBancos As New ClsBancos(ObjVentas.IniciaTransacSQL()) - Dim ObjClientes As New ClsClientes(ObjVentas.IniciaTransacSQL()) - Dim ObjEventos As New ClsOIEventos(ObjVentas.IniciaTransacSQL()) - Dim ObjCGame As New ClsCGame(ObjVentas.IniciaTransacSQL()) - Dim ObjDocCliente As New ClsEdocumentacion(ObjVentas.IniciaTransacSQL()) - Dim ObjGeneral As New ClsGenerales(ObjVentas.IniciaTransacSQL()) - Dim ObjAcum As New ClsAcumuladores(ObjVentas.IniciaTransacSQL()) - - 'Dim ObjFolios As New ClsGralFolios(ObjVentas.IniciaTransacSQL()) - ErrorList = New List(Of String) - MensajeAlert = New StringBuilder - - 'GUARDA VENTA - - Dim TieneAnticipo As Boolean = False - Dim CveAnticipoPadre As Integer = 0 ' vinculación con anticipo - Dim FolioFiscalRelacionado As String = "" - 'If GVAnticipos.Rows.Count > 0 Then - ' Dim actualindex As Integer = 0 - ' For Each row2 As GridViewRow In GVAnticipos.Rows - - ' If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then - - ' TieneAnticipo = True - ' CveAnticipoPadre = row2.DataKey("CveVenta").ToEntero() - ' CveAnticipo = CveAnticipoPadre - - ' 'CUANDO ES REFACTURACION DEBE RELACIONAR CON LA FACTURA REFACTURADA - ' If NuevaFactura <> 1 Then - ' ObjFactura.CveVentaRelacion = CveAnticipoPadre 'relaciona al anticipo - ' ObjFactura.ImporteRelacion = row2.FCTextBox($"TxtAnticipo{actualindex}").Text.ToDecimal - ' FolioFiscalRelacionado = row2.DataKey("FolioFiscal") - ' ObjFactura.CveVentaPadre = row2.DataKey("CveVenta").ToEntero() - ' Else - ' ObjFactura.CveVentaRelacion = CveDevolucion - ' End If - - ' End If - ' actualindex = actualindex + 1 - ' Next - 'End If - - Dim EsNCAmortizacion As Boolean = False - - Dim CveVentaAnterior As Integer = Me.CveVenta - - Dim CveTimbreCartaPorte As Integer = -1 - - GuardarVenta(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, ObjFactura, TmpDT, ObjFactura.CveNCaVincular, ObjBancos, ObjOS, - ObjEventos, ObjCGame, ObjClientes, EsNCAmortizacion:=EsNCAmortizacion, CveAnticipoPadre:=CveAnticipoPadre) - - 'If ErrorList.Count = 0 AndAlso ChkEmitirCartaPorte.Checked AndAlso ObjFactura.TipoDocto = "Ing" Then - ' CveTimbreCartaPorte = GuardarCartaPorte(ObjFactura, ObjGeneral, ObjClientes) - ' If CveTimbreCartaPorte <= 0 Then - ' ErrorList.Add("Ocurrió un error al registrar la carta porte") - ' End If - 'End If - - 'Agregamos las OCs a la tabla - If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then - Dim CveVentaDetalle As Integer = 0 - Dim CveOrdenCompraDetalle As Integer = 0 - Dim Cantidad As Decimal = 0 - - For Each row As DataRow In TmpDT.Rows - Cantidad = row("Cantidad").ToString().ToDecimal - CveVentaDetalle = row("CveVentaDetalle").ToString().ToEntero() - CveOrdenCompraDetalle = row("CveOrdenCompraDetalle").ToString().ToEntero() - If Not ObjVentas.AgregarVentaOCDetalle(CveVentaDetalle, CveOrdenCompraDetalle, Cantidad) Then - ErrorList.Add("Ocurrió un Error al agregar el detalle de la Remision") - Exit For - End If - Next - - - - End If - - If Not String.IsNullOrEmpty(TipoDoctoViejo) Then - 'SI VIENE DE UNA AUTORIZACION - If TipoDoctoViejo = "PA" Then - If Not ObjEventos.AddEventoBitacora(String.Format("Se generó una remisión en Folio: {1}", ObjFactura.CveVenta, ObjFactura.SerieFolio), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaAnterior) Then - ErrorList.Add("Ocurrió un error al agregar la bitacora de Póliza Virtual.") - End If - End If - End If - - 'SI ES REFACTURACION - Dim ObjNC As List(Of Object) = Nothing - If ErrorList.Count = 0 Then - If NuevaFactura = 1 Then - 'SI YA ESTA MARCADA LA VENTA ANTERIOR - If DevolucionAlmacenNC = 2 Then - If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then - ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") - End If - - 'MARCAR VENTA ANTERIOR - If Not ObjInventario.ActualizarEsDevolucionVenta(CveDevolucion, 2) Then - ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") - End If - Else - 'MARCA LO PENDIENTE A NIVEL DETALLE - Dim DtMovDetalles As DataTable = Nothing - If ObjInventario.GetSaldoVentaDetalle(CveDevolucion, UsuarioActual.CveEmpresa) Then - DtMovDetalles = ObjInventario.DtResultados.Copy() - Else - ErrorList.Add("No se pudo verificar los movimientos de almacen de la factura") - End If - - 'MARCAR VENTA ANTERIOR - If Not ObjInventario.ActualizarEsDevolucionVenta(CveDevolucion, 2) Then - ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") - End If - - If DtMovDetalles IsNot Nothing Then - - Dim CantidadTotal As Decimal = 0 - Dim TotalSalida As Decimal = 0 - - For Each Row As DataRow In DtMovDetalles.Rows - Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() - Dim SaldoAlmacen As Decimal = Row("SaldoAlmacen").ToString().ToDecimal() - CantidadTotal += Cantidad - - If SaldoAlmacen < 0 AndAlso Cantidad = Math.Abs(SaldoAlmacen) Then - TotalSalida += Math.Abs(SaldoAlmacen) - If Not ObjInventario.UpdateEstatusAlmacen(Row("CveVentaDetalleNueva").ToString().ToEntero(), 1) Then - ErrorList.Add("No se pudo actualizar el movimiento de almacen de la factura") - End If - End If - Next - - 'SI SE VERIFICA QUE TODO ESTA SURTIDO, SE MARCA TODA LA FACTURA - If CantidadTotal = TotalSalida Then - If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then - ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") - End If - End If - End If - - DtMovDetalles.Dispose() - End If - End If - End If - - 'SI ES AMORTIZACION 3.3 - 'Dim ListaNotasCreditoGeneradas As New List(Of Modelos.Factura) - Dim NCDescuento As Boolean = ((ListaNCDesc IsNot Nothing AndAlso ListaNCDesc.Count > 0) OrElse (ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0)) - - Dim SerieFolioNCProntoPago As String = "" - Dim CveVentaNCProntoPago As Integer = -1 - - ''SOLO GENERAR NC POR DESCUENTO PRONTO PAGO SI EL PAGO ES DE CONTADO - 'If ErrorList.Count = 0 AndAlso RBLPago.SelectedValue = "2" AndAlso ObjFactura.DescuentoProntoPago > 0 Then - ' Dim ImportePagado As Decimal = DtPagos.SUMD("Importe") - ' Dim ImporteRNC As Decimal = LblDescuentosRNC.Text.ToDecimal() - - ' If (ImportePagado + ImporteRNC + ObjFactura.DescuentoProntoPago) >= ObjFactura.Total Then - - ' Dim RespFacturaProntoPago As Modelos.MensajeProntoPago = GenerarNCProntoPago(ObjVentas.IniciaTransacSQL(), ObjClientes, ObjFactura) - - ' If RespFacturaProntoPago.ObjFacturaProntoPago Is Nothing OrElse RespFacturaProntoPago Is Nothing Then - ' ErrorList.Add("No se pudo generar la nota de crédito de pronto pago") - ' Else - ' If RespFacturaProntoPago.Mensaje.CveVenta <= 0 OrElse RespFacturaProntoPago.Mensaje.TieneError Then - ' ErrorList.Add("No se pudo generar la nota de crédito de pronto pago") - ' Else - ' CveVentaNCProntoPago = RespFacturaProntoPago.Mensaje.CveVenta - ' SerieFolioNCProntoPago = RespFacturaProntoPago.Mensaje.SerieFolio - - ' ListaNotasCreditoGeneradas.Add(RespFacturaProntoPago.ObjFacturaProntoPago) - ' End If - ' End If - ' Else - ' ErrorList.Add("No se pudo generar la nota de crédito de pronto pago, no coiciden los pagos con el total a pagar de la factura") - ' End If - 'End If - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ErrorList.Count = 0 AndAlso ObjFactura.TipoDocto = "Ing" Then - Dim RowVenta As DataRow = Nothing - If ObjVentas.GetVenta(ObjFactura.CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then - RowVenta = ObjVentas.DtResultados.Rows(0) - Else - ErrorList.Add("No se pudieron validar los datos de la venta") - End If - - If RowVenta IsNot Nothing Then - 'SI FUE VENTA DE CONTADO VALIDA QUE SE HAYA PAGADO EN SU TOTALIDAD - If RowVenta("CondicionesPago").ToString().ToEntero() = 0 AndAlso RowVenta("Saldo").ToString().ToDecimal() > 0.01D Then - ErrorList.Add("La venta no fue pagada en su totalidad") - End If - Else - ErrorList.Add("No se pudieron validar los datos de la venta") - End If - End If - - 'MARCA PARA NO SURTIR VENTA DE COTNRATO DE CONSIGNACION DE VENTA | [IPP] : PARCHE - If ErrorList.Count = 0 Then - If ObjFactura.CveVenta > 0 And CveAlmacenExistenciasContrato > 0 And DdlTipoComprobante.SelectedValue = "Ing" Then - If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then - ErrorList.Add("No se pudo cancelar el movimiento de almacen de la Factura de consignación") - End If - End If - End If - - - - If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 Then - - 'ACTUALIZA VENTA COTIZACIÓN - If EraCotizacion = 1 And BtnEmitirImprimir.Text = "Facturar" Then - If Not ObjVentas.UpdateVentaCotizacion(ObjFactura.CveVenta, Request("CveVenta").ToEntero()) Then - ErrorList.Add("Ocurrió un error al actualizar la cotización") - End If - End If - - 'ACTUALIZA VENTAPADRE PEDIDO - If Request("DevPed").ToEntero() > 0 AndAlso ErrorList.Count = 0 Then - If Not ObjVentas.UpdateVentaCotizacion(Request("DevPed").ToEntero(), ObjFactura.CveVenta) Then - ErrorList.Add("Ocurrió un error al actualizar la devolución de pedido") - End If - End If - - 'ACTUALIZA LA COLUMNA CveVentaFacturada - If (Request("CveRemision") IsNot Nothing AndAlso ViewState("CveRemision").ToString().ToEntero() > 0) AndAlso (Request("Op") IsNot Nothing AndAlso Request("Op") = "Rem") AndAlso ErrorList.Count = 0 Then - If Not ObjVentas.UpdateVentaRemision(ViewState("CveRemision").ToString().ToEntero(), ObjFactura.CveVenta) Then - ErrorList.Add("Ocurrió un error al actualizar la remision") - End If - End If - - 'Agregamos las Cotizaciones a la tabla - If DtCotizacionesPS IsNot Nothing AndAlso DtCotizacionesPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then - Dim CveVentaDetalle As Integer = 0 - Dim CveVentaDetallePadre As Integer = 0 - Dim Cantidad As Decimal = 0 - Dim CvePS As Integer = 0 - Dim PU As Decimal = 0 - - For Each row As DataRow In DtCotizacionesPS.Rows - Cantidad = DtCotizacionTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToDecimal - CvePS = DtCotizacionTmpDT.FiltroPrimeroValor("CvePS", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToEntero() - PU = DtCotizacionTmpDT.FiltroPrimeroValor("PU", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToDecimal - CveVentaDetalle = TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToEntero() - CveVentaDetallePadre = row("CveVentaDetalle").ToString().ToEntero() - - If Not ObjVentas.AgregaCotizacionDetalle(CveVentaDetalle, CveVentaDetallePadre, Cantidad) Then - ErrorList.Add("Ocurrió un Error al agregar el detalle de la Cotización.") - End If - Next - End If - - 'Marcamos las ventas anteriores a febrero como surtidas - Ajuste Compu - If ErrorList.Count = 0 Then - If Not ObjVentas.MarcarRemisionesSinSurtir(ObjVentas.CveVenta) Then - ErrorList.Add("Ocurrió un Error al marcar la factura") - End If - End If - - - - 'If CveFactura > 0 AndAlso ErrorList.Count = 0 Then - ' If Not ObjVentas.UpdateVentaFacturas(CveFactura, ObjVentas.CveVenta, UsuarioActual.CveEmpresa) Then - ' ErrorList.Add("No se pudo actualizar la Factura") - ' End If - 'End If - - 'If CveCicloComercial > 0 AndAlso ErrorList.Count = 0 Then - ' If Not ObjContr.CicloComercialUpdate(CveCicloComercial, True, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then - ' ErrorList.Add("No se pudo actualizar ") - ' End If - 'End If - - - - 'MARCAR LA FACTURA ANTERIOR - If (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then - If Me.ObjFacturaNC IsNot Nothing Then - If Me.ObjFacturaNC.CveEstatusRefacturacion = 4 AndAlso Not ObjVentas.UpdateEstatusVenta(ObjFacturaNC.CveVenta, ObjFacturaNC.CveEstatusFactura, UsuarioActual.CveEmpresa, CveEstatusRefacturacion:=5) Then - ErrorList.Add("No se actualizó el estatus de la factura anterior.") - End If - End If - End If - - 'ContPAQ El movimiento 1 es el de Venta - Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" - AutoConta = AutocontaMatriz(AutoConta) - - If DdlTipoComprobante.SelectedValue.Contiene("Rem", "RNC", "Cot", "Ped", "Pd2", "PA") Then - AutoConta = False - End If - - If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then - AutoConta = False - End If - - If UsuarioActual.CveEmpresa = 140 Then - AutoConta = True - End If - - Try - If AutoConta Then - If Not ObjConta.ContabilizarPrePoliza(ObjFactura.CvePrePoliza, ObjFactura.CveUsuario, UsuarioActual.Empresa) Then - ErrorList.Add("Ocurrió un error al contabilizar, pongase en contacto con soporte técnico") - End If - End If - Catch ex As Exception - ErrorList.Add("Ocurrió un error al contabilizar, pongase en contacto con soporte técnico") - OnError("Ocurrió un error al contabilizar la factura", ex) - End Try - - If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso (SeGuardoPrePoliza Or ObjFactura.TipoDocto.Contiene("Ped", "Cot", "DPe", "PeC", "PA", "Pd2")) Then - ObjVentas.Commit() - - ObjFactura.DtDetalle = TmpDT 'actualiza por cambios de pedimentos. - ObjFactura.Timbre = PreParaTimbre(ObjFactura) - - Try - ViewState("CveVenta") = ObjFactura.CveVenta - - If Request("CveEmbarqueManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveEmbarqueManifiesto")) AndAlso Request("CveEmbarqueManifiesto").ToEntero() > 0 Then - - If ObjVentas.Embarque_ManifiestoUpvta(ObjFactura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Request("CveEmbarqueManifiesto").ToEntero()) Then - - End If - End If - Catch ex As Exception - OnError("Ocurrió un error al actualizar el embarque", ex) - End Try - Try - ViewState("CveVenta") = ObjFactura.CveVenta - - If Request("CveOrdenProduccion") IsNot Nothing AndAlso IsNumeric(Request("CveOrdenProduccion")) AndAlso Request("CveOrdenProduccion").ToEntero() > 0 Then - - If ObjVentas.AgroOrdenProduccionUpvta(ObjFactura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Request("CveOrdenProduccion").ToEntero()) Then - - End If - End If - Catch ex As Exception - OnError("Ocurrió un error al actualizar la orden de producción", ex) - End Try - - Try - Dim DirectoriArchivoXML As String = String.Format("{0}{1}", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto) ' System.IO.Path.Combine() - If Not Directory.Exists(DirectoriArchivoXML) Then - Directory.CreateDirectory(DirectoriArchivoXML) - End If - Catch ex As Exception - OnError("Ocurrió un error al generar el directorio de xml", ex) - End Try - - - Dim SeTimbro As Boolean = False - Dim SeTimbroNC As Boolean = False - Dim EstatusSMS As Integer = 0 - - Dim MsgCancelacionRefacturacion As Modelos.Factura.MCancelacionVentaMensaje = Nothing - - 'TIMBRADO Y CASO ESPECIAL NOTA DE CREDITO - If (TipoDoctoDevolucion = "" OrElse Not TipoDoctoDevolucion.Contiene("Rem", "RNC", "Cot", "Ped", "DPe", "PA", "Pd2")) Then - - Dim DebeTimbrar As Boolean = True - If UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then - 'si tiene anticipos seleccionados y el total es cero, que no se timbre(previo empresa72) - If LblAmortizacion.Text.ToDouble > 0 And TxtTotal.Text.ToDouble <= 0 Then - DebeTimbrar = False - End If - End If - - - If UsuarioActual.TienePermisoProceso(335) Then - DebeTimbrar = False - End If - - DebeTimbrar = False - - If DebeTimbrar AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Egs", "Ant", "Dev") Then - If UsuarioActual.Empresa.TipoFacturacion = "CFDi" AndAlso (UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1) Then - - 'FACTURA INGRESO/EGRESO - Dim FM As New Modelos.FemsaFactura - Dim TmpDT7Eleven As New DataTable - Dim TmpDTComplementosTimbrado As New DataTable - - Dim ObjTimbrado As New Timbrado - Try - 'If AplicaFEMSA Then - ' PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) - 'End If - If DebeTimbrar Then - SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) - End If - Catch ex As Exception - OnError("Ocurrió un error al generar el timbrado", ex) - End Try - - Dim FolioFiscalFactura As String = ObjTimbrado.UUID - Dim MsgErrorTimbrado As String = ObjTimbrado.MensajeErrorCFDI - ObjTimbrado = Nothing - - 'NOTA DE CREDITO - REFACTURADA - CASO ESPECIAL, TIMBRADO E IMPRESION - 'If DebeTimbrar AndAlso SeTimbro AndAlso ListaNotasCreditoGeneradas IsNot Nothing AndAlso ListaNotasCreditoGeneradas.Count > 0 Then - ' Try - ' For Each NCGenerada As Modelos.Factura In ListaNotasCreditoGeneradas - ' If NCGenerada.Timbre IsNot Nothing Then - ' NCGenerada.Timbre.CFDIRelacionados.UUID.Clear() - ' NCGenerada.Timbre.CFDIRelacionados.UUID.Add(FolioFiscalFactura) - - ' Dim ObjTimbradoNC As New Timbrado - ' Dim TimbroNC As Boolean = ObjTimbradoNC.TimbrarFactura(UsuarioActual, NCGenerada) - - ' If Not TimbroNC Then - ' Alert(ObjTimbradoNC.MensajeErrorCFDI, TipoMensaje.MsgError) - ' End If - ' ObjTimbradoNC = Nothing - ' End If - ' Next - ' Catch ex As Exception - ' OnError("Ocurrió un error al timbrar la NC.", ex) - ' End Try - 'End If - - If Not SeTimbro Then - Alert(MsgErrorTimbrado, TipoMensaje.MsgError) - End If - - 'CANCELAR FACTURA ANTERIOR - Try - If SeTimbro AndAlso (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then - If Me.ObjFacturaNC IsNot Nothing AndAlso Me.ObjFacturaNC.CveEstatusFactura <> 5 Then - Me.ObjFacturaNC.CveEstatusRefacturacion = 2 'MARCAR COMO REFACTURADA - MsgCancelacionRefacturacion = Me.ObjFacturaNC.CancelarPorRefacturacion(Me.ObjFacturaNC.CveMotivoCancelacion, Me.ObjFacturaNC.MotivoCancelacion, FolioFiscalFactura) - End If - End If - Catch ex As Exception - OnError("Ocurrió un error al cancelar la factura anterior.", ex) - End Try - - End If - End If - - End If - - - - 'MENSAJE PRINCIPAL - MensajeAlert.AppendFormat(String.Format("
    La {0}: {1} se generó correctamente.

    ", ObjFactura.TipoDocumento, ObjFactura.SerieFolio)) - - - ' DESCARGA XML - SI SE TIMBRA MANDA CORREO CON FACTURA - If SeTimbro Then - Dim ArchivoXML As String = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) - If File.Exists(ArchivoXML) Then - MensajeAlert.AppendFormat("", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) - End If - - Try - 'MANDA CORREO - Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) - Dim Factura As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) - Dim Hilo As New System.Threading.Thread(Sub() GeneraPDFFactura(False, Factura, UsuarioActual, strURLHOST)) - Hilo.Start() - Catch ex As Exception - OnError("Ocurrió un error al enviar el PDF", ex) - End Try - End If - - 'DESCARGA PDF - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant", "Egs", "Dev", "Pd2") Then - 'If Not ImprimeAlert Then - - Dim ArchivoIngPyMe As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.mrt", UsuarioActual.Empresa.Ruta)) - Dim ArchivoIng As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta)) - Dim ArchivoRem As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta)) - Dim ArchivoEgs As New System.IO.FileInfo(String.Format("{0}Formatos/NotaCredito.rdlc", UsuarioActual.Empresa.Ruta)) - - If ArchivoIng.Exists Or ArchivoRem.Exists Or ArchivoIngPyMe.Exists Or ArchivoEgs.Exists Then - MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) - Else - MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") - End If - End If - - 'CRM - If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then - - Dim ArchivoCotRdlc As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.rdlc", UsuarioActual.Empresa.Ruta)) - Dim ArchivoCotMrt As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) - - If ArchivoCotRdlc.Exists Or ArchivoCotMrt.Exists Then - MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) - If ChkEnviarFacturaCRM.Checked AndAlso CorreoContactoCRM.Trim.Length > 0 Then - Try - Dim pdfCRM As Byte() = Nothing - 'If CveVenta > 0 Then - ' ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False) - 'End If - pdfCRM = PdfFactura(ObjFactura) - - If pdfCRM IsNot Nothing Then - Dim SerieFolioCRM As String = ObjFactura.SerieFolio - Dim TipoDoctoCRM As String = ObjFactura.TipoDocto - GeneraPDFCotizacion(True, CorreoContactoCRM:=CorreoContactoCRM, pdfCRM:=pdfCRM, SerieFolioCRM:=SerieFolioCRM, TipoDoctoCRM:=TipoDoctoCRM) - End If - - Catch ex As Exception - OnError("Ocurrió un error al enviar el PDF", ex) - End Try - End If - Else - MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") - End If - End If - - If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then - - Dim ArchivoCotRdlc As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.rdlc", UsuarioActual.Empresa.Ruta)) - Dim ArchivoCotMrt As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) - - If ArchivoCotRdlc.Exists Or ArchivoCotMrt.Exists Then - MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) - Else - MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") - End If - End If - - 'ERROR DE NO TIMBRADO - If Not SeTimbro And (DdlTipoComprobante.SelectedValue = "Ing" Or DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") Or DdlTipoComprobante.SelectedValue = "Ant") Then - MensajeAlert.AppendFormat("La factura no se pudo timbrar. Por favor intentelo de nuevo a traves del boton Emitir.") - End If - - 'ERROR DE NO TIMBRADO NC - If Not IsNothing(ObjNC) AndAlso ObjNC.Count > 0 AndAlso Not SeTimbroNC Then - MensajeAlert.AppendFormat("
    La NC #{0} no se pudo timbrar. Por favor intentelo de nuevo a traves del boton Emitir.", CType(ObjNC(0), Modelos.Factura).SerieFolio) - End If - - 'NOTIFICACION DE SMS - Select Case EstatusSMS - Case 1 - MensajeAlert.AppendFormat("
    Notificación SMS: enviado con éxito al cliente al celular: {0}", ObjFactura.Cliente.CobranzaTelefono) - Case 2 - MensajeAlert.AppendFormat("
    Notificación SMS: sin enviar. Ocurrió un error en el envío, por favor verifique la información del cliente.") - Case 3 - MensajeAlert.AppendFormat("
    Notificación SMS: sin enviar. No se pudo cargar el celular del cliente, por favor verifique la información del cliente.") - End Select - - - If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then - RegistraScript($"window.location.href = '/Compras/PopUpVerFactura.aspx?P={Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", CveVenta))}'", "Imprimir") - End If - - 'DESCARGAR PDF DE CICOVISA - 'If UsuarioActual.CveEmpresa = 72 And CveCliente = 70381 Then - ' If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then - ' MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=CIC&CVEVENTA={0}", CveVenta))) - ' End If - 'End If - - - 'MOVIMIENTO DE ALMACEN - If ObjFactura.Inv_CveMovimiento > 0 Then - MensajeAlert.AppendFormat("

    Movimiento de Almacén
    ", ObjFactura.Inv_CveMovimiento) - End If - - If CveVentaNCProntoPago > 0 Then - MensajeAlert.AppendFormat(String.Format("
    La nota de crédito {0} por descuento pronto pago se generó correctamente.

    ", SerieFolioNCProntoPago)) - End If - - If MsgCancelacionRefacturacion IsNot Nothing Then - If Not MsgCancelacionRefacturacion.HuboError Then - If MsgCancelacionRefacturacion.CveEstatus = 5 Then - MensajeAlert.AppendFormat("
    El folio {0} fue cancelado. Descargar Acuse", Me.ObjFacturaNC.SerieFolio, Encripta(String.Format("OP=CAN&CVEVTA={0}", Me.ObjFacturaNC.CveVenta))) - MensajeAlert.AppendFormat(" Enviar Acuse.

    ", Me.ObjFacturaNC.CveVenta) - ElseIf MsgCancelacionRefacturacion.CveEstatus = 20 Then - MensajeAlert.AppendFormat("
    El folio {0} esta en proceso de cancelación. Descargar Acuse", Me.ObjFacturaNC.SerieFolio, Encripta(String.Format("OP=CAN&CVEVTA={0}", Me.ObjFacturaNC.CveVenta))) - MensajeAlert.AppendFormat(" Enviar Acuse.

    ", Me.ObjFacturaNC.CveVenta) - Else - MensajeAlert.AppendFormat("
    El folio {0} no fue cancelado. Intente mas tarde cancelar el documento Ver en el reporte", Me.ObjFacturaNC.SerieFolio, Me.ObjFacturaNC.CveVenta) - End If - Else - MensajeAlert.AppendFormat("
    El folio {0} no fue cancelado. Intente mas tarde cancelar el documento Ver en el reporte", Me.ObjFacturaNC.SerieFolio, Me.ObjFacturaNC.CveVenta) - End If - End If - - 'MUESTA ALERT OK - ' si es elrol 1165-Ventas,EMp:80, o la empresa 119, recarga ventas, para seguir registrando-. - 'Dim Liga = If(UsuarioActual.CveRol = 1165 Or UsuarioActual.CveEmpresa = 119, "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";", If(CveEmpresaCRM > 0, $"document.location.href=""/CRM/EmpresaCRM.aspx?CveEmpresaCRM={CveEmpresaCRM}"";", $"document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";")) - 'Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga) - - Dim Liga As String = "" - Dim Liga2 As String = "" - - If Request("CveCliente") IsNot Nothing AndAlso Request("CveCliente").ToEntero > 0 Then - Liga = $"document.location.href=""/Ventas/Ventas.aspx?CveCliente={Request("CveCliente")}"";" - Else - Liga = "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";" - End If - - If CveEmpresaCRM > 0 Then - Liga2 = $"document.location.href=""/CRM/EmpresaCRM.aspx?CveEmpresaCRM={CveEmpresaCRM}"";" - Else - Liga2 = $"document.location.href=""/Ventas/Clientes.aspx?CveCliente={CveCliente}"";" - End If - - If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then - Liga = $"document.location.href=""/CRM/Acercamiento.aspx?CveAcercamiento={CveAcercamientoCRM}&OPTAB=COT"";" - Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga, TextoConfirmacion:="Aceptar", TextoSegundoBoton:=Nothing, JSBtn2:=Nothing, ShowCloseButton:=False) - Else - Alert(MensajeAlert.ToString(), TipoMensaje.MsgDosBotones, Liga, TextoConfirmacion:="Seguir Registrando", TextoSegundoBoton:="Ir al Cliente", JSBtn2:=Liga2, ShowCloseButton:=False) - End If - - MensajeAlert.Clear() - - Try - - BtnEmitirImprimir.Visible = False - ObjFactura = Nothing - Catch ex As Exception - OnError("Ocurrió un error al limpiar los datos", ex) - End Try - - Else - ObjVentas.RollBack() - - For Each ErrorItem As String In ErrorList - Alert(ErrorItem, TipoMensaje.MsgAdvertencia) - Next - - 'MUESTA ALERT ERROR - Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) - End If - - ObjVentas.Dispose() - ObjConta.Dispose() - ObjInventario.Dispose() - ObjCGame.Dispose() - ObjContr.Dispose() - ObjDocCliente.Dispose() - ObjAcum.Dispose() - 'ObjFolios.Dispose() - ErrorList.Clear() - ErrorList = Nothing - MensajeAlert = Nothing - TmpDT = TmpDTError.Copy - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - - Else - ObjVentas.RollBack() - - For Each ErrorItem As String In ErrorList - Alert(ErrorItem, TipoMensaje.MsgAdvertencia) - Next - - 'MUESTA ALERT ERROR - Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) - ObjVentas.Dispose() - ObjConta.Dispose() - ObjInventario.Dispose() - ObjCGame.Dispose() - ObjContr.Dispose() - ObjDocCliente.Dispose() - 'ObjFolios.Dispose() - ErrorList.Clear() - ErrorList = Nothing - MensajeAlert = Nothing - - TmpDT = TmpDTError.Copy - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - End If - ObjFactura = Nothing - 'ListaNotasCreditoGeneradas = Nothing - End If - - End If - End Sub - - Private Function AutocontaMatriz(AutoConta As Boolean) As Boolean - Dim Respuesta As Boolean = False - - If UsuarioActual.CveEmpresa.Contiene(13, 83) Then - Dim DTSubproyectoActual As DataTable = GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero) - - If (DTSubproyectoActual.Rows(0)("TipoSucursal").ToString.ToEntero = 1) Then - Respuesta = True - Else - Respuesta = False - End If - - Else - Respuesta = AutoConta - End If - - Return Respuesta - - End Function - - Private Sub CreaObjetosVenta(Optional VistaPrevia As Boolean = False, Optional EsCancelacion As Boolean = False, Optional TipoDoctoViejo As String = "") - - If Me.CveVenta > 0 AndAlso NuevaFactura <> 1 Then - ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=EsCancelacion) - Else - ObjFactura = New Modelos.Factura - End If - - ObjFactura.Version = "4.0" - If ObjFactura.Cliente Is Nothing Then ObjFactura.Cliente = New Modelos.ClienteModel - - ObjFactura.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal - ObjFactura.Cliente.RegimenFiscal = ClienteRegimenFiscal - - ObjFactura.CveUsuario = UsuarioActual.CveUsuario - ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa - ObjFactura.TipoCambio = If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) - ObjFactura.TipoCambioDolares = TxtTipoCambioDlls.Text.Trim.ToDecimal - ObjFactura.ConvertirPesos = ChkConvertirDoctoPesos.Checked - ObjFactura.ConvertirDolares = ChkConvertirDolares.Checked - ObjFactura.CveMoneda = DdlMoneda.SelectedValue.ToEntero() - ObjFactura.Moneda = DdlMoneda.SelectedItem.Text - ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DdlMoneda.SelectedValue}") - ObjFactura.TipoDocto = If(IfNull(ViewState("CveRemision"), 0).ToString().ToEntero() > 0, "Ing", DdlTipoComprobante.SelectedValue) - ObjFactura.FacturarSucursal = (Me.FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso Not String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) - ObjFactura.VentaDesglosaIEPS = Me.VentaDesglosaIEPS - - If EsCreaApartirDe Then - ViewState("EstablecioFolio") = False - End If - - 'si es cancelacion, debe de conservar el folio actual - - - ''SI NO ESTABLECIO UN FOLIO FIJO Y SI ES FACTURACION DE REMISION O COTIZACION NO TOMAR EL FOLIO QUE SE MUESTRA - 'If Not EstablecioFolio AndAlso (Not EsCancelacion AndAlso ObjFactura.Folio > 0 AndAlso TipoDoctoViejo.Contiene("Rem", "Cot")) Then - ' ObjFactura.Folio = -1 - 'End If - - ObjFactura.Folio = Me.FolioActual.ToEntero - ObjFactura.Serie = Me.Serie - - - If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - Dim ObjFolios As New ClsGralFolios() - Dim TipoDoctoConsulta As String = If(ObjFactura.TipoDocto = "Ant", "Ing", If(ObjFactura.TipoDocto = "PA", "Rem", ObjFactura.TipoDocto)) - - If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then - Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) - If DT.Rows.Count > 0 Then - ObjFactura.Serie = DT.Rows(0)("Serie").ToString() - End If - DT.Dispose() - End If - ObjFolios.Dispose() - - End If - - ObjFactura.Fecha = New Date(NowADS.Year, NowADS.Month, NowADS.Day, NowADS().Hour, NowADS().Minute, NowADS().Second) - ObjFactura.CvePrePoliza = -1 - ObjFactura.CveMetodoPago = 0 'DdlMetodoPago.SelectedValue.ToEntero() - ObjFactura.MetodoPago = "" ' DdlMetodoPago.SelectedItem.Text - ObjFactura.ClaveMetodoPagoSAT = GlobalDTMetodosPago.FiltroPrimeroValor("ClaveSAT", $"CveMetodoPago = {DdlMetodoPago33.SelectedValue}") - ObjFactura.FechaVencimiento = NowADS() - - ' If ObjFactura.TipoDocto = "Cot" Then - - ObjFactura.CveMetodoPago33 = DdlMetodoPago33.SelectedValue.ToEntero() - ObjFactura.MetodoPago33 = If(DdlMetodoPago33.SelectedValue.ToEntero() > 0, DdlMetodoPago33.SelectedItem.Text, "") - ObjFactura.ClaveMetodoPagoSAT = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {DdlMetodoPago33.SelectedValue}") - - ObjFactura.CveFormaPago33 = DdlFormaPago33.SelectedValue.ToEntero() - ObjFactura.FormaPago33 = If(DdlFormaPago33.SelectedValue.ToEntero() > 0, DdlFormaPago33.SelectedItem.Text, "") - ObjFactura.FormaPagoSAT33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {DdlFormaPago33.SelectedValue}") - - ObjFactura.CveUsoCFDI = DdlUsoCFDI.SelectedValue.ToEntero() - ObjFactura.UsoCFDI = If(DdlUsoCFDI.SelectedValue.ToEntero() > 0, DdlUsoCFDI.SelectedItem.Text, "") - ObjFactura.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") - ' End If - - ObjFactura.UsuarioCreo = LblUsuario.Text.Trim - ObjFactura.CveCondicionEntrega = --1 - ObjFactura.CondicionEntrega = "-1" - ObjFactura.CondicionesPago = 2 ' 0 - Contado, 1 - Credito, 2 - termianl - ObjFactura.FormaPago = 0 - - ObjFactura.AtencionA = "" - ObjFactura.FordGSDB = "" - - ObjFactura.NumeroContrato = NumeroContrato - ObjFactura.DescripcionContrato = DescripcionContrato - ObjFactura.NumeroDescripcionContrato = If($"{NumeroContrato} - {NumeroLicitacion}" = " - ", "", $"{NumeroContrato} {If(NumeroLicitacion = "", "", $" - Licitación: {NumeroLicitacion}")}") - ObjFactura.PedidoContrato = "" - ObjFactura.OrdenCompra = TxtOrdenCompra.Text.Trim - - Select Case ObjFactura.TipoDocto - Case "Ing" - ObjFactura.TipoDocumento = "Factura" - Case "Rem" - ObjFactura.TipoDocumento = "Remision" - Case "Cot" - ObjFactura.TipoDocumento = "Cotizacion" - Case "Egs" - ObjFactura.TipoDocumento = "Nota de Crédito" - Case "Dev" - ObjFactura.TipoDocumento = "Nota de Devolución" - Case "DPe" - ObjFactura.TipoDocumento = "Devolución de pedido" - Case "PeC" - ObjFactura.TipoDocumento = "Consignación de Pedido" - Case Else - ObjFactura.TipoDocumento = "" - End Select - - - ObjFactura.Fech1 = NowADS() - ObjFactura.Fech2 = NowADS() - ObjFactura.Fech3 = NowADS() - ObjFactura.Alfa1 = "" - ObjFactura.Alfa2 = "" - ObjFactura.Alfa3 = "" - ObjFactura.Num1 = 0 - ObjFactura.Num2 = 0 - ObjFactura.Num3 = 0 - - If divcondicionespago.Visible Then - ObjFactura.FechaPago = NowADS() - Else - ObjFactura.FechaPago = NowADS() - End If - - ObjFactura.DiasCredito = DiasCredito - ObjFactura.EsDiasCreditoFijo = EsDiasCreditoFijo - - ObjFactura.CveCorte = CveCorte - 'ObjFactura.CveMesa = -1 - ObjFactura.NumeroPersonas = 0 - - - 'If ObjFactura.TipoDocto = "Ant" And DdlContratosModal.SelectedValue.ToEntero > 0 Or ObjFactura.TipoDocto = "Ing" And DdlContratosModal.SelectedValue.ToEntero > 0 Or ObjFactura.TipoDocto = "Egs" And DdlContratosModal.SelectedValue.ToEntero > 0 Then - ' CveContrato = DdlContratosModal.SelectedValue.ToEntero - 'End If - - - ObjFactura.CveContrato = If(CveContrato > 0, CveContrato, CvePresupuesto) - - ObjFactura.CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() - ObjFactura.Entrega = Entrega - ObjFactura.Vigencia = NowADS() - - ObjFactura.CveVentaPadre = If(CveDevolucion > 0, CveDevolucion, If(CvePedido2 > 0, CvePedido2, CvePedido)) - If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then - ObjFactura.CveVentaPadre = DtVentasNC.Rows(0)("CveVenta").ToString().ToEntero() - ObjFactura.SerieFolioPadre = DtVentasNC.Rows(0)("FolioFiscal").ToString() - End If - - If DdlTipoComprobante.SelectedValue = "Dev" AndAlso ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0 Then - Dim ObjRNC As Modelos.Factura = ListaRemisionesNC.FirstOrDefault - If ObjRNC IsNot Nothing Then - ObjFactura.CveVentaPadre = ObjRNC.CveVentaPadre - ObjFactura.SerieFolioPadre = ObjRNC.SerieFolioPadre - End If - End If - - ObjFactura.CveVendedor = -1 - - - ObjFactura.FechaEjecucion = NowADS() - ObjFactura.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() - ObjFactura.CveSubProyectoCobranza = DdlSubProyectoDatos.SelectedValue.ToEntero() - ObjFactura.CveSubProyectoEjecucion = DdlSubProyectoDatos.SelectedValue.ToEntero() - ObjFactura.AtencionA = If(ObjFactura.TipoDocto = "Cot" Or (ObjFactura.TipoDocto.Contiene("Ing", "Rem") AndAlso LblRFC.Text = "XAXX010101000"), "", "-1") - ObjFactura.MotivoDescuento = "" - ObjFactura.Observaciones = TxtObsFact.Text.Trim - ObjFactura.Det_OrdenCompra = "" - ObjFactura.Det_FechaOrdenCompra = "" - ObjFactura.Det_ContraRecibo = "" - ObjFactura.MonedaAbreviatura = "" - - 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS - If (ObjFactura.CveMoneda = 2 AndAlso ObjFactura.ConvertirPesos = True AndAlso ObjFactura.TipodeComprobante = "Ingresos" AndAlso RemisionesLista.Count > 0) Then - Dim TotalCalculableImpuestos, TotalCalculableImpuestosIVA As Decimal - For Each Row As DataRow In TmpDT.Rows - Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * ObjFactura.TipoCambio, 6) - Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble * ObjFactura.TipoCambio, NumeroDecimales) - - TotalCalculableImpuestos = (Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal) - Row("Descuento").ToString().ToDecimal - TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) - Row("IVA") = Row("PorcentajeIVA") - Row("ImporteIVA") = Math.Round(Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA, NumeroDecimales) - Row("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) - Row("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) - Row("ImporteIEPS") = Math.Round(Row("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - Row("IEPS") = Row("ImporteIEPS") - Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Next - - Dim ImpuestosLocales As Double = 0 - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio).FormatoNumero - If gvr.DataKey("TipoImpuesto").ToString() = "5" Then - ImpuestosLocales -= Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) - Else - ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) - End If - - End If - Next - - ObjFactura.SubTotal = TmpDT.SUMD("Total") - ObjFactura.Descuento = TmpDT.SUMD("Descuento") - ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * ObjFactura.TipoCambio, NumeroDecimales) - ObjFactura.IVA = TmpDT.SUMD("ImporteIVA") - ObjFactura.RetIVA = TmpDT.SUMD("ImporteRetIVA") - ObjFactura.RetISR = TmpDT.SUMD("ImporteRetISR") - ObjFactura.IEPS = TmpDT.SUMD("ImporteIEPS") - ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal - - TipoCambioRemision = ObjFactura.TipoCambio - ObjFactura.TipoCambio = 1 - ObjFactura.ConvertirPesos = False - ConversionRemision = "/" - - 'CONVERTIR REMISION - TIPO MONEDA -PESOS A DOLARES - ElseIf (ObjFactura.CveMoneda = 1 AndAlso ObjFactura.ConvertirDolares = True AndAlso ObjFactura.TipodeComprobante = "Ingresos" AndAlso RemisionesLista.Count > 0) Then - - For Each Row As DataRow In TmpDT.Rows - Row("PU") = Math.Round(Row("PU").ToString().ToDouble / ObjFactura.TipoCambioDolares, 6) - Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Next - - Dim ImpuestosLocales As Decimal = 0 - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares).FormatoNumero - ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) - End If - Next - - ObjFactura.SubTotal = TmpDT.SUMD("Total") - ObjFactura.Descuento = TmpDT.SUMD("Descuento") - ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) - ObjFactura.IVA = TmpDT.SUMD("ImporteIVA") - ObjFactura.RetIVA = TmpDT.SUMD("ImporteRetIVA") - ObjFactura.RetISR = TmpDT.SUMD("ImporteRetISR") - ObjFactura.IEPS = TmpDT.SUMD("ImporteIEPS") - ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales) - - TipoCambioRemision = ObjFactura.TipoCambioDolares - ObjFactura.TipoCambioDolares = 1 - ObjFactura.ConvertirDolares = False - ConversionRemision = "*" - - 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS REGISTRO DIRECTO SIN VENTA - ElseIf (EditoRemision = False AndAlso ObjFactura.CveMoneda = 2 AndAlso ObjFactura.ConvertirPesos = True) Then - - Dim TotalCalculableImpuestos, TotalCalculableImpuestosIVA As Decimal - For Each Row As DataRow In TmpDT.Rows - Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * ObjFactura.TipoCambio, 6) - Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble * ObjFactura.TipoCambio, NumeroDecimales) - - TotalCalculableImpuestos = (Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal) - Row("Descuento").ToString().ToDecimal - TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) - Row("IVA") = Row("PorcentajeIVA") - Row("ImporteIVA") = Math.Round(Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA, NumeroDecimales) - Row("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) - Row("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) - Row("ImporteIEPS") = Math.Round(Row("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - Row("IEPS") = Row("ImporteIEPS") - Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Next - - Dim ImpuestosLocales As Double = 0 - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal * ObjFactura.TipoCambio).FormatoNumero - ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) - End If - Next - - ObjFactura.SubTotal = TmpDT.SUM("Total") - ObjFactura.Descuento = TmpDT.SUM("Descuento") - ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * ObjFactura.TipoCambio, NumeroDecimales) - ObjFactura.IVA = TmpDT.SUM("ImporteIVA") - ObjFactura.RetIVA = TmpDT.SUM("ImporteRetIVA") - ObjFactura.RetISR = TmpDT.SUM("ImporteRetISR") - ObjFactura.IEPS = TmpDT.SUM("ImporteIEPS") - ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal - - TipoCambioRemision = ObjFactura.TipoCambio - ObjFactura.TipoCambio = 1 - ObjFactura.ConvertirPesos = False - ConversionRemision = "/" - - 'CONVERTIR REMISION - TIPO MONEDA -PESOS A DOLARES REGISTRO DIRECTO SIN VENTA - ElseIf (EditoRemision = False AndAlso ObjFactura.CveMoneda = 1 AndAlso ObjFactura.ConvertirDolares = True) Then - For Each Row As DataRow In TmpDT.Rows - Row("PU") = Math.Round(Row("PU").ToString().ToDouble / ObjFactura.TipoCambioDolares, 6) - Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) - Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - Next - - Dim ImpuestosLocales As Double = 0 - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares).FormatoNumero - ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) - End If - Next - - ObjFactura.SubTotal = TmpDT.SUM("Total") - ObjFactura.Descuento = TmpDT.SUM("Descuento") - ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) - ObjFactura.IVA = TmpDT.SUM("ImporteIVA") - ObjFactura.RetIVA = TmpDT.SUM("ImporteRetIVA") - ObjFactura.RetISR = TmpDT.SUM("ImporteRetISR") - ObjFactura.IEPS = TmpDT.SUM("ImporteIEPS") - ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal - - TipoCambioRemision = ObjFactura.TipoCambioDolares - ObjFactura.TipoCambioDolares = 1 - ObjFactura.ConvertirDolares = False - ConversionRemision = "*" - - Else - 'Totales, Y se llena TmpDTImpuestos - ObjFactura.SubTotal = TxtSubTotal.Text.ToDecimal - ObjFactura.Descuento = LblDescuentos.Text.Trim.ToDecimal - ObjFactura.Amortizacion = LblAmortizacion.Text.Trim.ToDecimal - ObjFactura.IVA = TxtIVA.Text.ToDecimal - ObjFactura.RetIVA = TxtRetIVA.Text.ToDecimal - ObjFactura.RetISR = TxtRetISR.Text.ToDecimal - ObjFactura.IEPS = TxtIEPS.Text.ToDecimal - ObjFactura.Total = TxtTotal.Text.ToDecimal - End If - - Dim TmpSubtotal As Decimal = TxtSubTotal.Text.ToDecimal - ObjFactura.Descuento - - Dim TmpAmortizacion As Decimal = LblAmortizacion.Text.ToDecimal - - ObjFactura.DtDetalle = TmpDT - - 'If AplicaFord Then - ' ObjFactura.FordGSDB = TxtFordGSDB.Text - - ' Dim SB As New StringBuilder - ' For Each li As ListItem In LstFordASN.Items - ' SB.AppendFormat("{0}, ", li.Text) - ' Next - ' ObjFactura.FordASN = SB.ToString() - 'End If - - If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() - - Dim TmpDTImpuestosVista As DataTable = TmpDTImpuestos.Clone() - - Dim DR As DataRow = TmpDTImpuestosVista.NewRow() - - If TxtSubTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "SubTotal" : DR("Importe") = ObjFactura.SubTotal : DR("Orden") = 10 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - If LblDescuentos.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Descuentos" : DR("Importe") = ObjFactura.Descuento : DR("Orden") = 20 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - If LblAmortizacion.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Amort.Ant" : DR("Importe") = ObjFactura.Amortizacion : DR("Orden") = 30 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - If TxtSubTotal2.Text.ToDecimal <> TxtSubTotal.Text.ToDecimal Then DR("ImpuestoLocal") = "SubTotal 2" : DR("Importe") = TxtSubTotal2.Text.ToDecimal : DR("Orden") = 40 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - - 'If TxtIVA.Text.ToDecimal <> 0 Then - DR("ImpuestoLocal") = "IVA" : DR("Importe") = ObjFactura.IVA : DR("Orden") = 50 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - - If TxtRetIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.IVA" : DR("Importe") = ObjFactura.RetIVA : DR("Orden") = 60 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - If TxtRetISR.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.ISR" : DR("Importe") = ObjFactura.RetISR : DR("Orden") = 70 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - If TxtIEPS.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IEPS" : DR("Importe") = ObjFactura.IEPS : DR("Orden") = 80 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - Dim Orden As Integer = 80 - If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble > 0 Then - DR("ImpuestoLocal") = gvr.DataKey("ImpuestoLocal").ToString() : DR("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble : DR("Orden") = Orden : DR("Porcentaje") = gvr.DataKey("Porcentaje").ToString() : DR("TipoImpuesto") = gvr.DataKey("TipoImpuesto").ToString() : TmpDTImpuestosVista.Rows.Add(DR) - DR = TmpDTImpuestosVista.NewRow() - Orden = Orden + 1 - End If - End If - Next - - If TxtTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Total" : DR("Importe") = ObjFactura.Total : DR("Orden") = 100 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) - - ObjFactura.DtDeduccion = TmpDTImpuestosVista.FiltraParametros("", Orderby:="Orden ASC") - - 'TmpDT DESGLOSE DE IMPUESTOS 3.3 - If UsuarioActual.CveEmpresa.Contiene(119) Then - If TmpDTDocumentosRelacionados IsNot Nothing Then - ObjFactura.DtDocumentosRelacionados = TmpDTDocumentosRelacionados - End If - - If TmpDTNCVinculadas IsNot Nothing Then - ObjFactura.DtNCVinculadas = TmpDTNCVinculadas - End If - End If - - CreaDTImpuestosIVAIEPS() - - For Each DrImpuestos33 As DataRow In TmpDT.Rows - Dim DrIVA As DataRow = Nothing - Dim DrIEPS As DataRow = Nothing - - Try - DrIVA = TmpDTImpuestosIVAIEPS.Select("Impuesto = 'IVA'")(0) - Catch ex As Exception - DrIVA = Nothing - End Try - - If DrIVA IsNot Nothing Then - DrIVA("Importe") = DrIVA("Importe").ToString().ToDouble + DrImpuestos33("ImporteIVA").ToString().ToDouble - TmpDTImpuestosIVAIEPS.AcceptChanges() - Else - Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() - If DrImpuestos33("PorcentajeIVA").ToString().ToDecimal > 0 Then - DR2("Impuesto") = "IVA" : DR2("tasa") = DdlIVA.SelectedItem.ToString() : DR2("Importe") = DrImpuestos33("ImporteIVA").ToString().ToDecimal : DR2("Orden") = "1" - TmpDTImpuestosIVAIEPS.Rows.Add(DR2) - TmpDTImpuestosIVAIEPS.AcceptChanges() - End If - End If - - Try - DrIEPS = TmpDTImpuestosIVAIEPS.Select($"Impuesto = 'IEPS' AND tasa = '{DrImpuestos33("PorcentajeIEPS").ToString().ToDecimal * 100} %'")(0) - Catch ex As Exception - DrIEPS = Nothing - End Try - - If DrIEPS IsNot Nothing Then - DrIEPS("Importe") = DrIEPS("Importe").ToString().ToDouble + DrImpuestos33("ImporteIEPS").ToString().ToDouble - TmpDTImpuestosIVAIEPS.AcceptChanges() - Else - Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() - If DrImpuestos33("PorcentajeIEPS").ToString().ToDouble > 0 Then - DR2("Impuesto") = "IEPS" : DR2("tasa") = String.Format("{0} {1}", DrImpuestos33("PorcentajeIEPS").ToString().ToDouble * 100, "%") : DR2("Importe") = DrImpuestos33("ImporteIEPS").ToString().ToDouble : DR2("Orden") = If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.03", "2", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.06", "3", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.07", "4", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.09", "5", "0")))) - TmpDTImpuestosIVAIEPS.Rows.Add(DR2) - TmpDTImpuestosIVAIEPS.AcceptChanges() - End If - End If - Next - - ObjFactura.DtDesgloseImpuestos = TmpDTImpuestosIVAIEPS.FiltraParametros("", Orderby:="Orden ASC") - - 'otros - 'ObjFactura.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim - 'ObjFactura.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim - 'ObjFactura.Det_ContraRecibo = TxtDet_ContraRecibo.Text.Trim - - ObjFactura.Det_FechaOrdenCompra = "" - ObjFactura.Det_OrdenCompra = "" - ObjFactura.Det_ContraRecibo = "" - ObjFactura.CveNCaVincular = -1 - - If ObjFactura.CveMoneda <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then - ObjFactura.TipoCambio = 1 - ObjFactura.CveMoneda = 1 - - ObjFactura.Moneda = "Pesos" - ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {ObjFactura.CveMoneda}") - End If - - If ObjFactura.CveMoneda <> 2 AndAlso ChkConvertirDolares.Checked Then - ObjFactura.TipoCambio = TxtTipoCambioDlls.Text.Trim.ToDecimal - ObjFactura.CveMoneda = 2 - - ObjFactura.Moneda = "Dólares" - ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {ObjFactura.CveMoneda}") - End If - - 'Se agrega CveVenta -1 - For Each Row As DataRow In TmpDT.Rows - Row("CveVenta") = ObjFactura.CveVenta - Next - - 'DETALLES - ObjFactura.DtDetalle = TmpDT.Copy - ObjFactura.DtFirmas = DTmpF.Copy - - 'CLIENTE - ObjFactura.CveCliente = CveCliente - ObjFactura.SetCliente() - ObjFactura.CveEmpresaCRM = CveEmpresaCRM - If CveCliente = -1 And CveEmpresaCRM > 0 Then - ObjFactura.Cliente.Nombre = LblEmpresaCRM.Text - ObjFactura.Cliente.RFC = LblRFCCRM.Text - End If - - 'SUCURSAL - 'ObjFactura.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() - ObjFactura.SetSubProyectoMatriz(Me) - ObjFactura.SetSubProyecto(Me) - ObjFactura.ClienteSucursal = New Modelos.SucursalModel() - If CveCliente > 0 Then - If Me.ClienteSucursal IsNot Nothing Then - ObjFactura.ClienteSucursal.RFC = Me.ClienteSucursal.RFC - ObjFactura.ClienteSucursal.Nombre = Me.ClienteSucursal.Nombre - End If - ObjFactura.ClienteSucursal.NoExt = CliNoExt - ObjFactura.ClienteSucursal.NoInt = CliNoInt - ObjFactura.ClienteSucursal.Localidad = CliLocalidad - ObjFactura.ClienteSucursal.Direccion = LblDireccion.Text - ObjFactura.ClienteSucursal.Colonia = LblColonia.Text - ObjFactura.ClienteSucursal.Municipio = LblCiudad.Text - ObjFactura.ClienteSucursal.Estado = LblEstado.Text - ObjFactura.ClienteSucursal.CP = LblCP.Text - ObjFactura.ClienteSucursal.Pais = CliPais - ObjFactura.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() - ObjFactura.ClienteSucursal.TelefonoSucursal = LblTelefono.Text - ObjFactura.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") - ObjFactura.ClienteSucursal.ImprimeNombreSucursal = ImprimeNombreSucursal.ToString() - End If - - 'ENVIO DIRECCION - ObjFactura.EnviarA = New Modelos.EnviarAModel - 'If ChkDireccionEnvio.Checked Then - ' If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then - ' For Each Row As DataRow In TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows - ' ObjFactura.EnviarA.CveDireccionEnvio = Row("CveDireccionEnvio").ToString().ToEntero() - ' ObjFactura.EnviarA.EnvioDireccion = Row("EnvioDireccion").ToString() - ' ObjFactura.EnviarA.EnvioNoExt = Row("EnvioNoExt").ToString() - ' ObjFactura.EnviarA.EnvioNoInt = Row("EnvioNoInt").ToString() - ' ObjFactura.EnviarA.EnvioColonia = Row("EnvioColonia").ToString() - ' ObjFactura.EnviarA.EnvioCiudad = Row("EnvioCiudad").ToString() - ' ObjFactura.EnviarA.EnvioEstado = Row("EnvioEstado").ToString() - ' ObjFactura.EnviarA.EnvioCP = Row("EnvioCP").ToString() - ' ObjFactura.EnviarA.EnvioTel = Row("EnvioTel").ToString() - ' ObjFactura.EnviarA.EnvioContacto = Row("EnvioContacto").ToString() - ' ObjFactura.EnviarA.EnvioDepartamento = Row("EnvioDepartamento").ToString() - ' 'ObjFactura.EnviarA.EnvioPedidoContrato = Row("EnvioPedidoContrato").ToString() - ' Next - ' End If - 'End If - - 'Amortizacion - ObjFactura.CveTipoRelacion = -1 - - 'If ObjFactura.CveTipoRelacion > 0 Then - ' Select Case ObjFactura.CveTipoRelacion - ' Case 7 - ' ObjFactura.Timbre.CFDIRelacionados.TipoRelacion = "07" - ' ObjFactura.Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" - - ' If ListaAnticiposAplicados IsNot Nothing Then - ' For Each Ant As Modelos.MAnticipoRelacionado In ListaAnticiposAplicados - ' ObjFactura.Timbre.CFDIRelacionados.UUID.Add(Ant.FolioFiscal) - ' Next - ' End If - - ' 'ObjFactura.Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) - ' End Select - - 'End If - - ObjFactura.AplicaDevolucion = Me.AplicaDevolucion - ObjFactura.CveTipoAmortizacionAnticipo = -1 - - If ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso NuevaFactura = 1 Then ' refacturación - ObjFactura.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() - End If - - - - ' If CveCliente > 0 Then ObjFactura.Timbre = PreParaTimbre(ObjFactura) - - 'SI SE ESTA EDITANDO ACTUALIZA LOS IMPORTES DEL DT - If GvImpuestosLocales2.Visible AndAlso GvImpuestosLocales2.Enabled Then - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - - Dim DrsImpuestos As DataRow() = TmpDTImpuestos.Select($"CveImpuestoLocal={gvr.DataKey("CveImpuestoLocal")}") - - If DrsImpuestos IsNot Nothing AndAlso DrsImpuestos.Length = 1 Then - DrsImpuestos(0)("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble - End If - - End If - Next - End If - - 'INE COMPLEMENTO - 'If RblComplementos.SelectedValue.ToEntero() > 0 Then - ' ObjFactura.CveComplementoTimbrado = RblComplementos.SelectedValue.ToEntero() - ' Dim INE As New Modelos.ComplementoINE - ' Select Case RblComplementos.SelectedValue.ToEntero() - ' Case 5 - ' INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() - ' INE.INETipoProceso = "Ordinario" - ' INE.INETipoComite = "Directivo Estatal" - ' INE.INEEntidad = DdlINEEntidad.SelectedValue - ' Case 6 - ' INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() - ' INE.INETipoProceso = "Ordinario" - ' INE.INETipoComite = "Ejecutivo Estatal" - ' INE.INEEntidad = DdlINEEntidad.SelectedValue - ' Case 7 - ' INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() - ' INE.INETipoProceso = "Ordinario" - ' INE.INETipoComite = "Ejecutivo Nacional" - ' Case 8 - ' INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() - ' INE.INETipoProceso = DdlTipoCampaña.SelectedValue - ' INE.INETipoComite = DdlAmbitoComplemento.SelectedValue - ' INE.INEEntidad = DdlINEEntidad.SelectedValue - ' Case Else - ' INE.INEIdContabilidad = 0 - ' INE.INETipoProceso = "" - ' INE.INETipoComite = "" - ' INE.INEEntidad = "" - ' End Select - ' ObjFactura.ComplementoINE = INE - 'End If - - ObjFactura.CveTipoRetencion = DdlTipoRetencion.SelectedValue.ToEntero() - ObjFactura.DescuentoProntoPago = HdnProntoPago.Value.ToDecimal() - - ObjFactura.NuevaFactura = Me.NuevaFactura - - ObjFactura.EsGarantia = Me.EsGarantia - - 'ASIGNAR RFC RECEPTOR - If ObjFactura.Timbre IsNot Nothing Then - If ObjFactura.Timbre.Receptor IsNot Nothing Then - ObjFactura.RFCReceptor = ObjFactura.Timbre.Receptor.RFC - End If - End If - - ObjFactura.DtMercancias = DtMercancias - End Sub - - Private Function PreParaTimbre(Obj As Modelos.Factura) As CFDITimbre - Dim Timbre As New CFDITimbre - Timbre.Comprobante.Version = "4.0" - Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", "")) - Timbre.Comprobante.Folio = Obj.Folio.ToString() - Timbre.Comprobante.Serie = Obj.Serie - Timbre.Comprobante.Fecha = Obj.FechaCP - Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33 - Timbre.Comprobante.CondicionesdePago = If(UsuarioActual.CveEmpresa.Contiene(15, 76), "No Aplica", Obj.FormaPago33) - Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT - Timbre.Comprobante.SubTotal = Obj.SubTotal - Timbre.Comprobante.Descuentos = Obj.Descuento - Timbre.Comprobante.Moneda = Obj.MonedaSAT - Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString()) - Timbre.Comprobante.Total = Obj.Total - - Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP - If Timbre.Comprobante.LugarExpedicion = "" Then - Dim aa As String = "no se guardo lugar de expedicion" - aa.GuardaLog() - End If - - Timbre.Comprobante.Confirmacion = "" - - If Obj.FacturarSucursal Then - Timbre.Receptor.RFC = Obj.ClienteSucursal.RFC - Timbre.Receptor.Nombre = Obj.ClienteSucursal.Nombre - Timbre.Receptor.DomicilioFiscalReceptor = Obj.ClienteSucursal.CP - Else - Timbre.Receptor.RFC = Obj.Cliente.RFC - Timbre.Receptor.Nombre = Obj.Cliente.Nombre - Timbre.Receptor.DomicilioFiscalReceptor = Obj.Cliente.CP - End If - - Timbre.Receptor.RegimenFiscalReceptor = Obj.Cliente.CodigoRegimenFiscal - - Timbre.Receptor.ResidenciaFiscal = "" - Timbre.Receptor.NumeroRegistroTributario = "" - Timbre.Receptor.UsoCFDI = Obj.ClaveUsoCFDI - - Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", "")) - - If Timbre.Comprobante.TipoComprobante = "E" Then - If Obj.TipoDocto = "Egs" Then - Timbre.CFDIRelacionados.TipoRelacion = "01" - Timbre.CFDIRelacionados.TipoRelacionTexto = "Nota de Crédito aplicada a Ingreso" - - End If - If Obj.TipoDocto = "Dev" Then - Timbre.CFDIRelacionados.TipoRelacion = "03" - Timbre.CFDIRelacionados.TipoRelacionTexto = "Devolución aplicada a Ingreso" - End If - Obj.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() - 'If HdnFolioFiscalNC.Value <> "0" And HdnFolioFiscalNC.Value <> "" Then Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) - End If - - ' cuando es refacturacoin es cfdirelacionado, con relacion 04 - 'If Timbre.Comprobante.TipoComprobante = "I" AndAlso NuevaFactura = 1 Then - ' Timbre.CFDIRelacionados.TipoRelacion = "04" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "Refacturación de Ingreso" - ' Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) - 'End If - - 'If HdnTipoDescuento.Value = "3" And DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() > 0 Then - - ' Timbre.CFDIRelacionados.TipoRelacion = "07" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" - 'Else - ' 'SI LA FACTURA VIENE DE SER CANCELADA SISTEMA CUANDO SE REFACTURO NO HAY QUE RELACIONAR - ' If (CveEstatusFacturaPadre > 0 AndAlso CveEstatusFacturaPadre <> 4) OrElse (DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0) OrElse HdnFolioFiscalNC.Value.ToString() <> "" Then - ' If Obj.CveTipoRelacion > 0 Then - - ' Select Case Obj.CveTipoRelacion - ' Case 1 - ' Timbre.CFDIRelacionados.TipoRelacion = "01" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "01-Nota de Crédito aplicada a Ingreso" - ' Case 2 - ' Timbre.CFDIRelacionados.TipoRelacion = "02" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "02-Nota de débito de los documentos relacionados" - ' Case 3 - ' Timbre.CFDIRelacionados.TipoRelacion = "03" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "03-Devolución aplicada a Ingreso" - ' Case 4 - ' Timbre.CFDIRelacionados.TipoRelacion = "04" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "04-Sustitución de los CFDI Previos" - ' Case 7 - ' Timbre.CFDIRelacionados.TipoRelacion = "07" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" - ' Case 8 - ' Timbre.CFDIRelacionados.TipoRelacion = "08" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "08-Factura generada por pagos en parcialidades " - ' Case 9 - ' Timbre.CFDIRelacionados.TipoRelacion = "09" - ' Timbre.CFDIRelacionados.TipoRelacionTexto = "09-Factura generada por pagos diferidos" - ' End Select - - ' If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then - ' For Each Dr As DataRow In DtVentasNC.Rows - ' Timbre.CFDIRelacionados.UUID.Add(Dr("FolioFiscal").ToString()) - ' Next - ' Else - ' If ListaAnticiposAplicados IsNot Nothing AndAlso ListaAnticiposAplicados.Count > 0 Then - ' For Each Ant As Modelos.MAnticipoRelacionado In ListaAnticiposAplicados - ' Timbre.CFDIRelacionados.UUID.Add(Ant.FolioFiscal) - ' Next - ' Else - ' If Not String.IsNullOrEmpty(HdnFolioFiscalNC.Value.Trim()) AndAlso HdnFolioFiscalNC.Value <> "0" Then - ' Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) - ' End If - ' End If - ' End If - ' End If - ' End If - 'End If - - ''SI LAS FACTURAS SE RELACIONARAN MANUALMENTE SE AGREGAN - 'If UsuarioActual.TienePermisoProceso(321) AndAlso Me.AplicaRelacionManual AndAlso DdlTipoRelacionARelacionar.SelectedValue.ToEntero() > 0 Then - - ' Dim CveTipoRelacion As Integer = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() - - ' Obj.CveTipoRelacion = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() - - ' Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {CveTipoRelacion}") - - ' Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString() - ' Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString() - - ' For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows - ' If GvRow.RowType = DataControlRowType.DataRow Then - ' Timbre.CFDIRelacionados.UUID.Add(GvRow.DataKey("FolioFiscal").Replace("test", "")) - ' End If - ' Next - 'End If - - Dim totSubTotal As Decimal = Obj.SubTotal - Dim totIVA As Decimal = Obj.IVA - Dim totRetIVA As Decimal = Obj.RetIVA - Dim totRetISR As Decimal = Obj.RetISR - Dim i As Integer = 1 - Dim tPS As String - 'detalles - For Each drr As DataRow In Obj.DtDetalle.Rows - If drr("PS").ToString().Length = 1 Then - tPS = drr("Obs").ToString() - Else - If drr("PS").ToString().Length = 0 Then - tPS = "" - Else - tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) - End If - End If - - tPS = tPS.Replace("|", " ") - - If tPS.Length >= 1000 Then - Dim tPSRecortado As String = tPS.Remove(999, tPS.Length - 999) - tPS = tPSRecortado - End If - - 'condicionante, especial - If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" ' les comentan que no debe de ir la etiqueta de "unidad" en el producto - - Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString().ToDecimal, - .Descripcion = tPS, - .ValorUnitario = drr("PU").ToString().ToDecimal, - .Importe = drr("TotalImporte").ToString().ToDecimal, - .Descuento = drr("Descuento").ToString().ToDecimal.RoundSQL(2), - .Unidad = drr("UM").ToString(), - .ClaveUnidad = drr("SATClaveUM").ToString(), - .ClaveProdServ = drr("SATClaveProdServ").ToString(), - .Noidentificacion = drr("Noidentificacion").ToString(), - .CuentaPredial = drr("CuentaPredial").ToString(), - .ImporteGravaIVAAdicional = drr("ImporteIEPS").ToString().ToDecimal, - .ObjetoImpuesto = drr("CodigoObjetoImpuesto").ToString(), - .NumeroPedimento = drr("NumeroPedimento").ToString} - 'verifica suma subtotales - If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal.RoundSQL(2) <> concepto.Importe.RoundSQL(2) AndAlso Math.Abs(totSubTotal.RoundSQL(2) - concepto.Importe.RoundSQL(2)) <= 0.01 Then 'proceso de ajusta de decimales - concepto.Importe = totSubTotal - 'concepto.ValorUnitario = totSubTotal / concepto.Cantidad - End If - totSubTotal = totSubTotal - concepto.Importe - - 'siempre estaremos agregando el iva, auqnue sea en importe cero o tasa cero, para que se emita la factura - ' If drr("ImporteIVA").ToString().ToDouble > 0 Then - - 'si es ingreso amortizado por la totalidad, y arroja el valor total de cero, no debe de impuestos, y si la BASE de calculo es mayor a cero - ' si es objimp = 01, significa que no lleva desglose de impuesto, está exento - If concepto.ObjetoImpuesto <> "01" AndAlso Timbre.Comprobante.Total > 0 AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional > 0) Then - concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(6), .TasaOCuota = drr("PorcentajeIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString().ToDecimal}) - End If - - If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteIEPS").ToString().ToDouble > 0 Then - concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeIEPS").ToString().ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString().ToDecimal}) - End If - - If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetIVA").ToString().ToDouble > 0 Then 'si hay retenciones - concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString().ToDecimal}) - End If - - If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetISR").ToString().ToDouble > 0 Then 'retención de ISR - concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetISR").ToString().ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString().ToDecimal}) - End If - - 'si el codigo objeto impuesto es 02 y no tiene desglose de impuestos por el descuento, debe asignar el valor 04 - Si objeto de impuesto y no causa impuesto - If concepto.Impuestos.Count = 0 AndAlso concepto.ObjetoImpuesto = "02" AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(2) = 0.00D Then - concepto.ObjetoImpuesto = "04" - End If - - Timbre.Conceptos.Add(concepto) - i += 1 - Next - - 'RMF. faltan impuestos locales - If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.FiltraParametros("TipoImpuesto IN (1,3) ").Rows.Count > 0 Then - - For Each DrImpuestosLocales As DataRow In TmpDTImpuestos.FiltraParametros("TipoImpuesto IN (1,3) ").Rows - If DrImpuestosLocales("Importe").ToString().ToDecimal > 0 Then - Dim ret As New CFDIRetencionesLocales With - { - .TasaRetencion = DrImpuestosLocales("Porcentaje").ToString().ToDecimal, - .ImpuestoLocalRetenido = DrImpuestosLocales("ImpuestoLocal").ToString(), - .Importe = DrImpuestosLocales("Importe").ToString().ToDecimal(If(Obj.ConvertirPesos, Obj.TipoCambio, 1)).RoundSQL(2) - } - Timbre.RetencionesLocales.Add(ret) - End If - Next - End If - - If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.FiltraParametros("TipoImpuesto = 5").Rows.Count > 0 Then - - For Each DrImpuestosLocales As DataRow In TmpDTImpuestos.FiltraParametros("TipoImpuesto = 5").Rows - If DrImpuestosLocales("Importe").ToString().ToDecimal > 0 Then - Dim ret As New CFDITrasladosLocales With {.TasaTraslado = DrImpuestosLocales("Porcentaje").ToString().ToDecimal, .ImpuestoLocalTraslado = DrImpuestosLocales("ImpuestoLocal").ToString(), .Importe = DrImpuestosLocales("Importe").ToString().ToDecimal(If(Obj.ConvertirPesos, Obj.TipoCambio, 1))} - Timbre.TrasladosLocales.Add(ret) - End If - Next - End If - - Dim AplicaComercioExteriorSubProyecto As Boolean = True - - 'If ChkEmitirComercioExterior.Checked Then - ' 'AplicaComercioExteriorSubProyecto = If(GlobalDTSubProyectos(-1, Obj.CveSubProyecto, CveEmpresa:=UsuarioActual.CveEmpresa)(0)("AplicaComercioExterior").ToString() = "True", True, False) - ' Timbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto = AplicaComercioExteriorSubProyecto - - ' 'DATOS GENERALES - - ' Timbre.Comprobante.Exportacion = "02" - ' Timbre.Complementos.ComercioExterior11.TipoOperacion = GlobalDTTipoOperacion().FiltraParametros($"CveTipoOperacion={CveTipoOperacion}")(0)("ClaveSATTipoOperacion").ToString() - ' Timbre.Complementos.ComercioExterior11.ClavedePedimento = GlobalDTClavePedimento().FiltraParametros($"CvePedimento={CvePedimento}")(0)("ClaveSATPedimento").ToString() - ' Timbre.Complementos.ComercioExterior11.CertificadoOrigen = "0" - ' Timbre.Complementos.ComercioExterior11.Incoterm = GlobalDTIncoterm.FiltroPrimeroValor("ClaveSATIncoterm", $"CveIncoterm={DdlIncoterm.SelectedValue}") - ' Timbre.Complementos.ComercioExterior11.Subdivision = "0" - - ' Timbre.Complementos.ComercioExterior11.TipoCambioUSD = If(Obj.CveMoneda = 1, 1, Obj.TipoCambio) - - ' Timbre.Complementos.ComercioExterior11.MotivoTraslado = "" - - ' 'If Timbre.Comprobante.TipoComprobante = "T" Then - ' ' Timbre.Complementos.ComercioExterior11.MotivoTraslado = GlobalDTSATMotivoTraslado.FiltroPrimeroValor("ClaveSATMotivoTraslado", $"CveMotivoTraslado={DdlSATMotivoTraslado.SelectedValue}") - ' 'Else - ' ' Timbre.Complementos.ComercioExterior11.MotivoTraslado = "" - ' 'End If - - ' 'EMISOR - ' Dim Dr As DataRow - ' Dr = Nothing - ' If GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa).Rows.Count > 0 Then - ' Dr = GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa)(0) - ' End If - ' Timbre.Complementos.ComercioExterior11.Emisor.CURP = UsuarioActual.Empresa.CURP - ' Timbre.Complementos.ComercioExterior11.Emisor.Calle = Dr("Calle").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.NumeroExterior = Dr("NoExt").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.NumeroInterior = Dr("NoInt").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.Colonia = Dr("ClaveSATColonia").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.Localidad = "" - ' Timbre.Complementos.ComercioExterior11.Emisor.Municipio = Dr("ClaveSATMunicipio").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.Estado = Dr("ClaveSATEstado").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.Pais = Dr("ClaveSATPais").ToString() - ' Timbre.Complementos.ComercioExterior11.Emisor.CP = Dr("ClaveSATCP").ToString() - - ' Dim ComExtPais, ComExtEstado, ComExtMunicipio, ComExtColonia, ComExtCalle, ComExtNumero, ComExtCP As String - ' ComExtColonia = "" : ComExtMunicipio = "" - ' ComExtPais = GlobalDTGralPaises.FiltroPrimeroValor("ClaveSATPais", $"CvePais={DdlComExtPais.SelectedValue}") - ' ComExtCalle = TxtComExtCalle.Text.Trim - ' ComExtNumero = TxtComExtNumero.Text.Trim - ' ComExtCP = TxtComExtCP.Text.Trim - - ' If ComExtPais = "MEX" Then - ' ComExtEstado = GlobalDTGralEstados(ComExtPais).FiltroPrimeroValor("ClaveSATEstado", $"CveEstado={DdlComExtEstado.SelectedValue}") - ' ComExtMunicipio = GlobalDTGralMunicipios(ComExtEstado).FiltroPrimeroValor("ClaveSATMunicipio", $"CveMunicipio={DdlComExtMunicipio.SelectedValue}") - ' ComExtColonia = GlobalDTGralColonias("-1", "-1", "-1", CveColonia:=DdlComExtColonia.SelectedValue.ToEntero).FiltroPrimeroValor("ClaveSATColonia", "") - ' Else - ' If ComExtPais.Contiene("USA", "CAN") Then - ' ComExtEstado = GlobalDTGralEstados(ComExtPais).FiltroPrimeroValor("ClaveSATEstado", $"CveEstado={DdlComExtEstado.SelectedValue}") - ' Else - ' ComExtEstado = TxtComExtEstado.Text.Trim - ' End If - ' ComExtMunicipio = TxtComExtMunicipio.Text.Trim - ' ComExtColonia = TxtComExtColonia.Text.Trim - ' End If - - ' 'RECEPTOR - ' Timbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib = If(Timbre.Comprobante.Version = "4.0", Obj.Cliente.NumRegIdTrib, "") ' EN LA VERSION 3.3 NO DEBE DE REGISTRARSE ESTE VALOR - ' Timbre.Complementos.ComercioExterior11.Receptor.Calle = ComExtCalle - ' Timbre.Complementos.ComercioExterior11.Receptor.NumeroExterior = ComExtNumero - ' Timbre.Complementos.ComercioExterior11.Receptor.NumeroInterior = "" - ' Timbre.Complementos.ComercioExterior11.Receptor.Colonia = ComExtColonia - ' Timbre.Complementos.ComercioExterior11.Receptor.Localidad = "" - ' Timbre.Complementos.ComercioExterior11.Receptor.Referencia = Obj.Cliente.ReferenciaFiscal - ' Timbre.Complementos.ComercioExterior11.Receptor.Municipio = ComExtMunicipio - ' Timbre.Complementos.ComercioExterior11.Receptor.CP = ComExtCP - ' Timbre.Complementos.ComercioExterior11.Receptor.Estado = ComExtEstado - ' Timbre.Complementos.ComercioExterior11.Receptor.Pais = ComExtPais - ' Timbre.Receptor.ResidenciaFiscal = Obj.Cliente.ClaveSATPais - ' Timbre.Receptor.NumeroRegistroTributario = Obj.Cliente.NumRegIdTrib - - - ' ''DESTINATARIO - ' 'If ChkAplicaDestinatario.Checked AndAlso DdlDirecionDestinatario.SelectedValue.ToEntero() > 0 Then - - ' ' Dim RowDireccion As DataRow = Nothing - ' ' Dim ObjClientes As New ClsClientes - ' ' If ObjClientes.DireccionEnvioGet(DdlDirecionDestinatario.SelectedValue.ToEntero(), CveCliente, -1) Then - ' ' RowDireccion = ObjClientes.DtResultados.Rows(0) - ' ' End If - ' ' ObjClientes.Dispose() - - ' ' If RowDireccion IsNot Nothing Then - - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Nombre = RowDireccion("EnvioContacto").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Calle = RowDireccion("EnvioDireccion").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior = RowDireccion("EnvioNoExt").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior = "" - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Colonia = "" - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Localidad = RowDireccion("NombreLocalidad").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Referencia = "" - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Municipio = RowDireccion("NombreMunicipio").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.CP = RowDireccion("EnvioCP").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Estado = RowDireccion("NombreEstado").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.Pais = RowDireccion("ClaveSATPais").ToString() - ' ' Timbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib = RowDireccion("COM_NumRegIdTrib").ToString() - - ' ' End If - - ' 'Else - ' ' Timbre.Complementos.ComercioExterior11.Destinatario = Nothing - ' 'End If - - ' ''MERCANCIAS - ' 'For Each Gvr As GridViewRow In GvComercioExterior.Rows - ' ' Dim mercancia As New CFDIComercioExterior11Mercancias With {.CantidadAduana = Gvr.FCTextBox("TxtCantidad").Text.ToDecimal, - ' ' .FraccionArancelaria = Gvr.DataKey("ClaveSATFraccionArancelaria").ToString(), - ' ' .UnidadAduana = Gvr.DataKey("ClaveSATUnidadAduana").ToString(), - ' ' .ValorDolares = Math.Round(Gvr.FCTextBox("TxtCantidad").Text.ToDecimal * Gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal, 2), - ' ' .ValorUnitarioAduana = Gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal, - ' ' .NoIdentificacion = Gvr.DataKey("Codigo")} - ' ' If Gvr.FCTextBox("TxtMarca").Text <> "" Then - ' ' mercancia.DescripcionesEspecificas.Marca = Gvr.FCTextBox("TxtMarca").Text - ' ' End If - - ' ' Timbre.Complementos.ComercioExterior11.Mercancias.Add(mercancia) - ' ' i += 1 - ' 'Next - - 'Else - ' Timbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto = False - 'End If - - Return Timbre - End Function - - Private Sub PrepararTimbrado(ByRef FM As Modelos.FemsaFactura, ByRef TmpDT7Eleven As DataTable, ByRef TmpDTComplementosTimbrado As DataTable) - 'FM.AplicaFEMSA = AplicaFEMSA - 'FM.FEMSA_NumSociedad = TxtFEMSA_NumSociedad.Text.Trim - 'FM.FEMSA_NumProveedor = TxtFEMSA_NumProveedor.Text.Trim - 'FM.FEMSA_Mail = TxtFEMSA_Mail.Text.Trim - 'FM.FEMSA_Version = TxtFEMSA_Version.Text.ToEntero() - 'FM.FEMSA_NumPedido = TxtFEMSA_NumPedido.Text.Trim.ToLong - 'FM.FEMSA_NumEntrada = TxtFEMSA_NumEntrada.Text.Trim - 'FM.FEMSA_NumRemision = TxtFEMSA_NumRemision.Text.Trim - 'FM.FEMSA_NumSocio = TxtFEMSA_NumSocio.Text.Trim - 'FM.FEMSA_CentroCosto = TxtFEMSA_CentroCosto.Text.Trim - 'FM.FEMSA_IPeriodoLiquidacion = TxtFEMSA_IPeriodoLiquidacion.Text.Trim - 'FM.FEMSA_FPeriodoLiquidacion = TxtFEMSA_FPeriodoLiquidacion.Text.Trim - 'FM.FEMSA_CodRetencion1 = TxtFEMSA_CodRetencion1.Text.Trim - 'FM.FEMSA_CodRetencion2 = TxtFEMSA_CodRetencion2.Text.Trim - FM.AplicaFEMSA = False - FM.FEMSA_NumSociedad = "" - FM.FEMSA_NumProveedor = "" - FM.FEMSA_Mail = "" - FM.FEMSA_Version = 0 - FM.FEMSA_NumPedido = 0 - FM.FEMSA_NumEntrada = "" - FM.FEMSA_NumRemision = "" - FM.FEMSA_NumSocio = "" - FM.FEMSA_CentroCosto = "" - FM.FEMSA_IPeriodoLiquidacion = "" - FM.FEMSA_FPeriodoLiquidacion = "" - FM.FEMSA_CodRetencion1 = "" - FM.FEMSA_CodRetencion2 = "" - - TmpDT7Eleven.Columns.Add("sevenElevenNumProveedor") - TmpDT7Eleven.Columns.Add("sevenElevenFolio") - TmpDT7Eleven.Columns.Add("sevenElevenTienda") - TmpDT7Eleven.Columns.Add("sevenElevenFecha") - - Dim Row As DataRow = TmpDT7Eleven.NewRow - 'Row("sevenElevenNumProveedor") = Txt7ElevenNumProveedor.Text.Trim() - 'Row("sevenElevenFolio") = Txt7ElevenFolio.Text.Trim() - 'Row("sevenElevenTienda") = Txt7ElevenTienda.Text.Trim() - 'Row("sevenElevenFecha") = Txt7ElevenFecha.Text.Trim() - - Row("sevenElevenNumProveedor") = "" - Row("sevenElevenFolio") = "" - Row("sevenElevenTienda") = "" - Row("sevenElevenFecha") = "" - - TmpDT7Eleven.Rows.Add(Row) - - TmpDTComplementosTimbrado.Columns.Add("CveComplemento") - TmpDTComplementosTimbrado.Columns.Add("IdContabilidad") - TmpDTComplementosTimbrado.Columns.Add("TipoProceso") - TmpDTComplementosTimbrado.Columns.Add("TipoAmbito") - TmpDTComplementosTimbrado.Columns.Add("Entidad") - - Dim Row2 As DataRow = TmpDTComplementosTimbrado.NewRow - 'If RblComplementos.SelectedValue.ToEntero() > 0 Then - - ' Select Case RblComplementos.SelectedValue.ToEntero() - ' Case 5 - ' Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() - ' Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() - ' Row2("TipoProceso") = "Ordinario" - ' Row2("TipoAmbito") = "Directivo Estatal" - ' Row2("Entidad") = DdlINEEntidad.SelectedValue - ' Case 6 - ' Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() - ' Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() - ' Row2("TipoProceso") = "Ordinario" - ' Row2("TipoAmbito") = "Ejecutivo Estatal" - ' Row2("Entidad") = DdlINEEntidad.SelectedValue - ' Case 7 - ' Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() - ' Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() - ' Row2("TipoProceso") = "Ordinario" - ' Row2("TipoAmbito") = "Ejecutivo Nacional" - ' Row2("Entidad") = "" - ' Case 8 - ' Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() - ' Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() - ' Row2("TipoProceso") = DdlTipoCampaña.SelectedValue - ' Row2("TipoAmbito") = DdlAmbitoComplemento.SelectedValue - ' Row2("Entidad") = DdlINEEntidad.SelectedValue - ' End Select - 'Else - Row2("CveComplemento") = "" - Row2("IdContabilidad") = "" - Row2("TipoProceso") = "" - Row2("TipoAmbito") = "" - Row2("Entidad") = "" - 'End If - - - TmpDTComplementosTimbrado.Rows.Add(Row2) - End Sub -#End Region - - - -#Region " GUARDAR - VENTA, PREPOLIZAS, INV, ESTIMACIONES, AC, NOTA DE CRÉDITO " - Private Sub GuardarVenta(ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjAcum As ClsAcumuladores, ByRef ObjContr As ClsContratos, factura As Modelos.Factura, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, - Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, - ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional CveAnticipoPadre As Integer = -1) - - Dim Msgok As New StringBuilder - Dim CveAlmacenTraspasoOrigen As Integer = -1 - Dim CveAlmacenTraspasoDestino As Integer = -1 - Dim EsDevolucionVenta As Integer = -1 - Dim EsInterno As Integer = -1 - - - - 'Si es devolucion revertimos los almacenes - If CvePedido > 0 And TipoContrato = 2 Then - EsDevolucionVenta = 1 - CveAlmacenTraspasoOrigen = -1 - CveAlmacenTraspasoDestino = -1 - End If - - 'VALIDA ENTREGA POR ADELANTADO - If UsuarioActual.Empresa.Funcionalidad(145) = "1" Then 'If UsuarioActual.CveEmpresa.Contiene(4, 72, 80, 119) Then - 'INCRUSTAMOS ALMACEN ENTREGA POR ADELANTADO CUANDO SEA REMISION Y NO TRAIGA ASIGNADO POR EL USUARIO - If CveAlmacenTraspasoDestino <= 0 And factura.TipoDocto = "Rem" Then - CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() - End If - - 'SI LA SUCURSAL NO TIENE ENTREGA POR ADELANTADO - If CveAlmacenTraspasoDestino <= 0 And factura.TipoDocto = "Rem" Then - ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado de la sucursal.") - End If - End If - Dim TotalImpuestoLocal As Double = 0 - If GvImpuestosLocales2.Rows.Count > 0 Then - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble <> 0 Then - If gvr.DataKey("TipoImpuesto") = "5" Then ' cuando es traslado local - TotalImpuestoLocal -= gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble - Else ' cuando es retención - TotalImpuestoLocal += gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble - End If - - End If - End If - Next - End If - - 'SI LA FACTURA ESTA PAGADA DEBE MARCAR LA DEVOLUCION POR SI SE QUIERE AMORTIZAR - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso factura.TipoDocto = "Dev" Then - factura.Alfa3 = "DEV" - factura.DevolucionImportePagado = ObjFacturaNC.Total / ObjFacturaNC.PagadoBancos 'falta tomar el dato - End If - Dim tCveTipoPoliza As Integer = -1 - - If UsuarioActual.CveEmpresa = 140 Then - tCveTipoPoliza = 1 ' que sea siempre ingreso. - End If - - Dim TipoContable As Integer = -1 - - - factura.CvePrePoliza = ObjConta.AddPrePolizas("Ventas/GuardarVenta", factura.CvePlantillaPoliza, factura.Total, factura.Total, factura.CveMoneda, factura.Fecha, If(CveEmpresaCRM > 0, LblEmpresaCRM.Text, factura.Cliente.Nombre), factura.CveUsuario, factura.CveEmpresa, CveTipoPoliza:=tCveTipoPoliza, TipoContable:=TipoContable) - - Dim RFCReceptor As String = "" - - If factura.Timbre IsNot Nothing AndAlso factura.Timbre.Receptor IsNot Nothing Then - If Not String.IsNullOrEmpty(factura.Timbre.Receptor.RFC) Then - RFCReceptor = factura.Timbre.Receptor.RFC.Trim - End If - End If - - 'SI NO SE VA TIMBRAR TOMA EL DEL CLIENTE - If String.IsNullOrEmpty(RFCReceptor) Then - If Not String.IsNullOrEmpty(LblRFC.Text) Then - RFCReceptor = LblRFC.Text.Trim - End If - - If factura.FacturarSucursal Then - If factura.ClienteSucursal IsNot Nothing Then - RFCReceptor = factura.ClienteSucursal.RFC - End If - End If - - End If - - Dim DescripcionVenta As String = "" - 'If TxtDescripcionVenta.Text <> "" Then DescripcionVenta = TxtDescripcionVenta.Text - - If Not ObjVentas.AddVenta(factura.TipoDocto, factura.Folio, factura.CveCliente, factura.CveClienteSucursal, factura.SubTotalTC, factura.DescuentoTC, - factura.AmortizacionTC, factura.IVATC, factura.RetIVATC, factura.RetISRTC, - factura.TotalTC, factura.CveMoneda, factura.TipoCambio, factura.CveMetodoPago, factura.CondicionesPago, factura.FormaPago, factura.FechaPago, factura.Fecha, factura.MotivoDescuento, - factura.Observaciones, factura.FechaEjecucion, factura.CveVendedor, - factura.Alfa1, factura.Alfa2, factura.Alfa3, factura.Num1, factura.Num2, factura.Num3, - factura.Fech1, factura.Fech2, factura.Fech3, factura.CveCorte, factura.NumeroPersonas, factura.CvePrePoliza, factura.CveUsuario, factura.CveEmpresa, - AtencionA:=factura.AtencionA, TelefonoGenerico:="", CveContrato:=factura.CveContrato, CveVentaPadre:=If(AplicaDevolucion, CveVentaDevolucion, factura.CveVentaPadre), Det_FechaOrdenCompra:=factura.Det_FechaOrdenCompra, Det_OrdenCompra:=factura.Det_OrdenCompra, otros:=factura.Otros, - Entrega:="-1", Vigencia:=If(DdlTipoComprobante.SelectedValue = "Cot", NowADS(), MinFecha), - CveAlmacenTraspasoDestino:=CveAlmacenTraspasoDestino, CveAlmacenTraspasoOrigen:=CveAlmacenTraspasoOrigen, CveDireccionEnvio:=-1, CveOC:=CveOC, IEPS:=factura.IEPSTC, Serie:=factura.Serie, CveCondicionEntrega:=-1, - PedidoContrato:="", ObservacionesAlmacen:="", CveSubProyecto:=factura.CveSubProyecto, CveSubProyectoCobranza:=factura.CveSubProyectoCobranza, CveSubProyectoEjecucion:=factura.CveSubProyectoEjecucion, CveFormaPago33:=factura.CveFormaPago33, - CveMetodoPago33:=factura.CveMetodoPago33, CveUsoCFDI:=factura.CveUsoCFDI, OrdenCompra:=TxtOrdenCompra.Text, CveCuentaTerminal:=-1, CveTipoRelacion:=factura.CveTipoRelacion, ImpuestoLocal:=TotalImpuestoLocal, - CveVentaRelacion:=(If(factura.CveVentaRelacion.ToEntero() > 0, factura.CveVentaRelacion, -1)), ImporteRelacion:=(If(factura.ImporteRelacion <> Nothing, factura.ImporteRelacion, -1)), - CveTipoAmortizacionAnticipo:=factura.CveTipoAmortizacionAnticipo, CveEmpresaCRM:=CveEmpresaCRM, EsInterno:=EsInterno, CveAcercamientoCRM:=CveAcercamientoCRM, - DiasCredito:=factura.DiasCredito, EsDiasCreditoFijo:=factura.EsDiasCreditoFijo, AnticipoEspecial:=False, - Kilometraje:=0, EsAmortizacion:=EsNCAmortizacion, CveTipoRetencion:=factura.CveTipoRetencion, CorreoNotificacion:="", - FormaPaqueteria:=1, FacturarSucursal:=factura.FacturarSucursal, VentaDesglosaIEPS:=factura.VentaDesglosaIEPS, RFCReceptor:=RFCReceptor, Adjunto:=Adjunto, DevolucionImportePagado:=factura.DevolucionImportePagado, EsGarantia:=factura.EsGarantia, ServicioDomicilio:=False, - CveLineaAdicional:=-1, DescripcionVenta:=DescripcionVenta, CveMedico:=DdlMedico.SelectedValue.ToEntero, CveProcedimiento:=DdlProcedimiento.SelectedValue.ToEntero, CveTipoVenta:=RBLTipoVenta.SelectedValue.ToEntero) Then - ErrorList.Add("Ocurrió un error al Generar la Venta.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") - Else - - ViewState("Serie") = ObjVentas.Serie - ViewState("Folio") = ObjVentas.Folio - ViewState("FolioActual") = ObjVentas.Folio - - 'If factura.TipoDocto.Contiene("Dev", "Egs") OrElse DtVentasNC IsNot Nothing OrElse CveEstatusRefacturacion > 0 OrElse CveAnticipoPadre > 0 Then - ' If DtVentasNC IsNot Nothing Then - ' For Each row As DataRow In DtVentasNC.Rows - ' If Not row("CveVenta").ToString().ToEntero() = -1 Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, row("CveVenta").ToString().ToEntero()) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' End If - ' Next - ' Else - ' 'SI ES REFACTURACION DEBE AGREGAR LA VENTA ANTERIOR COMO RELACIONADA TAMBIEN - ' If Not CveVenta = -1 Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveVenta) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' Else - ' If CveEstatusRefacturacion > 0 AndAlso CveDevolucion > 0 Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveDevolucion) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' End If - ' End If - - ' 'SI TIENE UN ANTICIPO TAMBIEN DEBE RELACIONARLO - ' If CveAnticipoPadre > 0 Then - ' If ListaAnticiposAplicados IsNot Nothing Then - ' For Each Ant As Modelos.MAnticipoRelacionado In ListaAnticiposAplicados - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, Ant.CveVenta) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' Next - ' End If - - ' 'If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveAnticipoPadre) Then - ' ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' 'End If - ' End If - ' End If - 'End If - - 'If UsuarioActual.TienePermisoProceso(321) AndAlso Me.AplicaRelacionManual Then - ' For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows - ' If GvRow.RowType = DataControlRowType.DataRow Then - ' If GvRow.DataKey("CveVenta").ToEntero() > 0 Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, GvRow.DataKey("CveVenta").ToEntero()) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' Else - ' Dim FolioFiscalRelacionado As String = GvRow.DataKey("FolioFiscal") - ' If Not String.IsNullOrEmpty(FolioFiscalRelacionado) Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, -1, FolioFiscal:=FolioFiscalRelacionado) Then - ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") - ' End If - ' End If - ' End If - ' End If - ' Next - 'End If - - ''SI SE SELECCIONO UNA FACTURA PARA DEVOLUCION DE EFECTIVO DEBE ASOCIARLA A LA NOTA DE CREDITO - 'If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso factura.TipoDocto = "Egs" AndAlso Me.CveVentaUsadoDevolucionEfectivo > 0 Then - ' If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveVentaUsadoDevolucionEfectivo) Then - ' ErrorList.Add("Ocurrió un error al relacionar la venta de devolución de efectivo entre si.") - ' End If - 'End If - - - - End If - - If ErrorList.Count = 0 AndAlso ObjVentas.CveVenta > 0 Then - - factura.CveVenta = ObjVentas.CveVenta - factura.Serie = ObjVentas.Serie - factura.Folio = ObjVentas.Folio - ViewState("VentaFolio") = ObjVentas.SerieFolio - factura.Timbre.Comprobante.Serie = ObjVentas.Serie - factura.Timbre.Comprobante.Folio = ObjVentas.Folio.ToString() - - If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Me.CveAutorizacion > 0 Then - If Not ObjVentas.UpdateAutorizacionLimite(Me.CveAutorizacion, factura.CveCliente, factura.CveVenta) Then - ErrorList.Add("Error al guardar los limites de la autorizacion") - End If - End If - - - - - 'Se agregan los PS - For Each Row As DataRow In TmpDTDetalle.Rows - If Not ObjVentas.AddVentaDetalle(ObjVentas.CveVenta, Row("CvePS").ToString().ToEntero(), Row("Cantidad").ToString().ToDecimal, Row("CveUM").ToString().ToEntero(), - Row("PU").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("ImporteIVA").ToString().ToDecimal, Math.Round((Row("Total").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("PorcentajeIVA").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)))), 6), - Row("Obs").ToString(), Row("Descuento").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("TipoDescuento").ToString().ToEntero(), Row("CveSubProyecto").ToString().ToEntero(), Row("CvePresupuestoIngreso").ToString().ToEntero(), TiempoEntrega:=Row("TiempoEntrega").ToString(), CveVentaDetallePadre:=Row("CveVentaDetalle").ToString().ToEntero(), - CveContratoDetalle:=Row("CveContratoDetalle").ToString().ToEntero(), CvePromocionDetalle:=Row("CvePromocionDetalle").ToString().ToEntero(), IEPS:=Row("ImporteIEPS").ToString().ToDecimal, CveMovimientoDetallePedido:=Row("CveMovimientoDetallePedido").ToString().ToEntero(), ImporteRetIVA:=Row("ImporteRetIVA").ToString().ToDecimal, ImporteRetISR:=Row("ImporteRetISR").ToString().ToDecimal, - PorcentajeIVA:=Row("PorcentajeIVA").ToString().ToDecimal, PorcentajeIEPS:=Row("PorcentajeIEPS").ToString().ToDouble, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString().ToDouble, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString().ToDecimal, CuentaPredial:=Row("CuentaPredial").ToString(), CvePrecioLista:=Row("CvePrecioLista").ToString().ToEntero(), CveActivoFijo:=Row("CveActivoFijo").ToString().ToEntero(), NumTurnos:=Row("NumTurnos").ToString().ToDecimal()) Then - ErrorList.Add("Ocurrió un error al agregar un Producto o Servicio a la Factura.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") - Exit For - Else - - If CveContrato > 0 AndAlso factura.TipoDocto = "Rem" AndAlso AplicaGastoContrato Then - - If Not ObjContr.AddContratoGasto(CveContrato, Row("PS").ToString(), Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, factura.Fecha, UsuarioActual.CveUsuario, CveVenta:=ObjVentas.CveVenta) Then - ErrorList.Add("Ocurrió un error al agregar el gasto de la Factura.") - Exit For - End If - - End If - - ''Si es devolucion se agregan a la tabla de Vta_VentasDetalleDevolucion - 'If factura.AplicaDevolucion Then - ' Try - ' Dim EsCargo As Integer = If(Row("EsCargo").ToString() = "True", 1, 0) - ' If EsCargo = 1 Then - ' If Me.ObjFacturaNC IsNot Nothing Then - ' Dim CveVentaDetalleUsado As Integer = -1 - ' For Each RowIng As DataRow In Me.ObjFacturaNC.DtDetalle.Rows - ' If RowIng("Cantidad").ToString().ToDecimal() = Row("Cantidad").ToString().ToDecimal() AndAlso RowIng("CvePS").ToString().ToEntero() = Row("CvePS").ToString().ToEntero() Then - ' CveVentaDetalleUsado = RowIng("CveVentaDetalle").ToString().ToEntero() - ' Exit For - ' End If - ' Next - ' If CveVentaDetalleUsado > 0 Then - ' If Not ObjVentas.AddVentaDetalleDevolucion(CveVentaDetalleUsado, ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDouble) Then - ' ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") - ' End If - ' End If - - ' End If - ' Else - ' If Not ObjVentas.AddVentaDetalleDevolucion(Row("CveVentaDetalle").ToString().ToEntero(), ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDouble) Then - ' ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") - ' End If - ' End If - ' Catch ex As Exception - ' ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") - ' End Try - - ' If ErrorList.Count = 0 Then - ' If Not ObjEventos.AddEventoBitacora(String.Format("Se aplicó una devolución en Folio: {1}", factura.CveVenta, factura.SerieFolio), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaDevolucion) Then - ' ErrorList.Add("Ocurrió un error al agregar la bitacora de devolución.") - ' End If - ' End If - 'End If - - 'Dim TmpDr As DataRow = TmpDTDetalle.Select($"Consec = {Row("Consec").ToString()}")(0) - 'TmpDr("CveVentaDetalle") = ObjVentas.CveVentaDetalle - - 'Try - ' If DtInv IsNot Nothing AndAlso DtInv.Rows.Count > 0 Then - ' Dim InvDr As DataRow = DtInv.Select($"Consec = {Row("Consec").ToString()}")(0) - ' InvDr("CveVentaDetalle") = ObjVentas.CveVentaDetalle - ' End If - - 'Catch ex As Exception - 'End Try - - 'SI SE FACTURA UNA RNC SE MUESTRA - 'If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso factura.TipoDocto = "Egs" Then - ' If Row("CveVentaDetalleRNC").ToString().ToEntero() > 0 Then - - ' If Not ObjVentas.AddVentaDetalleRNCFacturada(Row("CveVentaDetalleRNC").ToString().ToEntero(), ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDecimal()) Then - ' ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") - ' End If - - ' Dim EsCargo As Boolean = False - ' Dim ListaRNC As List(Of Modelos.Factura) = Nothing - - ' If NCDescuento Then - ' ListaRNC = ListaNCDescuento - ' Else - ' ' EsCargo = RblRNCTipo.SelectedValue = "1" - ' ListaRNC = ListaRemisionesNC - ' End If - - - - ' End If - 'End If - - End If - Next - - ''Orden Produccion' - 'If UsuarioActual.CveEmpresa.Contiene(126) Then - ' If ObjVentas.CveVenta > 0 And DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then - ' If Not ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), ObjVentas.CveVenta) Then - ' ErrorList.Add("Ocurrió un error al actualizar la orden de producción") - ' End If - ' End If - 'End If - - 'PedidoA' - 'If ObjVentas.CveVenta > 0 And CvePedidoA > 0 And DdlTipoComprobante.SelectedValue.Contiene("Rem") Then - ' If Not ObjCliente.UpdateEstatusPedido(CvePedidoA, 18, -1, UsuarioActual.CveUsuario, CveRemision:=factura.CveVenta) Then - ' ErrorList.Add("Ocurrió un error al actualizar el estatus del pedidoA") - ' Else - ' 'Remision - ' If Not ObjEventos.AddEventoBitacora($"Remisionado de autorización en: {ObjFactura.SerieFolio}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CvePedidoA) Then - ' ErrorList.Add("Ocurrió un error al agregar bitácora de Autorización") - ' End If - ' End If - 'End If - - - - 'Contratos - 'If factura.CveContrato > 0 AndAlso Me.CveContratoTipo <> 33 Then - ' If factura.CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing") Then - ' GuardarContratoAvanceEstimaciones(ObjContr, factura, ErrorList, 1) - ' 'CUANDO ES NOTA DE CRÉDITO, NO DEBE DE CONSIDERAR AVANCE, CUANDO ES NOTA DE CRÉDITO POR AMORTIZACIÓN - ' ElseIf factura.CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") AndAlso Not EsNCAmortizacion Then - ' GuardarContratoAvanceEstimaciones(ObjContr, factura, ErrorList, -1) - ' End If - 'End If - - 'Impuestos Locales - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble <> 0 Then - If Not ObjVentas.AddVentaImpuestoLocales(factura.CveVenta, gvr.DataKey("CveImpuestoLocal").ToString().ToEntero(), gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1))) Then - ErrorList.Add("Ocurrió un error al Guardar Impuestos Locales") - End If - End If - End If - Next - - If DTmpF.Rows.Count > 0 Then - For Each Row As DataRow In DTmpF.Rows - If Not ObjVentas.AddVentasFirmas(factura.CveVenta, Row("Titulo").ToString(), Row("Nombre").ToString(), Row("Puesto").ToString(), Row("Lado").ToString().ToEntero()) Then - ErrorList.Add("Ocurrio un error al Guardar Firmas") - End If - Next - End If - - If ErrorList.Count = 0 AndAlso ChkRequiereTecnico.Checked Then - GeneraOS(ObjVentas.IniciaTransacSQL, ErrorList) - End If - - 'Si viene de OS, Se guarda CveVenta en OS - If CveOS > 0 Then - If Not ObjOS.UpdateVentaOS(factura.CveVenta, CveOS) Then - ErrorList.Add("Ocurrió un error al guardar la venta en Ordenes de Servicio") - End If - End If - - - If ErrorList.Count = 0 Then - 'prepoliza - GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario, TipoContable:=TipoContable) - If ErrorList.Count = 0 Then - - If ErrorList.Count = 0 Then - 'estimaciones - 'If Me.CveContratoTipo <> 33 Then - ' GuardarVentaEstimaciones(ObjContr, factura) - 'End If - If ErrorList.Count = 0 Then - 'armonizaccionContable - 'GuardarVentaAC(ObjVentas, factura, Msgok) - If ErrorList.Count = 0 Then - 'Impuestos Locales - If GuardarVentaImpuestosLocales(ObjVentas, ObjConta, factura) Then - ErrorList.Add("Ocurrio un error al Guardar Impuestos Locales") - End If - End If - End If - End If - End If - End If - - End If - End Sub - - Private Function GeneraOS(ByRef TransacSQL As SqlTransaction, ByRef errorList As List(Of String)) As Boolean - - - Dim Errores As Boolean = False - - Dim ObjOrdenServicio As New ClsOS(TransacSQL) - - Dim CveOSTipo As Integer = -1 - - If ObjOrdenServicio.GetTipoOrdenesServicios(UsuarioActual.CveEmpresa) Then - CveOSTipo = ObjOrdenServicio.DtResultados.FiltroPrimeroValor("CveOrdenServicioTipo", " Estatus = 'Activo' ").ToEntero - End If - - Dim EstatusOrdenServicio As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 1").ToEntero - - If ObjOrdenServicio.AddOrdenesServicios(CveCliente, DdlSubProyectoDatos.SelectedValue.ToEntero, UsuarioActual.Nombre, TxtFecha.Text.Replace(",", "").ToDateTime, $"Venta: {Serie}-{FolioActual}", UsuarioActual.CveUsuario, EstatusOrdenServicio, - UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, CveOSTipo, CveClienteSucursal:=DdlSubProyectoDatos.SelectedValue.ToEntero, - Direccion:="", Telefono:="", CveModeloAuto:=-1, Año:="", CveMedico:=DdlMedico.SelectedValue.ToEntero, - CveProcedimiento:=DdlProcedimiento.SelectedValue.ToEntero, CveTipoVenta:=RBLTipoVenta.SelectedValue.ToEntero, FechaCita:=TxtFecha.Text.Replace(",", "").ToDateTime) Then - CveOS = ObjOrdenServicio.CveOS - Else - errorList.Add("Se presento un error al guardar la orden de servicio.") - Errores = True - End If - - Dim CvePSDetalle As Integer = UsuarioActual.Empresa.Funcionalidad(708).ToEntero - - If Not CvePSDetalle > 0 Then - errorList.Add("No se tiene asignado un producto para la orden de servicio (FNC 708).") - Errores = True - End If - - If Not Errores Then - - Dim CveOsDetalle = ObjOrdenServicio.AddOrdenesServiciosDetalle(ObjOrdenServicio.CveOS, CvePSDetalle, 1, -1, -1, $"Venta: {Serie}-{FolioActual}", False, True, False, -1, "-1", "-1", "-1", "", UsuarioActual.CveUsuario, Archivo:="") - - If CveOsDetalle > 0 Then - 'MENSAJE PRINCIPAL - Dim MensajeAlertOS As New StringBuilder - MensajeAlertOS.AppendFormat(String.Format("
    La Orden de Servicio: {0} se generó correctamente.

    ", ObjOrdenServicio.Folio)) - MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=OS&CVEOS={0}", ObjOrdenServicio.CveOS))) - Dim Liga = $"document.location.href=""/OS/RepOrdenesServicios.aspx"";" - Alert(MensajeAlertOS.ToString, TipoMensaje.MsgInformacion, Liga) - Else - errorList.Add("Se presento un error al guardar la el detalle de la orden de servicio.") - Errores = True - End If - - - End If - - Return If(Errores, False, True) - - End Function - - Private Sub GuardarVentaPrePolizas(ByRef ObjConta As ClsContabilidad, factura As Modelos.Factura, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, - Optional ByRef ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, - ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, - Optional ValorMultiplicador As Integer = 1, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional ObjInventario As ClsInventarios = Nothing, Optional TipoContable As Integer = -1) - - Dim CveIE As Integer = -1 - Dim DT As DataTable = Nothing - - - Dim CveConceptoAfectacion As Integer = 1 'Cliente - Dim CveConceptoAntCli As Integer = 3 'Anticipo Cliente - Dim CveConceptoVenta As Integer = 4 'Venta - Dim CveConceptoCanAnt As Integer = 11 'Cancelacion Anticipos - Dim CveConceptoDSV As Integer = 12 ' DSV - Dim CveConceptoIVA As Integer = 13 'IVA Trasladado - Dim CveConceptoRetIVA As Integer = 8 'Ret IVA - Dim CveConceptoRetISR As Integer = 9 'Ret ISR - - 'P R E P O L I Z A S - If DdlTipoComprobante.SelectedValue <> "Cot" Then - If factura.CvePrePoliza > 0 Then - - If ProcesoPrepolizas(ObjConta, factura, CveIE, TmpDTDetalleMovimientos, ValorMultiplicador, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario, TipoContable:=TipoContable) Then - ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") - End If - - Else - ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") - End If - End If - End Sub - Private Function ProcesoPrepolizas(ByRef ObjConta As ClsContabilidad, ObjFactura As Modelos.Factura, CveIE As Integer, TmpDTDetalle As DataTable, - Optional ValorMultiplicador As Integer = 1, ByRef Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, - ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, - Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional ObjInventario As ClsInventarios = Nothing, Optional TipoContable As Integer = -1) As Boolean - Try - Dim DT As DataTable - Dim CvePlantilaPoliza As Integer - Dim PorcentajeAmortizacion As Decimal = 0 - Dim sumaAmorticaciones As Decimal = 0 - Dim ErrorPrepoliza As Boolean = False - Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:

    " - Dim CveCuentaContabilizacion As Integer = 1 - Dim tipoCambio As Decimal - Dim TCPago As Decimal = 1 - Dim CuentasContablesInvalidasSIG As New StringBuilder - - If ObjFactura.TipoDocto = "Ing" Or ObjFactura.TipoDocto = "Ant" Or ObjFactura.TipoDocto = "Com" Then - CvePlantilaPoliza = 4 - ElseIf ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then - CvePlantilaPoliza = 7 - ElseIf ObjFactura.TipoDocto.Contiene("Rem", "RNC") Then - CvePlantilaPoliza = 4 - End If - - If ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio > 0 Then - tipoCambio = ObjFactura.TipoCambio - TCPago = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal - ElseIf ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio <= 1 Then - If UsuarioActual.CveEmpresa.Contiene(13, 83) Then - tipoCambio = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal - Else - 'If ChkEmitirComercioExterior.Checked Then - ' tipoCambio = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal - 'Else - tipoCambio = GlobalTipoCambio(ObjFactura.Fecha).ToString().ToDecimal - 'End If - - End If - Else - tipoCambio = 1 - End If - - Dim ConceptoContable As Integer - Dim TipoMovimiento As Boolean - Dim importeMovimiento As Decimal - Dim FechaMovimiento As Date = ObjFactura.Fecha - Dim Concepto As String = ObjFactura.SerieFolio - Dim Referencia As String = ObjFactura.SerieFolio - Dim Fecha As Date = NowADS() - - Dim importeMX As Decimal - Dim Multiplicador As Integer - Dim CveIEPago As Integer - Dim FolioIE As Long - Dim CveIEAnticipo As Integer - Dim CveSubProyectoVenta As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() - Dim CveSubProyectoContabilizar As Integer - Dim SeContabiliza As Boolean = True - - - Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" - If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then - AutoConta = False - End If - - Dim UsaComplementariaClientes As Boolean = True - - If ObjConta.GetPlantillaConceptos(ObjFactura.CveEmpresa, CvePlantilaPoliza) Then - Dim dtt As DataTable = ObjConta.DtResultados - If ValorMultiplicador = -1 Then dtt = ObjConta.DtResultados.FiltraParametros("", "Orden DESC") ' se ordena contrario al registro para llevar los saldos correctos - For Each Row As DataRow In dtt.Rows - - ConceptoContable = Row("CveConcepto").ToString().ToEntero() - TipoMovimiento = If(Row("TipoMovto").ToString() = "True", True, False) - importeMovimiento = 0 - CveSubProyectoContabilizar = 0 - Multiplicador = (Row("Multiplicador").ToString().ToEntero()) - Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, ConceptoContable, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", "") - Dim PorcentajeImpuesto As Decimal = 0 - - Select Case ConceptoContable - Case 1 'Cliente - If Not ObjFactura.TipoDocto.Contiene("Egs", "Rem", "RNC") Then - If ObjFactura.CveMoneda > 1 Then ConceptoContable = 291 - importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - If tipoCambio > 1 Then - If importeMovimiento <> 0 AndAlso (UsaComplementariaClientes) Then - importeMX = importeMovimiento - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, (importeMovimiento * tipoCambio - importeMovimiento).RoundSQL, 203, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - End If - End If - End If - Dim DtAF As DataTable = TmpDT.FiltraParametros("CveActivoFijo > 0") - - If DtAF.Rows.Count > 0 Then - For Each RowAF As DataRow In DtAF.FiltraParametros("", "", {"CveActivoFijo", "Obs"}).Rows - Dim ImporteDepreciado As Decimal = DtAF.SUMD("AFDepreciacion", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, ImporteDepreciado, (ImporteDepreciado).RoundSQL, 271, Referencia, $"Depreciación {RowAF("Obs")}", CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - End If - - 'MARCAR EL ACTIVO FIJO COMO VENDEDIDO - If Not ErrorPrepoliza AndAlso RowAF("CveActivoFijo").ToString().ToEntero() > 0 Then - If Not ObjVentas.UpdateEstatusAFVendido(RowAF("CveActivoFijo").ToString().ToEntero(), UsuarioActual.CveEmpresa, 5) Then - ErrorPrepoliza = True - End If - End If - Next - End If - End If - - Case 3 'Cliente - - If ObjFactura.TipoDocto = "Ant" Then - ConceptoContable = If(UsuarioActual.CveEmpresa.Contiene(119), 95, ConceptoContable) - importeMovimiento = ObjFactura.SubTotal * ValorMultiplicador - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - End If - Case 190 'Remisión del cliente - - If ObjFactura.TipoDocto = "Rem" Then - importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - Dim ContabilizableRem As Boolean = False - If TipoContable <> -1 Then - ContabilizableRem = True - End If - - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 190, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=ContabilizableRem, CveSubProyecto:=CveSubProyectoContabilizar) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 193, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=ContabilizableRem, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Else - ErrorPrepoliza = True - End If - - importeMovimiento = 0 - ViewState("SeGuardoPrePoliza") = True - End If - - Case 277 'Remisión de NC - - If ObjFactura.TipoDocto = "RNC" Then - importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 277, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 278, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Else - ErrorPrepoliza = True - End If - - importeMovimiento = 0 - ViewState("SeGuardoPrePoliza") = True - End If - - Case 12 'Nota de Credito - If ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then - Dim ConPreP As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(6, ObjFactura.CveMoneda, False, 2) - - importeMovimiento = ObjFactura.Total * ValorMultiplicador - importeMX = (importeMovimiento * tipoCambio * Multiplicador).RoundSQL(2) - FechaMovimiento = ObjFactura.FechaPago - - CveSubProyectoContabilizar = ObjFactura.CveSubProyecto - If ObjFactura.CveMoneda = 2 Then - importeMX = importeMovimiento - Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - End If - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConPreP.CveConcepto, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - - If UsaComplementariaClientes AndAlso ObjFactura.CveMoneda = 2 Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, (importeMovimiento * tipoCambio - importeMovimiento).RoundSQL(2), ConPreP.CveConceptoComplementario, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - End If - - Dim TipoCambioNC As Decimal = 1 - - If ObjFactura.CveMoneda = 2 Then - If tipoCambio > 1 Then - TipoCambioNC = tipoCambio - Else - If UsuarioActual.CveEmpresa.Contiene(13, 83) Then - TipoCambioNC = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToDecimal - Else - TipoCambioNC = GlobalTipoCambio(ObjFactura.Fecha).ToDecimal - End If - End If - End If - - importeMovimiento = 0 - importeMX = 0 - - 'APLICA NC SALDOS DIRECTOS - If Not ErrorPrepoliza AndAlso DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then - For Each Dr As DataRow In DtVentasNC.Rows - Dim ObjFacturaRef As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDTDetalle:=False, VerificaAlmacen:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False) - - Dim ventaRef As New Venta(ObjFacturaRef, UsuarioActual) - - ObjFacturaRef.Dispose() - - Dim Pago As New VentaPago - Pago.Fecha = ObjFactura.Fecha - Pago.FechaDocumentoRelacionado = ObjFactura.Fecha - Pago.ImportePagoVenta = Dr("Importe").ToString().ToDecimal() - Pago.ImportePago = Dr("Importe").ToString().ToDecimal() - Pago.CveMonedaPago = ObjFactura.CveMoneda - Pago.TCPago = TipoCambioNC - Pago.TipoPago = "NC" - Pago.CveVentaAmortizacion = ObjFactura.CveVenta 'Dr("CveVenta").ToString().ToEntero() - Pago.AplicaTraslado = False - Pago.Referencia = Concepto - 'Pago.CveConceptoPago = 251 - - ErrorPrepoliza = AplicaPrePolizaPagoVenta(ventaRef, Pago, ObjFactura.CvePrePoliza, ObjConta) - - If ErrorPrepoliza Then - Exit For - End If - - - Next - - If Not ErrorPrepoliza AndAlso ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=5, AutoConta:=AutoConta) Then - If ObjConta.ValorPolizaDescuadre > 0 Then - 'ErrorPrepoliza = True - GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") - End If - End If - - - If ErrorPrepoliza Then - Exit For - End If - End If - - 'APLICA DEVOLUCION SALDOS DIRECTOS - If AplicaDevolucion Then - Dim importeMovimientoDev As Decimal = TxtTotal.Text.ToDecimal - importeMovimientoDev = If(SaldoVentaDevolucion < importeMovimientoDev, SaldoVentaDevolucion, importeMovimientoDev) - If importeMovimientoDev > 0 Then - Dim importeMXDev As Decimal = importeMovimientoDev * tipoCambio * Multiplicador - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimientoDev.FormatoNumero(2)}" - - If UsaComplementariaClientes AndAlso tipoCambio > 1 Then - importeMXDev = importeMovimientoDev - Dim ImporteComplementaria As Decimal = ((importeMovimientoDev * tipoCambio) - importeMovimientoDev).RoundSQL - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, importeMovimientoDev, ImporteComplementaria, 203, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, TipoCambioPago:=TipoCambioFactura) Then - ErrorPrepoliza = True - Exit For - End If - End If - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, importeMovimientoDev, importeMXDev, 91, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - Exit For - End If - - If UsaComplementariaClientes AndAlso TipoCambioFactura > 1 Then - importeMXDev = importeMovimientoDev - Dim ImporteComplementaria As Decimal = ((importeMovimientoDev * TipoCambioFactura) - importeMovimientoDev).RoundSQL - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, importeMovimientoDev, ImporteComplementaria, 207, Referencia, Concepto, CveVenta:=CveVentaDevolucion, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(TipoCambioFactura = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar, CveVentaAmortizacion:=ObjFactura.CveVenta, TipoCambio:=TipoCambioFactura) Then - ErrorPrepoliza = True - Exit For - End If - End If - - Dim CveConceptoPagoNC As Integer = 251 - If ObjFactura.CveMoneda > 1 Then - CveConceptoPagoNC = 301 - End If - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, importeMovimientoDev, importeMXDev, CveConceptoPagoNC, Referencia, Concepto, CveVenta:=CveVentaDevolucion, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - Exit For - End If - - If tipoCambio <> TipoCambioFactura Then - Dim difFluctuacion As Decimal = tipoCambio - TipoCambioFactura - Dim CveConceptoFluctua As Integer = 64 '64.ganacia, 65.perdida - Dim TipoMovtoFluctua As Boolean = True - If difFluctuacion < 0 Then - CveConceptoFluctua = 65 - TipoMovtoFluctua = False - Else - CveConceptoFluctua = 64 - TipoMovtoFluctua = True - End If - Dim ImporteFluctuacion As Decimal = Math.Abs((importeMovimientoDev * difFluctuacion).RoundSQL) - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovtoFluctua, ImporteFluctuacion, ImporteFluctuacion, CveConceptoFluctua, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=ImporteFluctuacion, CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, TipoCambioPago:=TipoCambioFactura) Then - ErrorPrepoliza = True - Exit For - End If - End If - - If ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=2, AutoConta:=AutoConta) Then - If ObjConta.ValorPolizaDescuadre > 0 Then - GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") - End If - End If - - End If - End If - End If - importeMovimiento = 0 - Case 136 'Otros Conceptos Dinamicos - 'For Each row2 As GridViewRow In GVOtrosConceptos.Rows - ' If row2.FCTextBox("TxtCantidadConcepto").Text.ToDecimal > 0 Then - - ' importeMovimiento = row2.FCTextBox("TxtCantidadConcepto").Text.ToDecimal * ValorMultiplicador - ' CveSubProyectoContabilizar = CveSubProyectoVenta - ' If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - ' If importeMovimiento <> 0 Then - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, If(row2.DataKey("TipoMovto").ToString() = "True", True, False), importeMovimiento, importeMovimiento * tipoCambio, row2.DataKey("CveConceptoContable").ToEntero(), Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then - ' ErrorPrepoliza = True - ' End If - ' End If - - ' End If - 'Next - importeMovimiento = 0 - - Case 11 'Anticipo - - '[IPP] SI ES REFACTURACION LOS ANTICIPOS NO LOS DEBE APLICAR EN EL INGRESO REFACTURADO (VIEJO) - If NuevaFactura = 1 And ObjFactura.CveVenta = CveDevolucion Then - Exit Select - End If - - If ObjFactura.TipoDocto = "Ing" AndAlso ValorMultiplicador = -1 Then - For Each row2 As GridViewRow In GvAntNC.Rows - If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 11 Then - importeMovimiento = row2.DataKey("Importe").ToString().ToDecimal * ValorMultiplicador '- ((row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / row2.DataKey("TotalAnticipo").ToDecimal) * row2.DataKey("IVAAnticipo").ToDecimal) - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - CveSubProyectoContabilizar = CveSubProyectoVenta - - If importeMovimiento <> 0 Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - Exit For - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - - End If - Next - End If - - 'CUANDO APLICAN UNA NOTA DE CREDITO SOBRE UN ANTICIPO - If ObjFactura.TipoDocto = "Egs" AndAlso EsNCAmortizacion Then - If DtAnticipoAmortizacion IsNot Nothing AndAlso DtAnticipoAmortizacion.Rows.Count > 0 Then - For Each RowAnticipo As DataRow In DtAnticipoAmortizacion.Rows - Dim CveVentaAnticipo As Integer = RowAnticipo("CveVenta").ToString().ToEntero() - importeMovimiento = RowAnticipo("SaldoAnticipo").ToString().ToDecimal - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - CveSubProyectoContabilizar = CveSubProyectoVenta - If importeMovimiento <> 0 Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento, ConceptoContable, Referencia, Concepto, CveVenta:=CveVentaAnticipo, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - Exit For - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - Next - End If - End If - - 'cuando es anticipo - ' cuando es amortización de nota de crédito, y es la nc - ' cuando es amortización por descuento, y es el ingreso - ' cuando es amortización en cero - 'DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 2 AndAlso ObjFactura.TipoDocto.Contiene("Egs") OrElse - - 'Cuando la funcionalidad de amortizacion en PS esta activa - If Not ErrorPrepoliza Then - DT = TmpDTDetalle.FiltraParametros($"CvePS = {CvePSAmortizacion}") - If DT.Rows.Count > 0 Then - For Each Row2 As DataRow In DT.Rows - importeMovimiento = Math.Abs(Row2("PU").ToString().ToDecimal) - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - If importeMovimiento <> 0 Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - Next - End If - End If - - 'PorcentajeAmortizacion = sumaAmorticaciones / TxtTotal.Text.ToDecimal - importeMovimiento = 0 - - Case 91 'Amortizacion Nota de Credito - Dim Contabilizable As Boolean = If(UsuarioActual.CveEmpresa = 119, False, True) - - If ValorMultiplicador = -1 Then - 'cuando es cancelación - For Each row2 As GridViewRow In GvNC.Rows - - If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 91 Then - - importeMovimiento = row2.DataKey("Importe").ToDecimal * ValorMultiplicador - sumaAmorticaciones += importeMovimiento - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - CveSubProyectoContabilizar = CveSubProyectoVenta - - If importeMovimiento <> 0 Then - - Dim CveConceptoPagoNC As Integer = 251 - If ObjFactura.CveMoneda > 1 Then - CveConceptoPagoNC = 301 - End If - - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, importeMovimiento, importeMovimiento * tipoCambio, CveConceptoPagoNC, Referencia, Concepto, CveVenta:=row2.DataKey("CveVentaNC").ToString().ToEntero(), CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=Contabilizable) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, importeMovimiento, importeMovimiento * tipoCambio, 91, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=row2.DataKey("CveVentaNC").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=Contabilizable) Then - ErrorPrepoliza = True - Exit For - End If - Else - ErrorPrepoliza = True - Exit For - End If - End If - End If - Next - - Else - 'For Each row2 As GridViewRow In GVAnticipos.Rows - - ' If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 12 Then - - ' If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then - ' importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal - ' sumaAmorticaciones += importeMovimiento - ' If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - ' CveSubProyectoContabilizar = CveSubProyectoVenta - ' If importeMovimiento <> 0 Then - - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToString().ToEntero(), CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=Contabilizable) Then - ' ErrorPrepoliza = True - ' End If - ' End If - ' End If - - ' End If - - 'Next - - If UsuarioActual.Empresa.Funcionalidad(344) = "1" AndAlso ObjFactura.TipoDocto = "Egs" Then - Dim ListaNC As List(Of Modelos.Factura) = Nothing - - If NCDescuento Then - ListaNC = ListaNCDescuento - Else - ListaNC = ListaRemisionesNC - End If - - If ListaNC IsNot Nothing Then - For Each ObjRNC As Modelos.Factura In ListaNC - If ObjRNC.TipoDocto = "RNC" Then - importeMovimiento = ObjRNC.TotalRemNCAplicado * -1 - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - 'ACTUALIZA SI LA VENTA FUE MARCADA CON OTRA PARA EL FILTRO DE USADOS - If ObjRNC.Num3 > 0 Then - If Not ObjVentas.UpdateVentaRNCUsado(ObjRNC.CveVenta, ObjRNC.Num3.ToEntero()) Then - ErrorPrepoliza = True - End If - End If - Dim CveMovimiento As Integer = -1 - Dim CveAlmacen As Integer = -1 - - If ObjInventario IsNot Nothing AndAlso ObjInventario.GetInv_Mov(ObjRNC.CveVenta, UsuarioActual.CveEmpresa) Then - CveMovimiento = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero() - CveAlmacen = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero() - End If - - 'VERIFICA SI TIENE MOVIMIENTO DE ENTRADA DE USADO - If CveMovimiento > 0 AndAlso CveAlmacen > 0 Then - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 277, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - - Dim SubTotalCalculado As Decimal = (importeMovimiento / (1D + ObjRNC.PorcentajeIVA)).ToDecimal - - Dim Importe318 As Decimal = (SubTotalCalculado * ObjRNC.PorcentajeIVA).RoundSQL(2).ToDecimal() - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, Importe318, Importe318, 318, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, SubTotalCalculado, SubTotalCalculado, 150, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=ObjRNC.DtDetalle.MAX("CveClasificacion").ToEntero(), CveSubProyecto:=ObjRNC.CveSubProyecto, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, Contabilizable:=False) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - - Else - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 277, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 278, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Else - ErrorPrepoliza = True - End If - End If - - importeMovimiento = 0 - End If - Next - End If - End If - If sumaAmorticaciones <> 0 Then - - Dim CveConceptoPagoNC As Integer = 251 - If ObjFactura.CveMoneda > 1 Then - CveConceptoPagoNC = 301 - End If - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, sumaAmorticaciones, sumaAmorticaciones * tipoCambio, CveConceptoPagoNC, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=Contabilizable) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - - End If - importeMovimiento = 0 - - Case 4 'Venta Clasificacion - If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC", "Ant", "Egs", "Dev") Then - - Dim ConceptoContableAplicar As Integer = 4 - Dim CveVentaAplicar As Integer = ObjFactura.CveVenta - Dim CveVentaAmortizacionAplicar As Integer = -1 - - If ObjFactura.TipoDocto.Contiene("Egs") And DdlTipoComprobante.SelectedValue = "Ant" And CveDevolucion > 0 And NuevaFactura = 1 Then - ConceptoContableAplicar = 11 - CveVentaAplicar = CveDevolucion - CveVentaAmortizacionAplicar = ObjFactura.CveVenta - End If - - DT = TmpDTDetalle.FiltraParametros($"CvePS <> {CvePSAmortizacion}", "", {"CveClasificacion", "CveSubProyecto", "PorcentajeIVA", "CveActivoFijo"}) - - If DT.Rows.Count > 0 Then - 'Se agrega movimiento separado por la cuenta de ventas (ER) - For Each Row2 As DataRow In DT.Rows - importeMovimiento = (TmpDTDetalle.SUM("TotalImporte", String.Format("CveClasificacion = {0} And CveSubProyecto = {1} AND PorcentajeIVA = {2} AND ISNULL(CveActivoFijo,-1) = {3}", Row2("CveClasificacion"), Row2("CveSubProyecto"), Row2("PorcentajeIVA"), If(Row2("CveActivoFijo").ToString().ToEntero() > 0, Row2("CveActivoFijo").ToString().ToEntero(), -1))).ToString().ToDecimal()) * ValorMultiplicador - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - Concepto = $"{ObjFactura.SerieFolio} {If(Row2("CveClasificacion").ToString().ToEntero() > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString()}"), "")} - {If(Row2("CveSubProyecto").ToString().ToEntero() > 0, GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString()}"), "Sin SubProyecto Asignado")}" - - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - 'Nota cuando es Nota de crédiot, debe de tomar el devoluciones y rebajas - - If importeMovimiento <> 0 Then - - If Row2("CveActivoFijo").ToString().ToEntero() > 0 Then - Dim DtAF As DataTable = TmpDT.FiltraParametros($"CveActivoFijo = {Row2("CveActivoFijo")}") - - If DtAF.Rows.Count > 0 Then - For Each RowAF As DataRow In DtAF.FiltraParametros("", "", {"CveActivoFijo", "Obs"}).Rows - Dim ImporteCosto As Decimal = DtAF.SUMD("AFValorInicial", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) - Dim ImporteDepreciacion As Decimal = DtAF.SUMD("AFDepreciacion", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) - Dim ImporteC4 As Decimal = importeMovimiento - Dim ImporteC4MX As Decimal = importeMX - - importeMovimiento = ImporteC4 - ImporteCosto + ImporteDepreciacion - importeMX = ImporteC4MX - ImporteCosto + ImporteDepreciacion - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, ImporteCosto, (ImporteCosto).RoundSQL, 49, Referencia, $"COSTO {RowAF("Obs")}", CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveActivoFijo:=Row2("CveActivoFijo").ToString().ToEntero(), Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - End If - Next - End If - End If - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContableAplicar, Referencia, Concepto, CveVenta:=CveVentaAplicar, CveVentaAmortizacion:=CveVentaAmortizacionAplicar, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=Row2("CveSubProyecto").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, PorcentajeImpuesto:=Row2("PorcentajeIVA").ToString().ToDecimal) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - Next - End If - End If - - importeMovimiento = 0 - Case 150 'Descuento sobre ventas - If (ObjFactura.TipoDocto.Contiene("Egs", "Dev") AndAlso Not EsNCAmortizacion) OrElse NCDescuento Then - - Dim ConceptoContableAplicar As Integer = 150 - Dim CveVentaAplicar As Integer = ObjFactura.CveVenta - Dim CveVentaAmortizacionAplicar As Integer = -1 - - DT = TmpDTDetalle.FiltraParametros($"CvePS <> {CvePSAmortizacion}", "", {"CveClasificacion", "CveSubProyecto", "PorcentajeIVA"}) - - If DT.Rows.Count > 0 Then - 'Se agrega movimiento separado por la cuenta de ventas (ER) - For Each Row2 As DataRow In DT.Rows - importeMovimiento = (TmpDTDetalle.SUM("TotalImporte", String.Format("CveClasificacion = {0} And CveSubProyecto = {1} AND PorcentajeIVA = {2}", Row2("CveClasificacion"), Row2("CveSubProyecto"), Row2("PorcentajeIVA"))).ToString().ToDecimal) * ValorMultiplicador - - importeMX = importeMovimiento * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - Concepto = $"{ObjFactura.SerieFolio} {If(Row2("CveClasificacion").ToString().ToEntero() > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString()}"), "")} - {If(Row2("CveSubProyecto").ToString().ToEntero() > 0, GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString()}"), "Sin SubProyecto Asignado")}" - - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - 'Nota cuando es Nota de crédiot, debe de tomar el devoluciones y rebajas - If importeMovimiento <> 0 Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContableAplicar, Referencia, Concepto, CveVenta:=CveVentaAplicar, CveVentaAmortizacion:=CveVentaAmortizacionAplicar, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=Row2("CveSubProyecto").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, PorcentajeImpuesto:=Row2("PorcentajeIVA").ToString().ToDecimal) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - Next - End If - End If - - importeMovimiento = 0 - Case 103 'Descuento - - importeMovimiento = 0 - - - Case 8 'Ret IVA por Trasladar - If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") AndAlso ObjFactura.CveTipoRetencion <> 4 Then 'SI NO ES RETENCION DE IVA DE SERVICIOS - importeMovimiento = ObjFactura.RetIVA * ValorMultiplicador - importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then - TipoMovimiento = Not TipoMovimiento - ConceptoContable = 62 - importeMovimiento = importeMovimiento * -1 - importeMX = importeMX * -1 - End If - End If - Case 313 'Ret Iva Servicios - If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") AndAlso ObjFactura.CveTipoRetencion = 4 Then 'SI TIENE RETENCION DE IVA DE SERVICIOS - importeMovimiento = ObjFactura.RetIVA * ValorMultiplicador - importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then - TipoMovimiento = Not TipoMovimiento - ConceptoContable = 314 - importeMovimiento = importeMovimiento * -1 - importeMX = importeMX * -1 - End If - - End If - - Case 9 'Ret ISR por Trasladar - If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") Then - importeMovimiento = ObjFactura.RetISR * ValorMultiplicador - importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador - FechaMovimiento = ObjFactura.FechaPago - CveSubProyectoContabilizar = CveSubProyectoVenta - - 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then - TipoMovimiento = Not TipoMovimiento - ConceptoContable = 63 - importeMovimiento = importeMovimiento * -1 - importeMX = importeMX * -1 - End If - - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - End If - Case 13 'Iva por Trasladar - If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") And ObjFactura.IVA > 0 Then - importeMovimiento = ObjFactura.IVA * ValorMultiplicador - importeMX = Math.Round(importeMovimiento * tipoCambio * Multiplicador, 2) - FechaMovimiento = ObjFactura.FechaPago - PorcentajeImpuesto = TmpDT.MAX("PorcentajeIVA").ToDecimal - - 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then - TipoMovimiento = Not TipoMovimiento - ConceptoContable = 61 - importeMovimiento = importeMovimiento * -1 - importeMX = importeMX * -1 - End If - - CveSubProyectoContabilizar = CveSubProyectoVenta - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - End If - - - Case 38 'IEPS por Trasladar - If Not ObjFactura.TipoDocto.Contiene("Rem") Then - importeMovimiento = ObjFactura.IEPS * ValorMultiplicador - importeMX = Math.Round(importeMovimiento * tipoCambio * Multiplicador, 2) - FechaMovimiento = ObjFactura.Fecha - CveSubProyectoContabilizar = CveSubProyectoVenta - - 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO - If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then - TipoMovimiento = Not TipoMovimiento - ConceptoContable = 39 - importeMovimiento = importeMovimiento * -1 - importeMX = importeMX * -1 - CveIE = ObjFacturaNC.PagadoCveIE - End If - If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" - - End If - - - Case 30 'PAGO - BANCOS - 'If DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 AndAlso ObjFactura.TipoDocto <> "Rem" Then - - ' For Each DrPago As DataRow In DtPagos.Rows - ' CveIEPago = -1 - - ' FolioIE = -1 - ' FolioIE = ObjBancos.GetNextFolio(DrPago("CveCuenta").ToString().ToEntero(), DrPago("CveTipoMovimiento").ToString().ToEntero()) - ' If Not FolioIE > 0 Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'If DrPago("CveTipoMovimiento").ToString().ToEntero() = 8 Then '13 - ' ' DrPago("Importe") = DrPago("Importe").ToString().ToDecimal - TxtCambio.Text.ToDecimal - ' 'End If - - ' CveIEPago = ObjBancos.AddBancos_IE(DrPago("CveCuenta").ToString().ToEntero(), DrPago("CveTipoMovimiento").ToString().ToEntero(), Fecha, FolioIE.ToString(), String.Format("PAGO: {0}", TxtFolio.Text), DrPago("Importe").ToString().ToDouble, DdlMoneda.SelectedValue.ToEntero(), tipoCambio, DrPago("Observaciones").ToString(), "", False, False, -1, ObjFactura.CvePrePoliza, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=CveCorte, MesesSinIntereses:=DrPago("MesesSinIntereses").ToString().ToEntero(), Modulo:="Ventas/Guardar") - - ' If CveIEPago > 0 Then - ' importeMovimiento = DrPago("Importe").ToString().ToDecimal * ValorMultiplicador - ' importeMX = (importeMovimiento * tipoCambio * Multiplicador).RoundSQL - ' CveSubProyectoContabilizar = CveSubProyectoVenta - - ' 'MONEDA EXTRANJERA - ' If ObjFactura.CveMoneda > 1 Then - ' 'BANCOS - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 30, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'BANCOS COMPLEMENTARIA - ' If UsaComplementariaClientes Then - ' Dim ImporteComplementaria As Decimal = ((importeMovimiento * tipoCambio) - importeMovimiento).RoundSQL - - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 204, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, ImporteComplementaria, 204, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, TipoCambioPago:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ' ErrorPrepoliza = True - ' End If - ' End If - - ' 'PAGO CLIENTES - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 2, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMovimiento, 2, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'PAGO CLIENTES COMPLEMENTARIA - ' If UsaComplementariaClientes Then - ' Dim ImporteComplementaria As Decimal = ((importeMovimiento * tipoCambio) - importeMovimiento).RoundSQL - - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 207, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, 0, ImporteComplementaria, 207, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, TipoCambioPago:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then - ' ErrorPrepoliza = True - ' End If - ' End If - - ' Else - ' 'BANCOS - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 30, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'PAGO CLIENTES - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 2, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 2, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' End If - - ' If ObjFactura.IVA <> 0 Then - ' Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeIVA").ToDecimal - - ' 'IVA X TRASLADAR - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 13, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.IVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 13, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'IVA PAGADO - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 61, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.IVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 61, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - ' End If - - ' If ObjFactura.IEPS <> 0 Then - ' Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeIEPS").ToDecimal - - ' 'IEPS X TRASLADAR - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 38, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If ObjFactura.IEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total) * tipoCambio * Multiplicador, 38, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' 'IEPS PAGADO - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 39, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If ObjFactura.IEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total) * tipoCambio * Multiplicador, 39, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - ' End If - - ' If ObjFactura.RetIVA <> 0 AndAlso ObjFactura.CveTipoRetencion = 4 Then - ' Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeRetIVA").ToDecimal - ' 'RETIVA X TRASLADAR - ' 'OBTENER CUENTAS - - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 313, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 313, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - - ' Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 314, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) - ' If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 314, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then - ' ErrorPrepoliza = True - ' Exit For - ' End If - ' End If - ' Else - ' ErrorPrepoliza = True - ' Exit For - ' End If - ' Next - ' importeMovimiento = 0 - 'End If - importeMovimiento = 0 - End Select - - If (importeMovimiento <> 0 OrElse (importeMovimiento = 0 AndAlso ObjFactura.Total = 0 AndAlso ConceptoContable = 1)) And Not ErrorPrepoliza Then - - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, PorcentajeImpuesto:=PorcentajeImpuesto, Contabilizable:=SeContabiliza) Then - ErrorPrepoliza = True - Else - ViewState("SeGuardoPrePoliza") = True - End If - End If - - If ErrorPrepoliza Then - Exit For - End If - Next - - End If - - 'Si es Facturacion de una remision cancelamos, traspasamos saldos y agregamos evento a la bitacora - If RemisionesLista.Count > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then - - 'se verifica que el documento que se está generando sea "Ing", "Ant" - If Not ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then - ErrorPrepoliza = True - ErrorList.Add("No se pueden facturar las remisiones, con ese tipo de comprobante seleccionado") - Else - For Each CveRemision As Integer In RemisionesLista - - If Not ObjConta.TraspasarSaldosRemision(CveRemision, ObjFactura.CvePrePoliza, ObjFactura.CveVenta) Then - ErrorPrepoliza = True - End If - - If CveRemision > 0 Then - If ObjVentas.GetVenta(CveRemision, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then - Dim SerieFolioRem As String = ObjVentas.DtResultados.Rows(0)("SerieFolio").ToString() - 'Factura - If Not ObjEventos.AddEventoBitacora($"Venta facturada de Remisión: {SerieFolioRem}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then - ErrorPrepoliza = True - End If - Else - ErrorPrepoliza = True - End If - Else - ErrorPrepoliza = True - End If - - 'Remision - If Not ObjEventos.AddEventoBitacora($"Remisión facturada en Venta: {ObjFactura.SerieFolio}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveRemision) Then - ErrorPrepoliza = True - End If - Next - End If - End If - - 'REGRESA SALDO A LAS REMISIONES QUE SE FACTURARON EN EL INGRESO QUE SE ESTA CANCELANDO - If ObjFactura.TipoDocto = "Ing" And ValorMultiplicador = -1 AndAlso NuevaFactura <> 1 AndAlso Not SeCancelaRemisionProceso Then ' se debe de excluir cuando es refacturación - If ObjVentas.GetRemisionesRelacionadas(ObjFactura.CveVenta, ObjFactura.TipoDocto) AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then - For Each Dr As DataRow In ObjVentas.DtResultados.Rows - Dim Selecciono As Boolean = False - - If Not Selecciono Then - If Not ObjConta.TraspasarSaldosRemision(Dr("CveVenta").ToString().ToEntero(), ObjFactura.CvePrePoliza, ObjFactura.CveVenta, 1) Then - ErrorPrepoliza = True - End If - - 'Remision - If Not ObjEventos.AddEventoBitacora($"Facturación cancelada en: ", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Dr("CveVenta").ToString().ToEntero()) Then - ErrorPrepoliza = True - End If - End If - Next - End If - End If - - If NuevaFactura = 1 AndAlso TotalOriginal > TxtTotal.Text.ToDouble AndAlso ObjEventos IsNot Nothing Then - If Not ObjEventos.AddEventoBitacora($"Factura a menor precio de la factura origen.", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then - ErrorPrepoliza = True - Else - Alert("Factura a menor precio de la factura origen.", TipoMensaje.MsgAdvertencia) - End If - End If - - 'Simplificacion de PrePolizas - 'If ObjFactura.TipoDocto.Contiene("Egs", "Dev") OrElse SimplificarPrePoliza Then - ' If Not ObjConta.PrePolizaSimplificacion(ObjFactura.CvePrePoliza, UsuarioActual.CveEmpresa) Then - ' Alert("No se pudo simplificar los movimientos", TipoMensaje.MsgError) - ' End If - 'End If - - Dim ModalidadRefacturacion As Integer = UsuarioActual.Empresa.Funcionalidad(586).ToEntero() - - 'REFACTURACION CON PAGOS, DEBE CANCELAR SALDOS DEL DOCUMENTO ANTERIOR Y TRASPASAR PAGOS AL NUEVO - If ModalidadRefacturacion = 2 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso ObjFactura.NuevaFactura = 1 Then - If Not ObjConta.TraspasarSaldosPrePolizasRefacturacion(ObjFacturaNC.CveVenta, ObjFactura.CveVenta, ObjFactura.CvePrePoliza, CvePlantilaPoliza, UsuarioActual.CveEmpresa) Then - ErrorList.Add("Ocurrió un error al traspasos saldos en refacturación") - End If - Else - 'EN CASO DE SER REFACTURACION DE ANTICIPO SE ACTUALIZAN LAS VENTAS APLICADAS HACIA EL NUEVO - If NuevaFactura = 1 AndAlso CveDevolucion > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ant") Then - If Not ObjVentas.TraspasaVentasAplicadasAnt(ObjFactura.CveVenta, CveDevolucion, UsuarioActual.CveEmpresa, ObjFactura.CvePrePoliza) Then - ErrorPrepoliza = True - End If - End If - End If - - If ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=2, AutoConta:=AutoConta) Then - If ObjConta.ValorPolizaDescuadre > 0 Then - If ObjConta.ValorPolizaDescuadre = 2 Then - ErrorPrepoliza = True - Alert(ObjConta.MensajePolizaDescuadre, TipoMensaje.MsgError) - End If - 'ErrorPrepoliza = True - GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") - - 'SIRVE PARA VER LA PREPOLIZA QUE SE VALIDA - 'If ObjConta.GetPrePolizasDetalle(ObjFactura.CvePrePoliza) Then - ' Dim DtTest = ObjConta.DtResultados - 'End If - End If - Else - ErrorPrepoliza = True - End If - - Return ErrorPrepoliza - Catch ex As Exception - GuardaLog("GuardaPreP." & ex.ToString()) - Return True - End Try - - End Function - - Private Function GuardarVentaImpuestosLocales(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, Factura As Modelos.Factura, Optional ValorMultiplicador As Integer = 1) As Boolean - Dim ErrorPrepoliza As Boolean = False - - If TmpDTImpuestos IsNot Nothing AndAlso Factura.CvePrePoliza > 0 AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Cot", "Rem") Then - - Dim Importe As Decimal - Dim Concepto As String - Dim tipoCambio As Decimal - Dim CveSubProyectoContabilizar As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() - - For Each RowIL As DataRow In TmpDTImpuestos.Rows - If RowIL("TipoImpuesto").ToString().ToEntero() > 0 Then - - Importe = RowIL("Importe").ToString().ToDecimal * ValorMultiplicador - Concepto = ViewState("VentaFolio").ToString() - - If ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio > 0 Then - tipoCambio = Factura.TipoCambio - ElseIf ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio <= 1 Then - If UsuarioActual.CveEmpresa.Contiene(13, 83) Then - tipoCambio = GlobalTipoCambio(Factura.Fecha.AddDays(-1)).ToString().ToDecimal - Else - tipoCambio = GlobalTipoCambio(Factura.Fecha).ToString().ToDecimal - End If - Else - tipoCambio = 1 - End If - - Select Case RowIL("TipoImpuesto").ToString() - Case "1" - If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, False, Importe, Importe * tipoCambio, 27, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Case "3" - If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, False, Importe, Importe * tipoCambio, 116, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Case "4" - If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, False, Importe, Importe * tipoCambio, 58, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - Case "5" - If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, True, Importe, Importe * tipoCambio, 27, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then - ErrorPrepoliza = True - End If - End Select - End If - Next - - End If - - Return ErrorPrepoliza - End Function - -#End Region - -#Region " VISTA PREVIA NEW " - Private Sub VistaPreviaNew() - - If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then - Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana(""/Ventas/PopUpBuscarClientes.aspx?Opt=Fact"", 800, 547, ""N"", ""PopUpBuscar"")") - Exit Sub - End If - - CreaObjetosVenta(True) - - If ObjFactura Is Nothing Or (ObjFactura.Cliente Is Nothing And Not CveEmpresaCRM > 0) Then - Alert("Ocurrió un error al procesar los datos para la vista previa. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgError) - ObjFactura = Nothing - Exit Sub - End If - - Dim CartaPorte As Modelos.MSubReportData = Nothing - - If UsuarioActual.CveEmpresa = 13 Then - CartaPorte = New Modelos.MSubReportData() - CartaPorte.Parametros.Add(New ReportParameter($"TieneCartaPorte", "False")) - End If - - ImprimirbytesPDF(PdfFactura(ObjFactura, Guardar:=False, SubReportData:=CartaPorte), "Factura", "PDF") - - End Sub - -#End Region - -#Region "¡ P D F R E P O R T V I E W E R !" - Private Sub GeneraPDFFactura(EnviaCorreo As Boolean, Factura As Modelos.Factura, UsuarioActual As Usuario, strURLHOST As String, Optional CorreoCRM As String = "") - 'GUARDA PDF - Dim LocalSerieFolio As String = String.Empty - Dim LocalTipoDocto As String = String.Empty - - 'TIMBRADO NUEVO - Try - DescargarFactura(Factura.CveVenta, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, Regenerar:=True, strURLHOST:=strURLHOST) - Catch ex As Exception - OnError("Ocurrió un error al generar el PDF", ex) - End Try - - Dim ErrorCorreo As Boolean = False - - 'If EnviaCorreo Then - ' If Factura IsNot Nothing Then - ' 'MANDA CORREO - ' If EnviaCorreo Then - ' LocalSerieFolio = Factura.SerieFolio - ' LocalTipoDocto = Factura.TipoDocto - - ' Dim ArchivoAdjunto As String = "" - ' Dim ArchivoXML As String = String.Format("{0}XML\{1}\{2}.xml", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) - ' Dim ArchivoPDF As String = String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) - ' If Adjunto <> "" Then - ' ArchivoAdjunto = String.Format("{0}Ventas\{1}", UsuarioActual.Empresa.Ruta, Adjunto) - ' End If - - ' Try - ' Dim FIXML As New FileInfo(ArchivoXML) - ' Dim FIPDF As New FileInfo(ArchivoPDF) - ' If FIXML.Exists AndAlso FIPDF.Exists Then - ' MandaMails(UsuarioActual, CveVenta, Factura.TipoDocto, LocalSerieFolio, EnviaCorreo, ArchivoXML, ArchivoPDF, ArchivoAdjunto, CorreoCRM) - ' Else - ' ErrorCorreo = True - ' End If - ' Catch ex As Exception - ' ErrorCorreo = True - ' End Try - - ' End If - ' Else - ' ErrorCorreo = True - ' End If - - ' If ErrorCorreo Then - ' Dim ObjVentas As New ClsVentas - ' If EnviaCorreo Then - ' ObjVentas.UpdateVentaMail(3, CveVenta) - ' Else - ' ObjVentas.UpdateVentaMail(0, CveVenta) - ' End If - ' ObjVentas.Dispose() - ' End If - 'End If - - End Sub - Private Sub GeneraPDFCotizacion(EnviaCorreo As Boolean, Optional CorreoContactoCRM As String = "", Optional pdfCRM As Byte() = Nothing, - Optional SerieFolioCRM As String = "", Optional TipoDoctoCRM As String = "") - - Dim pdf As Byte() = Nothing - 'GUARDA PDF - Dim LocalSerieFolio As String = String.Empty - Dim LocalTipoDocto As String = String.Empty - - - - 'TIMBRADO NUEVO - - If CorreoContactoCRM.Trim.Length > 0 Then - pdf = pdfCRM - LocalSerieFolio = SerieFolioCRM - LocalTipoDocto = TipoDoctoCRM - Else - Try - If CveVenta > 0 Then - ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False) - End If - - pdf = PdfFactura(ObjFactura) - - LocalSerieFolio = ObjFactura.SerieFolio - LocalTipoDocto = ObjFactura.TipoDocto - - Catch ex As Exception - OnError("Ocurrió un error al generar el PDF", ex) - End Try - End If - - 'MANDA CORREO - If EnviaCorreo Then - Dim ArchivoAdjunto As String = "" - Dim ArchivoXML As String = "" - Dim ArchivoPDF As String = String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) - - If Adjunto <> "" Then - ArchivoAdjunto = String.Format("{0}Ventas\{1}", UsuarioActual.Empresa.Ruta, Adjunto) - End If - - 'Try - ' ' BytesPdfCotizacion(CveVenta) - ' Dim Hilo As New System.Threading.Thread(Sub() MandaMails(UsuarioActual, CveVenta, DdlTipoComprobante.SelectedValue.ToString(), LocalSerieFolio, False, ArchivoXML, ArchivoPDF, ArchivoAdjunto, CorreoContactoCRM:=CorreoContactoCRM)) - ' Hilo.Start() - 'Catch ex As Exception - - ' OnError("Ocurrió error al mandar Mail", ex) - ' Dim ObjVentas As New ClsVentas - ' ObjVentas.UpdateVentaMail(0, CveVenta) - ' ObjVentas.Dispose() - - - 'End Try - End If - - End Sub - - -#End Region - - - - - - -#Region " VISTA PREVIA " - Protected Sub BtnVistaPrevia_Click(sender As Object, e As System.EventArgs) Handles BtnVistaPrevia.Click - VistaPreviaNew() - End Sub - -#End Region - - -#Region "D R O P - D O W N - L I S T" - Private Sub DdlPSIndexChange(CvePSParametro As Integer, Ddl As ADServerControl.Dropdownlost) - - If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then - Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana(""/Ventas/PopUpBuscarClientes.aspx?Opt=Fact"", 800, 547, ""N"", ""PopUpBuscar"")") - Exit Sub - End If - - If CvePSParametro > 0 Then - Dim drPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimero("") - - If drPS IsNot Nothing Then - 'HdnUnidadMedida.Value = PS.Rows(0)("CveUnidadMedida").ToString() - HdnPS.Value = drPS("PS").ToString() - HdnCodigoPS.Value = drPS("PSCodigo").ToString() - HdnTipoPS.Value = drPS("CveTipoPS").ToString() - HdnTipoInv.Value = drPS("Inv_CveMetodoInventario").ToString() - HdnAplicaIEPS.Value = drPS("AplicaIEPS").ToString() - HdnPorcentajeIEPS.Value = drPS("IEPSPorcentaje").ToString() - DdlUnidadMedida.Items.Clear() - If UsuarioActual.Empresa.UsaInventarios Then - DdlUnidadMedida.DataSource = GlobalDTProductosServiciosEquivalencias(CvePSParametro, -1, UsuarioActual.CveEmpresa) - Else - DdlUnidadMedida.DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) - End If - DdlUnidadMedida.Items.Insert(0, New ListItem("Seleccione", "-1")) - DdlUnidadMedida.SelectedValue = "-1" - DdlUnidadMedida.DataBind() - DdlUnidadMedida.SelectedValueExist(drPS("CveUnidadMedida").ToString()) - - If drPS("CveTipoPS").ToString() = "1" Then 'Si es servicio - If UsuarioActual.Empresa.Funcionalidad(558).ToString() = "1" Then 'Si es Empresa llantera - TxtPrecio.Enabled = True - Else - 'TxtPrecio.Enabled = False - End If - Else - TxtPrecio.Enabled = True - End If - - Dim PSCodigoSAT As String = drPS("SATClavePS").ToString - - If UsuarioActual.TienePermisoProceso(68) AndAlso Not PSCodigoSAT.Contiene("84111506", "80141610") Then TxtPrecio.Enabled = False - - 'If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count = 0 AndAlso Not ChkEmitirComercioExterior.Checked Then - ' DdlMoneda.SelectedValueExist(drPS("CveMoneda").ToString()) - ' CambiaMoneda() - 'End If - - 'If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count = 0 AndAlso Not ChkEmitirComercioExterior.Checked Then - ' DdlMoneda.SelectedValueExist(drPS("CveMoneda").ToString()) - ' CambiaMoneda() - 'End If - - 'SUGIERE PRECIO - Dim PrecioSugerido As Decimal = 0 - Dim tPrecioSugerido As Decimal = 0 - tPrecioSugerido = drPS("Precio").ToString().ToDecimal - Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePSParametro, drPS("CveClasificacion").ToString().ToEntero()) - - PrecioSugerido = ObjPrecioSugerido.PrecioSugerido - - - - If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido - - TxtPrecio.Text = PrecioSugerido.ToString("#,###.####") ' que muestre hasta los 4 digitos si lo requiere - - - - - HdnIVAPS.Value = If(drPS("IVA").ToString() = "-1", ViewState("IVA"), drPS("IVA").ToString()).ToString() - HdnIVARetAPS.Value = drPS("RetIVA").ToString() - HdnCodigo.Value = drPS("Codigo").ToString() - If DdlClasificacion.SelectedIndex = 0 Then - If drPS("CveClasificacion").ToString() IsNot Nothing Then - DdlClasificacion.SelectedValueExist(drPS("CveClasificacion").ToString()) - Else - Alert("El Productos/Servicio no tiene asignada una Clasificación.", TipoMensaje.MsgInformacion) - End If - - End If - - End If - - ElseIf CvePSParametro = -2 Then - CargaPS(DdlClasificacion.SelectedValue.ToEntero(), Ddl) - End If - - UPPPS.Update() - UpPS.Update() - UpDVAddPS.Update() - - End Sub - - Private Function CalculaPrecioSugerido(CvePSParametro As Integer, CveClasificacion As Integer, Optional CvePrecioListaSugerido As Integer = -1) As Modelos.MPrecioSugerido - Dim Retorno As New Modelos.MPrecioSugerido - - Dim PrecioSugerido As Decimal = 0 - - If UsuarioActual.CveEmpresa.Contiene(1) Then - Dim ObjPS As New ClsProductosServicios - If ObjPS.GetPorcentajeProductos(CveCliente) Then - Dim PrecioAplicado As Decimal = ObjPS.DtResultados.FiltraParametros($"CvePS = {CvePSParametro}").FiltroPrimeroValor("PrecioA").ToDecimal - If PrecioAplicado > 0 Then - PrecioSugerido = PrecioAplicado - End If - End If - ObjPS.Dispose() - End If - - If UsuarioActual.Empresa.Funcionalidad(404).ToEntero > 0 Then 'cuando el valor es 10.- secuencia Cliente/Sucursal, 20 - sucursal/cliente - Dim TipoPrecioLista As Integer = UsuarioActual.Empresa.Funcionalidad(404).ToEntero - ' si es 10. primero el cliente - Dim CvePrecioListaPS As Integer - Dim PorcentajePrecio As Decimal = 0 - - If TipoPrecioLista = 10 Then - - CvePrecioListaPS = Me.CvePrecioListaCliente - If CvePrecioListaPS <= 0 Then - CvePrecioListaPS = GlobalDTSubProyectos(-1, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() - - End If - Else - CvePrecioListaPS = GlobalDTSubProyectos(-1, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() - If CvePrecioListaPS <= 0 Then - CvePrecioListaPS = Me.CvePrecioListaCliente 'GlobalDTCliente(UsuarioActual.CveEmpresa, Estatus:=-1, CveCliente:=CveCliente).FiltroPrimeroValor("CvePrecioLista").ToEntero() - End If - - If Me.CvePrecioListaCliente > 0 Then - Dim ArrayClientes As String() = UsuarioActual.Empresa.Funcionalidad(711).Split(",".ToCharArray()) - 'VERIFICA SI EL CLIENTE ACTUAL DEBE TENER PRIORIDAD SU LISTA DE PRECIOS - If ArrayClientes.Length > 0 AndAlso ArrayClientes.Count(Function(cliente) cliente.Trim() = Me.CveCliente.ToString()) > 0 Then - CvePrecioListaPS = Me.CvePrecioListaCliente - End If - End If - - End If - - - - If CvePrecioListaPS > 0 Then - Dim ObjPS As New ClsProductosServicios - If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioListaPS, CvePS:=CvePSParametro) Then - PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal - PorcentajePrecio = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal - End If - ObjPS.Dispose() - End If - - If PrecioSugerido = 0 Then - Dim ObjInventarios As New ClsInventarios - Dim CostoPS As Decimal = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - If CostoPS = 0 Then CostoPS = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, -1, CveTipoAlmacen:=1) - ObjInventarios.Dispose() - If CostoPS > 0 And PorcentajePrecio > 0 Then - PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS - End If - End If - Me.CvePrecioLista = CvePrecioListaPS - Retorno.CvePrecioLista = CvePrecioListaPS - End If - - - If PrecioSugerido > 0 Then - Dim PrecioBaseCosto As Decimal = 0 - PrecioBaseCosto = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion).FiltroPrimeroValor("PrecioBaseCosto", "").ToDecimal - - If PrecioBaseCosto > 0 Then - PrecioSugerido = PrecioSugerido * ((PrecioBaseCosto / 100) + 1) - End If - End If - - Retorno.PrecioSugerido = PrecioSugerido - - Return Retorno - End Function - Protected Sub DdlPS_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DdlPS.selectedindexchange - DdlPSIndexChange(DdlPS.SelectedValue.ToEntero(), DdlPS) - End Sub - Protected Sub DdlClasificacion_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlClasificacion.SelectedIndexChanged - CargaPS(DdlClasificacion.SelectedValue.ToEntero(), DdlPS) - UpPS.Update() - End Sub - 'Protected Sub DdlNCFactura_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlNCFactura.SelectedIndexChanged - ' Dim objcompras As New ClsCompras - ' If objcompras.GetCompraDetallealmacen(0, DdlNCFactura.SelectedValue.ToEntero()) Then - ' GvInvNC.DataSource = objcompras.DtResultados - ' If objcompras.DtResultados.Rows.Count > 0 Then - ' Tab.ActiveTabIndex = 1 - ' Updatetabs.Update() - ' End If - ' Else - ' GvInvNC.DataSource = Nothing - ' End If - ' GvInvNC.DataBind() - ' UpINVNC.Update() - ' objcompras.Dispose() - 'End Sub - Protected Sub DdlTipoComprobante_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlTipoComprobante.SelectedIndexChanged - CambiaTipoComprobante() - End Sub - Private Sub CambiaTipoComprobante() - CambiaTipoDocto() - - - End Sub - Private Sub CambiaTipoDocto() - - ConfiguraTipoDocto() - CargaFolios() - CargaEstatusFactura(DdlTipoComprobante.SelectedValue) - UpEstatus.Update() - - - - 'REINICIALIZA VALORES DE ENTREGA POR ADELANTADO - RequiereAlmacenDestino = False - - - If DdlTipoComprobante.SelectedValue = "Cot" And UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") Then - Alert("Se ocupa una autorización.", TipoMensaje.MsgAdvertencia) - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - 'RBLPago.Enabled = False - 'TxtFechaVencimientoCotizacion.Text = NowADS().ToString() - GvPS.Columns(5).Visible = True - - - UpnTools.Update() - 'tdTelefonoGen.Visible = False - 'tdTxtTelefonoGen.Visible = False - - - Else - If DdlTipoComprobante.SelectedValue = "Cot" Then - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - 'RBLPago.Enabled = False - 'RBLPago.SelectedValue = "2" - 'TxtFechaVencimientoCotizacion.Text = NowADS().ToString() - GvPS.Columns(5).Visible = True - - 'tdTelefonoGen.Visible = False - 'tdTxtTelefonoGen.Visible = False - - - Else - TrDireccion.Visible = True - TrCiudad.Visible = True - TrRFC.Visible = True - GvPS.Columns(5).Visible = False - - - LblMensaje.Visible = UsuarioActual.Empresa.Funcionalidad(152) <> "" And DdlTipoComprobante.SelectedValue.Contiene("Ing") - - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Dev") Then - - 'ObtenerFechaVencimientoCER() - - If DdlTipoComprobante.SelectedValue.Contiene("Egs") Then - - 'se cargan las facturas timbradas - 'CargaFacturasRelacionar() - 'RegistraScript("$('#DivRelacionarFacturasNC').modal('show');") - End If - End If - - 'If DdlTipoComprobante.SelectedValue.Contiene("Rem", "PeC", "PA", "Pd2") Then - - ' 'ENTREGA POR ADELANTADO - ' If UsuarioActual.Empresa.Funcionalidad(145) = "1" And Not DdlTipoComprobante.SelectedValue.Contiene("PA") Then 'If UsuarioActual.CveEmpresa.Contiene(4, 72, 80, 119) Then - ' RequiereAlmacenDestino = True - - ' 'If DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then - ' ' TrAlmacenAsignado.Visible = True - ' 'End If - - ' Dim CveAlmacenDestino As Integer = DtContratos.FiltroPrimeroValor("CveAlmacenDestino", $"CveContrato = {If(DdlContratosModal.Items.Count > 0, DdlContratosModal.SelectedValue, "0")}").ToEntero() - ' If CveAlmacenDestino > 0 Then - ' DdlAlmacenAsignado.Items.Clear() - ' DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} And CveTipoAlmacen In (4,10)") - ' DdlAlmacenAsignado.DataBind() - ' DdlAlmacenAsignado.Items.Insert(0, New ListItem(DtContratos.FiltroPrimeroValor("Almacen", $"CveContrato = {DdlContratosModal.SelectedValue}"), CveAlmacenDestino.ToString())) - ' DdlAlmacenAsignado.SelectedValue = CveAlmacenDestino.ToString() - ' Else - ' DdlAlmacenAsignado.Items.Clear() - ' DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} AND CveTipoAlmacen IN (10)") - ' DdlAlmacenAsignado.DataBind() - ' End If - - ' Dim CveAlmacenOrigen As Integer = DtContratos.FiltroPrimeroValor("CveAlmacenOrigen", $"CveContrato = {If(DdlContratosModal.Items.Count > 0, DdlContratosModal.SelectedValue, "0")}").ToEntero() - - ' If CveAlmacenOrigen > 0 Then - ' DdlAlmacenOrigen.Items.Clear() - ' DdlAlmacenOrigen.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1, CveAlmacen:=CveAlmacenOrigen) '.FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") - ' DdlAlmacenOrigen.DataBind() - ' DdlAlmacenOrigen.SelectedValueExist(CveAlmacenOrigen.ToString()) - ' End If - - ' UpParametros.Update() - ' Else - ' RequiereAlmacenDestino = False - ' TrAlmacenAsignado.Visible = False - ' TrAlmacenOrigen.Visible = False - ' End If - - ' 'ENVIO DE FACTURA - - ' ChkEnviarFactura.Checked = False - ' ChkEnviarFactura.Visible = True - ' LblEnviarMail.Visible = True - - ' If CveVenta > 0 AndAlso EnviarCorreoCliente Then ChkEnviarFactura.Checked = EnviarCorreoCliente - 'End If - - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "PA", "Pd2") AndAlso (ReceptorRFC = "XAXX010101000" Or LblRFC.Text = "XAXX010101000") Then - TrDireccion.Visible = False - TrCiudad.Visible = False - TrRFC.Visible = False - 'tdTelefonoGen.Visible = True - 'tdTxtTelefonoGen.Visible = True - Else - 'TxtAtencionA.Text = "" - 'TxtTelefonoGenerico.Text = "" - End If - End If - - - End If - - If DdlTipoComprobante.SelectedValue.Contiene("Ing") Then - ImgAntiPend.Visible = True - Else - ImgAntiPend.Visible = False - End If - - - - - 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO - If EsCreaApartirDe OrElse ModalidadEdicion OrElse CveVenta <= 0 Then - If DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") Or TipoContrato >= 0 Then 'SI VIENE DE PEDIDO DE AF DESDE CONTRATO NO BLOQUEA CUANDO EL CLIENTE ESTA INACTIVO - BtnEmitirImprimir.Visible = True - TrVistaPrevia.Visible = True - Else - If LblCliente.Text <> "Cliente" And Not EstatusCliente Then - Alert("El Cliente seleccionado no esta activo", TipoMensaje.MsgAdvertencia) - End If - If Not CveEmpresaCRM > 0 Then - BtnEmitirImprimir.Visible = EstatusCliente - TrVistaPrevia.Visible = EstatusCliente - Else - BtnEmitirImprimir.Visible = True - TrVistaPrevia.Visible = True - End If - - End If - End If - - If DdlTipoComprobante.SelectedValue = "Ing" Then - ImgAntiPend.Visible = True - End If - - - - 'TrAtencionA.Visible = True - 'tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") - 'tdFechaVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") - - - - Updatetabs.Update() - UPCondicionesPago.Update() - UpCliente.Update() - UpPS.Update() - UPObservaciones.Update() - End Sub - Protected Sub DdlSucursalCliente_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSucursalCliente.SelectedIndexChanged - CargaClienteSucursal(DdlSucursalCliente.SelectedValue.ToEntero()) - - 'RECARGA LAS RESTRICCIONES DE CREDITO SI SE CAMBIO LA SUCURSAL DEL CLIENTE - If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then - CargaRestriccionesCreditoCliente(Alertas:=True, CveVenta:=Me.CveVenta) - End If - - End Sub - Protected Sub DdlCCEdit_SelectedIndexChanged(sender As Object, e As System.EventArgs) - Dim gvr As GridViewRow = DirectCast(DirectCast(sender, DropDownList).BindingContainer, GridViewRow) - Dim CveProyecto As String = DirectCast(sender, DropDownList).SelectedValue - - gvr.FCDropDownList("DDlSubProyecto").Items.Clear() - gvr.FCDropDownList("DDlSubProyecto").DataSource = GlobalDTSubProyectos(CveProyecto.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa) - gvr.FCDropDownList("DDlSubProyecto").DataBind() - gvr.FCDropDownList("DDlSubProyecto").Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) - - End Sub - Protected Sub DdlClasificacion_SelectedIndexChanged1(sender As Object, e As EventArgs) - Dim gvr As GridViewRow = DirectCast(DirectCast(sender, DropDownList).BindingContainer, GridViewRow) - CargaPS(gvr.FCDropDownList("DdlClasificacion").SelectedValue.ToEntero(), gvr.FCDropDownLost("DdlPS")) - End Sub - - 'Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlProyecto.SelectedIndexChanged - ' CargaSubProyecto(FiltraPorProyecto:=True) - 'End Sub -#End Region - -#Region " SUCURSAL FACTURACION " - Private Sub DdlSubProyectoDatos_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSubProyectoDatos.SelectedIndexChanged - CambiaSucursalGeneral() - End Sub - Private Sub CambiaSucursalGeneral(Optional RecargarPartidas As Boolean = True) - Dim ObjSubProyectos As New ClsSubProyectos - 'Dim ObjSucursal As New ClsSucursales - If ObjSubProyectos.GetSubProyectos() Then - DTSucursal = ObjSubProyectos.DtResultados.FiltraParametros(String.Format("CveSubProyecto = {0}", DdlSubProyectoDatos.SelectedValue.ToEntero())) - 'Dim drc As DataRow - 'drc = DTSucursal(0) - - 'DdlSubProyecto.Items.Clear() - 'DdlSubProyecto.DataSource = DTSucursal - ''DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) - ''DdlSubProyecto.SelectedValue = "-1" - 'DdlSubProyecto.DataBind() - 'DdlSubProyecto.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) - 'CambiaSucursal(RecargarPartidas) - - - - 'If ObjSucursal.GetSucursales(UsuarioActual.CveEmpresa) Then - ' DTSucursal = ObjSucursal.DtResultados.FiltraParametros(String.Format("CveSucursal = {0}", drc("CveSucursal").ToString().ToEntero())) - ' Dim dre As DataRow - ' dre = DTSucursal(0) - ' DdlSucursal.SelectedValue = dre("CveSucursal").ToString() - ' CambiaSucursal() - 'End If - End If - ObjSubProyectos.Dispose() - - - HabilitarRemisionesPublicoGeneral() - - 'UpDetalle.Update() - 'UpEmitirTransitorio.Update() - End Sub - Private Sub CambiaSucursal(Optional RecargarPartidas As Boolean = True) - CargaFormatoSucursal() - CargaFolios() - - 'CargarAlmacenes() - - If RecargarPartidas Then - RecargaSucursalPartidas() - End If - - DdlPS.Attributes.Remove("data-cvesubproyecto") - DdlPS.Attributes.Add("data-cvesubproyecto", DdlSubProyectoDatos.SelectedValue) - - UpPS.Update() - End Sub - Private Sub RecargaSucursalPartidas() - - Dim CveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() - Dim SubProyecto As String = "" - If CveSubProyecto > 0 Then - SubProyecto = DdlSubProyectoDatos.SelectedItem.Text - End If - - If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then - For Each Row As DataRow In TmpDT.Rows - Row("CveSubProyecto") = CveSubProyecto - Row("SubProyecto") = SubProyecto - Next - End If - - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - UpPS.Update() - End Sub - Private Sub CargaFolios(Optional FacturarDocumentoNuevo As Boolean = False) - - If DdlSubProyectoDatos.SelectedValue.ToEntero() <= 0 Then - Alert("No se tienen asignadas sucursales", TipoMensaje.MsgError) - Exit Sub - End If - - Dim ObjFolios As New ClsGralFolios() - Dim TipoDoctoConsulta As String = "Ing" ' If(DdlTipoComprobante.SelectedValue = "Ant", "Ing", If(DdlTipoComprobante.SelectedValue = "PA", "Rem", DdlTipoComprobante.SelectedValue)) - - If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then - Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) - If DT.Rows.Count > 0 Then - - ViewState("CveFolio") = DT.Rows(0)("CveFolio").ToString().ToEntero() - ViewState("FolioActual") = DT.Rows(0)("FActual").ToString() - ViewState("Serie") = DT.Rows(0)("Serie").ToString() - UpFacturar.Update() - Else - - If DdlTipoComprobante.Items.Count > 0 Then - Alert("No tiene registrados Folios para " & DdlTipoComprobante.SelectedItem.Text & " en esta sucursal.", TipoMensaje.MsgAdvertencia) - Else - Alert("No tiene permisos para generar ningun tipo de documento.", TipoMensaje.MsgAdvertencia) - End If - - TrEmitir.Visible = False - TrVistaPrevia.Visible = False - - BtnEmitirImprimir.Visible = False - UpFacturar.Update() - End If - DT.Dispose() - End If - ObjFolios.Dispose() - 'End If - - End Sub - Private Sub CargaFormatoSucursal(Optional RecalcularIVA As Boolean = True) - Dim dr As DataRow = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto = {0}", If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue))) - If dr IsNot Nothing Then - ViewState("SucCalle") = dr("Calle") - ViewState("SucNoExt") = dr("NoExt") - ViewState("SucNoInt") = dr("NoInt") - ViewState("SucColonia") = dr("Colonia") - ViewState("SucLocalidad") = dr("Localidad") - ViewState("SucMunicipio") = dr("Municipio") - ViewState("SucEstado") = dr("Estado") - ViewState("SucPais") = dr("Pais") - ViewState("SucCP") = dr("CP") - ViewState("FormatoFactura") = dr("FormatoFactura") - ViewState("IVA") = dr("IVA") - DdlIVA.Visible = False - Select Case ViewState("IVA").ToString().ToDouble - Case 0 - DdlIVA.SelectedValue = "1" - PorcentajeIVA = ViewState("IVA").ToString().ToDecimal - Case 0.08 - DdlIVA.SelectedValue = If(EsCreaApartirDe, $"{(TmpDT.MAX("PorcentajeIVA").ToDecimal() + 1).RoundSQL(2).ToString()}", "1.08") - PorcentajeIVA = If(EsCreaApartirDe, TmpDT.MAX("PorcentajeIVA").ToDecimal, ViewState("IVA").ToString().ToDecimal).RoundSQL(2) - DdlIVA.Visible = If(Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0, True, False) - Case 0.16 - DdlIVA.SelectedValue = "1.16" - PorcentajeIVA = ViewState("IVA").ToString().ToDecimal - End Select - 'SI ES COTIZACION HABILITAR EL DDL DE IVA - If CveVenta <= 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then - DdlIVA.Visible = True - End If - If RecalcularIVA AndAlso TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 AndAlso (Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0) Then RecalculaIVA() - 'ViewState("SubProyectoPorcentajeIVA") = dr("IVA") - ViewState("TipoFormato") = dr("TipoFormato") - - - - Dim CveSubProyecto As Integer = GetSubProyectoSucursal() - If CveSubProyecto > 0 Then CargaSubProyecto(CveSubProyecto) - - - TipoVentaSucursal = dr("TipoVenta").ToString().ToEntero() - - - End If - - UpFacturar.Update() - UpPS.Update() - - UpParametros.Update() - End Sub - -#End Region - -#Region " AGREGAR PS " - Protected Sub LbAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LbAgregar.Click - AgregarPS() - End Sub - Private Function ValidaAgregarPS(CvePS As Integer, CveUM As Integer, PU As Double, CveTipoPS As Integer) As Boolean 'NO TOCAR - IPP - - 'VALIDA PARAMETROS - If CvePS <= 0 Or CveUM <= 0 Then - Alert("Es necesario seleccionar el Producto o Servicio a facturar.", TipoMensaje.MsgAdvertencia) - Return False - End If - - If HdnPS.Value = "" Or HdnPS.Value = "-1" Then - Alert("Es necesario seleccionar el Producto o Servicio a facturar.", TipoMensaje.MsgAdvertencia) - Return False - End If - - 'SI USA CONTABILIDAD LA CLASIFICACION ES OBLIGATORIA - If DdlClasificacion.SelectedValue.ToEntero() <= 0 AndAlso UsuarioActual.Empresa.UsaContabilidad Then - Alert("La Clasificación es obligatoria, favor de seleccionarla", TipoMensaje.MsgAdvertencia) - Return False - End If - - 'SUBPROYECTO OBLIGATORIO - If DdlSubProyectoDatos.SelectedValue.ToEntero() <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(120) = "1" Then - Alert("El Subproyecto es obligatorio, favor de seleccionarlo", TipoMensaje.MsgAdvertencia) - Return False - End If - - If CveCliente <= 0 And Not CveEmpresaCRM > 0 Then - Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana('/Ventas/PopUpBuscarClientes.aspx?Opt=Fact', 800, 547, 'N', 'PopUpBuscar')") - Return False - End If - - If PU <= 0 Then - Alert("No se puede vender a un importe de cero", TipoMensaje.MsgAdvertencia) - Return False - End If - - 'VALIDA PROMOCIONES - Dim ObjVentas As New ClsVentas - If ObjVentas.GetPromocionesPS(-1, NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, -1, 1, UsuarioActual.CveEmpresa) Then - DtPromociones = ObjVentas.DtResultados - End If - ObjVentas.Dispose() - - 'VALIDA PRECIO CERO (0) - 'If UsuarioActual.Empresa.Funcionalidad(139).ToString().ToEntero() > 0 And PU = 0 And DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {CvePS}").ToDecimal > 0 Then - ' Alert($"El producto {HdnPS.Value}. No se puede vender a un importe de cero ($0)", TipoMensaje.MsgAdvertencia) - ' Return False - 'End If - - 'SI NO TIENE LA FUNCIONALIDAD VALIDARA LAS MONEDAS - If UsuarioActual.Empresa.Funcionalidad(524) <> "" Then - If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count >= 1 Then - Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) - If DrPS IsNot Nothing Then - If DrPS("CveMoneda").ToString().ToEntero() <> DdlMoneda.SelectedValue.ToEntero() Then - Alert("No puede agregar un producto de diferente moneda a la ya seleccionada", TipoMensaje.MsgAdvertencia) - Return False - End If - End If - End If - End If - - ' NO VALIDA EXISTENCIAS NI COSTO - PERMISO PARA NO VALIDAR - If Not UsuarioActual.TienePermisoProceso(169) Then - 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS - If UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119))) Then - Dim ObjInventarios As New ClsInventarios - Dim Existencia As Decimal = ObjInventarios.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=-1, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1) - Dim Costo As Decimal = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - If Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, -1, CveTipoAlmacen:=1) - - ObjInventarios.Dispose() - Dim PrecioMinimo As Decimal = 0 - 'RMF. condicion temporal, para reubicación, precio mínimo - If UsuarioActual.CveEmpresa = 119 Then - 'Dim CvePrecioLista As Integer = 38 - Dim objPS As New ClsProductosServicios - If objPS.GetPSSucursalesALL(CvePS, UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) Then - PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal - 'If PrecioMinimo > 0 Then - ' Costo = PrecioMinimo - 'End If - End If - objPS.Dispose() - - End If - - If DdlTipoComprobante.SelectedValue <> "Cot" Then - 'VALIDA EXISTENCIA - If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 153, 140}) Then - If CveVenta <= 0 OrElse Me.EsCreaApartirDe Then - If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - Return False - End If - Else - If DdlTipoComprobante.SelectedValue = "Rem" Then - Dim CantidadVenta As Double = 0 - Using ObjVentasE As New ClsVentas - If ObjVentasE.GetVentaDetalle(CveVenta) Then - CantidadVenta = ObjVentasE.DtResultados.SUM("Cantidad", $"CvePS = {CvePS}") - End If - End Using - - 'SUMA LO YA RESTADO EN PENDIENTE POR SURTIR QUE PERTENESCA A LA VENTA. - 'PARA QUE NO RESTE LA EXISTENCIA 2 VECES Y PUEDAS COMPARAR LO REAL - If (Existencia + CantidadVenta) - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} And (EntregaDirecta Is NULL Or EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - Return False - End If - End If - End If - - End If - End If - - 'VALIDA COSTOS - If Not CveContrato > 0 Then - - 'BANDERAS PARA VALIDACIONES - Dim EsValido As Boolean = False - Dim EsValidoMayor As Boolean = False - Dim CostoMenor As Decimal = 0.0D - Dim CostoMayor As Decimal = 0.0D - - 'PRECIO MINIMO - If UsuarioActual.Empresa.Funcionalidad(129).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo - If PrecioMinimo > 0 Then - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC - EsValido = True - End If - Else - CostoMenor = Costo + ((UsuarioActual.Empresa.Funcionalidad(129).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then - EsValido = True - End If - End If - Else - EsValido = True - End If - - 'PRECIO MAXIMO - If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO MAXIMO, SI PASA - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) <= CostoMayor Then - EsValidoMayor = True - End If - Else - EsValidoMayor = True - End If - - 'VALIDA PROMOCION: SI TIENE PROMOCION Y EL PRECIO ES MENOR AL PRECIO DE PROMOCION, NO PASA | SI YA CUMPLE NO VUELVE A VALIDAR - 'SIRVE PARA VALIDAR PRECIOS DEBAJO DEL PRECIO MINIMO PERMITIDO - If Not EsValido Then - If DtPromociones.FiltraParametros($"CvePS = {CvePS}").Rows.Count > 0 Then - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {CvePS}").ToDecimal Then - EsValido = True - End If - Else - Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") - 'valida sino tiene promocion la clasificacion - If DrPS IsNot Nothing Then - If DtPromociones.FiltraParametros(String.Format("CveClasificacion = {0}", DdlClasificacion.SelectedValue.ToEntero())).Rows.Count > 0 Then - ''falta aplicar si tiene promocion - Dim drPromo As DataRow = DtPromociones.FiltroPrimero(String.Format("CveClasificacion = {0}", DdlClasificacion.SelectedValue.ToEntero())) - If drPromo IsNot Nothing Then - If drPromo("CveMarca").ToString() = DrPS("CveMarca").ToString() Then - - End If - End If - End If - End If - - - End If - End If - - 'NO DEJA REGISTRAR MENOS AL PRECIO MINIMO - Dim MensajeCosto As New StringBuilder - Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) - If Not EsValido Then - MensajeCosto.AppendFormat("El Producto {0}-{1}. No se puede vender a un precio menor de su Costo
    ", HdnCodigoPS.Value, HdnPS.Value) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - MensajeCosto.AppendFormat("El rango menor aceptado es: {0}% ${1:#,###.00}
    ", UsuarioActual.Empresa.Funcionalidad(129).ToEntero(), CostoMenor) - MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - End If - - Alert(String.Format(MensajeCosto.ToString()), TipoMensaje.MsgAdvertencia) - Return False - End If - - 'NO DEJA REGISTRAR MAS AL PRECIO MAXIMO - If Not EsValidoMayor Then - MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", HdnPS.Value) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - MensajeCosto.AppendFormat("El rango mayor aceptado es: {0}% ${1:#,###.00}
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) - MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - End If - Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) - Return False - End If - - End If - End If - End If - - - - Return True - - End Function - Private Function CalcularDescuentos(CvePS As Integer, Cantidad As Decimal, PU As Decimal) As Modelos.VentaDescuentos - Dim Descuento As Decimal = 0 - - - Dim ValidaCondicionesComerciales As Boolean = True - - 'AGREGA PROMOCION EN EL DESCUENTO - Dim TipoPromo As Integer = 0 - Dim TotalPromocion As Decimal = 0 - Dim PromocionPorcentaje As Decimal = 0 - Dim PUModificado As Decimal = 0 - Dim SeAjustoPU As Boolean = False - Dim PUPromocion As Decimal = 0 - Dim CantMinima As Integer = 0 - Dim CveMarcaPS As Integer = 0 - Dim CveClasifPS As Integer = 0 - Dim CveRinTamañoPS As Integer = 0 - Dim CvePromocionDetalle As Integer = 0 - Dim IncluyeImpuestos As Boolean = False - Dim TipoAplicacion As Integer = 1 ' 1 - descuento, 2 en PU - Dim ObjDescuento As New Modelos.VentaDescuentos - - If DdlSubProyectoDatos.SelectedValue = "11842" Then '' E141, el subproyecto: Franquicia, no proceden las promociones - Return ObjDescuento - End If - - - Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") - If DrPS IsNot Nothing Then - - CveMarcaPS = DrPS("CveMarca").ToString().ToEntero() - CveClasifPS = DrPS("CveClasificacion").ToString().ToEntero() - CveRinTamañoPS = DrPS("CveRinTamaño").ToString().ToEntero() - - If CveClasifPS = 20636 Then - ValidaCondicionesComerciales = False - End If - 'CAMBIO DE VIGENCIA NO SE APLICAN DESCUENTOS - If CveClasifPS = 20637 Then - ObjDescuento.ImporteDescuento = 0 - Return ObjDescuento - End If - - If UsuarioActual.CveRol = 1 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Cot") AndAlso CveRinTamañoPS > 0 Then - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso Not TbDescuentosAdicionales.Visible Then - TbDescuentosAdicionales.Visible = True - End If - End If - End If - - Dim dr As DataRow = Nothing - If DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then - dr = DtPromociones.FiltroPrimero(String.Format("CvePS = {0} AND (CveSubProyecto = {1} OR CveSubProyecto IS NULL) AND (CveRinTamaño = {2} OR CveRinTamaño IS NULL) AND ((TipoPromocion <> 3 AND (CantidadMinima <= {3} OR CantidadMinima IS NULL)) OR (TipoPromocion = 3 AND CantidadMinima <= {3} ))", CvePS, DdlSubProyectoDatos.SelectedValue, CveRinTamañoPS, Cantidad), Orderby:="CantidadMinima desc ") - If dr Is Nothing Then - - 'verifica marca, si tiene asignada la promocion - dr = DtPromociones.FiltroPrimero(String.Format("CvePS IS NULL AND CveClasificacion = {0} AND (CveMarca = {1} OR CveMarca IS NULL) AND (CveSubProyecto = {2} OR CveSubProyecto IS NULL) AND (CveRinTamaño = {3} OR CveRinTamaño IS NULL) AND ((TipoPromocion <> 3 AND (CantidadMinima <= {4} OR CantidadMinima IS NULL)) OR (TipoPromocion = 3 AND CantidadMinima <= {4} )) ", CveClasifPS, CveMarcaPS, DdlSubProyectoDatos.SelectedValue, CveRinTamañoPS, Cantidad), Orderby:="CantidadMinima desc") - - End If - End If - Dim Cant As Integer = 1 - Dim CveMarcaPromocion As Integer = -1 - - If dr IsNot Nothing Then - - CveMarcaPromocion = dr("CveMarca").ToString().ToEntero() - TipoPromo = dr("TipoPromocion").ToString().ToEntero() - CantMinima = dr("CantidadMinima").ToString().ToEntero() - IncluyeImpuestos = dr("IncluyeImpuestos").ToString() = "True" - PromocionPorcentaje = dr("Promocion").ToString().ToDecimal - PUPromocion = dr("PUPromocion").ToString().ToDecimal - CvePromocionDetalle = dr("CvePromocionDetalle").ToString().ToEntero() - TipoAplicacion = dr("TipoAplicacion").ToString().ToEntero() - - If CantMinima > 0 Then - Cant = Math.Floor(Cantidad / CantMinima).ToEntero() - End If - - End If - - TotalPromocion = Math.Round(PUPromocion * Cant / (1 + If(IncluyeImpuestos, PorcentajeIVA, 0)), 6) - - If TipoPromo = 1 Then 'Promocion por Importe $ - If TipoAplicacion = 2 Then - Descuento = 0 - SeAjustoPU = True - PUModificado = Math.Round(PUPromocion / (1 + If(IncluyeImpuestos, PorcentajeIVA, 0)), 6) - Else - Descuento = Descuento + PU - TotalPromocion - End If - - ElseIf TipoPromo = 2 Then 'Promocion por % - Descuento = Descuento + ((PU * PromocionPorcentaje / 100) * Cantidad) - ElseIf TipoPromo = 3 Then 'Promocion por Cantidad - If Cantidad >= CantMinima Then - Descuento = Descuento + TotalPromocion - Else - CvePromocionDetalle = -1 - End If - End If - - - 'VERIFICA SI APLICAN CONDICIONES COMERCIALES - If ValidaCondicionesComerciales AndAlso DtPorcentajeMarcas IsNot Nothing AndAlso DtPorcentajeMarcas.Rows.Count > 0 Then - 'VERIFICA SI EL PRODUCTO TIENE ESPECIFICADA UNA MARCA - If Not String.IsNullOrEmpty(DrPS("CveMarca").ToString()) AndAlso DrPS("CveMarca").ToString().ToEntero() > 0 Then - Dim RowPorcentaje As DataRow = DtPorcentajeMarcas.FiltroPrimero($"CveMarca={DrPS("CveMarca").ToString()}") - 'REALIZA LOS DESCUENTOS DE ACUERDO AL PORCENTAJE POR MARCA - If RowPorcentaje IsNot Nothing Then - '(AHORA LOS DESCUENTOS SON ACUMULABLES) - 'Descuento = 0 - Dim PorcentajeProducto As Decimal = RowPorcentaje("PorcentajeProducto").ToString().ToDecimal() / 100D - Dim PorcentajeProducto2 As Decimal = RowPorcentaje("PorcentajeProducto2").ToString().ToDecimal() / 100D - Dim PorcentajeProducto3 As Decimal = RowPorcentaje("PorcentajeProducto3").ToString().ToDecimal() / 100D - - Dim TotalInicial As Decimal = (Cantidad * (PU)) '- Descuento - Dim TotalFinal As Decimal = TotalInicial - 'SI APLICA EL PRIMER DESCUENTO - If PorcentajeProducto > 0 Then - Dim Descuento1 As Decimal = (TotalInicial * PorcentajeProducto).RoundSQL(2) - Dim Total2 As Decimal = (TotalInicial - Descuento1) - - 'SI APLICA EL SEGUNDO DESCUENTO - If PorcentajeProducto2 > 0 Then - Dim Descuento2 As Decimal = (Total2 * PorcentajeProducto2).RoundSQL(2) - Dim Total3 As Decimal = (Total2 - Descuento2) - - 'SI APLICA EL TERCER DESCUENTO - If PorcentajeProducto3 > 0 Then - Dim Descuento3 As Decimal = (Total3 * PorcentajeProducto3).RoundSQL(2) - TotalFinal = Total3 - Descuento3 - Else - TotalFinal = Total3 - End If - Else - TotalFinal = Total2 - End If - Else - TotalFinal = TotalInicial - End If - - If PorcentajeProducto > 0 Then - Descuento += ((Cantidad * PU) - TotalFinal) - End If - - 'SI TIENE PRONTO PAGO CALCULA EL IMPORTE - If DdlTipoComprobante.SelectedValue = "Ing" AndAlso RowPorcentaje("ProntoPago").ToString().ToDecimal() > 0 Then - Dim SubTotalProntoPago As Decimal = (Cantidad * (PU)) - Descuento - Dim TotalProntoPago As Decimal = SubTotalProntoPago * (1 + PorcentajeIVA) - - Dim PorcentajeProntoPago As Decimal = RowPorcentaje("ProntoPago").ToString().ToDecimal() / 100D - - ObjDescuento.ImporteProntoPago = (TotalProntoPago * PorcentajeProntoPago).RoundSQL(2) - End If - - End If - End If - End If - - If Descuento < 0 Then - Descuento = 0 - Alert("No se calculó el descuento correctamente", TipoMensaje.MsgAdvertencia) - End If - - If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - 'LTH AA Paq. 2 baterias, LTH AAA Paq. 02 baterias, LTH AA Paq. 4 baterias, LTH AAA Paq. 4 Baterias - If CvePS.Contiene(521445, 521448, 402917, 402918) Then - 'SI TIENE BATERIAS AGREGADAS CON LA MARCA LTH, APLICAR PROMOCION, LA CLASIFICACION DEBE SER ACUMULADORES - If TmpDT.SUMD("Cantidad", "CveMarca IN (819,826,1085,1052) AND CveClasificacion IN (20520,20522,20513,20521,20512,20514,20229)") >= 1D Then - Descuento = 0 - SeAjustoPU = True - 'Paq. 2 baterias - If CvePS.Contiene(521445, 521448) Then - PUPromocion = 25D - End If - 'Paq. 4 baterias - If CvePS.Contiene(402917, 402918) Then - PUPromocion = 40D - End If - PUModificado = Math.Round(PUPromocion / (1 + PorcentajeIVA), 6) - End If - End If - - End If - - 'YOKOHAMA - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso CveRinTamañoPS > 0 AndAlso CveMarcaPromocion.Contiene(800, 912, 1238, 1381, 1456, 1528, 1600, 1672, 1807) Then - Dim DtRines As DataTable = Nothing - Dim ObjGral As New ClsGenerales - If ObjGral.GetRimTamanios(UsuarioActual.CveEmpresa) Then - DtRines = ObjGral.DtResultados.Copy() - End If - ObjGral.Dispose() - - If CveMarcaPromocion > 0 Then - ObjDescuento.NombrePromo = "YOKOHAMA VERANO" 'dr("NombrePromocion").ToString() - ObjDescuento.CveMarca = CveMarcaPromocion - Dim Rin As String = DtRines.FiltroPrimeroValor("RinTamaño", $"CveRinTamaño = {CveRinTamañoPS}") - Dim PromoDescuento As Decimal = (Descuento * (1 + If(IncluyeImpuestos, PorcentajeIVA, 0))).RoundSQL(2) - - ObjDescuento.ObsDescuento = String.Format("RIN {0} BONO ${1:N2}", Rin, PromoDescuento) - End If - - End If - - ObjDescuento.ImporteDescuento = Descuento.RoundSQL(2) - ObjDescuento.CvePromocionDetalle = CvePromocionDetalle - If SeAjustoPU Then - ObjDescuento.PU = PUModificado - ObjDescuento.EsPUModificado = True - End If - - Return ObjDescuento - End Function - - Private Sub AgregarPS() - 'SELECCIONA EL PS DEPENDIENDO LA MODALIDAD (CODIGO BARRAS - DDL) - Try - - If IndicePSActual = -1 Then - Dim CvePS As Integer = -1 - - CvePS = DdlPS.SelectedValue.ToEntero() - - If ValidaAgregarPS(CvePS, DdlUnidadMedida.SelectedValue.ToEntero(), TxtPrecio.Text.Trim.ToDouble, HdnTipoPS.Value.ToEntero()) Then - - If UsuarioActual.Empresa.Funcionalidad(507) = DdlPS.SelectedValue Then - CvePSAmortizacion = DdlPS.SelectedValue.ToEntero().ToEntero() - End If - - Dim Cantidad As Decimal = TxtCantidad.Text.ToDecimal - Dim PU As Decimal = If(CvePSAmortizacion > 0, TxtPrecio.Text.Trim.ToDecimal * -1, TxtPrecio.Text.Trim.ToDecimal) - - Dim ObjDescuento As Modelos.VentaDescuentos = CalcularDescuentos(CvePS, Cantidad, PU) - If ObjDescuento.EsPUModificado Then - PU = ObjDescuento.PU - End If - - Dim CvePrecioListaPS As Integer = -1 - Dim PrecioListaPS As String = "" - - - If AgregarProductoServicio(Cantidad, DdlUnidadMedida.SelectedValue.ToEntero(), DdlUnidadMedida.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero(), DdlClasificacion.SelectedItem.Text, - CvePS, "", TxtObsPS.Text.TrimEnd, PU, ObjDescuento.ImporteDescuento, - -1, "", DdlSubProyectoDatos.SelectedValue.ToEntero(), DdlSubProyectoDatos.SelectedItem.Text, - Serie:="", TiempoEntrega:="", CuentaPredial:="", RegeneraIEPS:=ClienteDesglosaIEPS, CvePromocionDetalle:=ObjDescuento.CvePromocionDetalle, - ImporteProntoPago:=ObjDescuento.ImporteProntoPago, ObjDescuento:=ObjDescuento, CvePrecioLista:=CvePrecioListaPS, PrecioLista:=PrecioListaPS, NumTurnos:=0) Then - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then - ListaDescuentos.Add(ObjDescuento) - End If - - CalculaTotalesVenta() - - LimpiaAgregar() - UpPS.Update() - RegistraScript("$('#DVAddPS').modal('hide')") - - End If - - End If - - Else - - 'Dim TipoDescuento As Integer - Dim Cantidad, PU, CantidadInventario As Decimal - Dim CvePS As Integer = DdlPS.SelectedValue.ToEntero - Dim ObjDescuento As New Modelos.VentaDescuentos - - Cantidad = TxtCantidad.Text.ToDecimal - PU = TxtPrecio.Text.ToDecimal.RoundSQL(6) - - - ObjDescuento.ImporteDescuento = 0 - - - If PU <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - Alert("El precio debe ser mayor a 0", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If UsuarioActual.CveEmpresa = 140 OrElse DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then - ObjDescuento = CalcularDescuentos(CvePS, Cantidad, PU) - End If - - - ''VERIFICA SI EL DESCUENTO SUPERA EL SUBTOTAL - - - Dim DatarowPS As DataRow = Nothing - DatarowPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") ' Estado = -1 - - 'verifica si tiene ventaminima - If Cantidad > 0 AndAlso DatarowPS("VentaMinima").ToString().ToDecimal > 0 AndAlso (DdlTipoComprobante.SelectedValue = "Rem" Or DdlTipoComprobante.SelectedValue = "Ing") Then - 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15... - If Cantidad Mod DatarowPS("VentaMinima").ToString().ToDecimal <> 0 Then - Alert(String.Format("El producto se vende solo en cantidades de {0}", DatarowPS("VentaMinima").ToString())) - Exit Sub - End If - End If - - - 'si es remisión, ingreso, anticipo debe de considerar el preciominimo - - If Not UsuarioActual.TienePermisoProceso(169) Then ' NO VALIDA EXISTENCIAS NI COSTO - PERMISO PARA NO VALIDAR - - Dim CveUM As Integer = DdlUnidadMedida.SelectedValue.ToEntero() 'DatarowPS("CveUM").ToString().ToEntero() - Dim CveTipoPS As Integer = DatarowPS("CveTipoPS").ToString().ToEntero() - - CantidadInventario = TmpDT.Rows(IndicePSActual)("CantidadInventario").tostring.ToDecimal - Dim CveUMInicial As Integer = TmpDT.Rows(IndicePSActual)("CveUM").tostring.ToEntero - - Dim ValidaExistencia As Boolean = True - If (CantidadInventario > 0) OrElse (Cantidad <= CantidadOriginal) Then 'si ya hay algo surtido, que no valide existencia - ValidaExistencia = False - End If - If CveUM <> CveUMInicial Then ValidaExistencia = True - - 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS - If UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119))) Then - Dim ObjInventarios As New ClsInventarios - Dim Existencia As Decimal - If ValidaExistencia Then - Existencia = ObjInventarios.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=-1, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1) - End If - - Dim Costo As Decimal = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - If Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", NowADS, -1, CveTipoAlmacen:=1) - - ObjInventarios.Dispose() - Dim PrecioMinimo As Decimal = 0 - 'RMF. condicion temporal, para reubicación, precio mínimo - If UsuarioActual.CveEmpresa = 119 Then - 'Dim CvePrecioLista As Integer = 38 - Dim objPS As New ClsProductosServicios - If objPS.GetPSSucursalesALL(CvePS, UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) Then - PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal - - End If - objPS.Dispose() - - End If - - If ValidaExistencia AndAlso DdlTipoComprobante.SelectedValue <> "Cot" AndAlso Not RegistroxOC Then - 'VALIDA EXISTENCIA - If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 140, 153}) Then - 'SI ES VENTA NUEVA TOMA EN CUENTA LO DEL TMPDT - If CveVenta <= 0 Then - If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - Else - If DdlTipoComprobante.SelectedValue = "Rem" Then - Dim CantidadVenta As Double = 0 - Using ObjVentas As New ClsVentas - If ObjVentas.GetVentaDetalle(CveVenta) Then - CantidadVenta = ObjVentas.DtResultados.SUM("Cantidad", $"CvePS = {CvePS}") - End If - End Using - - 'SUMA LO YA RESTADO EN PENDIENTE POR SURTIR QUE PERTENESCA A LA VENTA. - 'PARA QUE NO RESTE LA EXISTENCIA 2 VECES Y PUEDAS COMPARAR LO REAL - If (Existencia + CantidadVenta) - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then - Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - End If - - End If - End If - - 'VALIDA COSTOS - If Not CveContrato > 0 Then - - 'BANDERAS PARA VALIDACIONES - Dim EsValido As Boolean = False - Dim EsValidoMayor As Boolean = False - Dim CostoMenor As Decimal = 0 - Dim CostoMayor As Decimal = 0 - - 'PRECIO MINIMO - If UsuarioActual.Empresa.Funcionalidad(129).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo - If PrecioMinimo > 0 Then - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC - EsValido = True - End If - Else - CostoMenor = Costo + ((UsuarioActual.Empresa.Funcionalidad(129).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then - EsValido = True - End If - End If - Else - EsValido = True - End If - - 'PRECIO MAXIMO - If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then - CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) - 'SI EL PRECIO ES MAYOR AL COSTO MAXIMO, SI PASA - If PU * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) <= CostoMayor Then - EsValidoMayor = True - End If - Else - EsValidoMayor = True - End If - - - - 'NO DEJA REGISTRAR MENOS AL PRECIO MINIMO - Dim MensajeCosto As New StringBuilder - Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) - If Not EsValido Then - MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio menor de su Costo
    ", DatarowPS("PS").ToString()) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - MensajeCosto.AppendFormat("El rango menor aceptado es: {0:#,###.00}% ${1}
    ", UsuarioActual.Empresa.Funcionalidad(129).ToEntero(), CostoMenor) - MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - End If - - - Alert(String.Format(MensajeCosto.ToString()), TipoMensaje.MsgAdvertencia) - MensajeCosto.Clear() - Exit Sub - End If - - 'NO DEJA REGISTRAR MAS AL PRECIO MAXIMO - If Not EsValidoMayor Then - MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", HdnPS.Value) - If TienePermisoImportes Then - MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) - MensajeCosto.AppendFormat("El rango mayor aceptado es: {0}% ${1:#,###.00}
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) - MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) - End If - Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) - MensajeCosto.Clear() - - Exit Sub - End If - - End If - End If - End If - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then - Dim ConsecEliminar As Integer = TmpDT.Rows(IndicePSActual)("Consec").ToString().ToEntero() - If ConsecEliminar > 0 Then - Dim descEliminar As Modelos.VentaDescuentos = ListaDescuentos.FirstOrDefault(Function(x) x.Consec = ConsecEliminar) - If descEliminar IsNot Nothing Then - ListaDescuentos.Remove(descEliminar) - End If - End If - End If - - If TmpDT.Rows(IndicePSActual)("CvePS").ToString().ToEntero <> CvePS Then - - - - TmpDT.Rows.Remove(TmpDT.Rows(IndicePSActual)) - - AgregarProductoServicio(Cantidad, DdlUnidadMedida.SelectedValue.ToEntero(), DdlUnidadMedida.Text, DdlClasificacion.SelectedValue.ToEntero(), DdlClasificacion.SelectedItem.Text, - DdlPS.SelectedValue.ToEntero(), DdlPS.SelectedText, TxtObsPS.Text.Trim, PU, ObjDescuento.ImporteDescuento, CveProyecto:=-1, Proyecto:="", - CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), SubProyecto:=DdlSubProyectoDatos.SelectedItem.Text, - CuentaPredial:="", CveVentaDetalle:=CvePS, SeActualiza:=True, CvePromocionDetalle:=ObjDescuento.CvePromocionDetalle, - ObjDescuento:=ObjDescuento, NumTurnos:=0) - - - GvPS.EditIndex = -1 - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - - - Else - Dim DrPS As DataRow = Nothing - DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=TmpDT.Rows(IndicePSActual)("CvePS").ToString().ToEntero()).FiltroPrimero("") - - If Not ClienteDesglosaIEPS Then - PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - TmpDT.Rows(IndicePSActual)("PorcentajeIEPS") = 0 - End If - - Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (ObjDescuento.ImporteDescuento)) - Dim TotalCalculableImpuestosIVA As Decimal = 0 - TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + TmpDT.Rows(IndicePSActual)("PorcentajeIEPS").ToString().ToDecimal) - - Dim ClienteRetIVA As Decimal = Me.ClienteRetIVA - If ClienteRetIVA <= 0 Then - If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then - ClienteRetIVA = 0.106667D - ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then - ClienteRetIVA = 0.04D - End If - End If - - If DrPS("IVA").ToString().Contiene("-1", "") Then - TmpDT.Rows(IndicePSActual)("PorcentajeIVA") = PorcentajeIVA - Else - TmpDT.Rows(IndicePSActual)("PorcentajeIVA") = DrPS("IVA") - End If - - If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso LblRFC.Text = "XEXX010101000" Then - TmpDT.Rows(IndicePSActual)("PorcentajeIVA") = 0 - TmpDT.Rows(IndicePSActual)("ImporteIVA") = 0 - End If - - TmpDT.Rows(IndicePSActual)("CveUM") = DdlUnidadMedida.SelectedValue.ToEntero() - TmpDT.Rows(IndicePSActual)("UM") = DdlUnidadMedida.SelectedItem.Text - TmpDT.Rows(IndicePSActual)("Cantidad") = Cantidad - TmpDT.Rows(IndicePSActual)("Obs") = TxtObsPS.Text.TrimEnd - TmpDT.Rows(IndicePSActual)("TiempoEntrega") = "" - TmpDT.Rows(IndicePSActual)("PU") = PU - TmpDT.Rows(IndicePSActual)("Descuento") = ObjDescuento.ImporteDescuento - TmpDT.Rows(IndicePSActual)("Total") = (Cantidad * PU) - TmpDT.Rows(IndicePSActual)("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("ImporteIVA") = (TmpDT.Rows(IndicePSActual)("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("ImporteIEPS") = (TmpDT.Rows(IndicePSActual)("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("RetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - TmpDT.Rows(IndicePSActual)("PorcentajeRetIVA") = ClienteRetIVA - TmpDT.Rows(IndicePSActual)("PorcentajeRetISR") = ClienteRetISR - TmpDT.Rows(IndicePSActual)("CuentaPredial") = "" - - - TmpDT.Rows(IndicePSActual)("NumTurnos") = 0 - - If ObjDescuento IsNot Nothing Then - TmpDT.Rows(IndicePSActual)("CvePromocionDetalle") = ObjDescuento.CvePromocionDetalle - End If - - - 'RELACIONAL PS CON EL DESCUENTO - If ObjDescuento IsNot Nothing Then - ObjDescuento.Consec = TmpDT.Rows(IndicePSActual)("Consec").ToString().ToEntero() - End If - - - DrPS = Nothing - - GvPS.EditIndex = -1 - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - - End If - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then - ListaDescuentos.Add(ObjDescuento) - End If - - CalculaTotalesVenta() - - RegistraScript("$('#DVAddPS').modal('hide')") - - UpPS.Update() - End If - - - - - Catch ex As Exception - OnError("Ocurrió un error al agregar el producto", ex) - End Try - - End Sub - - - Protected Sub LnkAgregarPS_Click(sender As Object, e As EventArgs) - - LimpiaAgregar() - RegistraScript("$('#DVAddPS').modal();") - - End Sub - - Private Sub LimpiaAgregar() - - IndicePSActual = -1 - CantidadOriginal = 0 - - TxtCantidad.Text = "" - - HdnPS.Value = "-1" - HdnCodigoPS.Value = "-1" - HdnTipoPS.Value = "-1" - HdnTipoInv.Value = "-1" - - DdlClasificacion.SelectedIndex = 0 - - If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then - DdlPS.SelectedValue = "" - DdlPS.SelectedText = "" - Else - DdlPS.SelectedValue = "-1" - End If - - TxtObsPS.Text = "" - TxtPrecio.Text = "" - HdnIVAPS.Value = "-1" - HdnIVARetAPS.Value = "-1" - HdnAplicaIEPS.Value = "False" - HdnPorcentajeIEPS.Value = "0" - HdnCodigo.Value = "-1" - - TxtCantidad.Focus() - - UpDVAddPS.Update() - - End Sub - Private Sub CargaPorcentajeMarcas() - Dim ObjPS As New ClsProductosServicios - If ObjPS.GetPorcentajeMarcas(CveCliente) Then - DtPorcentajeMarcas = ObjPS.DtResultados.Copy() - End If - ObjPS.Dispose() - End Sub - - Private Function AgregarProductoServicio(Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, Obs As String, - PU As Decimal, Descuento As Decimal, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String, Optional Serie As String = "", Optional TiempoEntrega As String = "", - Optional EntregaDirecta As Integer = 0, Optional CveContratoDetalle As Integer = 0, Optional CveVentaDetalle As Integer = 0, Optional CveMovimientoDetallePedido As Integer = 0, - Optional CveOrdenCompraDetalle As Integer = 0, Optional CveVentaDetalleRemision As Integer = 0, Optional CveVentaDetalleCotizacion As Integer = 0, Optional CuentaPredial As String = "", - Optional RegeneraIEPS As Boolean = True, Optional CveVentaDetallePedido2 As Integer = 0, Optional SeActualiza As Boolean = False, Optional CvePromocionDetalle As Integer = -1, Optional EsCargo As Boolean = False, - Optional ImporteProntoPago As Decimal = 0, Optional ByRef ObjDescuento As Modelos.VentaDescuentos = Nothing, Optional CvePrecioLista As Integer = -1, Optional PrecioLista As String = "", - Optional CveActivoFijo As Integer = -1, Optional AFDepreciacion As Decimal = 0D, Optional AFValorInicial As Decimal = 0D, Optional NumTurnos As Decimal = 0D) As Boolean - - Dim Retorno As Boolean = False - - Try - - If Not CvePS > 0 Then - Alert("Ocurrió un error al cargar la información del producto a agregar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError) - Return False - End If - - - 'VALIDA CONCEPTOS EN CERO - YA SE VALIDA ANTES CON FUNCIONALIDAD - A MIRAS DE ELIMINAR - IPP 28 AGOSTO 2017 - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant") Then - If UsuarioActual.CveEmpresa.Contiene(72, 80) AndAlso CveOrdenCompraDetalle = 0 Then ' si viene de una oc, se permiten valores en cero - If Cantidad * PU <= 0 Then - If Not DdlTipoComprobante.SelectedValue = "DPe" Then - Alert("El importe del concepto debe ser mayor a cero. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Return False - End If - End If - End If - End If - - Dim Row As DataRow = Nothing - Dim TotalCalculableImpuestos As Decimal = 0 - Dim TotalCalculableImpuestosIVA As Decimal = 0 - PU = PU.RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos - Descuento = Descuento.RoundSQL(NumeroDecimales) - - If Not TmpDT.Columns.Contains("RetIVA") Then - TmpDT.Columns.Add("RetIVA", GetType(Decimal)) - End If - - Row = TmpDT.NewRow() - Row("CveProyecto") = CveProyecto - Row("Proyecto") = Proyecto - Row("CveSubProyecto") = CveSubProyecto - Row("SubProyecto") = SubProyecto - Row("Serie") = Serie - Row("TiempoEntrega") = TiempoEntrega - If Modalidad = "U" Then - Row("Orden") = Index - Else - Dim ConsecutivoActual As Integer = TmpDT.MAX("Consec").ToEntero() - If ConsecutivoActual < 0 Then - ConsecutivoActual = 0 - End If - Row("Orden") = ConsecutivoActual + 1 - End If - - Dim DrPS As DataRow = Nothing - - DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") ' Estado = -1 - - If DrPS Is Nothing Then - Alert("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.", TipoMensaje.MsgError) - Return False - End If - - If (DrPS("SATClaveUnidadMedida").ToString() = "" Or DrPS("SATClavePS").ToString() = "") Then - 'VALIDA CLAVESAT - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then 'DOCUMENTOS DONDE NO SE VALIDA - If DrPS("SATClavePS").ToString() = "" Then - MensajeCveSAT.AppendFormat("{0}-{1}: Sin producto SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - ElseIf DrPS("SATClaveUnidadMedida").ToString() = "" Then - MensajeCveSAT.AppendFormat("{0}-{1}: Sin Unidad Medida SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - End If - - 'If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) AndAlso DrPS("SATClavePS").ToString() = "01010101" Then - ' MensajeCveSAT.AppendFormat("{0}-{1}: El producto/servicio no existe en el catálogo del SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - ' Return False - 'End If - End If - Else - If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) AndAlso DrPS("SATClavePS").ToString() = "01010101" Then - MensajeCveSAT.AppendFormat("{0}-{1}: El producto/servicio no existe en el catálogo del SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - End If - End If - - 'SI NO ES REFACTURACION verifica si tiene ventaminima - If NuevaFactura <> 1 Then - If Cantidad > 0 AndAlso DrPS("VentaMinima").ToString().ToDecimal > 0 Then - 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15... - If Cantidad Mod DrPS("VentaMinima").ToString().ToDecimal <> 0 Then - Alert(String.Format("El producto se vende solo en cantidades de {0}", DrPS("VentaMinima").ToString())) - Return False - End If - End If - End If - - If CveUM <= 0 Then - CveUM = DrPS("CveUnidadMedida").ToString().ToEntero() - End If - - Row("Cantidad") = Cantidad - Row("CveUM") = CveUM - Row("UM") = DrPS("UnidadMedida") - Row("CveClasificacion") = DrPS("CveClasificacion") - Row("Clasificacion") = DrPS("Clasificacion") - Row("CvePS") = CvePS - Row("Obs") = Obs - - 'VERIFICA SI EN LA FACTURA PADRE SE DESGLOSO EL IEPS - Dim FacturaDesglosoIEPS As Boolean = ((CveDevolucion > 0 AndAlso NuevaFactura = 1) AndAlso (Me.ObjFacturaNC IsNot Nothing AndAlso Not Me.ObjFacturaNC.VentaDesglosaIEPS)) - - If Not ClienteDesglosaIEPS Then - If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then - PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - VentaDesglosaIEPS = True - End If - DrPS("IEPSPorcentaje") = 0 - End If - 'SI YA SE DESGLOSO EL IEPS SE GUARDA LA BANDERA EN ESTA FACTURA - If FacturaDesglosoIEPS Then - VentaDesglosaIEPS = True - End If - - If DrPS("IVA").ToString().Contiene("-1", "") Then - Row("PorcentajeIVA") = PorcentajeIVA - Else - Row("PorcentajeIVA") = DrPS("IVA") - End If - - If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso LblRFC.Text = "XEXX010101000" Then - DrPS("IVA") = 0 - Row("PorcentajeIVA") = 0 - End If - - If ClienteNODesglosaIVA Then - 'If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then - PU = PU * (1 + Row("PorcentajeIVA").ToString().ToDecimal) - VentaNODesglosaIVA = True - 'End If - DrPS("IVA") = 0 - Row("PorcentajeIVA") = 0 - End If - - TotalCalculableImpuestos = ((Cantidad * (PU)) - Descuento) - TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - - Row("PU") = PU - Row("Codigo") = DrPS("Codigo") - Row("NoIdentificacion") = DrPS("Codigo") - Row("ClaveSATFraccionArancelaria") = DrPS("ClaveSATFraccionArancelaria") - Row("ClaveSATUnidadAduana") = DrPS("ClaveSATUnidadAduana") - Row("ClaveSATFraccionArancelariaDescripcion") = DrPS("ClaveSATFraccionArancelariaDescripcion") - Row("ClaveSATUnidadAduanaDescripcion") = DrPS("ClaveSATUnidadAduanaDescripcion") - If Modalidad = "U" Then - Row("Consec") = Index - Else - Dim ConsecutivoActual As Integer = TmpDT.MAX("Consec").ToEntero() - If ConsecutivoActual < 0 Then - ConsecutivoActual = 0 - End If - Row("Consec") = ConsecutivoActual + 1 - End If - - Row("PS") = DrPS("PS") - Row("CodigoPS") = DrPS("PSCodigo").ToString() - Row("CveTipoPS") = DrPS("CveTipoPS") - Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario") - Row("CveTamaño") = DrPS("CveTamaño") - Row("CodigoObjetoImpuesto") = DrPS("CodigoObjetoImpuesto") - - If CveClasificacion <= 0 Then Row("CveClasificacion") = DrPS("CveClasificacion") - If Clasificacion = "" Then Row("Clasificacion") = DrPS("Clasificacion") - - - Dim ClienteRetIVA As Decimal = Me.ClienteRetIVA - If ClienteRetIVA <= 0 AndAlso DrPS("RetIVA").ToString.ToDecimal > 0 Then - ClienteRetIVA = DrPS("RetIVA").ToString.ToDecimal - DdlTipoRetencion.Enabled = True - End If - - If ClienteRetIVA <= 0 Then - If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then - ClienteRetIVA = 0.106667D - ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then - ClienteRetIVA = 0.04D - End If - End If - - LblRetIVA.Text = (ClienteRetIVA * 100).FormatoNumero - If LblRetIVA.Text.ToDecimal() > 0 Then - TrRetIVA.Style.Add("display", "") - DdlTipoRetencion.Visible = True - Else - TrRetIVA.Style.Add("display", "none") - End If - - Row("IVA") = Row("PorcentajeIVA") - Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) - Row("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - - Row("RetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - - Row("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - Row("PorcentajeRetIVA") = ClienteRetIVA - Row("PorcentajeRetISR") = ClienteRetISR - Row("PorcentajeIEPS") = DrPS("IEPSPorcentaje") - Row("ImporteIEPS") = (DrPS("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - Row("IEPS") = Row("ImporteIEPS") - Row("Descuento") = (Descuento).RoundSQL(NumeroDecimales) - Row("TipoDescuento") = "-1" - Row("CvePromocionDetalle") = CvePromocionDetalle - Row("Total") = (Cantidad * PU) - Row("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) - Row("SATClaveProdServ") = DrPS("SATClavePS") - Row("SATClaveUM") = DrPS("SATClaveUnidadMedida") - - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - Row("CvePresupuestoIngreso") = Me.DdlFuenteRecaudacion.SelectedValue - End If - - Row("EntregaDirecta") = EntregaDirecta - 'Contratos - Row("CveContratoDetalle") = CveContratoDetalle - Row("CveVentaDetalle") = CveVentaDetalle - Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido - Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle - Row("CveVentaDetalleRemision") = CveVentaDetalleRemision - Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion - Row("CveVentaDetallePedido2") = CveVentaDetallePedido2 - Row("CuentaPredial") = CuentaPredial - Row("EsCargo") = EsCargo - - If TmpDT.Columns.Contains("CveMarca") Then - Row("CveMarca") = DrPS("CveMarca") - End If - - If ImporteProntoPago > 0 Then - Row("ImporteProntoPago") = ImporteProntoPago - Row("TieneProntoPago") = "Si" - - End If - - Row("CvePrecioLista") = CvePrecioLista - Row("PrecioLista") = PrecioLista - - Row("CveActivoFijo") = CveActivoFijo - Row("AFDepreciacion") = AFDepreciacion - Row("AFValorInicial") = AFValorInicial - - Row("NumTurnos") = NumTurnos - - If UsuarioActual.CveEmpresa.Contiene(119, 13, 83) Then - If Not RemisionesLista.Count > 0 Then 'SI VIENE DE REMISION NO SE CONSIDERA - - 'MONEDA DIFERENTE DEL PS AL PRIMER PS AGREGADO - If DdlMoneda.Enabled = False And CveVenta < 0 And TmpDT.Rows.Count > 0 Then - If DdlMoneda.SelectedValue <> DrPS("CveMoneda").ToString() Then - Alert($"La moneda base del producto: {DrPS("PSCodigo").ToString()} es diferente a la moneda del documento.", TipoMensaje.MsgAdvertencia) - Return False - End If - End If - - 'ACTIVA PRODUCTOS DE LA MISMA MONEDA - If TmpDT.Rows.Count = 0 And CveVenta < 0 Then - DdlMoneda.SelectedValueExist(DrPS("CveMoneda").ToString()) - CambiaMoneda() - DdlMoneda.Enabled = False - End If - End If - End If - - 'RELACIONAL PS CON EL DESCUENTO - If ObjDescuento IsNot Nothing Then - ObjDescuento.Consec = Row("Consec").ToString().ToEntero() - End If - - 'RECARGAR GV - TmpDT.Rows.Add(Row) - - 'AGREGA PS ADICIONAL - If UsuarioActual.Empresa.Funcionalidad(561).ToString() = "1" AndAlso Not UsuarioActual.TienePermisoProceso(285) AndAlso GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows.Count > 0 AndAlso Not SeActualiza Then - - For Each Dr As DataRow In GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows - Dim CvePSAdicional As Integer = Dr("CvePSAdicional").ToString().ToEntero() - Dim DrPoliza As DataRow = TmpDT.NewRow() - DrPoliza.ItemArray = Row.ItemArray - Dim DrPSAdicional As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePSAdicional).Rows(0) - If DrPSAdicional IsNot Nothing Then - DrPoliza("CvePS") = CvePSAdicional - DrPoliza("PS") = DrPSAdicional("PS").ToString() - DrPoliza("CveUM") = DrPSAdicional("CveUM").ToString().ToEntero() - DrPoliza("UM") = DrPSAdicional("UnidadMedida").ToString() - DrPoliza("CveClasificacion") = DrPSAdicional("CveClasificacion").ToString().ToEntero() - DrPoliza("Clasificacion") = DrPSAdicional("Clasificacion").ToString() - DrPoliza("CodigoPS") = DrPSAdicional("PSCodigo").ToString() - DrPoliza("CveTipoPS") = DrPSAdicional("CveTipoPS") - DrPoliza("CveTipoInvPS") = DrPSAdicional("Inv_CveMetodoInventario") - DrPoliza("NoIdentificacion") = DrPSAdicional("Codigo") - - If Modalidad = "U" Then - DrPoliza("Consec") = Index - Else - Dim ConsecutivoActual As Integer = TmpDT.MAX("Consec").ToEntero() - If ConsecutivoActual < 0 Then - ConsecutivoActual = 0 - End If - DrPoliza("Consec") = ConsecutivoActual + 1 - End If - - Row("Orden") = TmpDT.Rows.Count + 1 - DrPoliza("Cantidad") = If(Dr("Cantidad").ToString().ToDecimal > 0, Dr("Cantidad").ToString().ToDecimal, Cantidad) - PU = 0 - - Dim PrecioSugerido As Decimal = 0 - 'Dim CvePrecioListaPS = GlobalDTCliente(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CvePrecioLista", $"CveCliente = {CveCliente}").ToEntero() - If CvePrecioLista > 0 Then - Dim ObjPS As New ClsProductosServicios - If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioLista, CvePS:=CvePSAdicional) Then - - PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal - If PrecioSugerido = 0 Then - Dim ObjInventarios As New ClsInventarios - Dim CostoPS As Decimal = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", NowADS, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - If CostoPS = 0 Then CostoPS = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", NowADS, -1, CveTipoAlmacen:=1) - - ObjInventarios.Dispose() - Dim PorcentajePrecio As Decimal = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal - If CostoPS > 0 And PorcentajePrecio > 0 Then - PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS - End If - End If - ObjPS.Dispose() - End If - End If - - - If PrecioSugerido > 0 Then - PU = PrecioSugerido - End If - PU = PU.RoundSQL(6) - DrPoliza("PU") = PU - TotalCalculableImpuestos = (DrPoliza("Cantidad").ToString().ToDecimal * (PU)) - - If DrPSAdicional("IVA").ToString().Contiene("-1", "") Then - DrPoliza("PorcentajeIVA") = PorcentajeIVA - Else - DrPoliza("PorcentajeIVA") = DrPSAdicional("IVA") - End If - DrPoliza("IVA") = DrPoliza("PorcentajeIVA") - DrPoliza("ImporteIVA") = (DrPoliza("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - DrPoliza("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - DrPoliza("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - DrPoliza("PorcentajeRetIVA") = ClienteRetIVA - DrPoliza("PorcentajeRetISR") = ClienteRetISR - DrPoliza("PorcentajeIEPS") = DrPSAdicional("IEPSPorcentaje") - DrPoliza("ImporteIEPS") = (DrPSAdicional("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - DrPoliza("IEPS") = DrPoliza("ImporteIEPS") - DrPoliza("Descuento") = 0 ' Descuento - DrPoliza("TipoDescuento") = "" - DrPoliza("Total") = (DrPoliza("Cantidad").ToString().ToDecimal * PU) - DrPoliza("TotalImporte") = (DrPoliza("Cantidad").ToString().ToDecimal * PU).RoundSQL(NumeroDecimales) - DrPoliza("SATClaveProdServ") = DrPSAdicional("SATClavePS") - DrPoliza("SATClaveUM") = DrPSAdicional("SATClaveUnidadMedida") - DrPoliza("CveActivoFijo") = -1 - - TmpDT.Rows.Add(DrPoliza) - End If - Next - - End If - - Retorno = True - Catch ex As Exception - Retorno = False - OnError("Ocurrió un error al agregar el producto/servicio", ex) - End Try - - Return Retorno - End Function - -#End Region - -#Region "D A T A - T A B L E S" - Private Sub CreaDTVentas() - TmpDT = New DataTable - TmpDT.Columns.Add("CveVenta", GetType(Integer)) - TmpDT.Columns.Add("Consec", GetType(Integer)) - TmpDT.Columns.Add("Cantidad", GetType(Decimal)) - TmpDT.Columns.Add("Codigo", GetType(String)) - TmpDT.Columns.Add("CveUM", GetType(Integer)) - TmpDT.Columns.Add("UM", GetType(String)) - TmpDT.Columns.Add("SATClaveUM", GetType(String)) - TmpDT.Columns.Add("CveClasificacion", GetType(Integer)) - TmpDT.Columns.Add("Clasificacion", GetType(String)) - TmpDT.Columns.Add("CvePS", GetType(Integer)) - TmpDT.Columns.Add("PS", GetType(String)) - TmpDT.Columns.Add("CodigoPS", GetType(String)) - TmpDT.Columns.Add("SATClaveProdServ", GetType(String)) - TmpDT.Columns.Add("NoIdentificacion", GetType(String)) - TmpDT.Columns.Add("CveTipoPS", GetType(Integer)) - TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer)) - TmpDT.Columns.Add("Serie", GetType(String)) - TmpDT.Columns.Add("CuentaPredial", GetType(String)) - TmpDT.Columns.Add("Obs", GetType(String)) - TmpDT.Columns.Add("TiempoEntrega", GetType(String)) - TmpDT.Columns.Add("PU", GetType(Decimal)) - TmpDT.Columns.Add("IVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteIVA", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal)) - TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal)) - TmpDT.Columns.Add("IEPS", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal)) - TmpDT.Columns.Add("Descuento", GetType(Decimal)) - TmpDT.Columns.Add("TipoDescuento", GetType(Integer)) - TmpDT.Columns.Add("TotalImporte", GetType(Decimal)) - TmpDT.Columns.Add("Total", GetType(Decimal)) - TmpDT.Columns.Add("RetIVA", GetType(Decimal)) - TmpDT.Columns.Add("RetISR", GetType(Decimal)) - 'Para uso del módulo contable - TmpDT.Columns.Add("CveProyecto", GetType(Integer)) - TmpDT.Columns.Add("Proyecto", GetType(String)) - TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) - TmpDT.Columns.Add("SubProyecto", GetType(String)) - TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer)) - TmpDT.Columns.Add("CvePromocionDetalle", GetType(Integer)) - - 'TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto - TmpDT.Columns.Add("CvePresupuestoIngreso", GetType(Integer)) - TmpDT.Columns.Add("CveFuenteRecaudacion", GetType(Integer)) - 'Contratos - TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer)) - 'Remisiones a Facturas - TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleRemision", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleCotizacion", GetType(Integer)) - - 'Pedido2 a Facturas - TmpDT.Columns.Add("CveVentaDetallePedido2", GetType(Integer)) - - TmpDT.Columns.Add("Origen", GetType(Integer)) - 'Ordenes Servicio - TmpDT.Columns.Add("CveOS", GetType(Integer)) - TmpDT.Columns.Add("CveOSDetalle", GetType(Integer)) - TmpDT.Columns.Add("SeFacturara", GetType(Integer)) - TmpDT.Columns.Add("Folio", GetType(Integer)) - TmpDT.Columns.Add("Estatus", GetType(String)) - 'Ordenamiento - TmpDT.Columns.Add("Orden", GetType(Integer)) - TmpDT.Columns.Add("TipoDocto", GetType(String)) - 'OC - TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer)) - TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) - - TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) - TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) - TmpDT.Columns.Add("CantidadFacturadaCot", GetType(Decimal)) - TmpDT.Columns.Add("CantidadFacturadaPed2", GetType(Decimal)) - TmpDT.Columns.Add("CantidadInventario", GetType(Decimal)) - - TmpDT.Columns.Add("ClaveSATFraccionArancelaria", GetType(String)) - TmpDT.Columns.Add("ClaveSATUnidadAduana", GetType(String)) - TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", GetType(String)) - TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String)) - - TmpDT.Columns.Add("CveTamaño", GetType(Integer)) - TmpDT.Columns.Add("CveConcepto", GetType(Integer)) - TmpDT.Columns.Add("EsCargo", GetType(Boolean)) - TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) - - TmpDT.Columns.Add("TieneProntoPago", GetType(String)) - TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) - TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String)) - TmpDT.Columns.Add("CveMarca", GetType(Integer)) - - TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) - TmpDT.Columns.Add("PrecioLista", GetType(String)) - - TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) - TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) - TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) - TmpDT.Columns("EsCargo").DefaultValue = False - - TmpDT.Columns("TieneProntoPago").DefaultValue = "No" - TmpDT.Columns("ImporteProntoPago").DefaultValue = 0 - - TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) - TmpDT.Columns("NumTurnos").DefaultValue = 0 - TmpDT.Columns.Add("NumeroPedimento", GetType(String)) - - End Sub - Private Sub CreaDTmpC() - DTmpC = New DataTable - DTmpC.Columns.Add("Descripcion", GetType(String)) - End Sub - Private Sub CreaDTmpF() - DTmpF = New DataTable - DTmpF.Columns.Add("CveVenta", GetType(Integer)) - DTmpF.Columns.Add("Titulo", GetType(String)) - DTmpF.Columns.Add("Nombre", GetType(String)) - DTmpF.Columns.Add("Puesto", GetType(String)) - DTmpF.Columns.Add("Lado", GetType(Integer)) - End Sub - Private Sub CreaDTImpuestos() - TmpDTImpuestos = New DataTable - TmpDTImpuestos.Columns.Add("CveImpuestoLocal", GetType(Integer)) - TmpDTImpuestos.Columns.Add("ImpuestoLocal", GetType(String)) - TmpDTImpuestos.Columns.Add("Porcentaje", GetType(Decimal)) - TmpDTImpuestos.Columns.Add("Importe", GetType(Decimal)) - TmpDTImpuestos.Columns.Add("TipoImpuesto", GetType(Integer)) - TmpDTImpuestos.Columns.Add("CveCuenta", GetType(Integer)) - TmpDTImpuestos.Columns.Add("Orden", GetType(Integer)) - End Sub - Private Sub CreaDTImpuestosIVAIEPS() - TmpDTImpuestosIVAIEPS = New DataTable - TmpDTImpuestosIVAIEPS.Columns.Add("Impuesto", GetType(String)) - TmpDTImpuestosIVAIEPS.Columns.Add("tasa", GetType(String)) - TmpDTImpuestosIVAIEPS.Columns.Add("Importe", GetType(Decimal)) - TmpDTImpuestosIVAIEPS.Columns.Add("Orden", GetType(Integer)) - End Sub - Private Sub CreaDTDocumentosRelacionados() - TmpDTDocumentosRelacionados = New DataTable - TmpDTDocumentosRelacionados.Columns.Add("SerieFolio", GetType(String)) - TmpDTDocumentosRelacionados.Columns.Add("Fecha", GetType(String)) - TmpDTDocumentosRelacionados.Columns.Add("Importe", GetType(Decimal)) - TmpDTDocumentosRelacionados.Columns.Add("FolioFiscal", GetType(Integer)) - End Sub -#End Region - -#Region "P D F" - - -#End Region - -#Region "A C T U A L I Z A " - -#Region "New" - 'Private Function ActualizaTimbrado(Timbro As Boolean, CveVenta As Integer) As Boolean - ' Dim Retorno = False - ' Dim ObjVentas As New ClsVentas() - - ' Retorno = ObjVentas.UpdateVentaTimbre(CBool(Timbro), CveVenta) - ' ObjVentas.Dispose() - - ' Return Retorno - 'End Function - 'Private Sub ActualizaCadenaOriginal(CadenaOriginal As String, CveVenta As Integer) - ' Dim ObjVentas As New ClsVentas() - ' ObjVentas.UpdateVentaCadenaOriginal(CadenaOriginal.ToString(), CveVenta) - ' ObjVentas.Dispose() - 'End Sub - 'Private Sub ActualizaEstatus(CveEstatus As Integer, FolioFiscal As String, CveVenta As Integer) - ' Dim ObjVentas As New ClsVentas() - ' ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, "", NowADS(), CveVenta) - ' ObjVentas.Dispose() - 'End Sub - 'Private Sub ActualizaCliente(NumCtaPago As String, MetodoDePago As Integer, CveCliente As Integer) - ' Dim ObjCliente As New ClsClientes - ' ObjCliente.UpdateClienteFactura(NumCtaPago, MetodoDePago, CveCliente, UsuarioActual.CveUsuario) - ' ObjCliente.Dispose() - 'End Sub -#End Region -#End Region - -#Region "M E T O D O S" - - - Private Sub SetValues() - ViewState("TipoCambio") = 1 - - If UsuarioActual.Empresa.MostrarRetIVA Then TrRetIVA.Style.Add("display", "") - If UsuarioActual.Empresa.MostrarRetISR Then TrRetISR.Style.Add("display", "") - - - - - End Sub - Private Sub SetPermisos() - If CveVenta < 1 OrElse EsCreaApartirDe Then - 'Puede cotizar - If Not UsuarioActual.TienePermisoProceso(59) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) - End If - - 'Puede Hacer NC - If Not UsuarioActual.TienePermisoProceso(175) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Egs")) - End If - - 'Puede Hacer Devolución - If Not UsuarioActual.TienePermisoProceso(264) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Dev")) - End If - - 'Puede facturar - If Not UsuarioActual.TienePermisoProceso(60) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) - If Not UsuarioActual.TienePermisoProceso(175) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Egs")) - End If - If Not UsuarioActual.TienePermisoProceso(264) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Dev")) - End If - End If - - 'Puede remisionar - If Not UsuarioActual.TienePermisoProceso(199) Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - - End If - - 'Puede hacer pedido - If Me.CveVenta <= 0 Then - If Not UsuarioActual.TienePermisoProceso(177) Then - If DdlTipoComprobante.Items.FindByValue("Pd2") IsNot Nothing Then - DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Pd2")) - End If - End If - End If - - - '[IPP]: FALTA CONFIGURAR Y DAR PERMISO A TODOS LOS QUE TENGAN ACCESO A VENTAS - ''Puede remisionar - 'If Not UsuarioActual.TienePermisoProceso(199) Then - ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) - 'End If - - ''MODO SOLO LECTURA - 'If DdlTipoComprobante.Items.Count = 0 Then - ' DdlTipoComprobante.Items.Insert(0, New ListItem("Solo lectura", "-1")) - ' TrBotones.Visible = False - 'End If - - ConfiguraTipoDocto() - End If - End Sub - Private Sub CalculaTotalesVenta(Optional RecalculaImpuestosLocales As Boolean = True, Optional NCDescuento As Boolean = False, Optional ValidarDescuentos As Boolean = False, Optional RecalcularTotalOriginal As Boolean = True) - - Dim TotalSubTotal As Decimal = TmpDT.SUMD("TotalImporte") - Dim TotalSubTotalRef As Decimal = TotalSubTotal - - Dim TotalDescuentos As Decimal = TmpDT.SUMD("Descuento") - Dim TotalAmortizacion As Decimal = LblAmortizacion.Text.ToDecimal - Dim TotalIVA As Decimal = TmpDT.SUMD("ImporteIVA") - Dim TotalIEPS As Decimal = TmpDT.SUMD("ImporteIEPS") - Dim TotalRetIVA As Decimal = TmpDT.SUMD("ImporteRetIVA") - Dim TotalRetISR As Decimal = TmpDT.SUMD("ImporteRetISR") - Dim Total As Decimal = 0 - Dim TotalImpuestosLocales As Decimal = 0 - - Dim TotalProntoPago As Decimal = 0 - - If ValidarDescuentos Then - TotalSubTotalRef = TotalSubTotal - TotalDescuentos - End If - - 'If TotalAmortizacion > 0 AndAlso TotalSubTotalRef = TotalAmortizacion Then ' si se amortizó completa la factura, debe de limpiar los impuestos PorcentajeRetIVA - ' If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("3") Then - ' For Each dr As DataRow In TmpDT.Rows - ' dr("ImporteIVA") = 0 : dr("ImporteIEPS") = 0 : dr("PorcentajeIEPS") = 0 : dr("ImporteRetIVA") = 0 : dr("PorcentajeRetIVA") = 0 : dr("ImporteRetISR") = 0 : dr("PorcentajeIVA") = 0 : dr("IVA") = 0 - ' Next - - ' If TmpDTImpuestos IsNot Nothing Then - ' For Each dr2 As DataRow In TmpDTImpuestos.Rows - ' dr2("Importe") = 0 - ' Next - ' TmpDTImpuestos.AcceptChanges() - ' End If - - ' TmpDT.AcceptChanges() - ' TotalIVA = TmpDT.SUMD("ImporteIVA") - ' TotalIEPS = TmpDT.SUMD("ImporteIEPS") - ' TotalRetIVA = TmpDT.SUMD("ImporteRetIVA") - ' TotalRetISR = TmpDT.SUMD("ImporteRetISR") - ' TotalImpuestosLocales = TmpDTImpuestos.SUMD("Importe") - ' End If - 'End If - - If RecalculaImpuestosLocales AndAlso TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then - If TotalSubTotal <> TotalAmortizacion Then - For Each drt As DataRow In TmpDTImpuestos.Rows - drt("Importe") = drt("Porcentaje").ToString().ToDecimal * TotalSubTotal / 100 - Next - End If - - GvImpuestosLocales2.DataSource = TmpDTImpuestos - GvImpuestosLocales2.DataBind() - End If - - For Each gvr As GridViewRow In GvImpuestosLocales2.Rows - If gvr.RowType = DataControlRowType.DataRow Then - - If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal > 0 Then - If gvr.DataKey("TipoImpuesto") = "5" Then ' traslado de imp local - TotalImpuestosLocales -= gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal - Else - TotalImpuestosLocales += gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal - End If - End If - End If - Next - - 'If TotalDescuentos > 0 Then GvPS.Columns(ColumnaDescuento).Visible = True : thEncDesc1.Visible = True : thEncDesc2.Visible = True Else GvPS.Columns(ColumnaDescuento).Visible = False : thEncDesc1.Visible = False : thEncDesc2.Visible = False - If TotalIEPS > 0 Then TrIEPS.Visible = True : GvPS.Columns(ColumnaIEPS).Visible = True Else TrIEPS.Visible = False : GvPS.Columns(ColumnaIEPS).Visible = False - If TotalRetIVA > 0 Then GvPS.Columns(ColumnaRetIVA).Visible = True Else GvPS.Columns(ColumnaRetIVA).Visible = False - If TotalRetISR > 0 Then GvPS.Columns(ColumnaRetISR).Visible = True Else GvPS.Columns(ColumnaRetISR).Visible = False - - 'If DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero().Contiene(2, 1) Then - ' TotalAmortizacion = 0 - 'End If - - Dim TotalRemNCAplicado As Decimal = 0 - - If TbDescuentosRNC.Visible AndAlso ListaNCDesc IsNot Nothing Then - TotalRemNCAplicado = ListaNCDesc.Sum(Function(RNC) RNC.TotalRemNCAplicado) - If ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then - TotalRemNCAplicado += ListaNCBonificacion.Sum(Function(RNC) RNC.TotalRemNCAplicado) - End If - End If - - Total = (TotalSubTotal - TotalDescuentos - TotalAmortizacion + TotalIVA + TotalIEPS - TotalRetIVA - TotalRetISR - TotalImpuestosLocales) - 'LblSubTotal1.Text = TotalSubTotal.FormatoNumero(2) - TxtSubTotal.Text = TotalSubTotal.FormatoNumero(2) - LblDescuentos.Text = TotalDescuentos.FormatoNumero - TxtSubTotal2.Text = (TotalSubTotal - TotalDescuentos - TotalAmortizacion).FormatoNumero(2) - TxtRetIVA.Text = TotalRetIVA.FormatoNumero(2) - TxtRetISR.Text = TotalRetISR.FormatoNumero(2) - TxtIVA.Text = TotalIVA.FormatoNumero - TxtIEPS.Text = TotalIEPS.FormatoNumero - TxtTotal.Text = Total.FormatoNumero - - - - HdnProntoPago.Value = TotalProntoPago.ToString() - LblProntoPago.Text = TotalProntoPago.FormatoNumero(2) - - LblTotalAPagar.Text = (TxtTotal.Text.ToDecimal() - TotalRemNCAplicado - TotalProntoPago).FormatoNumero - - If RecalcularTotalOriginal Then - LblTotalOriginal.Text = (TxtTotal.Text.ToDecimal()).FormatoNumero - End If - - LblTotalAPagarAdicional.Text = (LblTotalOriginal.Text.ToDecimal() - LblDescuentoAdicional.Text.ToDecimal()).FormatoNumero - - 'LblAmort.Text = TxtSubTotal.Text - If CveVenta <= 0 OrElse (CveDevolucion > 0 And NuevaFactura = 1) Then - HdnVentaSaldo.Value = Total.ToString() - Else - HdnVentaSaldo.Value = SaldoVenta.ToString() - End If - HdnIVAOriginal.Value = TxtIVA.Text - - 'JJMQ 20160506: Se agrego para la validacion de pago de contado. - 'CVImporteContado.ValueToCompare = Total.ToString() - - If MensajeCveSAT IsNot Nothing AndAlso MensajeCveSAT.ToString().Length > 0 Then - Alert($"Los siguientes conceptos hace falta especificar clave SAT

    {MensajeCveSAT.ToString()}", TipoMensaje.MsgAdvertencia) - MensajeCveSAT.Clear() - End If - - Dim view As DataView = New DataView(TmpDT) - view.Sort = "Consec" - GvPS.DataSource = view - GvPS.DataBind() - - - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ListaDescuentos.Count > 0 Then - - Dim Titulo As String = ListaDescuentos.FirstOrDefault().NombrePromo - Dim strPromos As New StringBuilder - If Not String.IsNullOrEmpty(Titulo) Then - - For Each Promo As Modelos.VentaDescuentos In ListaDescuentos - If Not String.IsNullOrEmpty(Promo.ObsDescuento) Then - strPromos.AppendFormat("{0}, ", Promo.ObsDescuento) - End If - Next - - If strPromos.Length > 2 Then - strPromos.Remove(strPromos.Length - 2, 2) - End If - - If strPromos.Length > 0 Then - TxtObsFact.Text = "" - TxtObsFact.Text = String.Format("{0} {1}", Titulo, strPromos.ToString()) - End If - - End If - - End If - - ValidaImportePublicoGeneral() - - UPObservaciones.Update() - - UpPS.Update() - RegistraScript("BorraDescuentos();", "BorraDescuentos") - End Sub - - Private Sub VinculaCotizacionVenta() - Dim ObjVentas As New ClsVentas() - ObjVentas.UpdateVentaCotizacion(CveVenta, Request("CveVenta").ToEntero()) - ObjVentas.Dispose() - End Sub - - Protected Sub DdlFuenteRecaudacion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlFuenteRecaudacion.SelectedIndexChanged - For Each dr As DataRow In TmpDT.Rows - dr("CvePresupuestoIngreso") = DdlFuenteRecaudacion.SelectedValue - Next - - GvPS.DataSource = TmpDT - GvPS.DataBind() - - UpPS.Update() - End Sub - Protected Sub DdlFR_SelectedIndexChanged(sender As Object, e As EventArgs) - Dim DdlFR_Gv As DropDownList = CType(sender, DropDownList) - Dim index As Integer = CType(DdlFR_Gv.NamingContainer, GridViewRow).FCLiteral("LtlConsecutivo").Text.ToString().ToEntero() - - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - TmpDT(index - 1)("CvePresupuestoIngreso") = DdlFR_Gv.SelectedValue - End If - TmpDT.AcceptChanges() - End Sub - - - Protected Sub TxtCodigo_TextChanged(sender As Object, e As System.EventArgs) Handles TxtCodigo.TextChanged - - Dim ObjClientes As New ClsClientes() - - Dim Nombre As String = "-1" - Dim Codigo As String = "-1" - Dim NombreCorto As String = "-1" - Dim RFC As String = "-1" - Dim Telefono As String = "-1" - Dim Mail As String = "-1" - - If TxtCodigo.Text.Trim <> String.Empty Then Codigo = TxtCodigo.Text.Trim - - If Codigo <> "-1" Then - If ObjClientes.GetClientes(-1, Nombre, Codigo, NombreCorto, RFC, Telefono, Mail, -1, UsuarioActual.CveEmpresa, TipoCliente:=-1) Then - If ObjClientes.DtResultados.Rows.Count > 0 Then - If UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 77 AndAlso Not ObjClientes.CveCliente.Contiene(10450, 10460, 10458) Then - TrEmitir.Visible = False : LbAgregar.Enabled = False : BtnBuscarCliente.Enabled = False : BtnEmitirImprimir.Visible = False : TrVistaPrevia.Visible = False - UpFacturar.Update() - Exit Sub - ElseIf UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 21 AndAlso Not ObjClientes.CveCliente.Contiene(27448) Then - TrEmitir.Visible = False : LbAgregar.Enabled = False : BtnBuscarCliente.Enabled = False : BtnEmitirImprimir.Visible = False : TrVistaPrevia.Visible = False - UpFacturar.Update() - Exit Sub - Else - HdnCveCliente.Value = ObjClientes.CveCliente.ToString() - End If - BtnBuscarCliente_Click(sender, e) - Else - Alert("No se encontró el cliente con el código: " & TxtCodigo.Text.Trim & ".", Extensiones.TipoMensaje.MsgAdvertencia) - TxtCodigo.Text = "" - LblCliente.Text = "Cliente" - LblDireccion.Text = "Dirección" - LblColonia.Text = "Colonia" - LblCiudad.Text = "Ciudad" - LblEstado.Text = "Estado" - LblCP.Text = "00000" - LblRFC.Text = "AAA010101AAA" - LblTelefono.Text = "9999999999" - trsucursalciente.Visible = False - End If - End If - ObjClientes.Dispose() - - End If - End Sub - - Private Sub HabilitarFacturacionSucursal() - trsucursalciente.Visible = True - 'LnkAgregarSucursal.Visible = True - LblSucursal.Text = "Cliente" - If (CveVenta <= 0 OrElse NuevaFactura = 1) Then - DdlSucursalCliente.Enabled = True - End If - DdlSucursalCliente_SelectedIndexChanged(DdlSucursalCliente, EventArgs.Empty) - - UpCliente.Update() - End Sub - - Protected Sub ChkFacturarSucursal_CheckedChanged(sender As Object, e As EventArgs) - - End Sub - - - - Private Sub ConfiguraTipoDocto() - - - Tr33.Visible = False - - 'si tiene la funcionalidad que se active independiente del tipo de documento RMF 15-10-2017 - Tr33.Visible = True - - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") Then - BtnEmitirImprimir.Text = "Emitir e Imprimir" - 'TdReferencia.Style.Add("display", "none") - ElseIf DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") Then - BtnEmitirImprimir.Text = "Emitir e Imprimir" - 'TdReferencia.Style.Remove("display") - ElseIf DdlTipoComprobante.SelectedValue = "Rem" Then - BtnEmitirImprimir.Text = "Registrar" - 'TdReferencia.Style.Add("display", "none") - ElseIf DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC", "PA", "Pd2") Then - BtnEmitirImprimir.Text = "Registrar" - 'TdReferencia.Style.Add("display", "none") - ElseIf DdlTipoComprobante.SelectedValue = "Cot" Then - BtnEmitirImprimir.Text = "Cotizar" - 'TdReferencia.Style.Add("display", "none") - - 'FACTURACION 3.3 - Tr33.Visible = True - - ElseIf DdlTipoComprobante.SelectedValue = "Com" Then - BtnEmitirImprimir.Text = "Registrar" - 'TdReferencia.Style.Add("display", "none") - ElseIf DdlTipoComprobante.SelectedValue.ToString() = "OP" Then - BtnEmitirImprimir.Text = "Registrar" - - End If - - UpFacturar.Update() - - End Sub - Private Sub EliminaPoliza() - - 'If UsuarioActual.Empresa.TipoContabilidad = 2 Then - - ' Dim ObjAC As New ClsContPAQi(UsuarioActual.Empresa) - ' ObjAC.IniciaTransacSQL() - ' Dim ObjConta As New ClsContabilidad - ' ObjConta.IniciaTransacSQL() - - ' Dim ErrorMovimiento = False - - ' 'Elimina la poliza - ' If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso (UsuarioActual.Empresa.UsaAC Or UsuarioActual.Empresa.UsaContabilidad) AndAlso IdPoliza > 0 Then - ' If Not ObjAC.RemovePoliza(IdPoliza) Then - ' ErrorMovimiento = True - ' End If - ' End If - - ' 'Desasocia la poliza - ' If Not ErrorMovimiento Then - ' If Not ObjConta.DesasociarPoliza(IdPoliza, UsuarioActual.CveEmpresa) Then - ' ErrorMovimiento = True - ' End If - ' End If - - ' If Not ErrorMovimiento Then - ' If Not ObjConta.UpdatePrePolizasDetalleBloquear(CvePrePoliza, False) Then - ' ErrorMovimiento = True - ' End If - ' End If - - ' If Not ErrorMovimiento Then - ' Alert("La póliza ha sido desvinculada y eliminada con éxito.", TipoMensaje.MsgInformacion) - ' ObjAC.Commit() - ' ObjConta.Commit() - ' BtnDescontabilizar.Visible = False - ' Else - ' Alert("Ocurrió un error al desvincular y/o eliminar la póliza. Por favor intente de nuevo ", TipoMensaje.MsgError) - ' ObjAC.RollBack() - ' ObjConta.RollBack() - ' End If - - ' ObjAC.Dispose() - ' ObjConta.Dispose() - - 'End If - - - - End Sub - Protected Sub DdlPS_SelectedIndexChanged1(sender As Object, e As EventArgs) - Dim Ddl As DropDownList = CType(sender, DropDownList) - Dim gvr As GridViewRow = CType(Ddl.BindingContainer, GridViewRow) - gvr.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTProductosServiciosEquivalencias(Ddl.SelectedValue.ToEntero(), -1, UsuarioActual.CveEmpresa) - gvr.FCDropDownList("DdlUnidadMedida").DataBind() - - End Sub - - Private Function CuadrarFacturaMovimientos(ByRef ObjVentas As ClsVentas, CveRemision As Integer, MovDetalle As DataTable) As DataTable - Dim MovDTCuadrados As New DataTable - MovDTCuadrados = MovDetalle.Clone - MovDTCuadrados.Clear() - - 'Llenamos el DT solo si es primera llamada - If DtRemConceptosSurtidos Is Nothing Then - Dim DtDetalleRemision As DataTable = Nothing - Dim StrCveVentasDetalle As New StringBuilder() - - If ObjVentas.GetVentaDetalle(CveRemision) Then - DtDetalleRemision = ObjVentas.DtResultados.FiltraParametros("", DistinctColumns:={"CveVenta", "CveVentaDetalle"}) - End If - - For Each RowDetalle As DataRow In DtDetalleRemision.Rows - StrCveVentasDetalle.AppendFormat("{0},", RowDetalle("CveVentaDetalle")) - Next - - If StrCveVentasDetalle.Length > 0 Then - StrCveVentasDetalle.Remove(StrCveVentasDetalle.Length - 1, 1) - End If - - If DtDetalleRemision IsNot Nothing Then - - DtRemConceptosSurtidos = New DataTable - DtRemConceptosSurtidos.Columns.Add("CveRemision", GetType(Integer)) - DtRemConceptosSurtidos.Columns.Add("CveVentaDetalle", GetType(Integer)) - DtRemConceptosSurtidos.Columns.Add("Cantidad", GetType(Decimal)) - DtRemConceptosSurtidos.Columns.Add("Surtido", GetType(Decimal)) - - 'VERIFICA SOLO LOS QUE SON TIPO PRODUCTOS - For Each dr As DataRow In DtRemisionesTmpDT.FiltraParametros($"CveTipoPS = 2 AND CveVentaDetalle IN ({StrCveVentasDetalle.ToString()})").Rows - Dim dtr As DataRow = DtRemConceptosSurtidos.NewRow - dtr("CveRemision") = CveRemision - dtr("CveVentaDetalle") = dr("CveVentaDetalle") - dtr("Cantidad") = dr("Cantidad") - dtr("Surtido") = 0 - DtRemConceptosSurtidos.Rows.Add(dtr) - Next - End If - - End If - - For Each dr As DataRow In MovDetalle.Rows - Dim rowSurtidos As DataRow = DtRemConceptosSurtidos.FiltroPrimero($"CveVentaDetalle={dr("CveVentaDetalle")}") - Dim rowSurtidosP As DataRow = DtRemConceptosSurtidos.Select($"CveVentaDetalle={dr("CveVentaDetalle")}").FirstOrDefault - Dim Indice As Integer = DtRemConceptosSurtidos.Rows.IndexOf(rowSurtidosP) - - 'Si no se ha terminado de surtir agregamos el movimiento - If Indice >= 0 Then - ' rowSurtidos("Surtido").ToString().ToDouble < rowSurtidos("Cantidad").ToString().ToDouble AndAlso (dr("CantidadDisponible").ToString().ToDouble - rowSurtidos("Surtido").ToString().ToDouble > 0 Or dr("Serie").ToString() <> "") - If rowSurtidos("Surtido").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDecimal Then - Dim CantidadSurtida As Decimal = If(dr("CantidadDisponible").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDouble, dr("CantidadDisponible").ToString().ToDecimal, rowSurtidos("Cantidad").ToString().ToDecimal) - - 'SI LA CANTIDAD SURTIDA SUPERA LO REQUERIDO, TOMA SOLO LO NECESARIO PARA COMPLETAR - If (rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida) > rowSurtidos("Cantidad").ToString().ToDecimal Then - CantidadSurtida = (rowSurtidos("Cantidad").ToString().ToDecimal - rowSurtidos("Surtido").ToString().ToDecimal) - End If - - MovDTCuadrados.ImportRow(dr) - MovDTCuadrados(MovDTCuadrados.Rows.Count - 1)("Cantidad") = CantidadSurtida - DtRemConceptosSurtidos(Indice)("Surtido") = rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida - End If - Else - ErrorList.Add("Ocurrió un error al traspasar el inventario de la remisión") - Exit For - End If - Next - - Return MovDTCuadrados - End Function - - - -#End Region - - - - -#Region "E V E N T O - B I T A C O R A" - Protected Sub GvEB_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEB.RowDataBound - If e.Row.RowType = DataControlRowType.DataRow Then - If e.Row.RowIndex = 0 Then - e.Row.Cells(0).Width = Unit.Pixel(200) - e.Row.Cells(1).Width = Unit.Pixel(200) - e.Row.Cells(2).Width = Unit.Pixel(100) - e.Row.Cells(3).Width = Unit.Pixel(500) - End If - - If e.Row.DBCampo("Archivo").ToString() <> "" Then - e.Row.FCLinkButton("LinkArchivo").Visible = True - e.Row.FCLinkButton("LinkArchivo").CommandArgument = String.Format("OI\{0}", e.Row.DBCampo("Archivo").ToString()) - ScriptManager.GetCurrent(Me).RegisterPostBackControl(e.Row.FCLinkButton("LinkArchivo")) 'Registro un evento Postbacktrigger, que recargue toda la pagina para que funcione - End If - - e.Row.Cells(3).HorizontalAlign = HorizontalAlign.Left - End If - End Sub - Protected Sub BtnGuardarEventoBitacora_Click(sender As Object, e As EventArgs) Handles BtnGuardarEventoBitacora.Click - - Dim FileExtension As String = "-1" - Dim filesgral As List(Of Archivo) = Anexo.getfiles().Archivos - Dim Filename As String = "" - - For Each fileItem As Archivo In filesgral - FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") - Filename = fileItem.filename - Next - - Dim ObjEventos As New ClsOIEventos() - If ObjEventos.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format(".{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then - If Filename <> "" Then - Filename.FilesMove(String.Format("OI{0}", ObjEventos.CveEvento.ToString()), String.Format("{0}OI", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) - End If - End If - ObjEventos.Dispose() - CargaEventoBitacora() - UPEventoBitacora.Update() - - End Sub - Private Sub CargaEventoBitacora() - If CveVenta <= 0 Then Exit Sub - - Dim ObjEventoBitacora As New ClsOIEventos() - If ObjEventoBitacora.GetAgendaBitacora(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then - GvEB.DataSource = ObjEventoBitacora.DtResultados.FiltraParametros("CveTipoEvento IN(6,2,1)") - Else - GvEB.DataSource = Nothing - End If - ObjEventoBitacora.Dispose() - - GvEB.DataBind() - End Sub - - Protected Sub DownloadFile(ByVal sender As Object, ByVal e As EventArgs) - Dim filePath As String = String.Format("{0}{1}", UsuarioActual.Empresa.Ruta, CType(sender, LinkButton).CommandArgument) - Dim Archivo As New System.IO.FileInfo(filePath) - - HttpContext.Current.Response.Clear() - HttpContext.Current.Response.ClearContent() - HttpContext.Current.Response.ContentType = "application/octet-stream" - HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment; filename=" + Path.GetFileName(filePath)) - HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) - HttpContext.Current.Response.TransmitFile(filePath) - HttpContext.Current.Response.Flush() - HttpContext.Current.Response.End() - - Archivo = Nothing - End Sub - -#End Region - -#Region "BTN 'S" - Protected Sub LnkActualizarOrdenProduccion_Click(sender As Object, e As EventArgs) - If DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then - Dim ObjCGame As New ClsCGame - If ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), CveVenta) Then - Alert("La orden de producción fue actualizada con exito.") - End If - ObjCGame.Dispose() - Else - Alert("Tiene que seleccionar una orden de producción.", TipoMensaje.MsgAdvertencia) - End If - End Sub - - - - - - - - 'BtnRefacturacionConfirmar - Private Sub BtnRefacturacionConfirmar_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmar.Click - ' DdlMotivoRefactura.SelectedValueExist(1) - ' DdlMotivoCancelacion.Enabled = False - - 'UpRefac.Update() - RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1") - 'CancelarDocumento(True) - End Sub - Private Sub BtnRefacturacionConfirmarAceptacion_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmarAceptacion.Click - 'DdlMotivoCancelacion.SelectedValueExist(1) - 'DdlMotivoCancelacion.Enabled = False - - 'UpRefac.Update() - RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1") - 'CancelarDocumento(True) - End Sub - - Protected Sub BtnDescontabilizar_Click(sender As Object, e As EventArgs) - 'Alert("Hola entre", TipoMensaje.MsgError) - 'Exit Sub - - Dim ObjConta As New ClsContabilidad - Dim Movimientos As Integer = ObjConta.GetMovimientosPoliza(IdPoliza, UsuarioActual.CveEmpresa) - - 'Verifica que solo exista 1 compra asociada - If Movimientos = 1 Then - EliminaPoliza() - Else - RegistraScript("ConfirmEliminarPolizaMultiple();") - End If - - ObjConta.Dispose() - End Sub - Private Sub BtnMateriales_Click(sender As Object, e As EventArgs) Handles BtnMateriales.Click - Dim OS As New ClsOS - Dim DtDetalle As DataTable = Nothing - Dim DtDetalleMateriales As DataTable = Nothing - - DtDetalle = TmpDT.Copy - - For Each Row As DataRow In DtDetalle.Rows - If OS.GetDetalleMateriales(Row("CveOSDetalle").ToString().ToEntero(), CveOS) Then - Dim Cons As Integer = TmpDT.Rows.Count + 1 - - For Each dr As DataRow In OS.DtResultados.FiltraParametros("SeFacturara = 1 ").Rows - Dim drt As DataRow = TmpDT.NewRow - FacturaMateriales = 1 - drt("Consec") = Cons - drt("CveClasificacion") = dr("CveClasificacion") - drt("Clasificacion") = dr("Clasificacion") - drt("CvePS") = dr("CvePS") - drt("PS") = dr("PS") - drt("CodigoPS") = dr("CodigoPS") - drt("Cantidad") = dr("Cantidad") - drt("CveOSDetalle") = dr("CveOSDetalle") - drt("CveSubProyecto") = dr("CveSubProyecto") - drt("SubProyecto") = dr("SubProyecto") - drt("CveActivoFijo") = -1 - TmpDT.Rows.Add(drt) - Cons = Cons + 1 - Next - End If - DtDetalleMateriales = OS.DtResultados.FiltraParametros("SeFacturara = 1 ") - Next - OS.Dispose() - - GvPS.DataSource = TmpDT - DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") - GvPS.DataBind() - UpPS.Update() - End Sub - - - - - Private Sub RegenerarPDF(CveVenta As Integer, CveEmpresa As Integer, CveUsuario As Integer, strURLHOST As String) - Try - DescargarFactura(CveVenta, CveEmpresa, CveUsuario, Regenerar:=True, strURLHOST:=strURLHOST) - Catch ex As Exception - OnError("Ocurrió error al regenerar el PDF", ex) - End Try - End Sub - -#End Region - - - Private Sub DdlMoneda_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlMoneda.SelectedIndexChanged - CambiaMoneda() - End Sub - Private Sub CambiaMoneda() - TrConversionTipoCambio.Visible = False - TrConversionDolares.Visible = False - - Select Case DdlMoneda.SelectedValue - Case "1" - TxtTipoCambio.Text = "1" - TxtTipoCambioDlls.Text = GlobalTipoCambio(NowADS).ToString() - TrConversionDolares.Visible = True - ChkConvertirDolares.Enabled = Not UsuarioActual.TienePermisoProceso(324) - Case "2" - TxtTipoCambioDlls.Text = "1" - 'If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then - ' TxtTipoCambio.Text = GlobalTipoCambio(NowADS.AddDays(-1)).ToString() - 'Else - TxtTipoCambio.Text = GlobalTipoCambio(NowADS).ToString() - 'End If - TrConversionTipoCambio.Visible = True - ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) - - Case Else - 'If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then - ' TxtTipoCambio.Text = GlobalTipoCambio(NowADS.AddDays(-1)).ToString() - 'Else - TxtTipoCambio.Text = GlobalTipoCambio(NowADS).ToString() - 'End If - TrConversionTipoCambio.Visible = True - End Select - - If UsuarioActual.CveEmpresa.Contiene(13, 83) Then - TxtTipoCambio.Enabled = True - TxtTipoCambioDlls.Enabled = True - TxtTipoCambio.ReadOnly = False - TxtTipoCambioDlls.ReadOnly = False - End If - - - UpPS.Update() - - - End Sub - - -#Region " BUSCAR CLIENTE " - Protected Sub BtnBuscarCliente_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnBuscarCliente.Click - ViewState("CveCliente") = HdnCveCliente.Value.ToEntero() - CargaCliente(HdnCveCliente.Value.ToEntero()) - If DdlPS.SelectedValue IsNot Nothing AndAlso DdlPS.SelectedValue.ToEntero() > 0 Then - DdlPS_SelectedIndexChanged(sender, e) - DdlPS.Focus() - Else - TxtCantidad.Focus() - End If - - End Sub - - - - - - -#End Region - - - -#Region "IMPUESTOS LOCALES" - Private Sub GvImpuestosLocales2_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvImpuestosLocales2.RowDataBound - If e.Row.RowType = DataControlRowType.DataRow Then - 'e.Row.FCTextBox("TxtImpuestoLocalPS").Text = (TxtSubTotal.Text.ToDouble - (TxtSubTotal.Text.ToDouble * (e.Row.DBCampo("Porcentaje").ToString().ToDouble) / 100)).ToString() - e.Row.FCTextBox("TxtImpuestoLocalPS").Attributes.Add("onKeyUp", String.Format("FnSuma();")) - - End If - End Sub - - - Private Function RegeneracionPolizas(ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ObjBancos As ClsBancos) As Boolean - - Dim ErrorCancelar As Boolean = False - Dim Mensaje As String = "" - - CreaObjetosVenta() - - 'If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then - ' ObjAC = New ClsContPAQi(UsuarioActual.Empresa) : ObjAC.IniciaTransacSQL() - 'End If - - 'REMOVEMOS LOS CONCEPTOS DE LA PREPOLIZA - ErrorCancelar = Not ObjConta.RemovePrePolizasDetalle(CvePrePoliza, -1, CveVenta, 2) - - ObjFactura.CveVenta = CveVenta - ObjFactura.CvePrePoliza = CvePrePoliza - - 'VUELVE A GENERAR LAS PREPOLIZAS - If Not ErrorCancelar Then ErrorCancelar = ProcesoPrepolizas(ObjConta, ObjFactura, -1, TmpDT, 1, ObjBancos, ObjVentas) - - If Not ErrorCancelar Then ErrorCancelar = GuardarVentaImpuestosLocales(ObjVentas, ObjConta, ObjFactura, 1) - - Return ErrorCancelar - End Function - -#End Region - -#Region " DEVOLUCION ALMACEN " - - Protected Sub LBDevolucionAlmacen_Click(sender As Object, e As EventArgs) - Dim SaldoAlmacen As Decimal = 0 - - Dim ErrorVerificacion As Boolean = False - - Using ObjInv As New ClsInventarios - If ObjInv.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then - If ObjInv.DtResultados.Rows.Count > 0 Then - TieneAlmacen = True - End If - Else - ErrorVerificacion = True - End If - End Using - - If ErrorVerificacion Then - Alert("No se pudieron verificar los movimientos de almacen del documento.", TipoMensaje.MsgError) - Exit Sub - End If - - If Not TieneAlmacen Then - Alert("El documento no tiene movimientos de almacen.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - Using ObjVentas As New ClsVentas - If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=True) Then - If ObjVentas.DtResultados.Rows.Count > 0 Then - Dim DbRowVenta As DataRow = ObjVentas.DtResultados.Rows(0) - Me.DevolucionAlmacen = DbRowVenta("EsDevolucionVenta").ToString().ToEntero() - SaldoAlmacen = DbRowVenta("SaldoAlmacen").ToString().ToDecimal() - End If - End If - End Using - - If DdlTipoComprobante.SelectedValue.ToString() = "Rem" AndAlso SaldoAlmacen = 0 Then - Alert("El documento ya fue devuelto.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If DdlTipoComprobante.SelectedValue.ToString() = "Ing" AndAlso SaldoAlmacen = 0 Then - Alert("El movimiento ya fue devuelto.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - - - Dim EstatusDevolucion As Integer = If(Me.DevolucionAlmacen = 0, 1, 0) - - Dim ObjV As New ClsVentas - If ObjV.UpdateVentasDevolucionAlmacen(EstatusDevolucion, CveVenta) Then - Alert("La solicitud de Devolución de Almacén se guardó correctamente") - End If - ObjV.Dispose() - - Me.DevolucionAlmacen = EstatusDevolucion - - 'InicializaDevolucionAlmacen() - 'UpnTools.Update() - - End Sub - -#End Region - - - -#Region "Metodos Viejos" - - Private Sub GvPS_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvPS.RowCommand - If e.CommandName = "Clonar" Then - Dim RowNum As Integer = Convert.ToInt32(e.CommandArgument) - Dim GvRow As GridViewRow = GvPS.Rows(RowNum) - TxtCantidad.Text = GvPS.Rows(RowNum).FCLiteral("LtlCantidad").Text - DdlClasificacion.SelectedValue = GvRow.DataKey("CveClasificacion") - DdlPS.SelectedValue = GvRow.DataKey("CvePS") - DdlPS_SelectedIndexChanged(Nothing, Nothing) - DdlUnidadMedida.SelectedValue = GvRow.DataKey("CveUM") - TxtObsPS.Text = GvRow.FCLiteral("LtlObsPS").Text - 'DdlProyecto.SelectedValue = GvRow.DataKey("CveProyecto") - 'DdlProyecto_SelectedIndexChanged(Nothing, Nothing) - 'DdlSubProyecto.SelectedValue = GvRow.DataKey("CveSubProyecto") - TxtPrecio.Text = GvRow.FCLiteral("LtlPU").Text - RegistraScript("Recalcula();") - LbAgregar_Click(Nothing, Nothing) - Else - DdlPS_SelectedIndexChanged(Nothing, Nothing) - End If - End Sub - Protected Sub OrdenarGvPS(ByVal sender As Object, ByVal e As EventArgs) - - For Each row As GridViewRow In GvPS.Rows - TmpDT.Rows(row.RowIndex)("Orden") = row.FCTextBox("TxtOrden").Text.ToEntero() - Next - - Dim resultados = From OrdenDT In TmpDT - Order By OrdenDT("Orden").ToString().ToEntero() - Select OrdenDT - TmpDT = resultados.CopyToDataTable - CalculaTotalesVenta() - - GvPS.DataSource = TmpDT - GvPS.DataBind() - UpPS.Update() - - End Sub - -#End Region - - -#Region "DESCARGAR E IMPRIMIR LISTADO" - Public Sub DescargarFormato() - Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoVentas.xlsx" - - Dim Archivo As New IO.FileInfo(Directorio) - If Archivo.Exists Then - Response.Clear() - Response.ClearHeaders() - Response.ClearContent() - Response.AddHeader("Content-Disposition", "attachment; filename=" + Archivo.Name) - Response.AddHeader("Content-Length", Archivo.Length.ToString()) - Response.ContentType = "text/plain" - Response.Flush() - Response.TransmitFile(Archivo.FullName) - Response.End() - End If - End Sub - - Private Sub CargarArchivo(Ruta As String, FileName As String, Tipo As String, FileUrl As String) - Dim dt As New DataTable - Dim ErrorArchivo As Boolean = False - Dim n As Integer = 0 - dt = ReadExcelFile(FileUrl, True) - If Not ErrorArchivo Then - If Not dt.Columns(0).ColumnName = "Cantidad" Then - Alert("El nombre de la primera columna debe ser 'Cantidad'.Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(1).ColumnName = "Código" Then - Alert("El nombre de la segunda columna debe ser 'Código'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(2).ColumnName = "Codigo Barras" Then - Alert("El nombre de la tecera columna debe ser 'Codigo Barras'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(3).ColumnName = "Producto/Servicio" Then - Alert("El nombre de la cuarta columna debe ser 'Producto/Servicio'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(4).ColumnName = "UM" Then - Alert("El nombre de la quinta columna debe ser 'U.M'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(5).ColumnName = "Precio Unitario" Then - Alert("El nombre de la sexta columna debe ser 'Precio Unitario'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(6).ColumnName = "Proyecto" Then - Alert("El nombre de la séptima columna debe ser 'Proyecto'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(7).ColumnName = "Observaciones" Then - Alert("El nombre de la octava columna debe ser 'Observaciones'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - - If Not dt.Columns(8).ColumnName = "Tiempo Entrega" Then - Alert("El nombre de la octava columna debe ser 'Tiempo Entrega'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - - dt.TableName = "Datos" - - Dim DtSubProyecto As DataTable = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) - DtSubProyecto.CaseSensitive = False - If Not ErrorArchivo Then - NumRow = 1 - Dim RowNoEncontrados As String = "" - Dim NumAgregados As Integer = 0 - For Each Row As DataRow In dt.Rows - NumAgregados = NumAgregados + 1 - Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal - Dim UM As String = Row("UM").ToString() - Dim Codigo As String = Row("Código").ToString().Trim.ToUpper - Dim CodigoBarras As String = Row("Codigo Barras").ToString().Trim.ToUpper - Dim ProductoServicio As String = Row("Producto/Servicio").ToString().Trim.ToUpper - Dim PrecioUnitario As Decimal = Row("Precio Unitario").ToString().ToDecimal - Dim Proyecto As String = Row("Proyecto").ToString().Trim.ToUpper - Dim Observaciones As String = Row("Observaciones").ToString().Trim.ToUpper - Dim TiempoEntrega As String = Row("Tiempo Entrega").ToString() - Dim CvePS As Integer = 0 - Dim CveClasificacion As Integer = 0 - Dim CveUM As Integer = 0 - Dim CodigoPS As Integer = 0 - Dim DrProyecto As DataRow - Dim SubProyecto As String = "" - Dim CveProyecto As Integer = 0 - Dim CveSubProyecto As Integer = 0 - NumRow = NumRow + 1 - - If Proyecto <> "" Then - DrProyecto = DtSubProyecto.FiltroPrimero($"(SubProyecto) = '{Proyecto}'") - If DrProyecto IsNot Nothing Then - CveSubProyecto = DrProyecto("CveSubProyecto").ToString().ToEntero() - CveProyecto = DrProyecto("CveProyecto").ToString().ToEntero() - SubProyecto = DrProyecto("SubProyecto").ToString() - End If - Else - CveProyecto = -1 - CveSubProyecto = -1 - End If - - If Codigo <> "" Then - - Using ObjPS As New ClsProductosServicios - If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, Codigo:=Codigo) Then - If ObjPS.CvePS > 0 Then - CvePS = ObjPS.CvePS - CveUM = ObjPS.CveUnidadMedida - CveClasificacion = ObjPS.CveClasificacion - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - End Using - - ElseIf CodigoBarras <> "" Then - - Using ObjPS As New ClsProductosServicios - If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, CodigoBarras:=CodigoBarras) Then - If ObjPS.CvePS > 0 Then - CvePS = ObjPS.CvePS - CveUM = ObjPS.CveUnidadMedida - CveClasificacion = ObjPS.CveClasificacion - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - End Using - - ElseIf ProductoServicio <> "" Then - - Using ObjPS As New ClsProductosServicios - If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, CodigoBarras:=CodigoBarras) Then - If ObjPS.CvePS > 0 Then - CvePS = ObjPS.CvePS - CveUM = ObjPS.CveUnidadMedida - CveClasificacion = ObjPS.CveClasificacion - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - Else - RowNoEncontrados = String.Format("{3}    - No se encontró {0} en la fila {1}, columna {2}<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) - End If - End Using - Else - RowNoEncontrados &= "<\BR>    - En la fila " & NumRow & " no se especificó código, código de barras ó descripción." - End If - - If CvePS > 0 Then - - If PrecioUnitario <= 0 Then - Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) - PrecioUnitario = ObjPrecioSugerido.PrecioSugerido - End If - - AgregarProductoServicio(Cantidad, CveUM, UM, -1, "", - CvePS, HdnPS.Value, Observaciones, PrecioUnitario, 0, - CveProyecto, Proyecto, CveSubProyecto, SubProyecto, - TiempoEntrega:=TiempoEntrega) - End If - Next - - CalculaTotalesVenta() - - If RowNoEncontrados.Length > 0 Then - Alert("Los siguientes productos o servicios no se encontraron en la Base de Datos.<\BR>" & RowNoEncontrados, TipoMensaje.MsgAdvertencia) - Else - Alert("Se cargaron " & NumAgregados & " productos o servicios correctamente.") - End If - End If - End If - dt.Dispose() - End Sub - - - - 'Private dtps As DataTable = Nothing - 'Private Function GetPS(Opt As String, Valor As String) As String - ' Dim StrReturn As String = String.Empty - ' Dim CvePS As Integer = 0 - ' If dtps Is Nothing Then dtps = GlobalDTPS(UsuarioActual.CveEmpresa) - ' CvePS = dtps.FiltroPrimeroValor("CvePS", Opt & " = '" & Valor & "'").ToString().ToEntero() - ' If CvePS > 0 Then - ' StrReturn = "True|" & CvePS.ToString() - ' Else - ' StrReturn = "False|    - No se encontró " & Valor & " en la fila " & NumRow & ", columna " & Opt - ' End If - ' Return StrReturn - 'End Function -#End Region - - - -#Region " BOTONERA - ACCIONES DE ABAJO " - -#Region " GENERAR FACTURA " - Protected Sub LBFacturarIngreso_Click(sender As Object, e As EventArgs) - EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) - 'DdlTipoComprobante.SelectedValue = "Ing" - EmitirDocumentoNuevo("Ing") - End Sub - Protected Sub LBFacturarAnticipo_Click(sender As Object, e As EventArgs) - EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) - 'DdlTipoComprobante.SelectedValue = "Ant" - EmitirDocumentoNuevo("Ant") - End Sub -#End Region - -#Region " GENERAR REMISION " - Private Sub BtnGenerarRemision_Click(sender As Object, e As EventArgs) Handles BtnGenerarRemision.Click - If DdlTipoComprobante.SelectedValue.Contiene("Cot", "PA", "Pd2") Then 'CUANDO ES COTIZACION O PEDIDOA O PEDIDO2 SE HARA REMISION - EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) - 'DdlTipoComprobante.SelectedValue = "Rem" - EmitirDocumentoNuevo("Rem") - End If - End Sub -#End Region - -#Region "GENERAR AUTORIZACIÓN" - - Protected Sub BtnGeneraAutorizacion_Click(sender As Object, e As EventArgs) - If DdlTipoComprobante.SelectedValue.Contiene("Pd2") Then - - EmitirDocumentoNuevo("PA") - End If - End Sub - -#End Region - -#Region " EMITIR DOCUMENTO NUEVO " - - Private Function ValidaFacturarCotizacion() As Boolean - Dim Retorno As Boolean = True - - If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then - Dim Total As Decimal = TxtTotal.Text.ToDecimal() - - Dim AmortizacionNC As Decimal = 0 - - Dim TienePagos As Boolean = ((Not (DtPagos Is Nothing OrElse DtPagos.Rows.Count = 0)) AndAlso (DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0)) OrElse AmortizacionNC > 0 - - - If Not PermiteCredito AndAlso Not TienePagos AndAlso Total > 0 Then - Alert("Es necesario especificar un pago.", TipoMensaje.MsgAdvertencia) - Retorno = False - Return Retorno - End If - - If Not PermiteCredito AndAlso TienePagos AndAlso Total > 0 Then - Dim TotalPago As Decimal = DtPagos.SUM("Importe") + AmortizacionNC - - If TotalPago < Total Then - Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) - Retorno = False - Return Retorno - End If - - End If - - End If - - Return Retorno - End Function - Private Sub EmitirDocumentoNuevo(TipoDoctoNuevo As String) - - - - If (FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) Then - Alert("La sucursal no tiene asignada un RFC.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - Dim TieneSoloServicios As Boolean = TmpDT.MAX("CveTipoPS") = "1" - 'SI ES REMISION Y TIENE PRODUCTOS, DEBE VERIFICAR EL ALMACEN - If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not TieneSoloServicios AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso TipoDoctoNuevo = "Ing" AndAlso Not TmpDT.MAX("CveTipoPS") = "1" Then - Dim SaldoAlmacenExA As Decimal = 0 - 'Dim SaldoAlmacenUsados As Decimal = 0 - - Using ObjInventarios As New ClsInventarios - 'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO - If ObjInventarios.GetSaldoVentaDetalleAlmacen(CveVenta, UsuarioActual.CveEmpresa) Then - SaldoAlmacenExA = ObjInventarios.DtResultados.SUMD("SaldoAlmacen", $"CveTipoAlmacen = 10") - 'SaldoAlmacenUsados = ObjInventarios.DtResultados.SUMD("SaldoAlmacen", $"CveTipoAlmacen = 22") - End If - End Using - - 'Si ya se surtió y recibió - If SaldoAlmacenExA <= 0 Then - BtnsFacturar.Visible = False - Alert("No se puede facturar hasta que se haya surtido la remisión", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - End If - - - - Dim FolioFijo As Integer = 0 - - - - If FolioFijo = 0 Then CargaFolios(FacturarDocumentoNuevo:=True) 'RECARGA FOLIOS CON EL NUEVO TIPO DOCTO - EmitirImprimir("Ing") 'MANDA A EMITIR - PROCESO VIEJO - - - End Sub -#End Region - -#End Region - - - -#Region "PORCENTAJE IVA" - Protected Sub DdlIVA_SelectedIndexChanged(sender As Object, e As EventArgs) - If Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0 Then RecalculaIVA() - - If ModalidadEdicion AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then - RecalculaIVA() - End If - - End Sub - - Private Sub RecalculaIVA() - PorcentajeIVA = Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2).ToDecimal - For Each Row As DataRow In TmpDT.Rows - If PorcentajeIVA > 0 Then - Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=Row("CvePS").ToString().ToEntero()).FiltroPrimero("") - If DrPS IsNot Nothing Then - If DrPS("IVA").ToString().Contiene("-1", "") Then - Row("PorcentajeIVA") = PorcentajeIVA - Else - Row("PorcentajeIVA") = DrPS("IVA") - End If - - Dim PU As Decimal = Row("PU").ToString().ToDecimal().RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos - - Dim TotalCalculableImpuestos As Decimal = (Row("Cantidad").ToString().ToDecimal * PU) - Row("Descuento").ToString().ToDecimal - Dim TotalCalculableImpuestosIVA As Decimal = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) - - Row("IVA") = Row("PorcentajeIVA").ToString().ToDouble - Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDouble * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) - End If - Else - Row("IVA") = 0 - Row("PorcentajeIVA") = 0 - Row("ImporteIVA") = 0 - End If - Next - CalculaTotalesVenta() - End Sub - -#End Region - - - - - Protected Sub DdlTipoRetencion_SelectedIndexChanged(sender As Object, e As EventArgs) - - If CveVenta <= 0 OrElse EsCreaApartirDe Then - - If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then - For Each RowServicio As DataRow In TmpDT.Rows - Dim tClienteRetIVA As Decimal = ClienteRetIVA - If tClienteRetIVA <= 0 Then - If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then - tClienteRetIVA = 0.106667D - ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then - tClienteRetIVA = 0.04D - ElseIf DdlTipoRetencion.SelectedValue.Contiene("0") Then - tClienteRetIVA = 0.00D - End If - ViewState("ClienteRetIVA") = tClienteRetIVA - End If - - Dim TotalCalculableImpuestos As Decimal = (RowServicio("Cantidad").ToString().ToDecimal() * RowServicio("PU").ToString().ToDecimal()) - RowServicio("Descuento").ToString().ToDecimal() - RowServicio("ImporteRetIVA") = (TotalCalculableImpuestos * ClienteRetIVA).RoundSQL() - RowServicio("PorcentajeRetIVA") = ClienteRetIVA - - Next - TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero(2) - Dim PorcentajeRetIVA As Decimal = (TmpDT.MAX("PorcentajeRetIVA").ToDecimal() * 100) - LblRetIVA.Text = PorcentajeRetIVA.FormatoNumero(2) - If PorcentajeRetIVA > 0 Then - TrRetIVA.Style.Add("display", "") - UsuarioActual.Empresa.MostrarRetIVA = True - DdlTipoRetencion.Visible = True - End If - - GvPS.DataSource = TmpDT - GvPS.DataBind() - End If - End If - UpPS.Update() - - End Sub - - - Private Function DescargarFactura(CveVenta As Integer, CveEmpresa As Integer, CveUsuarioCreo As Integer, Optional GetBytes As Boolean = True, Optional Regenerar As Boolean = False, Optional strURLHOST As String = "") As Byte() - - If String.IsNullOrEmpty(strURLHOST) Then - strURLHOST = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) - End If - - Dim Url As New Uri(String.Format("{0}/Compras/PopUpVerFactura.aspx?P={1}", strURLHOST, Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1®ENERAR={1}", CveVenta, If(Regenerar, "1", "0"))))) - Dim File As Byte() = Nothing - Try - Using httpClient As New HttpClient() - httpClient.Timeout = New TimeSpan(0, 2, 0) - Using request As New HttpRequestMessage(HttpMethod.Get, Url) - request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CveUsuario={2}", CveEmpresa, DateTime.UtcNow.Ticks, CveUsuarioCreo))) - Dim response = httpClient.SendAsync(request).Result - If GetBytes AndAlso response.StatusCode = Net.HttpStatusCode.OK Then - File = response.Content.ReadAsByteArrayAsync().Result - End If - End Using - End Using - Catch ex As Exception - File = Nothing - OnError("Ocurrió un error al descargar la factura", ex) - End Try - - Return File - End Function - - - Protected Sub btnupEventoBitacora_Click(sender As Object, e As EventArgs) - CargaEventoBitacora() - End Sub - - - Protected Sub BtnEditar_Click() Handles BtnEditar.Click - Dim Opcion As String = BtnEditar.Text - If Opcion = "Editar" Then - EditarHabilitarCampos() - ElseIf Opcion = "Guardar" Then - GuardarValoresEditados() - End If - End Sub - - Private Sub EditarHabilitarCampos() - 'Datos de emisión - - - 'Observaciones - TxtObsFact.Enabled = True - TxtOrdenCompra.Enabled = True - - BtnEditar.Text = "Guardar" - - - - If UsuarioActual.TienePermisoProceso(357) AndAlso LblSeTimbro.Text = "No" Then - DdlUsoCFDI.Enabled = True - End If - - If UsuarioActual.TienePermisoProceso(289) Then - If LblSeTimbro.Text = "No" Then - DdlUsoCFDI.Enabled = False - DdlMetodoPago33.Enabled = False - DdlFormaPago33.Enabled = False - End If - - - End If - - - UpParametros.Update() - UPObservaciones.Update() - UpFacturar.Update() - UPCondicionesPago.Update() - End Sub - - Private Sub GuardarValoresEditados() - Dim TieneError As Boolean = False - Dim AplicaUpdateTC As Boolean = False - - - If DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then - AplicaUpdateTC = True - End If - - - Dim ObjVentas As New ClsVentas() - ObjVentas.IniciaTransacSQL() - - If Not ObjVentas.UpdateObservacionesVenta(Me.CveVenta, UsuarioActual.CveEmpresa, -1, TxtObsFact.Text, -1, "", - "", "", TxtOrdenCompra.Text, NowADS.ToString) Then - TieneError = True - End If - - If Not TieneError AndAlso AplicaUpdateTC Then - If Not ObjVentas.UpdateVentaTC(Me.CveVenta, UsuarioActual.CveEmpresa, TxtTipoCambio.Text.ToDecimal()) Then - TieneError = True - End If - End If - - If Not TieneError Then - ObjVentas.Commit() - BtnEditar.Text = "Editar" - - Dim Liga As String = $"document.location.href=""/Ventas/Ventas.aspx?CveVenta={Me.CveVenta}"";" - Alert("La venta se actualizó correctamente", TipoMensaje.MsgInformacion, Liga, TextoConfirmacion:="Aceptar", TextoSegundoBoton:=Nothing, JSBtn2:=Nothing, ShowCloseButton:=False) - - UpParametros.Update() - UPObservaciones.Update() - UpFacturar.Update() - Else - ObjVentas.RollBack() - End If - - ObjVentas.Dispose() - 'REGENERAR EL PDF - Try - Dim CveEmpresaPDF As Integer = UsuarioActual.CveEmpresa - Dim CveUsuarioPDF As Integer = UsuarioActual.CveUsuario - - Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) - RegenerarPDF(CveVenta, CveEmpresaPDF, CveUsuarioPDF, strURLHOST) - Catch ex As Exception - OnError("Ocurrió un error al regenerar el PDF", ex) - End Try - End Sub - - Private Function DeshabilitarAplicarNotaDeCredito(RFC As String) As Boolean - Dim Retorno As Boolean = False - If UsuarioActual.CveEmpresa = 119 AndAlso RFC.Contiene("XAXX010101000", "XEXX010101000") AndAlso Not UsuarioActual.CveUsuario.Contiene(1719, 3761) Then - - UpnTools.Update() - Retorno = True - End If - Return Retorno - End Function - - - Private Sub DdlMetodoPago33_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlMetodoPago33.SelectedIndexChanged - CambiaMetodoPago33() - End Sub - Private Sub CambiaMetodoPago33() - CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) - End Sub - - Protected Sub ChkRequiereTecnico_CheckedChanged(sender As Object, e As EventArgs) - TdFechaOS2.Visible = ChkRequiereTecnicoModal.Checked - UpCliente.Update() - End Sub - - Protected Sub RBLTipoVenta_SelectedIndexChanged(sender As Object, e As EventArgs) - - If RBLTipoVenta.SelectedValue.ToEntero > 0 Then - DvModalTipoVentaPasoTipo.Visible = False - DvModalTipoVentaPasoCliente.Visible = True - 'DvModalTipoVentaPasoRequiereOS.Visible = False - 'DvModalTipoVentaPasoMedicoProcedimiento.Visible = False - End If - UpDvModalTipoVenta.Update() - End Sub - - Protected Sub DdlClientesWS_selectedindexchange(sender As Object, e As EventArgs) - - If DdlClientesWS.SelectedValue.ToEntero > 0 Then - - DvModalTipoVentaPasoCliente.Visible = False - DvModalTipoVentaPasoRequiereOS.Visible = True - - TxtFechaModal.Text = NowADS.ToString("yyyy-MM-dd HH:mm:ss").Replace(" ", "T") - - 'si es A - Vista o ,Fuera De Linea requiere tecnico - If RBLTipoVenta.SelectedValue.ToEntero.Contiene(1, 3) Then - ChkRequiereTecnicoModal.Checked = True - ChkRequiereTecnicoModal.Enabled = False - DvModalRequiereOSFecha.Visible = True - End If - - End If - - UpDvModalTipoVenta.Update() - - End Sub - - Protected Sub LnkDvModalTipoVentaSeuigenteRequiereTecnico_Click(sender As Object, e As EventArgs) - - If ChkRequiereTecnicoModal.Checked Then - If Not IsDate(TxtFechaModal.Text.Replace(",", "")) Then - Alert("El campo fecha no es valido.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - DvModalTipoVentaPasoRequiereOS.Visible = False - DvModalTipoVentaPasoMedicoProcedimiento.Visible = True - - UpDvModalTipoVenta.Update() - - End Sub - - Protected Sub DdlMedicoModal_SelectedIndexChanged(sender As Object, e As EventArgs) - ModalValidaMedicoProcedimiento() - End Sub - - Protected Sub DdlProcedimientoModal_SelectedIndexChanged(sender As Object, e As EventArgs) - ModalValidaMedicoProcedimiento() - End Sub - - Protected Sub ModalValidaMedicoProcedimiento() - - If DdlMedicoModal.SelectedValue.ToEntero > 0 AndAlso DdlProcedimientoModal.SelectedValue.ToEntero > 0 Then - LnkDvModalTipoVentaAceptar.Visible = True - Else - LnkDvModalTipoVentaAceptar.Visible = False - End If - - UpDvModalTipoVenta.Update() - - End Sub - - Protected Sub LnkDvModalTipoVentaCancelar_Click(sender As Object, e As EventArgs) - - LnkDvModalTipoVentaAceptar.Visible = False - - DvModalTipoVentaPasoTipo.Visible = True - DvModalTipoVentaPasoCliente.Visible = False - DvModalTipoVentaPasoRequiereOS.Visible = False - DvModalTipoVentaPasoMedicoProcedimiento.Visible = False - - DdlClientesWS.txtText.Value = "" - DdlClientesWS.txtValue.Value = "" - DdlClientesWS.ddl.SelectedValueExist(-1) - - DvModalRequiereOSFecha.Visible = False - ChkRequiereTecnicoModal.Checked = False - - RBLTipoVenta.SelectedValue = Nothing - - DdlMedicoModal.SelectedValueExist(-1) - DdlProcedimientoModal.SelectedValueExist(-1) - - UpDvModalTipoVenta.Update() - - End Sub - - - Protected Sub LnkDvModalTipoVentaAceptar_Click(sender As Object, e As EventArgs) - - ChkRequiereTecnico.Checked = ChkRequiereTecnicoModal.Checked - TxtFecha.Text = TxtFechaModal.Text - - If ChkRequiereTecnicoModal.Checked Then - TdFechaOS1.Visible = True - TdFechaOS2.Visible = True - Else - TdFechaOS1.Visible = False - TdFechaOS2.Visible = False - End If - - DdlMedico.SelectedValueExist(DdlMedicoModal.SelectedValue) - DdlProcedimiento.SelectedValueExist(DdlProcedimientoModal.SelectedValue) - - 'si es A - Vista o ,Fuera De Linea requiere tecnico - If RBLTipoVenta.SelectedValue.ToEntero.Contiene(1, 3) Then - TdFechaOS1.Visible = True - TdFechaOS2.Visible = True - ChkRequiereTecnico.Checked = True - ChkRequiereTecnico.Enabled = False - End If - - TdRequiereTecnico1.Visible = True - TdRequiereTecnico2.Visible = True - - CargaCliente(DdlClientesWS.SelectedValue.ToEntero) - - RegistraScript("$('#DvModalTipoVenta').modal('hide');") - - UpCliente.Update() - - End Sub - - Protected Sub ChkRequiereTecnicoModal_CheckedChanged(sender As Object, e As EventArgs) - - DvModalRequiereOSFecha.Visible = ChkRequiereTecnicoModal.Checked - UpDvModalTipoVenta.Update() - - End Sub - - - -End Class - From 8c8126e4cea8a3f7e257c0b6f1b76354896f40a4 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 23 Mar 2024 12:14:39 -0700 Subject: [PATCH 5/5] =?UTF-8?q?--=20correcci=C3=B3n=20de=20palabra?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/RepCxP.aspx.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Compras/RepCxP.aspx.vb b/Compras/RepCxP.aspx.vb index 0c06daa35..39f548632 100644 --- a/Compras/RepCxP.aspx.vb +++ b/Compras/RepCxP.aspx.vb @@ -98,7 +98,7 @@ Partial Class Compras_RepCxP If Not Page.IsPostBack Then SePersonalizo = 0 CargaCombos() - CargaGvPersonalizarRaqngoColumnas() + CargaGvPersonalizarRangoColumnas() ProcesaRequest() CargaDatos() @@ -1556,7 +1556,7 @@ Partial Class Compras_RepCxP UpBodyPersonalizar.Update() End Sub - Private Sub CargaGvPersonalizarRaqngoColumnas() + Private Sub CargaGvPersonalizarRangoColumnas() Dim ObjComp As New ClsCompras If ObjComp.GetRepCxPColumnas(UsuarioActual.CveEmpresa) Then GvPersonalizarRango.DataSource = ObjComp.DtResultados