{"version":3,"mappings":"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BACVhnB,aAASqO,MAAC2P,kBACVhe,aAASqO,MAAC,WANF7P,yUAAgByoB,KAN5BjnB,cAAU,CACPkE,UAAWzB,KACXE,SAAU,cACVJ,SCjFW,4jQDoFF/D,IAAyBuL,MEhFzBmd,GACb,CACIC,WACA,CACIhf,SAAUiB,eAEdge,qBACI,CACI,CACIhU,KAAM,OACNG,OAAO,GAEX,CACIH,KAAM,SACNG,OAAO,IAGnB8T,uBACI,CACI,CACIjU,KAAM,WACNG,MAAO7X,WAEX,CACI0X,KAAM,iBACNG,MAAO7X,iBAEX,CACI0X,KAAM,OACNG,MAAO7X,QAEX,CACI0X,KAAM,qBACNG,MAAO7X,qBAEX,CACI0X,KAAM,OACNG,MAAO7X,QAEX,CACI0X,KAAM,SACNG,MAAO7X,WAGnB4rB,oBACI,CACI,CACIlU,KAAM,2CACNG,MAAO,MACPgU,UAAW,GAEf,CACInU,KAAM,0BACNG,MAAO,MACPgU,UAAW,IAGvBhD,WACI,CACI,CACIC,MAAO,EACPC,KAAM,SACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,mBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,eACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,oBACNve,KAAM,IAGlBshB,mBACI,CACI,CACIhD,MAAO,EACPC,KAAM,SACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,mBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,eACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,mBACNve,KAAM,IAGlBuhB,eACI,CACI,CACIjD,MAAO,EACPC,KAAM,SACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,mBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,eACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,oBACNve,KAAM,IAGlB2J,oBACI,CACI,CACI2U,MAAO,EACPC,KAAM,oBACNlR,MAAO3X,OACPwJ,KAAM,yBAEV,CACIof,MAAO,EACPC,KAAM,oBACNlR,MAAO3X,OACPwJ,KAAM,0BAGlBsiB,yBAA0B,CACtB,CACIH,UAAW,EACXnU,KAAM,UACNG,MAAOxX,WACR,CACCwrB,UAAW,EACXnU,KAAM,QACNG,MAAOxX,SACR,CACCwrB,UAAW,EACXnU,KAAM,OACNG,MAAOxX,QACR,CACCwrB,UAAW,EACXnU,KAAM,cACNG,MAAOxX,gBAGf4rB,uBAAwB,CACpB,CACIJ,UAAW,EACXnU,KAAM,kBACNG,MAAOzX,QACR,CACCyrB,UAAW,EACXnU,KAAM,sBACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,WACNG,MAAOzX,YACR,CACCyrB,UAAW,EACXnU,KAAM,oBACNG,MAAOzX,SACR,CACCyrB,UAAW,EACXnU,KAAM,oBACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,mBACNG,MAAOzX,aAGf8rB,oBAAqB,CACjB,CACIL,UAAW,EACXnU,KAAM,gBACNG,MAAO1X,yBACR,CACC0rB,UAAW,EACXnU,KAAM,WACNG,MAAO1X,oBACR,CACC0rB,UAAW,EACXnU,KAAM,SACNG,MAAO1X,UACR,CACC0rB,UAAW,EACXnU,KAAM,MACNG,MAAO1X,QAGfgsB,oBAAqB,CACjB,CACIN,UAAW,EACXnU,KAAM,OACNG,MAAOpX,wBACR,CACCorB,UAAW,EACXnU,KAAM,UACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,UACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,eACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,aACNG,MAAOpX,aACR,CACCorB,UAAW,EACXnU,KAAM,eACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,8BACNG,MAAOpX,4CACR,CACCorB,UAAW,EACXnU,KAAM,mBACNG,MAAOpX,kBACR,CACCorB,UAAW,EACXnU,KAAM,eACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,aACNG,MAAOpX,aACR,CACCorB,UAAW,GACXnU,KAAM,eACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,WACNG,MAAOpX,YACR,CACCorB,UAAW,GACXnU,KAAM,0BACNG,MAAOpX,yBACR,CACCorB,UAAW,GACXnU,KAAM,gCACNG,MAAOpX,8BACR,CACCorB,UAAW,GACXnU,KAAM,2BACNG,MAAOpX,0BACR,CACCorB,UAAW,GACXnU,KAAM,mBACNG,MAAOpX,mBACR,CACCorB,UAAW,GACXnU,KAAM,qBACNG,MAAOpX,sBAGf2rB,YAAa,CACT,CACIP,UAAW,EACXnU,KAAM,MACNG,MAAOnX,OACR,CACCmrB,UAAW,EACXnU,KAAM,WACNG,MAAOnX,YACR,CACCmrB,UAAW,EACXnU,KAAM,OACNG,MAAOnX,SAGfuT,cAAe,CACX,CACI6U,MAAO,EACPC,KAAM,kBACNrf,KAAM,kBAEV,CACIof,MAAO,EACPC,KAAM,qBACNrf,KAAM,sBAGdsR,gBAAiB,CACb,CACI6Q,UAAW,EACXnU,KAAM,QACNG,MAAO7W,SAEX,CACI6qB,UAAW,EACXnU,KAAM,QACNG,MAAO7W,SAEX,CACI6qB,UAAW,EACXnU,KAAM,WACNG,MAAO7W,aAGfqrB,wBAAyB,CACrB,CACIR,UAAW,EACXnU,KAAM,YACNG,MAAO5W,aACR,CACC4qB,UAAW,EACXnU,KAAM,WACNG,MAAO5W,YACR,CACC4qB,UAAW,EACXnU,KAAM,YACNG,MAAO5W,eAGfqrB,kBAAmB,CACf,CACI/D,SAAUnlB,gBACV0nB,YAAQ,EACRpT,KAAM,aACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,sBACV0nB,YAAQ,EACRpT,KAAM,gBACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,oBACV0nB,YAAQ,EACRpT,KAAM,eACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,eACV0nB,YAAQ,EACRpT,KAAM,YACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,cAAU,EACVuC,YAAQ,EACRpT,KAAM,MACNG,MAAO,EACPgU,UAAW,IAGnBU,uBAAwB,CACpB,CACIV,UAAW,EACXnU,KAAM,YACNG,MAAO9W,YACR,CACC8qB,UAAW,EACXnU,KAAM,gBACNG,MAAO9W,kBC7XNyrB,GACb,CACIf,WACA,CACIhf,SAAUiB,cAIdge,qBACI,CACI,CACIhU,KAAM,2BACNG,OAAO,GAEX,CACIH,KAAM,2BACNG,OAAO,IAGnB8T,uBACI,CACI,CACIjU,KAAM,wCACNG,MAAO7X,WAEX,CACI0X,KAAM,0DACNG,MAAO7X,iBAEX,CACI0X,KAAM,2BACNG,MAAO7X,QAEX,CACI0X,KAAM,iCACNG,MAAO7X,qBAEX,CACI0X,KAAM,2BACNG,MAAO7X,QAEX,CACI0X,KAAM,2BACNG,MAAO7X,WAGnB4rB,oBACI,CACI,CACIlU,KAAM,oLACNG,MAAO,MACPgU,UAAW,GAEf,CACInU,KAAM,sGACNG,MAAO,MACPgU,UAAW,IAGvBhD,WACI,CACI,CACIC,MAAO,EACPC,KAAM,iCACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,0DACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,8CACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,sEACNve,KAAM,IAGlBshB,mBACI,CACI,CACIhD,MAAO,EACPC,KAAM,iCACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,0DACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,8CACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,sEACNve,KAAM,IAGlBuhB,eACI,CACI,CACIjD,MAAO,EACPC,KAAM,iCACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,0DACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,8CACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,sEACNve,KAAM,IAGlB2J,oBACI,CACI,CACI2U,MAAO,EACPC,KAAM,sEACNlR,MAAO3X,OACPwJ,KAAM,yBAEV,CACIof,MAAO,EACPC,KAAM,4EACNlR,MAAO3X,OACPwJ,KAAM,0BAGlBsiB,yBAA0B,CACtB,CACIH,UAAW,EACXnU,KAAM,0DACNG,MAAOxX,WACR,CACCwrB,UAAW,EACXnU,KAAM,iCACNG,MAAOxX,SACR,CACCwrB,UAAW,EACXnU,KAAM,qBACNG,MAAOxX,QACR,CACCwrB,UAAW,EACXnU,KAAM,iCACNG,MAAOxX,gBAGf4rB,uBAAwB,CACpB,CACIJ,UAAW,EACXnU,KAAM,sEACNG,MAAOzX,QACR,CACCyrB,UAAW,EACXnU,KAAM,yFACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,2BACNG,MAAOzX,YACR,CACCyrB,UAAW,EACXnU,KAAM,yFACNG,MAAOzX,SACR,CACCyrB,UAAW,EACXnU,KAAM,2GACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,oDACNG,MAAOzX,aAGf8rB,oBAAqB,CACjB,CACIL,UAAW,EACXnU,KAAM,0DACNG,MAAO1X,yBACR,CACC0rB,UAAW,EACXnU,KAAM,oDACNG,MAAO1X,oBACR,CACC0rB,UAAW,EACXnU,KAAM,uCACNG,MAAO1X,UACR,CACC0rB,UAAW,EACXnU,KAAM,qBACNG,MAAO1X,QAGfgsB,oBAAqB,CACjB,CACIN,UAAW,EACXnU,KAAM,iCACNG,MAAOpX,wBACR,CACCorB,UAAW,EACXnU,KAAM,gEACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,iCACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,yFACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,gEACNG,MAAOpX,aACR,CACCorB,UAAW,EACXnU,KAAM,0DACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,sIACNG,MAAOpX,4CACR,CACCorB,UAAW,EACXnU,KAAM,+FACNG,MAAOpX,kBACR,CACCorB,UAAW,EACXnU,KAAM,4EACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,gEACNG,MAAOpX,aACR,CACCorB,UAAW,GACXnU,KAAM,0DACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,gEACNG,MAAOpX,YACR,CACCorB,UAAW,GACXnU,KAAM,qGACNG,MAAOpX,yBACR,CACCorB,UAAW,GACXnU,KAAM,+FACNG,MAAOpX,8BACR,CACCorB,UAAW,GACXnU,KAAM,+FACNG,MAAOpX,0BACR,CACCorB,UAAW,GACXnU,KAAM,gEACNG,MAAOpX,mBACR,CACCorB,UAAW,GACXnU,KAAM,4EACNG,MAAOpX,sBAGf2rB,YAAa,CACT,CACIP,UAAW,EACXnU,KAAM,qBACNG,MAAOnX,OACR,CACCmrB,UAAW,EACXnU,KAAM,iCACNG,MAAOnX,YACR,CACCmrB,UAAW,EACXnU,KAAM,2BACNG,MAAOnX,SAGfuT,cAAe,CACX,CACI6U,MAAO,EACPC,KAAM,8CACNrf,KAAM,kBAEV,CACIof,MAAO,EACPC,KAAM,uCACNrf,KAAM,sBAGdsR,gBAAiB,CACb,CACI6Q,UAAW,EACXnU,KAAM,uCACNG,MAAO7W,SAEX,CACI6qB,UAAW,EACXnU,KAAM,qCACNG,MAAO7W,SAEX,CACI6qB,UAAW,EACXnU,KAAM,WACNG,MAAO7W,aAGfqrB,wBAAyB,CACrB,CACIR,UAAW,EACXnU,KAAM,0DACNG,MAAO5W,aACR,CACC4qB,UAAW,EACXnU,KAAM,8CACNG,MAAO5W,YACR,CACC4qB,UAAW,EACXnU,KAAM,6CACNG,MAAO5W,eAGfqrB,kBAAmB,CACf,CACI/D,SAAUnlB,gBACV0nB,YAAQ,EACRpT,KAAM,0DACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,sBACV0nB,YAAQ,EACRpT,KAAM,oFACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,oBACV0nB,YAAQ,EACRpT,KAAM,oFACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,SAAUnlB,eACV0nB,YAAQ,EACRpT,KAAM,0DACNG,MAAO,EACPgU,UAAW,GAEf,CACItD,cAAU,EACVuC,YAAQ,EACRpT,KAAM,qBACNG,MAAO,EACPgU,UAAW,IAGnBU,uBAAwB,CACpB,CACIV,UAAW,EACXnU,KAAM,YACNG,MAAO9W,YACR,CACC8qB,UAAW,EACXnU,KAAM,gBACNG,MAAO9W,kBC/XN0rB,GACb,CACIhB,WACA,CACIhf,SAAUiB,eAEdge,qBACI,CACI,CACIhU,KAAM,UACNG,OAAO,GAEX,CACIH,KAAM,UACNG,OAAO,IAGnB8T,uBACI,CACI,CACIjU,KAAM,YACNG,MAAO7X,WAEX,CACI0X,KAAM,sBACNG,MAAO7X,iBAEX,CACI0X,KAAM,SACNG,MAAO7X,QAEX,CACI0X,KAAM,kBACNG,MAAO7X,qBAEX,CACI0X,KAAM,UACNG,MAAO7X,QAEX,CACI0X,KAAM,UACNG,MAAO7X,WAGnB4rB,oBACI,CACI,CACIlU,KAAM,6DACNG,MAAO,MACPgU,UAAW,GAEf,CACInU,KAAM,6CACNG,MAAO,MACPgU,UAAW,IAGvBhD,WACI,CACI,CACIC,MAAO,EACPC,KAAM,iBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,wBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,2BACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,uBACNve,KAAM,IAGlBshB,mBACI,CACI,CACIhD,MAAO,EACPC,KAAM,iBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,wBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,2BACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,mBACNve,KAAM,IAGlBuhB,eACI,CACI,CACIjD,MAAO,EACPC,KAAM,iBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,wBACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,2BACNve,KAAM,GAEV,CACIse,MAAO,EACPC,KAAM,uBACNve,KAAM,IAGlB2J,oBACI,CACI,CACI2U,MAAO,EACPC,KAAM,gCACNlR,MAAO3X,OACPwJ,KAAM,yBAEV,CACIof,MAAO,EACPC,KAAM,0BACNlR,MAAO3X,OACPwJ,KAAM,0BAGlBsiB,yBAA0B,CACtB,CACIH,UAAW,EACXnU,KAAM,UACNG,MAAOxX,WACR,CACCwrB,UAAW,EACXnU,KAAM,SACNG,MAAOxX,SACR,CACCwrB,UAAW,EACXnU,KAAM,UACNG,MAAOxX,QACR,CACCwrB,UAAW,EACXnU,KAAM,cACNG,MAAOxX,gBAGf4rB,uBAAwB,CACpB,CACIJ,UAAW,EACXnU,KAAM,oBACNG,MAAOzX,QACR,CACCyrB,UAAW,EACXnU,KAAM,oCACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,YACNG,MAAOzX,YACR,CACCyrB,UAAW,EACXnU,KAAM,iBACNG,MAAOzX,SACR,CACCyrB,UAAW,EACXnU,KAAM,4BACNG,MAAOzX,aACR,CACCyrB,UAAW,EACXnU,KAAM,uBACNG,MAAOzX,aAGf8rB,oBAAqB,CACjB,CACIL,UAAW,EACXnU,KAAM,oBACNG,MAAO1X,yBACR,CACC0rB,UAAW,EACXnU,KAAM,gBACNG,MAAO1X,oBACR,CACC0rB,UAAW,EACXnU,KAAM,SACNG,MAAO1X,UACR,CACC0rB,UAAW,EACXnU,KAAM,MACNG,MAAO1X,QAGfgsB,oBAAqB,CACjB,CACIN,UAAW,EACXnU,KAAM,SACNG,MAAOpX,wBACR,CACCorB,UAAW,EACXnU,KAAM,YACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,WACNG,MAAOpX,2BACR,CACCorB,UAAW,EACXnU,KAAM,kBACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,iBACNG,MAAOpX,aACR,CACCorB,UAAW,EACXnU,KAAM,iBACNG,MAAOpX,eACR,CACCorB,UAAW,EACXnU,KAAM,sDACNG,MAAOpX,4CACR,CACCorB,UAAW,EACXnU,KAAM,gCACNG,MAAOpX,kBACR,CACCorB,UAAW,EACXnU,KAAM,iBACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,gBACNG,MAAOpX,aACR,CACCorB,UAAW,GACXnU,KAAM,gBACNG,MAAOpX,eACR,CACCorB,UAAW,GACXnU,KAAM,YACNG,MAAOpX,YACR,CACCorB,UAAW,GACXnU,KAAM,+CACNG,MAAOpX,yBACR,CACCorB,UAAW,GACXnU,KAAM,kCACNG,MAAOpX,8BACR,CACCorB,UAAW,GACXnU,KAAM,8BACNG,MAAOpX,0BACR,CACCorB,UAAW,GACXnU,KAAM,mBACNG,MAAOpX,mBACR,CACCorB,UAAW,GACXnU,KAAM,qBACNG,MAAOpX,sBAGf2rB,YAAa,CACT,CACIP,UAAW,EACXnU,KAAM,MACNG,MA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MAAO1J,SAGnB61B,yBACI,CACI,CACItsB,KAAM,YACNG,MAAOzJ,aAEX,CACIsJ,KAAM,WACNG,MAAOzJ,aAEX,CACIsJ,KAAM,cACNG,MAAOzJ,gBAGnB7L,kBACI,CACI,CACImV,KAAM,QACNG,MAAOxL,SACPwf,UAAW,GAEf,CACInU,KAAM,QACNG,MAAOxL,SACPwf,UAAW,GAEf,CACInU,KAAM,gBACNG,MAAOxL,gBACPwf,UAAW,GAEf,CACInU,KAAM,UACNG,MAAOxL,WACPwf,UAAW,GAEf,CACInU,KAAM,iBACNG,MAAOxL,iBACPwf,UAAW,GAEf,CACInU,KAAM,SACNG,MAAOxL,UACPwf,UAAW,GAEf,CACInU,KAAM,cACNG,MAAOxL,UACPwf,UAAW,IAGvBoY,4BACI,CACI,CACIvsB,KAAM,QACNG,MAAOijB,SACPjP,UAAW,GAEf,CACInU,KAAM,QACNG,MAAOijB,SACPjP,UAAW,GAEf,CACInU,KAAM,gBACNG,MAAOijB,gBACPjP,UAAW,GAEf,CACInU,KAAM,UACNG,MAAOijB,WACPjP,UAAW,GAEf,CACInU,KAAM,iBACNG,MAAOijB,iBACPjP,UAAW,GAEf,CACInU,KAAM,SACNG,MAAOijB,UACPjP,UAAW,GAEf,CACInU,KAAM,cACNG,MAAOijB,UACPjP,UAAW,GAEf,CACInU,KAAM,UACNG,MAAOijB,WACPjP,UAAW,IAGvBqY,qBACI,CACI,CACIxsB,KAAM,WACNG,MAAOsnB,YACPtT,UAAW,GAEf,CACInU,KAAM,SACNG,MAAOsnB,UACPtT,UAAW,GAEf,CACInU,KAAM,YACNG,MAAOsnB,aACPtT,UAAW,GAEf,CACInU,KAAM,UACNG,MAAOsnB,WACPtT,UAAW,IAGvBi8B,cACI,CACI,CACIh/B,MAAO,EACPC,KAAM,mBACNrf,KAAM,sBAEV,CACIof,MAAO,EACPC,KAAM,gBACNrf,KAAM,oBAGlBy6B,gCAAiC,CAC7B,CACIzsB,KAAM,OACNG,MAAOunB,SAEX,CACI1nB,KAAM,UACNG,MAAOunB,YAEX,CACI1nB,KAAM,OACNG,MAAOunB,UAGfgF,4BAA6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yBACI,CACI,CACItsB,KAAM,oDACNG,MAAOzJ,aAEX,CACIsJ,KAAM,2BACNG,MAAOzJ,aAEX,CACIsJ,KAAM,oDACNG,MAAOzJ,gBAGnB7L,kBACA,CACI,CACImV,KAAM,oDACNG,MAAOxL,SACPwf,UAAW,GAEf,CACInU,KAAM,iCACNG,MAAOxL,SACPwf,UAAW,GAEf,CACInU,KAAM,gEACNG,MAAOxL,gBACPwf,UAAW,GAEf,CACInU,KAAM,0DACNG,MAAOxL,WACPwf,UAAW,GAEf,CACInU,KAAM,0DACNG,MAAOxL,iBACPwf,UAAW,GAEf,CACInU,KAAM,iCACNG,MAAOxL,UACPwf,UAAW,GAEf,CACInU,KAAM,4EACNG,MAAOxL,UACPwf,UAAW,IAGnBoY,4BACA,CACI,CACIvsB,KAAM,oDACNG,MAAOijB,SACPjP,UAAW,GAEf,CACInU,KAAM,iCACNG,MAAOijB,SACPjP,UAAW,GAEf,CACInU,KAAM,gEACNG,MAAOijB,gBACPjP,UAAW,GAEf,CACInU,KAAM,0DACNG,MAAOijB,WACPjP,UAAW,GAEf,CACInU,KAAM,0DACNG,MAAOijB,iBACPjP,UAAW,GAEf,CACInU,KAAM,iCACNG,MAAOijB,UACPjP,UAAW,GAEf,CACInU,KAAM,4EACNG,MAAOijB,UACPjP,UAAW,GAEf,CACInU,KAAM,2BACNG,MAAOijB,WACPjP,UAAW,IAGnBqY,qBACA,CACI,CACIxsB,KAAM,6EACNG,MAAOsnB,YACPtT,UAAW,GAEf,CACInU,KAAM,iCACNG,MAAOsnB,UACPtT,UAAW,GAEf,CACInU,KAAM,8CACNG,MAAOsnB,aACPtT,UAAW,GAEf,CACInU,KAAM,+FACNG,MAAOsnB,WACPtT,UAAW,IAGnBi8B,cACA,CACI,CACIh/B,MAAO,EACPC,KAAM,0DACNrf,KAAM,sBAEV,CACIof,MAAO,EACPC,KAAM,0DACNrf,KAAM,oBAGdy6B,gCAAiC,CAC7B,CACIzsB,KAAM,iCACNG,MAAOunB,SAEX,CACI1nB,KAAM,6CACNG,MAAOunB,YAEX,CACI1nB,KAAM,2BACNG,MAAOunB,UAGfgF,4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jCD,EAAKgtI,kBAAkBrnK,KAAKsnK,SAAKjtI,EAAK/J,YAA2CgK,gDA3BpFkb,+CAiBJ36C,YAASyS,MAACi6J,+BACV1sK,YAFQ2/B,qUAA8BgtI,KAL1C3sK,aAAU,CACPsI,UAAWqyC,IACX5zC,SAAU,8BACVJ,SCdW,8iEDgBFg5B,IAAuCi5B,MEyVvCg0G,GAAc,CACvBC,GACAC,GACAC,GACAC,GACAt9D,GACAu9D,GACAC,GACAC,GACAn/C,GACAo/C,GACA73G,GACA83G,GACAC,GACAx/G,GACAppD,GACA6oK,GACAC,GACAC,GACAC,GACAC,GACA9vI,GACAzG,GACAw2I,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAzQ,GACAtkE,GACAg1E,GACAC,GACAC,GACAC,GACAh3I,GACAi3I,GACAC,GACAC,GACAtyI,GACAuyI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAp8J,GACAq8J,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAtkG,GACAukG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAnnE,GACAonE,GACAC,GACAC,GACAC,GACAH,GACAI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAxgD,GACA10H,EACAq3B,GACAi+F,GACA6/C,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAt/I,GACAuD,GACAg8I,GACAC,GACAC,GACAC,GACAvmG,GACAumG,GACAD,GACAl8I,GACAo8I,GACA/gD,GACAghD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACAC,GACAC,GACAxnF,GACAynF,GACAC,GACAC,GACAC,GACA33G,GACA4hC,GACAg2E,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAtgF,GACAugF,GACAC,GACAC,GACAC,GACA35E,GACA45E,GACAzkD,GACA0kD,GACAC,GACAC,GACAC,GACAhwJ,GACAiwJ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAjmB,GACAkmB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA9jK,GACAgH,GACA+8J,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAjhH,GACAC,GACAihH,GACAlkJ,GACAmkJ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,G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,MAE/E,6BAAIpD,uBAAQ,KAAZ,WACI,IAAMC,EAAUP,QAAgB09B,KAChC,OAAOh6B,KAAK46B,WAAa/9B,EAAQ0rC,aAAavoC,KAAK46B,YAAc/9B,EAAQqiM,UAAU,oCAGvF5+L,sBAAW1D,iBAAE,KAAb,WAEI,OAD0BN,QAAgBu9B,KACjBtwB,oCAGtB3M,eAAP,SAAUC,aAAOE,oDACb,IAAME,EAAoBX,QAAgBu9B,KAC1C,OAAO/8B,IAAkB42H,kBAAiBjqH,GAAE8gD,WAAC1tD,EAAOmD,KAAK46B,YAAe79B,KAGlEH,2BAAV,sBACI,OAAO,SAACE,GACJ,OAAOA,EAAWw9B,MAAK,QAAI,SAACv9B,GACnBA,EAASwoB,WACV1oB,EAAK0M,GAAGC,YAAYzM,EAASiN,sBAKjDpN,EA3BA,yECTO,IAAMN,EACT,CACI,sFACA,wCACA,8CACA,+EACA,yEACA,mEACA,mEACA,qFACA,2FACA,qFACA,+EACA,8CACA,iCACA,6CACA,iCACA,uCACA,6CACA,uCACA,iCACA,uCACA,uCACA,oDACA,8CACA,8CACA,oDACA,oDACA,8CACA,2BACA,uCACA,iCACA,uCACA,iCACA,2BACA,iCACA,2BACA,2BACA,qDACA,iEACA,8CACA,2BACA,2BACA,uCACA,oDACA,wCACA,oDACA,oDACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,2BACA,2BACA,iCACA,iCACA,oDACA,uCACA,uCACA,uCACA,uCACA,gDACA,iCACA,2BACA,0DACA,iCACA,iCACA,uCACA,2BACA,iCACA,iCACA,2BACA,uCACA,iCACA,wCACA,kCACA,8CACA,kCACA,iCACA,uCACA,0DACA,oDACA,oDACA,oDACA,0DACA,0DACA,uCACA,kCACA,iCACA,uCACA,iCACA,uCACA,uCACA,uCACA,uCACA,uCACA,iCACA,2BACA,iCACA,oDACA,iCACA,iCACA,uCACA,uCACA,iCACA,iCACA,iCACA,0CACA,2BACA,uCACA,gDACA,4DACA,2BACA,uCACA,qBACA,2BACA,2BACA,iCACA,qBACA,iCACA,iCACA,iCACA,2BACA,iCACA,2FACA,2FACA,2BACA,6CACA,oDACA,iCACA,uCACA,2BACA,uCACA,2BACA,uEACA,8CACA,8CACA,oDACA,8CACA,oDACA,wCACA,0DACA,mDACA,2BACA,gEACA,yFACA,6CACA,uCACA,qBACA,2BACA,uCACA,iEACA,+CACA,iCACA,8CACA,kCACA,0DACA,8CACA,8CACA,wCACA,mCACA,0DACA,0DACA,wCACA,8CACA,8CACA,wCACA,8CACA,oDACA,oDACA,wCACA,wCACA,wCACA,oDACA,oDACA,oDACA,wCACA,oDACA,gEACA,oDACA,8CACA,8CACA,oFACA,mFACA,8CACA,oDACA,wCACA,oDACA,8CACA,0DACA,8CACA,8CACA,wCACA,wCACA,wCACA,wCACA,oDACA,wCACA,wCACA,oDACA,8CACA,oDACA,0DACA,6CACA,wCACA,kCACA,gFACA,6DACA,wCACA,oDACA,8CACA,8CACA,oDACA,oDACA,oDACA,yCACA,8CACA,wCACA,2BACA,yFACA,4BACA,0DACA,2BACA,2BACA,qBACA,2BACA,iCACA,8CACA,8CACA,uCACA,8CACA,2BACA,2BACA,iCACA,2BACA,qBACA,iCACA,2BACA,2BACA,kCACA,4BACA,kCACA,wCACA,4BACA,kCACA,wCACA,2DACA,4BACA,+CACA,6DACA,sDACA,wDACA,gBACA,0DACA,uCACA,iCACA,uCACA,2BACA,qBACA,0DACA,8CACA,6CACA,gEACA,8CACA,oDACA,8CACA,oDACA,gEACA,8CACA,yCACA,qFACA,qFACA,oDACA,0DACA,gEACA,yCACA,qDACA,8CACA,0DACA,8CACA,0DACA,iCACA,6CACA,iCACA,qBACA,2BACA,2BACA,uCACA,2BACA,2BACA,2BACA,sEACA,2BACA,qBACA,2BACA,uCACA,2BACA,iCACA,2BACA,uCACA,uCACA,uCACA,2BACA,iCACA,iCACA,2BACA,wCACA,yEACA,2BACA,8CACA,0DACA,wCACA,8CACA,wCACA,4BACA,wCACA,wCACA,8CACA,2BACA,8CACA,wCACA,kCACA,oDACA,gEACA,kCACA,oDACA,qBACA,iCACA,qBACA,uCACA,2BACA,qBACA,8CACA,gDACA,8CACA,uEACA,iCACA,uCACA,iCACA,2BACA,yCACA,yCACA,4BACA,2BACA,qBACA,iCACA,qBACA,2DACA,8CACA,0DACA,uCACA,iCACA,2BACA,iCACA,uCACA,eACA,2BACA,qBACA,wCACA,2BACA,uCACA,6CACA,kCACA,oDACA,iCACA,uCACA,kEACA,4DACA,uCACA,iCACA,6CACA,6CACA,iCACA,2BACA,uCACA,6CACA,iCACA,kCACA,wCACA,wCACA,2BACA,iCACA,uCACA,iCACA,oDACA,iCACA,4DACA,uCACA,2BACA,iCACA,2BACA,0DACA,iCACA,qBACA,2BACA,2BACA,iCACA,iCACA,iCACA,kCACA,uDACA,gEACA,qBACA,iCACA,2BACA,qBACA,2BACA,4BACA,2BACA,2BACA,gFACA,iCACA,iCACA,iCACA,iCACA,2BACA,6CACA,iCACA,iCACA,2BACA,uCACA,uCACA,2BACA,oDACA,uCACA,2BACA,iCACA,2BACA,qBACA,2BACA,qBACA,iCACA,2BACA,2BACA,iCACA,iCACA,iCACA,iCACA,8CACA,wCACA,qBACA,2BACA,sEACA,0DACA,sEACA,gEACA,oDACA,+CACA,iCACA,wCACA,uCACA,2BACA,2BACA,iCACA,mDACA,iCACA,gEACA,uCACA,iCACA,4DACA,2BACA,0DACA,oDACA,8CACA,kCACA,4BACA,iCACA,iCACA,2BACA,kEACA,qBACA,iCACA,+CACA,2BACA,iCACA,2BACA,2BACA,qBACA,oDACA,oDACA,kCACA,8CACA,kCACA,yCACA,iCACA,sEACA,qBACA,2BACA,uCACA,iCACA,iCACA,6CACA,uCACA,iCACA,iCACA,4BACA,iCACA,2BACA,2BACA,0DACA,uCACA,iCACA,qBACA,qBACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,kEACA,gEACA,iCACA,iCACA,iCACA,6CACA,iCACA,2BACA,uCACA,qBACA,2BACA,2BACA,qBACA,2BACA,iCACA,2FACA,2BACA,iCACA,iCACA,oDACA,oDACA,oDACA,0DACA,uCACA,qBACA,2BACA,6CACA,iCACA,2BACA,iCACA,iCACA,iCACA,2BACA,2BACA,qBACA,4DACA,4DACA,iCACA,iCACA,oDACA,iGACA,8CACA,0DACA,oDACA,8CACA,0DACA,+CACA,8CACA,qDACA,wCACA,8CACA,oDACA,8CACA,gEACA,oDACA,oDACA,gEACA,oDACA,oDACA,oDACA,6EACA,oDACA,kCACA,+CACA,+CACA,0DACA,0DACA,oDACA,0DACA,oDACA,yCACA,8CACA,oDACA,8CACA,oDACA,kEACA,kEACA,8CACA,oDACA,oDACA,0DACA,oDACA,8CACA,0DACA,8CACA,wCACA,wCACA,8CACA,oDACA,yCACA,8CACA,8CACA,oDACA,wCACA,oDACA,wCACA,8CACA,wCACA,oDACA,0DACA,oDACA,wCACA,oDACA,8CACA,8CACA,wCACA,wCACA,uEACA,uGACA,oDACA,wCACA,8CACA,oDACA,0DACA,8CACA,8CACA,wCACA,iCACA,2DACA,qDACA,+EACA,+CACA,8CACA,oDACA,8CACA,oDACA,uCACA,iCACA,iCACA,2BACA,wCACA,2BACA,2BACA,iCACA,qBACA,0DACA,gEACA,iCACA,qBACA,iCACA,4EACA,2BACA,2BACA,2BACA,2BACA,2BACA,uCACA,2BACA,2BACA,oDACA,oDACA,oDACA,0DACA,8CACA,sEACA,oDACA,uCACA,uCACA,6CACA,0DACA,4DACA,+CACA,2BACA,iCACA,2BACA,oDACA,8CACA,uCACA,iCACA,qBACA,qBACA,8CACA,6CACA,8CACA,mFACA,gEACA,4EACA,qGACA,iCACA,0DACA,mDACA,2BACA,iCACA,2BACA,0DACA,2BACA,iCACA,iCACA,oDACA,8CACA,gEACA,0DACA,8CACA,oDACA,oDACA,2DACA,uCACA,iCACA,iCACA,qBACA,kCACA,2BACA,iCACA,2BACA,2BACA,iCACA,2BACA,2BACA,iCACA,iCACA,uCACA,uCACA,2BACA,uCACA,iCACA,6CACA,iCACA,2BACA,2BACA,uCACA,2BACA,0DACA,qBACA,2BACA,uCACA,0DACA,iCACA,iCACA,+FACA,uCACA,uCACA,2BACA,0DACA,oDACA,2BACA,iCACA,uCACA,oDACA,8CACA,gEACA,0DACA,0DACA,oDACA,gEACA,0DACA,oDACA,0DACA,oDACA,gEACA,sEACA,iCACA,qBACA,uCACA,gEACA,iCACA,iCACA,2BACA,qDACA,oDACA,0DACA,0DACA,oDACA,8CACA,qBACA,gEACA,6CACA,oDACA,wCACA,kEACA,wEACA,0DACA,oDACA,wCACA,wCACA,2BACA,iCACA,gEACA,uCACA,gEACA,8CACA,0DACA,oDACA,oDACA,0DACA,0DACA,uCACA,iCACA,2BACA,qBACA,qBACA,uCACA,oDACA,0DACA,0DACA,oDACA,uCACA,iCACA,2BACA,uCACA,iCACA,2BACA,iCACA,qBACA,2BACA,wCACA,2BACA,oDACA,8CACA,qDACA,oDACA,oDACA,0DACA,oDACA,8CACA,oDACA,wCACA,oDACA,8CACA,oDACA,0DACA,oDACA,2BACA,0DACA,oDACA,iCACA,iCACA,2BACA,uCACA,uCACA,iCACA,iCACA,wCACA,2BACA,uCACA,iCACA,qBACA,qBACA,6CACA,iCACA,6CACA,iCACA,2BACA,qBACA,iCACA,qBACA,2BACA,4BACA,2BACA,mCACA,iGACA,0DACA,oDACA,uCACA,oDACA,8CACA,8CACA,0EACA,mCACA,wCACA,8CACA,oDACA,wCACA,wCACA,kCACA,oDACA,oDACA,wCACA,iCACA,iCACA,iCACA,wCACA,wCACA,8CACA,uCACA,2BACA,4BACA,qBACA,2BACA,4DACA,8CACA,8CACA,2BACA,qBACA,0DACA,+CACA,0DACA,gEACA,uCACA,iCACA,kCACA,2BACA,iCACA,iCACA,wEACA,uFACA,2BACA,iCACA,2BACA,kCACA,gDACA,2BACA,iCACA,qBACA,iCACA,qBACA,2BACA,qBACA,2BACA,iCACA,uBACA,iCACA,iCACA,2BACA,qBACA,iCACA,2BACA,uCACA,2BACA,2BACA,2BACA,iCACA,2BACA,qFACA,2BACA,qBACA,uCACA,iCACA,uCACA,kEACA,2BACA,2BACA,6CACA,uCACA,iCACA,oDACA,qDACA,kCACA,wCACA,wCACA,oDACA,wCACA,oDACA,oDACA,qDACA,8CACA,oDACA,0DACA,wCACA,oDACA,wCACA,8CACA,+EACA,+EACA,wCACA,8CACA,2FACA,8CACA,8CACA,oDACA,oDACA,oDACA,oDACA,8CACA,wCACA,8CACA,wCACA,2BACA,oDACA,qBACA,uCACA,qBACA,wCACA,2BACA,iCACA,iCACA,iCACA,uCACA,iCACA,uCACA,iCACA,2BACA,uCACA,2BACA,qBACA,iCACA,iCACA,8CACA,oDACA,iCACA,uCACA,2DACA,qBACA,uCACA,iCACA,0DACA,2BACA,iCACA,uCACA,2BACA,iCACA,uCACA,2BACA,qFACA,qFACA,gEACA,mDACA,2BACA,2BACA,qBACA,uCACA,wCACA,iCACA,iCACA,+CACA,2BACA,oFACA,gEACA,6EACA,uCACA,2BACA,iCACA,kCACA,oDACA,iCACA,iCACA,2BACA,iCACA,2BACA,2BACA,iCACA,iCACA,iCACA,2BACA,wCACA,iCACA,8CACA,8CACA,wCACA,wCACA,uCACA,iCACA,uCACA,iCACA,iCACA,iCACA,6CACA,qBACA,iCACA,2BACA,sDACA,0DACA,uCACA,0DACA,2BACA,8CACA,qBACA,iCACA,iCACA,uGACA,kEACA,6CACA,uCACA,iCACA,uCACA,iCACA,2BACA,6CACA,qBACA,2BACA,yCACA,iCACA,oDACA,oDACA,8CACA,gEACA,wCACA,0DACA,wCACA,0DACA,oFACA,gEACA,0DACA,0DACA,0DACA,0DACA,oDACA,0DACA,gEACA,qBACA,2BACA,qDACA,wCACA,8CACA,8CACA,oDACA,gEACA,2BACA,iCACA,uCACA,2BACA,2BACA,iCACA,qBACA,iCACA,iCACA,8CACA,iCACA,uCACA,oDACA,2BACA,2BACA,2BACA,uCACA,iCACA,6CACA,2BACA,iCACA,6CACA,uCACA,iCACA,kCACA,2BACA,0DACA,oDACA,oDACA,0DACA,2BACA,kCACA,wCACA,oDACA,oDACA,oDACA,oDACA,wCACA,gEACA,wCACA,oDACA,wCACA,qBACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,8CACA,8CACA,8CACA,0DACA,gFACA,8CACA,8CACA,oDACA,0DACA,8CACA,wCACA,0DACA,8CACA,8CACA,8CACA,wCACA,8CACA,oDACA,8CACA,0DACA,wCACA,wCACA,oDACA,oDACA,wCACA,0DACA,2BACA,gEACA,gEACA,iCACA,iCACA,2BACA,2BACA,2BACA,iCACA,uCACA,iCACA,2BACA,uCACA,sEACA,2BACA,qBACA,iCACA,6CACA,iCACA,qDACA,2BACA,2BACA,iCACA,iCACA,gEACA,uCACA,iCACA,uCACA,2BACA,2BACA,2BACA,iCACA,qBACA,2BACA,qBACA,uCACA,qBACA,uCACA,oDACA,oDACA,0DACA,8CACA,0DACA,iCACA,2BACA,qBACA,iCACA,qBACA,qBACA,iCACA,yEACA,2BACA,iCACA,iCACA,uCACA,iCACA,2BACA,2BACA,2BACA,iCACA,6CACA,iCACA,6DACA,wCACA,wCACA,wCACA,8CACA,wCACA,kCACA,oDACA,qBACA,0DACA,0DACA,qDACA,oDACA,0DACA,8CACA,iCACA,2BACA,uCACA,2BACA,2BACA,iCACA,2BACA,4FACA,iGACA,8JC/uCKu9B,EAAa,IAAI0f,iBAA0B,cAExD98C,cAEIuD,gBAAqB,GAErBA,iBAAsB,GAEtBA,UAA4Bg6B,cAI5Bh6B,oBAAgC,WAAM,UAGtCA,gBAAa,GAEbA,qBAAkB,GAElBA,eAAY,GAEZA,cAAW,GAEXA,qBAA0B,GAC1BA,qBAA0B,GAE1BA,2BAAgC,GAEhCA,gCAAqC,EAGrCA,eAAY,SAACrD,GAA6E,eAAG,KAE7FqD,sBAAmB,SAACrD,GAA6E,eAAG,KAEpGqD,6BAA0B,SAACrD,GAAmD,eAAG,KAEjF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H,OAAQ,aACR02H,sBAAuB,YAM/BjtM,oBAAqB,CACjBypC,QACA,CACIqlK,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,oBAAoB,EACpBjF,UAAW,oBAOnBxpM,mBAAwB,CACpBipC,QACA,CACIylK,UACA,CACIC,SAAU,KAEdC,wBAAyB,QACzBl9L,KAAM,WACNm9L,QAAS,YACTC,OACA,CACIhmL,QAASxlB,GAAciR,aAE3BulC,MACA,CACI+1C,KACA,CACIryC,KAAM,OACNuxJ,OAAQ,MAGhBC,QACA,CACIriB,QAASrpL,GAAciR,gBAKnCzU,mBAAqB,CACjBmpC,QACA,CACIylK,UACA,CACIC,SAAU,KAEdE,QAAS,YACTC,OACA,CACIhmL,QAASxlB,GAAciR,aAE3BulC,MACA,CACIm1J,oBAAqB,SACrBp/G,KACA,CACIryC,KAAM,OACNuxJ,OAAQ,MAGhBC,QACA,CACIriB,QAASrpL,GAAciR,aAG3B26L,aACA,CACIn2L,MACA,CACIo2L,oBAAqB,SACrBC,cAAe,SAM/BrvM,mBAAsB,CAClBkpC,QACA,CACI4lK,QAAS,YACTC,OACA,CACIhmL,SAAS,GAEbgxB,MACA,CACIm1J,oBAAqB,SACrBp/G,KACA,CACIryC,KAAM,OACNuxJ,OAAQ,MAGhBC,QACA,CACIriB,QAASrpL,GAAciR,gBAKnCtU,mBAAwB,CACpBgpC,QACA,CACI4zJ,cAAe,WACmC,MAAzC95L,KAAassM,SAAS3+L,OAAO,UAC7B3N,KAAassM,SAAS3+L,OAAO,SAAS,IAG/C+7L,sBAAuB,YAI/BvsM,mBAAyB,CACrB+oC,QACA,CACIqmK,eAAe,EACfC,UAAU,EACVC,SAAS,EACT7wJ,WAASn+C,MAAG,cACZivM,aAAc,qBAItBtvM,mBAA8B,CAC1B8oC,QACA,CACIymK,cAAepsM,GAAciR,eAIrCnU,mBAAwB,CACpB6oC,QAAS,CACLw/J,aAAa,KAIrBhmM,oBAA2B,CACvBwmC,QAAS,CACL0mK,gBAAiB,CAAC,CACdj+L,KAAM,WACNitC,WAASn+C,MAAG,8BAMrBwD,uCAAP,cACI07B,MAAa,CACT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tI,IACX+G,SAAU,eACVJ,SCZW,ioCDeFsrF,IAAyBztF,yFEsQzBs1P,GAAkBtqK,aAGvBj9D,KACAvf,KACAqa,KACAU,KACA9a,KAGA7J,GACAW,GACAguD,GACA18B,KACAhxB,GACAktE,GACAz4C,GACAlzB,GACA4iK,GACA0L,GACAhM,GACA91G,GACAsd,GACAM,GACAw/F,GACAz+F,GACAW,IACGj0E,OAAOi6B,OAAOgf,IAAa,CAG9BluC,GACAL,GACAzL,IACA4L,KACAW,GACAssB,KACAhpB,KACAnE,GACAvC,GACA81D,GACAlyD,GACAsqP,GACAC,KACAhzL,GACAujB,KAGA0vK,GACAjxP,GACAizB,KAGAhmB,GACAiX,GACAZ,GACAC,GACAyuB,GACAk/M,GACAztO,GACAK,GACAN,GACAgP,GACA0f,GACAj7B,GACAjJ,GACA7V,GACAC,GACA6V,GACAwd,KACAhS,GACA3C,GAGA3J,GACAO,GACA6I,GACA3I,GACAD,GACAI,GACAU,GACA+H,GACAtI,GACAuC,GACAtC,GACAsI,GACA5I,GAGAoL,GACAwS,KACA0R,GACAwB,GACApB,GACAnkB,GACA01D,GACAkF,GACAhF,GACAt4D,GACAG,GACAqC,GACA/B,GACA+pE,KAGGzmF,OAAOi6B,OAAOj+B,IAAM,CACvBwkB,GACAC,GACAgH,GACA9G,GACAD,GACAH,GACAm2O,GAEAnlP,GACAupB,GACAx9B,GACAP,EACA8kF,KACAkB,KACAL,GACAO,GACA0zK,GACAzyK,KACA0yK,GACAjwK,KAGKiG,GACT,CACIiqK,GACA7gO,GACAM,GACAE,GACA6zB,GACAmhM,GACAC,GACAC,GACAC,GACA9hO,GACA68B,GACAr0B,GACAV,GACAqD,GACAL,GACAR,GACAgtD,GACA7sD,GACA4C,GACA4/N,GACApiP,GACAM,GACA9I,GACA6qP,GACAnxL,GACAoxL,GACA32K,GACAtrD,GACAitD,GACArI,GACAuC,GACAiB,GACAI,GACAs0F,GACA5wF,GACAN,GACAlD,GACAw5K,GACAnL,GACA34E,GACA+jF,GACAnlL,GACAlc,GACAu9G,GACA8B,GACA62E,GACA73H,GACA83H,KACAC,GACAnmL,GACA6U,GACAO,GACAc,GACA17E,GACAf,GACAqsP,GACAppK,KACAC,GACAmtF,KACAnhG,GACAxP,GACAitL,GACA3pL,GACAK,GACAupL,GACA19J,GACA29J,GACAzoL,GACA0oL,GACAnoL,GACAoK,GACA0nG,GACAhnG,GACAmoL,IAGFjwK,GACF,CACIqvF,KACA7+H,KACAxoB,KACAzuB,EACA80D,KACAwrL,KACAiJ,GACAvxN,KACA2B,GACA+qN,GACArkL,GACAnpB,GACAmxM,GACA7lL,GACA3zC,KACAsiD,KACAT,KACAi6K,IAIF9jK,GACF,CACInyB,KACA+a,KACAr3C,KACAtJ,KACAR,KACAF,KACA5f,KACA3S,KACA4iB,MACA3iB,IACAmmD,GACAjrB,MACAmgB,KACAxJ,KACAymB,GACAz1D,KACAgyE,KACAS,MACArsE,MACA+tE,KACAkG,KACAgB,GACA35B,KACA46H,MACAr6F,MACA57E,MACA4zC,KACA3mB,KACA7mB,KACA2mB,KACAmuE,KACA/7F,MACA+K,GACAsoB,KACAxG,KACA,CAAE2lO,QAAStyP,MAAmBk6L,SAAUjuK,GAAuBsmO,OAAO,GACtE,CAAED,QAAS19N,kBAAiB49N,WAAYroP,KAAuBooP,OAAO,IAIxEprK,GACF,CACIrnF,MACAvE,MACAqE,MACAgjC,KACA5iC,MACA6yB,MACAw2B,GACAlzB,KACAD,KACAo4B,KACAo3G,KACAqI,KACA0kF,MACAC,KACA9jL,KACAE,MACAH,MACA7jE,MACAmkE,KACAF,KACAi/F,KACA13F,MACAkF,MACAe,MACA8C,KACAszK,KACApzK,MACAqzK,OAGFxpK,GACF,CACI52B,GACA2zG,GACA9zG,GACA8B,GACAb,GACAoW,GACApV,GACAG,GACAI,GACAI,GACAiqB,GACAnoE,GACAqgD,GACAK,GACAE,GACA6uL,GACA5sL,GACAkmL,GACA2G,IAGFoM,GAAuBv4P,kBACvBw4P,GAAYx4P,2DA0CL,4UAAgBy4P,KAjC5Bn+N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","names":["W","De","O","ie","$","B","C","f","R","D","N","F","H","A","T","L","w","P","j","U","Q","q","te","fe","x","SystemOptionID","sr","Kn","de","EnumSystemOptionsZ","EnumEntityTypes","EnumInvoicePaymentTypes","EnumLoginRequestTypes","EnumCustomerAddressTypes","EnumPaymentRequestTypes","EnumPaymentRequestStatuses","EnumAutoCreationDocumentTypes","EnumFileTypes","EnumReportTabs","EnumUserTypes","EnumPaymentRequestSteps","EnumSystemTypes","EnumCredentialTypes","EnumCredentialCheckerTypes","EnumDocumentTypes","EnumPaymentMethod","EnumDeliveryMethods","EnumDocumentFilteringOption","EnumDocumentDownloadOption","Y","re","g","pe","ge","ae","Re","Ae","xe","this","SystemOption","IsAllowLedger","IsAllowInvoices","IsAllowAgingReport","IsAllowDeliveries","Object","Te","Date","setFullYear","getFullYear","Xe","Ke","h","v","b","_","ue","z","data","IsAllowedToViewUnsent","ne","TransType","xt","PdfUrl","State","IsShowAdditionalNotes","IsActiveUser","IsAllowPayment","IsEnableMultiCompany","ClearSelection","PayByOne","emit","DocNumClick","selectedRowsData","filter","PaymentSum","IsPaymentAllowed","grid","instance","deselectRows","map","EntryID","SelectionChanged","column","command","cellElement","children","style","visibility","ShowFiles","selectedRowKeys","toolbarOptions","items","push","location","template","isCustom","Ce","ke","selector","K","value","name","calculate","IsOpen","OpenSum","TotalSum","OpenSumFeature","TotalSumFeature","OpenSum1_30","TotalSum1_30","OpenSum31_60","TotalSum31_60","OpenSum61_90","TotalSum61_90","OpenSum90_180","TotalSum90_180","OpenSum180Plus","TotalSum180Plus","_t","totalValue","Dt","providers","ft","Tt","api","ExecuteGetAction","ControllerName","iCustomerID","GetLoadOptions","ExecutePostAction","rt","ht","Nt","at","Ct","gt","le","Entity","IsActive","Name","ClosePage","IsDefault","IsReadOnlyIsDefault","Ht","ve","an","Mo","sCountryCode","kn","je","Lo","nr","Hn","Type","IsDefaultBilling","IsDefaultShipment","LoadStatesDataSource","AddressName","QueryParams","DataSources","Countries","He","customerAddressEndpoint","GetCountries","previousValue","Do","GetStatesByCountryCode","Country","StatesDataSource","Entities","eo","_o","Xt","Vt","to","Ho","Hr","An","pn","iLoginRequestID","xn","dn","he","Ut","DocumentCode","IsGoToPersonalDetails","Language","Navigator","ClearQueryParams","UI","StopMessage","RC","Navigate","languageService","SetLanguage","loginRequestEndpoint","CreateByInvoiceOneCode","OnCreateLoginRequestSuccess","ResponseMessage","UserName","SecureKey","OTP","SecureKeyType","qe","uo","loginService","DoLogin","IsAllowAccounting","Tab","subscribe","Bo","Ye","Wn","gn","Yt","Cn","zn","Ot","$n","Jo","Ii","vo","OpenBalance","rowElement","display","Go","iCompanyID","sPrivateID","no","En","fo","Mt","rr","_n","Nn","gr","ro","At","mn","tn","pageLayout","popup","iframe","nativeElement","height","pr","document","querySelector","Class","getBoundingClientRect","top","content","window","getComputedStyle","classList","padding","replace","option","Repaint","Er","querySelectorAll","Pr","length","customerEndpoint","ChangeCreditCardRequest","Url","Sanitizer","bypassSecurityTrustResourceUrl","OnSuccessfulPayment","OnSuccessfulPaymentHandler","OnBackPayment","OnBackPaymentHandler","onmessage","type","ResizeIframe","ConfirmChangeCreditCardRequest","CloseDialogWithSuccess","ref","detectChanges","CloseDialogWithCancel","setTimeout","repaint","mo","oo","args","it","_i","ShowAddButton","na","Ds","Vr","ti","ir","Pn","Vn","Oo","Di","Options","CurrentTabIndex","CurrentAddressTabIndex","InitMyDetailsTabs","InitCustomer","LoadData","LIST","IsAllowContactPersons","find","MyDetailsTabs","IsAllowBillCustomerAddresses","CustomerAddressTabs","IsAllowShipCustomerAddresses","CurrentTab","LoadCustomerAddresses","LoadContactPersons","IsShowCreditCard","IsShowBankDetails","IsShowMaxBalance","IsShowMaxObligo","Screen","IsDesktop","changeCreditCardDialogComponent","ShowDialogShort","IsAllowBankDetailsEdit","Customer","st","DefaultBank","DefaultBranchCode","DefaultAccount","DefaultBankName","CurrentAddressTab","GetCurrent","contactPersonEndpoint","GetList","ContactPersons","LoadCustomerAddressByType","Enums","Bill","BillCustomerAddresses","Ship","ShipCustomerAddresses","ListEx","Uo","io","Ps","oOptions","iEntryID","iObjectType","isAccountPayment","paymentRequestID","privateRequestID","on","oa","Rs","ct","TypeName","bc","xr","Ve","ra","As","Array","from","MaxNumberOfPayments","keys","Text","ko","NumberQuantity","Value","PaymentTotal","DeliveryMethod","ReceiptEmail","VisibleLoadPanel","qn","Po","width","dr","parseFloat","Ka","Qa","innerHeight","IsLargeIframe","qa","Xa","Ya","innerWidth","Za","mi","Ui","id","PaymentDetails","toString","label","Payment","IsPartialPayment","splice","DocumentDetails","InvoiceOneIsAllowEmail","Br","LISTITEMX","InvoiceOneIsAllowSMS","InvoiceOneIsAllowWhatsapp","Step","NumberOfPayments","Documents","IsAccountPayment","reduce","InitSteps","InitDeliveryMethods","paymentRequestEndpoint","GetPaymentConfig","PaymentMethod","PaymentProcessingService","IsSaveCardNumberAsDefault","CustomerCardNumber","Currency","CreditCardPaymentTypes","forEach","Email","DeliveryMethods","DocumentItems","DocumentLines","IsAllowPartialPayment","IsAllowPaymentByDocumentItems","CreditCardPaymentType","IsAllowPaymentByExistsCreditCard","Existing","New","NotifyReloadTitle","IsMobile","ConfirmPaymentRequest","CommunicationHandler","onReceiveCommunication","bind","qstr","parseQueryString","console","log","action","parseInt","response","JSON","parse","responseCode","PrivateRequestID","transId","steps","activeIndexChange","DocumentNumber","PrivateID","AuthorizeNetTransID","Confirm","CreditCardNumber","ShowPaymentResult","IsSucceedPayment","ErrorMessage","NotifyEntitySaved","IsGoCreditError","Steps","StepType","Final","OnPay","Execute","GetMakePaymentParams","SendPaymentRequest","href","ShowNewCardDetails","NewCreditCardUrl","sanitizer","split","AuthorizeNetToken","token","privateID","AuthorizeNetUrl","sendTokenForm","submit","exec","decodeURIComponent","Send","Sum","DocumentIDs","SessionID","Session","CompanyID","SelectedDocumentItems","DocumentLineIDs","LineID","DocumentsType","GetDocumentType","IsAllowBitPayment","deviceDetector","os","ar","Qe","St","et","docEntry","documentType","Wo","Gr","sLink","Ns","vr","External","Oi","paymentDialog","GetRouteParams","GetQueryParams","ViewType","DocumentType","DisplayMode","Inner","IsAllowPrint","OnPrintButtonClick","pdfViewer","contentWindow","print","SetPayButtonText","FileName","PayButtonText","IsLedger","IsHasAdditionalDocuments","documentEndpoint","GetDocument","OnPayDocument","GetRelatedDocument","GetDocumentForPdf","pdfEndpoint","GetPDFByLink","PDFData","Data","TransTypeString","GetPDFByLoginRequestID","Pdf","bn","ia","ln","ho","aa","framework","CompanyInfo","NumberSum","sa","Ti","Rt","lr","mt","wi","Ms","Ls","ce","Fs","Qn","Hs","Sn","oi","yt","ua","Files","ShowFile","Ic","en","Vs","Bs","iDocEntry","pa","Se","ma","ii","ri","Us","Gs","zo","fa","G","GetCurrentRouteWithoutParams","endsWith","Framework","NavigateDefault","IsShowBalance","IsShowBalanceLate","IsHideShowOpenOnly","IsShowAttachments","IsAllowPaymentOnAccount","SetDefaultDateFrom","InitCompanies","InitTabs","HasOpenDocuments","LoadDataSource","IsInitDone","InitTotalBalance","valueOf","setMonth","getMonth","FromDate","IsAllowExport","GridExtender","IsPrintMode","Print","GetDefaultTitle","CurrentTabName","CardName","TradeLicenseNumber","UntilDate","DateFormatShort","ShowAsWindow","HasRepeatedValue","IsSingleCurrency","PaymentCurrency","IsSingleCompany","PaymentCompanyID","InitDocuments","ReloadToolbar","Math","abs","fileEndpoint","SBODocumentEntry","OnShowFile","fileListDialog","Show","CurrentFileName","Extension","GetFileData","CurrentFileData","FileType","ShowFilePdf","ShowFileImage","OnDownloadFile","createElement","URL","createObjectURL","download","click","itemData","DateFrom","DateUntil","DownloadOption","ReportTab","GetAllDocumentsPdfData","IsSuccess","ReportTabs","index","text","imageDialog","Title","ImageSource","printBoxDialog","visible","GetBalance","BalanceView","RefDateFrom","RefDateUntil","Ledgers","HasComplexFilter","ComplexFilter","ledgerEndpoint","GetListByParams","paginate","Invoices","invoiceEndpoint","AgingReport","agingTransDocumentEndpoint","DeliveryDateFrom","DeliveryDateUntil","Deliveries","deliveryEndpoint","companyEndpoint","List","Companies","GetAllCompaniesItem","unshift","Code","TimePeriod","DateTo","Pi","Ei","Ze","Cr","We","br","da","la","ks","$o","Properties","LedgerIsOpenStatuses","InvoicePaymentStatuses","ChoiseCardByPayment","SortOrder","ReportTabsLandLord","ReportTabsZulu","AutoCreationDocumentType","PaymentRequestStatuses","PaymentRequestTypes","PaymentRequestSteps","SystemTypes","DocumentFilteringOption","ReportTimePeriods","CardProcessingServices","Ri","ha","$s","ga","GetBanksList","Banks","SaveBankDetails","NavigateBack","zs","Oc","Dc","wc","Tc","Pc","Ir","Rc","bo","validationGroup","reset","EntityType","IsHebrew","systemOptionEndpoint","SendDocument","DocumentTypeName","ni","Ks","Nc","_r","CheckAdmin","InitOptions","InitReceiptSeries","InvoiceOneReceiptTemplates","InitInvoiceOneReceiptDocCodes","InitInvoiceSeries","InitInvoiceOneInvoiceTemplates","InitInvoiceOneInvoiceDocCodes","InitOrderSeries","InitInvoiceOneOrderTemplates","InitInvoiceOneOrderDocCodes","InitDownPaymentSeries","InitInvoiceOneDeliveriesDocCodes","InitInvoiceOneRefundDocCodes","InitInvoiceOneReturnDocCodes","InitTestConfigurationButtonItems","LoadNotificationTemplates","InitAuthNetCreditCards","IsDatoPortalEnabled","SystemOptionFlag","CardProcessingServiceDataSource","StrValue","SystemType","SaveOptions","reload","UserInfo","UserType","DoLogout","GetFull","GetReceiptSeries","ReceiptSeriesDataSource","GetInvoiceOneReceiptTemplates","InvoiceOneReceiptTemplatesDataSource","GetAuthNetCreditCards","AuthNetCreditCards","GetInvoiceOneReceiptDocCodes","InvoiceOneReceiptDocCodesDataSource","GetDefaultPrintItem","InvoiceOneReceiptDocCodesDataSourceWithDefault","GetInvoiceOneDeliveriesDocCodes","InvoiceOneDeliveriesDocCodesDataSourceWithDefault","GetInvoiceSeries","InvoiceSeriesDataSource","GetInvoiceOneInvoiceTemplates","InvoiceOneInvoiceTemplatesDataSource","GetInvoiceOneInvoiceDocCodes","InvoiceOneInvoiceDocCodesDataSource","InvoiceOneInvoiceDocCodesDataSourceWithDefault","GetInvoiceOneRefundDocCodes","InvoiceOneRefundDocCodesDataSource","InvoiceOneRefundDocCodesDataSourceWithDefault","GetOrderSeries","OrderSeriesDataSource","GetInvoiceOneOrderTemplates","InvoiceOneOrderTemplatesDataSource","GetInvoiceOneOrderDocCodes","InvoiceOneOrderDocCodesDataSource","InvoiceOneOrderDocCodesDataSourceWithDefault","GetDownPaymentSeries","DownPaymentSeriesDataSource","GetInvoiceOneReturnDocCodes","InvoiceOneReturnDocCodesDataSource","InvoiceOneReturnDocCodesDataSourceWithDefault","TestConfigurationButtonItems","onClick","testOptionsDialog","notificationTemplateEndpoint","NotificationTemplates","Ac","Qs","To","Qo","ya","Mi","Status","PaymentRequestSelected","ResolveClick","qo","ao","zr","InitDataSource","InitCustomers","Wt","IsAllowFilter","paymentRequestGrid","CustomerID","ContactPersonID","Statuses","SumFrom","SumTo","GetSteps","GetLinesDocuments","LinesDocuments","ResolveStatus","Types","PaymentRequests","OnPaymentRequestSelected","InitContactPersons","Customers","Get","Dr","ai","Ys","Sa","va","xa","c","calculateCellValue","dataField","isShowZero","ba","el","Ia","Mc","se","nl","OnInitComponentFinished","call","SelectedLineIDs","DataSource","OnAfterLoad","SelectedLineIDsChange","TotalAmount","nt","Li","ol","Co","Kr","_a","Io","al","Xo","ReportItemsState","preventDefault","stopPropagation","FindListItemElement","srcElement","add","remove","parentElement","contains","list","GetItemsAsync","GetDisabledDocuments","indexOf","getItemElementByFlatIndex","ur","getElementsByClassName","Oa","GetEnabledDocuments","selectItem","unselectAll","unselectItem","IsDocumentDisabled","Da","Ta","sl","wa","ui","ul","Ln","DocumentLinesState","Pa","ml","Un","hl","ji","Ma","Na","yl","IsAllowEdit","icon","OnEditContact","Sl","Cl","OnEditAddress","bl","_l","Fa","IsUseContactPerson","Credentials","GetCredentials","ImpersonateLogin","Ha","Ol","Va","SetPaymentRequest","GetPaymentRequest","PaymentRequest","Ba","El","Ga","contactUsDialog","Pl","Rl","Nl","ka","Whatsapp","Address","Phone","Xr","$a","yn","Dn","Gt","xo","jt","Os","nn","Ur","Rn","jo","jr","Pt","kr","qs","si","Zs","Ca","li","ut","Gn","il","Tr","Qr","Aa","dl","vl","wr","Bi","Gi","Ml","Ua","ci","path","component","Menu","canActivate","Z","outlet","Hello","y","Ea","Me","IsAllowMyDetails","GetDefaultRouteParams","OnInitApplicationAsync","pipe","values","load","pi","er","TargetModuleName","ModuleName","ButtonText","ButtonIcon","ComponentType","ShowInToolbarOnMobile","IsVisibleButton","Wa","Route","we","ye","In","vn","pt","qt","Fo","Ci","Vo","be","Bt","kt","sn","bi","or","po","hr","e","n","i","t","o","customerID","Ie","r","UniqueItemID","WarehouseID","RelationType","itemID","number","Pe","CountryCode","EnumSummaryTypes","EnumPriceInfoDisplayTypes","EnumSpecificItemContainerTypes","EnumDocumentDraftOptions","EnumKitTypes","EnumCasualContactPersonNotificationReceivers","EnumTreeTypes","EnumGiftCardStatuses","EnumStockDisplayOptions","EnumValidationStatus","EnumShoppingCartItemType","EnumPromotionSuggestionType","EnumOrderingItemsOutOfStockAction","EnumAvailableItemsCalculationOptions","EnumAddressEntryModes","EnumContactPersonEntryModes","EnumPriceDisplayOptions","EnumPriceCurrencyDisplayOptions","EnumAttributeDisplayOptions","EnumFilterDisplayOptions","EnumImpersonateTargets","EnumItemSaleMethods","EnumItemBadgeTypes","EnumVariationRelations","EnumRelatedItemRelationTypes","EnumDisplayGroupingOptions","EnumCatalogueViewOptions","ImageTypeEnums","ImageSizeEnums","ShoppingCartStatusEnums","EnumDocumentStatuses","EnumPaymentMeans","EnumGoCreditCardTypes","EnumGoCreditTransactionModes","EnumDatabaseObjects","EnumDeliveryStatuses","EnumReturnRequestStatuses","EnumDocumentSpecialItemType","EnumDisplaySortingOptions","EnumExternalQueryFieldFormats","EnumItemImagesFallbackTypes","EnumAttributesDisplayTabs","EnumTitlePositions","EnumQuantityActiveErrorPlace","EnumDocumentProcessingSteps","EnumDocumentProcessingStatus","EnumInvoiceOneDocumentTypes","EnumPromotionCustomerFilterTypes","EnumPromotionItemFilterTypes","EnumPromotionEffectItemFilterTypes","EnumPromotionDiscountApplicationRule","EnumPromotionAggregationLevelTypes","EnumPromotionRequiredTypes","EnumEffectTargetSelector","EnumPromotionEffectTargetTypes","EnumPromotionResultTypes","EnumDocumentProcessingTypes","EnumFormFieldOptions","EnumShoppingCartItemViewOptions","EnumShoppingCartModeOptions","EnumDocumentFilterBySubjects","EnumItemStockManagementTypes","EnumEUVatStatuses","EnumCreditCardPaymentStatus","EnumInvoiceOneNotificationTypes","EnumDocumentCreationNotificationTypes","EnumShoppingPaymentStatus","EnumDiscountPermissionCheckTypes","EnumCityInputMethods","EnumSalesDocumentLayers","EnumSaleTargetDimensions","EnumSaleTargetMeasures","EnumDocumentSource","EnumBarcodeScannerTypes","EnumExternalQueryType","EnumShoppingCartValidateOptions","EnumCustomFieldLocations","EnumCustomFieldTypes","EnumCreditTypes","EnumCategoryPaneBehaviour","EnumDashboardFilterAdditionalPeriod","EnumAddressFieldOptions","EnumGiftCardValueTypes","EnumShowTotalOnTopOptions","EnumAssortmentVisibilityModes","EnumShowDocumentFilesModes","EnumItemDisplayTypes","categoryID","yr","X","Ts","Jt","ws","jn","changedSubject","asObservable","Es","loaded","next","customerOption","customerOptionEndpoint","GetCustomerOption","clearCustomerOption","getOwnPropertyNames","CatalogueOption","BusinessOption","FilterOption","OrderOption","PaymentOption","ShipmentOption","HomePageOption","CustomerDetailOption","NotificationOption","FeatureOption","ContactUsOption","TermsOfUseOption","Sr","providedIn","OPEN_BASE_DOCUMENT_DIALOG","SHARE_DOCUMENT","DOCUMENT_FILTER_CHANGE","GIFT_CARD_REACTIVATED","KIT_CHILDREN_VISIBILITY_TOGGLE","DOCUMENT_FILTER_ACTION","LEDGER_FILTER_ACTION","AGING_FILTER_ACTION","RECEIPT_FILTER_ACTION","CUSTOMER_FILTER_ACTION","CASUAL_ADDRESS_CHANGED","CASUAL_CONTACT_CHANGED","ITEM_OPTION_ENTITY_LOADED","WISHLIST_VIEW_MODE_CHANGED","SINGLE_VARIATION_VIEW_MODE_CHANGED","KIT_ITEMS_VIEW_MODE_CHANGED","RELATED_ITEM_VIEW_MODE_CHANGED","SALES_SUMMARY_FILTER_ACTION","TARGET_PERFORMANCE_SUMMARY_FILTER_ACTION","alertDuration","uiEventSubject","includes","EventName","Payload","options","M","Message","IsAlertBeingShown","trim","Error","Warning","WarningMessage","Info","InfoMessage","innerText","menus","hide","show","customerEntityID","customerEntryID","l","customerChangedSubject","k","previousCustomerID","customerActualCurrency","CurrencyActual","complete","uiComponentService","ProcessAlerts","oe","CustomerAlerts","ValidationMessage","GetCurrentCustomer","currentCustomer","Ue","error","IsCurrentUserSalesPerson","salesPersonEndpoint","SetSalesPersonCustomer","sessionService","IsLoggedIn","UserInfoDict","Dino","IsSalesPerson","SalesPersonOption","RegisterInitComponentHandler","customerChanged$","CustomerOption","customerOptionService","OnCustomerChanged","RegisterSubscription","GetSalesPersonOption","SalesPersonID","IsAdmin","QuoteOption","IsAllowBaseDocument","InvoiceOption","DeliveryNoteOption","RefundOption","ReturnOption","ReturnRequestOption","Skip","Take","Empty","assign","GroupBy","CatalogueView","CategoryID","VendorIDs","BrandIDs","ManufacturerIDs","AssortmentID","Attributes","SearchText","SortBy","stringify","GetUniqueFilterObject","filterSubject","InitDefaultItemsFilter","CustomerDataExtension","DefaultAssortmentID","itemsFilter","changed$","clear","DesktopItemListPageSize","DefaultDisplayGroupingOption","DefaultDisplaySortingOption","DefineCatalogueViewOption","screenService","DefaultItemOption","localStorage","localStorageService","GetItem","DefaultCatalogueMobileViewOption","DefaultCatalogueDesktopViewOption","Extend","applyDisplayOptions","btoa","unescape","encodeURIComponent","escape","atob","categoriesListSubject","categoriesTreeSubject","featuredCategoriesSubject","categoriesListUnfilteredSubject","readySubject","loadCategories","itemsFilterService","filter$","processItemsFilter","categoriesTree","loading","$categoriesTree","categoriesList","$categoriesList","featuredCategories","$featuredCategories","categoriesListUnfiltered","$categoriesListUnfiltered","getCategoriesTree","findNodeByCategoryIDFrom","getRootCategoryNode","getCategoriesList","resourcesService","ParentCategoryID","ImageName","IsShowInTopMenu","ImageVersion","$readySubject","IgnoreFilter","categoryEndpoint","GetCategories","bufferSize","refCount","sort","localeCompare","buildTreeBranch","IsFeatured","serializedFilter","Zt","itemOptionEndpoint","itemOptions","Grid","GridViewDesktopOption","GridViewMobileOption","CatalogueList","CatalogueListItemDesktopOption","CatalogueListItemMobileOption","CatalogueCompact","CatalogueCompactItemDesktopOption","CatalogueCompactItemMobileOption","KitItemsList","KitItemsItemListDesktopOption","KitItemsItemListMobileOption","KitItemsCompact","KitItemsItemCompactDesktopOption","KitItemsItemCompactMobileOption","KitItemsLine","KitItemsItemLineDesktopOption","KitItemsItemLineMobileOption","SingleVariationList","SingleVariationListDesktopOption","SingleVariationListMobileOption","SingleVariationCompact","SingleVariationCompactDesktopOption","SingleVariationCompactMobileOption","SingleVariationLine","SingleVariationLineDesktopOption","SingleVariationLineMobileOption","ShoppingCartList","ShoppingCartListDesktopOption","ShoppingCartListMobileOption","ShoppingCartCompact","ShoppingCartCompactDesktopOption","ShoppingCartCompactMobileOption","ShoppingCartLine","ShoppingCartLineDesktopOption","ShoppingCartLineMobileOption","FinalizedOrderList","FinalizedDocumentListDesktopOption","FinalizedDocumentListMobileOption","FinalizedOrderCompact","FinalizedDocumentCompactDesktopOption","FinalizedDocumentCompactMobileOption","FinalizedOrderLine","FinalizedDocumentLineDesktopOption","FinalizedDocumentLineMobileOption","Popup","PopupDesktopOption","PopupMobileOption","RelatedItemList","RelatedItemListDesktopOption","RelatedItemListMobileOption","RelatedItemCompact","RelatedItemCompactDesktopOption","RelatedItemCompactMobileOption","RelatedItemLine","RelatedItemLineDesktopOption","RelatedItemLineMobileOption","WishlistList","WishlistListDesktopOption","WishlistListMobileOption","WishlistCompact","WishlistCompactDesktopOption","WishlistCompactMobileOption","WishlistLine","WishlistLineDesktopOption","WishlistLineMobileOption","CheckoutList","CheckoutListDesktopOption","CheckoutListMobileOption","CheckoutCompact","CheckoutCompactDesktopOption","CheckoutCompactMobileOption","CheckoutLine","CheckoutLineDesktopOption","CheckoutLineMobileOption","documentID","DocumentID","PrintingDocCode","AttachmentEntryID","FileID","entryID","receiptID","printingDocCode","CanPrinting","CanSharing","ShareDocumentConfig","IsAllowPrinting","PrintingTemplates","IsAllowSharingByEmail","IsAllowSharingBySMS","IsAllowSharingByWhatsapp","InvoiceOneTemplates","SelectedShareType","ShareToApplication","IsEmailSelected","IsSMSSelected","IsWhatsappSelected","IsAllowTemplateSelection","InvoiceOneTemplateID","SMS","InitEvents","AvailableShareTypes","ca","IsReceipt","receiptEndpoint","GetShareDocumentConfig","IsEnabled","IsTablet","navigator","share","canShare","DefaultPrintingDocCode","TemplateCode","TemplateName","DefaultEmail","DefaultCellular","DefaultInvoiceOneTemplateID","SendShareButtonEvents","onUiEventFired$","OnShare","shareFormChange","CanComplete","event","printDialog","GetPdfByPrintingDocCode","ee","Ee","Oe","_e","File","title","files","dt","ShareCompleted","NotificationTypes","GetInvoiceOneNotificationTypesBy","IsInProccessing","ShareReceipt","ShareDocument","V","js","Fe","Today","getDate","Ws","Wr","Ko","Ai","Xs","Ni","distributionCycleID","ExecuteDeleteAction","reorderedUniqueItemIDs","barcode","secretText","ItemID","promotionID","updatedSubject","GetDocumentOptionByType","IsAllowNew","IsAllowView","Document","Js","DateAndTimeFormat","DateFormatLong","TimeFormatShort","distributionCycleEndpoint","GetCurrentDistributionCycleList","MobileAllDistributionCycles","DistributionCycles","J","SelectedDistributionID","close","Or","Bn","descriptionSubject","loadingSubject","pickoutSubject","storeAndSendEvents","customerService","showDistributionDialog","shoppingCartEndpoint","GetOrCreateForCurrentUser","GetForCurrentUser","handleSuccessfulShoppingCartResponse","IsEnableDistributionCycles","DefaultDocumentType","showRefreshMessage","size","orientation","open","header","IsWideScreen","styleClass","IsRTL","contentStyle","overflow","baseZIndex","onClose","unsubscribe","GetShoppingCartDescriptionForCurrentUser","IsEditMode","CreateShoppingCartByDocumentType","DistributionCycleID","ValidationResult","RemoveCurrentShoppingCart","success","message","UpdateShipmentMethod","ShipmentMethodID","UpdateCasualAddress","StateCode","Street","City","ZipCode","StreetNo","Building","Block","County","UpdateCasualContactPerson","Cellular","Position","UpdateTotals","DiscountPercent","DiscountSum","TotalAfterVat","IsNew","UpdateItem","itemQuantityUpdateQueue","RemoveShoppingCartItem","Quantity","Notes","IsAddItemAsKitMode","IsUpdateAdditionalDataOnly","addToItemQuantityUpdateQueue","AdditionalData","shoppingCart","ShoppingCartItemViews","IsFree","ItemView","ItemCode","ItemType","IsKitItem","documentService","IsInventory","BatchesView","SerialNumbersView","RemoveAllItemsFromShoppingCart","DisablePromotionForShoppingCart","EnableAllPromotionItems","ReorderShoppingCartItems","VisibilityEntries","UpdateShoppingCartItemsVisibility","BaseDocumentsEntryIDs","TargetDocumentType","UseBaseDocuments","CustomerAddressID","DocumentRemarks","ShipmentNotes","DocDueDate","PostingDate","PaymentDueDate","NumAtCard","PaymentTermID","IsDraft","SignatureBase64","IsUseCasualAddress","IsUseCasualContactPerson","CustomFieldValues","PreSaveCheckoutShoppingCartDetails","ApplyCoupon","RemoveCoupon","UploadAttachments","DeleteAttachment","GetAttachment","FileBlob","ContentType","Length","DisableShoppingCartChange","ShoppingPayment","AnyPaymentDone","TotalBeforeVat","OriginalDocumentNumber","quantity","multiply","AddItemFromBarcodeScanner","Result$","cancelled","proccessItemQuantityUpdateQueue","proccessActionHandler","clearTimeout","itemQuantityUpdateInproccess","Updates","UpdateShoppingCartItemQuantity3","handleSuccessfulShoppingCartBatchResponse","Mn","$e","$r","Ja","Rr","rl","InitActionsMenu","ShoppingCartItemsExists","DocumentTypes","SelectedDocumentType","messageDialog","Prompt","CopyTo","GetCustomerID","SetCustomer","UpdateShoppingCartAndGo","shoppingCartService","useBaseDocuments","PreferableAction","PreferableActionText","ActionsMenu","OnSuccessClick","CopyAndGoToCatalogue","IsUIEvent","IsBlockEditingItemsWhenBasedOn","CopyAndGoToCheckout","IsEnableCheckout","IsEnableCatalogue","On","GoCreditCardTypes","EnumOrderStatuses","DocumentDraftOptions","PriceCommentsDisplayTypes","EnumInvoiceStatuses","EnumQuoteStatuses","EnumDeliveryNoteStatuses","EnumReturnStatuses","EnumRefundStatuses","ReturnRequestStatuses","ReceiptTabs","ItemDetailsTabs","CategoriesFilterTabs","ImpersonateTargets","AddressEntryModes","CasualContactPersonNotificationReceivers","ContactPersonEntryModes","YesNo","DocumentDetailsTabs","AdminDashboardItemsTabs","AdminDashboardReportsTabs","ReportDateRanges","Order","EnumEffectTargetSelectorForMultipleEffectItems","ItemSalesTabs","ShareDocumentTypes","CopyToDocumentActions","EnumNewDocumentTitles","EnumEditDocumentTitles","DiscountPermissionCheckTypes","DiscountPermissionTabs","CityInputMethods","SalesDocumentLayers","SaleTargetDimensions","SaleTargetMeasures","EnumCustomFieldLocation","EnumExternalQueryTypes","EnumCategoryPaneBehaviours","DashboardFilterAdditionalPeriods","AddressFieldOptions","GiftCardValueTypes","ShowTotalOnTopOptions","ShowDocumentFilesModes","AssortmentVisibilityModes","Fi","ExecUIAnimation","sessionStateChanged$","setInterval","repeat","Index","Eo","Hi","forSelectedCustomer","GetUpdatedTermsOfUse","GetTermsOfUseContent","TermsOfUseContent","domSanitizer","bypassSecurityTrustHtml","cl","IsCurrentUserAdmin","impersonateSelectorContainer","toggle","ImpersonateSelectionDropdownVisible","Vi","BarcodeScannerType","CatalogueSearch","barcodeExternalDialog","barcodeBoxDialog","UpdateInProgress","addItemFromBarcode","CloseDialog","OnBarcodeValueChanged","Dl","cities","toLowerCase","city","CityInputMethod","key","citiesDataSource","store","cityChange","onChange","validateCity","customItem","insert","then","catch","ja","wl","IsRequired","ValueFieldName","Tl","CheckContactPersonInfoValid","IsNameValid","IsEmailValid","OnContactPersonInfoChanged","FromShoppingCart","SaveFromShoppingCart","ContactPerson","Load","ContactPersonChanged","ProcessCasualContact","DocumentOption","CasualContactInfo","ContactPersonEntryMode","IsAllowSelectingContact","IsAllowEditingContact","IsContactPersonFieldReadonly","IsCasualContactMode","TriggerUiEvent","IgnoreCasualContactChange","CasualContact","OnContactPersonChanged","contactDialog","GetListByCustomer","DocumentContactPerson","DocumentCustomerID","max","apply","IsCasual","IsContactPersonFieldVisible","IsCasualContactPersonSelected","qr","za","Coupons","ExistingCoupons","OnCouponsChanged","couponText","SecretText","applyCoupon","removeCoupon","GetFieldOption","AddressOption","OnInitComponent","LoadStates","States","stateEndpoint","ListByCountry","IsStatesNotEmpty","Reload","CustomerAddressChanged","ProcessCasualAddress","CasualAddressInfo","IgnoreCasualAddressChange","CustomerAddresses","CustomerAddress","IsCasualAddressMode","CasualAddress","IsShowFullCasualAddress","FullAddress","OnCustomerAddressChanged","addressDialog","IsAllowSelectingAddress","AddressEntryMode","IsAllowEditingAddress","IsCustomerAddressesFieldReadonly","DocumentAddress","IsCasualAddressStateVisible","UpdateCasualAddressInShoppingCart","InitialFullAddress","IsFullAddressFieldVisible","IsCustomerAddressesFieldVisible","IsCasualAddressSelected","EntityService","GetLastSavedEntity","Field","TargetFieldRelation","Activate","Page","GetEntityID","TargetEntryID","FiltersPanelSliderVisible","screen","sm","jc","Wi","Large","BadgeKind","Custom","SafeHTML","BadgeData","BadgeSize","Small","Medium","am","Gc","Bc","Disabled","OnClick","um","mm","GetAPIURL","ImageType","ImageSize","Version","fm","ym","kc","ImageRequest","StopPropagationClick","OnImageClick","ImageUrl","imageService","getImageURL","Ll","hm","DefaultDesktopViewOption","DefaultMobileViewOption","ListMobileOption","ListDesktopOption","CompactMobileOption","CompactDesktopOption","LineMobileOption","LineDesktopOption","UiEventName","LocalStorageItemDisplayViewStorageKey","optionsMapping","Wc","Qc","Kc","itemDisplayOptionsHelper","getOptionsMapping","ItemContainerType","SelectedViewOption","DesktopListOption","MobileListOption","DesktopCompactOption","MobileCompactOption","DesktopLineOption","MobileLineOption","LocalStorageKey","IsEnableListView","IsEnableCompactView","IsEnableLineView","InitViewOptionProperties","RetrieveSelectedItemViewOptionFromLocalStorage","DefineAllowedViews","ContextMenuItems","HandleChangeView","MenuItemsLength","ApplyView","SetItem","Context","zc","xm","_m","Xc","IsQuantityIncorrect","CheckIsIncorrect","_quantity","PreviousQuantity","EnableIsShowTotalSwitch","IsShowTotal","OnClickHandler","CheckForShowAdditionalErrorMessage","Min","Max","ValueChanged","AdditionalErrorMessagePointer","AdditionalErrorMessageInstance","IsShowAdditionalErrorMessage","AdditionalErrorMessageFn","AdditionalErrorMessage","Total","GetSplittedPrice","go","NumberPrice","DecimalSeparator","Im","Em","Fl","refreshState","SaleMultipleOf","HandleQuantityChanged","DisableDecrease","DisableIncrease","wm","Mm","Hl","OnValueChanged","Start","End","Nm","Vm","Yc","jm","km","OnNavigateClick","Wm","$m","Zc","Xm","qm","Zm","jl","Ym","Be","tf","ef","of","ki","nf","af","Vl","sf","tu","nu","fi","pf","Ar","Xn","CanNavigate","CheckDeviceSpesificRoute","GetDefaultPath","IsEnableMyDetails","IsAllowReceiptAdd","IsEnableLedger","IsEnableDashboard","IsEnableAging","IsEnableHomePage","ou","mf","ru","PaintBalanceCells","row","restrictedNavigationService","RestrictedNavigate","wt","es","hf","su","lu","yf","Sf","pu","mu","du","IsMediumScreen","SetDefaultDateFilterValues","CustomerFilterAction","HandleFilterChanged","Filter","DoInitialize","OnFilterValuesChanged","cloneFilter","ts","Cf","If","fu","InitFilter","AgingCustomers","endpoint","GetListShallow","SalesPersons","GetPaymentTerms","PaymentTerms","GetCustomerGroups","CustomerGroups","Gl","iu","cu","hu","gu","vu","Su","_f","xu","Df","Cu","Iu","Of","Tf","_u","Ef","kl","OpenSum91_180","QuickFiltersGrid","rowType","columnIndex","ReceiptID","LISTITEM","wf","Pf","Du","RouteCustomerID","CustomerDetailsRoute","IsShortScreen","pageDisplayMode","CustomFilterCssClass","OnGetContextMenuItems","GetContextMenu","Open","AgingFilterAction","ShowTitleInToolbar","CustomerTitle","DialogPrint","agingEndpoint","GetPdf","GetShallow","CardCode","CustomerCurrency","DisplayCurrency","Aging","ObjectType","ns","Ou","so","wu","Rf","Tu","Mf","Eu","zl","Pu","Ru","Ff","jf","Mu","_entity","OnInitComponentInternal","CanCompleteSharing","ShareButtonText","Lu","Gf","Hu","OnTabIndexChanged","ju","Kf","Gu","signBox","SignatureData","OkButtonText","OkText","CancelText","ClearSignature","SignatureReadOnly","IsEmpty","Required","Save","Bu","$f","Qf","Uu","SignatureOption","Signature","signatureDialog","OnSignatureChanged","$l","ku","Zf","Kl","SafeHtml","Content","Yf","$u","zu","IsFinancial","OnDestroyComponent","OnCalculatePaymentTermsDate","setHours","getTime","OnDocumentDetailsValueChanged","th","ih","Xl","TotalVat","CalculateDiscountSumValue","CalculateTotalBeforeVatValue","CalculateVatSumValue","CalculateTotalAfterVatValue","CalculateDiscountPercentValue","GetLineVatSumBeforeDiscount","TotalBeforeDiscount","Number","toFixed","RoundPrice","GetDiscountMultiplier","TotalVatBeforeDiscount","IsRoundTotals","round","HandleTotalAfterVatChanged","updateTotals","rh","Zl","ItemEntryID","uh","dh","ph","tr","wishlistItemUpdatedSubject","wishlistLoadedSubject","wishlistCleanedSubject","Ku","eventType","WishlistItemUpdated","wishlistEndpoint","RemoveAllItems","WishlistCleaned","notifyWishlistLoaded","WishlistLoaded","GetWishlistCount","itemsEndpoint","GetItems","filterClarificationReloadSubject","lh","filterEndpoint","GetFilterClarification","me","Jl","rs","mh","hh","Qu","ec","Yr","gh","qu","yh","is","Xu","tc","Sh","as","nc","ss","rn","vh","zi","oc","ls","Yu","cs","Zu","Ao","Ju","rc","Ch","bh","mr","Th","Oh","eventSubject","wh","EventType","Ready","addonName","storageKey","SendToAddon","SendFromAddon","ItemUpdateFromAddon","lt","initialized","Lt","AddonName","sendToAddon","SerializedData","entries","Eh","hi","Label","LabelAsNextStep","yi","Ah","od","Mh","rd","IsAllowAttachments","IsAllowCashPayment","IsAllowChequePayment","IsAllowGoCreditPayment","IsAllowWirePayment","IsAllowLaterPayment","IsEnablePostingDate","IsEnableDueDate","IsEnableCustomerReference","IsEnablePaymentTerms","IsEnableNotes","IsEnableCheckoutNotes","CheckoutNotes","IsEnableGiftCards","None","tt","Je","un","wn","IsEnabledShipment","zt","CustomFieldsetID","IsExtendedSectionVisible","InitCheckoutLocalStorageKey","DocumentTypeText","CustomFieldsView","CustomFieldID","preSaveShoppingCartQueue","InitNavigationTabs","ProcessShoppingCartAfterChange","ProcessValidationResult","InitValidDistributionDateRage","addonService","event$","SysEvents","MenuPositon","SetVisibilities","updateShoppingCartCasualAddress","updateShoppingCartCasualContactPerson","preSaveCheckoutShoppingCartDetails","CheckoutItemDisplayTypeStorageKey","ItemDisplayType","DefaultCheckoutDesktopItemViewOption","DefaultCheckoutMobileItemViewOption","DefineViewModeVariables","HandleChangeViewMode","separator","ProcessShoppingCartForCheckout","DefineMinPlannedDeliveryDate","DefinePostingDate","DefineCasualAddress","DefineCasualContact","SetCheckoutButtons","HandleShoppingCartChanged","ToggleEnableAllPromotionItemsContextMenu","CalculatePaymentTermsDate","DocumentNotesLabel","IsInvoiceOrRefund","RefreshEntityOriginal","SelectedNavigationTab","SetShipmentOptionMethods","DistributionCycle","DistributionCycleDates","LastDocumentUntil","EarlierDocumentFrom","ValidateShoppingCart","ItemValidationResult","IsSignatureEnabled","OnValidateError","SetTabByCode","IsDetailsEnabled","ValidateValidationGroup","updateShipmentMethod","NavigationTabs","CompleteCheckout","findIndex","TabRelatedIndex","$i","IsAttachmentsEnabled","IsPaymentEnabled","CheckoutButtons","IsEnableTOnCheckout","IsTermsOfUseAgreed","IsItemQuantityInvalid","DisableCheckoutMultipleClick","SaveDocument","OnCompleteSubscribe","IsPaymentDone","IsShowExtraConfirmation","PriceDisplayOption","UITotalAfterVat","UICurrency","termsOfUseDialogComponent","DocumentDate","PaymentTermsID","GetCalculatedPaymentTermsDate","HandleCheckoutFieldUpdate","IsDisablePreSave","invisibleTotalMessageHandler","IsCheckoutTotalVisible","PaymentDone","ShoppingPaymentID","PaidAmount","PaidAmountWithLater","HandlePaymentDoneChanged","HasCreationError","OnlyLaterPayment","CompletedDocument","IsDocumentCompleted","ShipmentMethods","AvailableShipmentMethods","enableAllPromotionItems","CasualAddressCountryCode","CasualAddressStateCode","CasualAddressCity","CasualAddressStreet","CasualAddressZipCode","CasualAddressFullAddress","CasualContactPersonEmail","CasualContactPersonPhone","CasualContactPersonCellular","CasualContactPersonPosition","MinPlannedDeliveryDate","cleanShoppingCart","TotalPrice","editSummaryDialog","IsAllowLineEditing","IsDuplicate","DraftOption","TabsInitialized","Key","OnPreSaveDetails","Ro","fr","cn","Ql","Yl","Nh","Fh","InitContextMenuItems","DisabledPromotionsExist","HandleEnableAllPromotionItems","some","Ki","slice","InitViewModes","ToggleDragAndDropMode","HandleRemoveAll","IsDragAndDropModeEnabled","pagesScroll","scrollTo","Hh","ac","Vh","ds","TotalsExpanded","IsAddressExpanded","IsShipmentOptionExpanded","IsContactExpanded","IsPaymentOptionsExpanded","IsDocumentDetailsExpanded","Bh","ld","sd","ItemCustomFields","EditShoppingCartItem","ShoppingCart","ItemCustomFieldsView","GotoShoppingCartOnClose","ShoppingCartItemEditComponent","SendEvent","ShoppingCartItemUpdate","SetDirty","IsValid","PlaceAfterUniqueID","updateItem","static","Uh","sc","ud","GetSalesPersonsCredentials","validate","isValid","ImpersonateTarget","ImpersonateByCustomer","ImpersonateBySalesPerson","OnImpersonateCancel","dd","Qh","pd","Kh","Zh","fd","isNaN","Yh","ng","tg","rg","gd","CustomerEntryID","PaymentURL","layout","og","cg","yd","IsAddMode","AllowEditCustomer","IsAllowEditingAddresses","IsAllowCustomerEditing","AllowEdit","OnAdd","OnUpdate","lg","fg","lc","mg","Sg","vd","IsAllowEditingContacts","yg","Ig","xd","bg","Cd","Id","_d","It","Od","Dg","Og","Tg","wg","Td","Zn","EntityEntryID","LedgerRoute","AgingRoute","DashboardRoute","IsAllowReceiptView","IsShowGeneralDetails","IsShowContactInformation","IsShowPaymentTerms","IsShowContactPersons","IsShowAddresses","SelectAfterCreation","IsNewCustomerRelatedToCurrentSalesPerson","IsFullScreen","IsShowSubtitle","TaxStatuses","reverse","GetCurrentSalesPersonId","GetCustomerAttributes","CustomerAttributes","businessOptionEndpoint","GetPriceListNumbers","PriceListNumbers","wd","LocalizationType","SysEnums","EnumLocalizationTypes","Europe","vatGroupEndpoint","GetVatGroups","AllVatGroups","FilterVatGroups","ShowVatGroupSelection","SetTabs","SetDefaultFormValues","LoadEntity","EUVatStatus","CurrencyLocal","GroupCode","DefaultCustomerGroupID","DefaultPaymentTermsID","PriceListNumber","DefaultPriceListNumber","CustomerFieldsetID","FieldsetID","Tabs","ShowDetails","ShowAddresses","MaxAddressEntryID","CurrentAddressEntryID","ShowContactPersons","MaxContactEntryID","CurrentContactEntryID","GetCurrentCreditCard","CreditCard","LoadPropertyAttributes","customerPropertyAttributeIDs","IsAllowChangeCardDetails","VatGroupCode","VatGroups","Percent","IsEU","NavigateEmail","NavigatePhone","NavigateExternal","NavigateWhatsApp","ContactPersonsToUpdate","CustomerAddressesToUpdate","fill","join","ConvertPropertyAttributesToString","IsSaving","CustomerContacts","SetEntity","Endpoint","SaveFull","ReflectEntitySaved","Qi","Nr","cc","Dd","Eg","ShowToolbar","Pg","Ed","Rg","Ag","Lg","Rd","ForSelect","OnCustomerSelect","OnNavigate","Mg","jg","Nd","Md","kg","Ld","CustomersAdmin","ListByParams","AllowAddCustomer","IsAllowCustomerAdding","DetailsNewWindowRoute","Ug","$g","Kg","Xg","Fd","Qg","DashboardSalePeriod","UpdateData","SalePeriodID","dashboardEndpoint","GetActiveCustomersFromPortal","ActiveCustomersFromPortal","PrepareData","Active","lo","qg","ty","Hd","SelectedAdditionalPeriod","AdditionalPeriod","GetActiveCustomers","ActiveCustomers","IsMultiSelection","ValueExpr","DisplayExpr","IsSearchEnabled","OnCompleted","OnCanceled","bottomSheetService","ShowList","OpenBottomSheet","ps","ey","iy","Vd","GetActiveUsers","ActiveUsers","ry","ly","cy","dy","Gd","ms","salePeriodEndpoint","SalePeriods","SelectedSalePeriodID","StartDate","HandleSalePeriodChange","SalePeriod","EndDate","OnFilterValueChanged","gi","uy","gy","Ud","GetCountDocumentsFromPortal","CountDocumentsFromPortal","hy","Mr","Tp","Cy","ByQuantity","kd","toLocaleString","month","min","SalePeriodParts","SwitchButtons","ByTotal","ClearTooltip","GetDocumentsBySource","IsByTotal","CurrencySystem","MobileCustomerValue","GetTooltipInfo","target","MobileSalesValue","MobileSapValue","MobileTotalValue","xy","Ty","Wd","GetInactiveCustomers","InactiveCustomers","Dy","Oy","Ry","$d","GetOpenDocumentsTotal","OpenDocumentsTotal","Py","Ly","Qd","GetTop10Customers","TopCustomers","ItemWidth","My","jy","Vy","Gy","pc","CurrentCustomerID","Categories","GetAllCategories","GetCategoryByID","CategoryIDs","GetTop10Items","TopItems","By","fn","Wy","zy","Zd","Yd","Ky","Jd","documentProcessingEndpoint","UpdateAsResolved","Refresh","fs","$y","Yy","tp","DocumentProcessings","GetDataSource","Xy","tS","op","eS","oS","Style","rS","sp","uS","ap","GetCustomersLite","ReportDateRangesSortedList","SortDateRangesList","DocumentFilterAction","cS","Subject","SalesPersonIDs","Subjects","mc","lS","hS","fS","yS","gS","SS","lp","GetSummary","DocumentListParameters","ColumnsToSummarize","FillColumnsToSummarize","DocumentListParams","GetColumnSummaryByParams","Summaries","ColumnName","SummaryType","cp","IS","up","bS","mp","pp","_document","InitData","NumbersType","DocumentItemViews","ItemStockManagementType","FilteredNumbers","DocumentBatches","DocumentSerialNumbers","SelectItemCode","OS","RS","fp","OnView","PS","FS","fc","LS","BS","GS","$S","hp","OnItemClick","hc","zS","yp","gp","XS","co","GetPriceMainPart","GetPriceChangePart","ov","vp","CanEdit","HandleEdit","CanCancel","HandleCancelDocument","CanClose","HandleCloseDocument","CanDuplicate","HandleDuplicateDocument","CanRepeat","HandleRepeatDocument","CanCopyTo","HandleCopyTo","HandleShowRelatedDocuments","HandleExportDocumentItems","IsShowShareExistingDocument","IsAllowShare","HandleShare","HeaderFieldValues","HasCustomer","GetDescriptionByCustomerID","IsPaymentExists","DocumentItemDisplayTypeStorageKey","IsDocumentTypeAvailable","DefineCustomerAddress","DefineContactPerson","AvailableTargetDocumentTypes","GetAvailableTargetDocumentTypes","Methods","ShipmentMethod","ExportDocumentItems","DocumentCurrencySymbol","TotalDiscount","PrintMenuItems","HasDocumentPDF","HandleGetPDF","ShowFilesMode","CheckDuplicationAccessByCurrencies","IsPaymentExistsForDocumentCustomer","ShipToCountry","ShipToState","ShipToCity","ShipToStreet","ShipToZipCode","ShipToFullAddress","IsUseCustomAddress","ContactPersonPosition","ContactPersonEmail","ContactPersonPhone","ContactPersonCellular","IsHideItems","IsAllowCancelation","IsAllowClose","IsCustomerCurrencyAllowedForDuplication","IsAllowDuplication","IsAllowRepeat","Confirmed","Opened","cancelPrompt","CancelDocument","Action","NotifyDocumentUpdated","closePrompt","CloseDocument","IsEditExisting","UpdateDocument","ShoppingCartDisplayMode","duplicatePrompt","notEmptyShoppingCartPrompt","RepeatDocument","repeatPrompt","dialogPrint","GetPdfByCurrentUrl","Lr","addWorksheet","qi","gridDocumentItems","worksheet","export","customizeCell","gridCell","excelCell","font","bold","xlsx","writeBuffer","tv","Blob","copyToDialog","SetupComponent","editPrompt","GetRelatedDocuments","relatedDocumentsToDialog","RelatedDocuments","noRelatedPrompt","shareDocumentDialog","pcm","Jn","$t","xs","Cs","bs","Is","xi","DefaultFinalizedDocumentMobileItemViewOption","DefaultFinalizedDocumentDesktopItemViewOption","Source","SelectedTabName","nv","u","d","RouteHistoryService","ClearHistory","updated$","s","dp","a","Ne","E","UrlSafe","externalLinkEndpoint","Link","Ge","yo","Fn","Yi","So","gridAny","ForSelectedCustomer","externalQueryEndpoint","IsLoading","GetExternalQueryData","ExternalQueryResult","prepareData","Format","Rows","getDataRow","ExternalQuery","Fields","FieldName","ErrorText","AsNumber","AsString","AsDate","AsMoney","AsBool","Zr","$T","bx","HomeInfo","InitImageRequests","IsShowAsMobile","DialogWindowSize","StartDocumentLabel","LastDocumentLabel","description$","HasShoppingCart","loadShoppingCartDescription","IsEnableHomePageBanner","DesktopImageVersions","MobileImageVersions","BannerImageRequests","TitleTextPosition","copyLastDocumentPrompt","WT","zT","YT","Ix","categoriesService","getFeaturedCategories","scrollView","scrollBy","left","IsShowFeaturedCategories","LoadFeaturedCategories","iv","XT","nw","_x","GetFeaturedItems","Items","CurrentItemIndex","IsShowFeaturedItems","LoadFeaturedItems","tw","sw","Dx","MailingAddress","MessageHebrew","MessageEnglish","IsConfirmationMessage","SubjectID","SendContactUsRequest","confirmationMessage","aw","uw","dw","mw","Tx","IsHomePagePermitted","IsEnableHomePageText","LoadHomeInfo","GetHomeInfo","ServerVersion","ClientVersion","keyCode","itemSearchEndpoint","Announcement","MessageBoxTypes","OK","IsHideCancel","av","pw","yw","Ex","gw","Px","vw","xw","Ax","Iw","Dw","Nx","_w","Tw","Lx","LedgerFilterAction","bp","Mx","Ow","ww","Ew","Fx","Pw","Rw","Nw","Vx","PaymentType","FixedPrice","Amount","LeftPaymentAmount","OnPaymentDone","Aw","Lw","Fw","gc","Vw","Bw","Ww","shoppingPaymentID","useShoppingCart","zw","Kw","Bx","AllowSaveCard","AllowUseExistingCard","ShoppingPaymentView","UseShoppingCart","LoadCreditCard","GetNewPaymentUrl","CheckAmount","BackupUrlSafe","GoCreditCardType","HasError","CreditCardItem","shoppingPaymentEndpoint","MakeNewCreditCardPaymentStage1","OnCreateShoppingPayment","InitInProcess","IsExpired","UpdatePaymentCreditCardItem","IsSaveCreditCard","ExceededAmount","OnExceedAmountChange","hs","$w","qw","Xw","Jw","eE","iE","Ux","SetPaymentButtons","AvailablePaymentTypes","PaymentButtons","ImageClass","EnumValue","OnSelectType","rE","lE","cE","fE","mE","gE","kx","_tabCode","CheckNavigateOnlyOneMethod","SetTab","_shoppingCart","IsAllowSplitPayment","GetByID","SetDonePayments","RecalculateIsPaymentDone","_totalAfterVat","SetAvailablePaymentMethods","IsAllowCreditCardSaving","ShoppingPaymentCreditCardItemViews","DonePayments","every","ngAfterViewInit","SelectedTabIndex","AllowedPaymentTypes","IsAllPaymentDone","SelectPaymentType","IsPaymentInProgress","PaymentDate","PaymentObject","CashItem","SaveCashPayments","ShoppingPaymentCashItem","SetPaymentSaveResponse","ChequeItem","SaveChequePayments","Identifier","BankCode","BankBranch","BankAccountNumber","ChequeNumber","ShoppingPaymentChequeItem","WireItem","SaveWirePayments","WireRefference","ShoppingPaymentWireItem","CreditCardNum","LaterItem","SaveLaterPayments","ShoppingPaymentLaterItem","OpenCreditCardDialog","paymentSelectDialog","creditCardPaymentDialog","SetupData","IsAllowUsingExistingCreditCard","OnPayWithExistingCard","MakePaymentWithExistingCreditCard","ShoppingPaymentCreditCardItem","DeleteDisabled","PaymentLineID","DeletePayment","CheckWireAndCashAndLaterOnlyOne","OnPaymentChangeIsPaymentComplete","changeDetectorRef","MakeNewCreditCardPaymentStage2","ShoppingPaymentCashItemViews","ShoppingPaymentChequeItemViews","ShoppingPaymentWireItemViews","ShoppingPaymentLaterItemViews","Gx","hE","xE","CE","IE","Wx","LoadAssortment","SelectedAssortmentID","Assortments","AssortmentVisibilityMode","ApplyAssortment","assortmentEndpoint","GetCustomerAssortment","GetDefaultAssortment","concat","IsAssortmentSelected","Mode","OnAssortmentChanged","IsMoreThanOneAssortment","sv","bE","wE","zx","BaseDocuments","ListAvailableDocTypes","ListDocTypes","OnlyOneTypeAvailable","SelectedDocType","FilterBaseDocuments","ShoppingCartItemsExisted","BaseDocumentsByType","SelectedDocuments","dataGrid","deselectAll","TE","RE","Kx","ShoppingCartDescription","IsAllowUseBaseDocument","GetIsAllowedBaseDocument","HandleBaseDocument","GetAvailableBaseDocuments","baseDocumentDialog","messageDialogBaseDocument","$x","PE","FE","Qx","ProcessNumber","DS","Brands","Vendors","Manufacturers","FillBreadCrumbItems","ShowClassification","findRawNodeByCategoryID$Subscription","closed","findRawNodeByCategoryID","ClassificationInfo","LE","kE","Xx","SetCategoryTree","SelectedNode","SetNode","treeView","findNodeByCategoryID$Subscription","node","expanded","collapseItem","expandItem","sidebarService","Close","CategoryPaneBehaviour","DefaultShoppingCartModeOption","SetPageSidePanelState","findNodeByCategoryID","UE","BE","GE","QE","Yx","hasChildCategories$Subscription","hasChildCategories","IsShowSubCatagoriesInGrid","IsShowSubCatagoriesInList","IsDisplayCategories","LoadCategories","KE","$E","eP","Zx","GetFieldNameByType","isArray","SelectedID","LoadBrands","LoadVendors","LoadManufacturers","IsShowTopMenuCategories","categoriesList$Subscription","getCategoriesListUnfiltered","InitializeImages","IsShowTopMenuBrands","IsShowTopMenuVendors","IsShowTopMenuManufacturers","ddbutton","MobileItemListPageSize","ZE","JE","iP","Jx","CatalogueItemDisplayTypeStorageKey","ShowCompactView","IsEnableGridView","CatalogueViewOption","rP","cP","tC","format","position","ProcessFilterAttributeGroups","AttributesFilter","NumberMinValue","NumberMaxValue","CheckAreEqual","CleanupFilterAttributePathValue","OnFilterChanged","DateMinValue","DateMaxValue","hasOwnProperty","Values","AttributeDisplayOption","lP","mP","oC","pP","SP","Set","rC","SelectedItems","selectedByFilter","delete","yP","IP","iC","HandleClearFilter","ItemsFilterPatch","FilterPanel","HandleApplyFilter","SidebarState","SidebarName","IsShowFilterPane","ItemsFilter","IsNewFilter","GetState","itemsService","getFilterClarification","Fr","LoadMainEntities","IsShowFilterBrands","IsShowFilterVendors","IsShowFilterManufactures","SpecificationAttributeIDs","DimensionIDs","LoadAttributeGroups","toUpperCase","disabled","FilterAttributeGroups","bP","wP","aC","GroupingOption","GroupingItems","GetGroupingItems","OnGroupingChanged","HandleGroupingOptionChanged","IsShowGroupSortByBrand","IsShowGroupSortByVendor","IsShowGroupSortByManufacturer","IsShowGroupSortByCategory","TP","NP","sC","OnSearch","AP","jP","lC","HP","UP","cC","SortingOption","SortingItems","GetSortingItems","OnSortingChanged","HandleSortingOptionChanged","IsCustomSortEnabled","CustomSortTitle","GP","cv","uC","IsCatalogueEnabled","IsEnableShoppingCart","InitializeCatalog","CreateShoppingCartOnInitIfneed","shoppingCartFirstChanged","ComponentName","ShoppingCartItems","PageSidePanelState","SidePanelPageComponentName","pageComponentName","SetPageClass","IsShowTopPanel","HideScrollLoading","AdditionalClass","GetDocumentTitle","ready","catalogueInitialized","b64_to_utf8","ClearFilter","ShowButtonsText","Orientation","ShowBackButton","SubtitleTemplate","startOver","GetScreenSize","FilterPanelWidth","removeCurrentShoppingCart","$P","QP","dC","IsLandscape","lv","_p","HandleToggleCategories","PageClass","KP","uv","JP","ZP","t0","pC","canLoadNext","CanLoadNextChanged","scroll","PageSize","CollapsedGroups","SetViewModeCssName","PageScroll","categoryService","LogDeviceInfo","getItems$Subscription","collapsed","CanLoadNext","has","GroupID","release","ItemGroups","InitializePaging","onReachBottom","GetItemDisplayType","now","LastLoadData","SerializedFilter","getItems","ProcessItemsResult","ShowNoDataMessage","Groups","AttachFakeData","e0","o0","ViewModeCssName","Compact","onScroll","scrollActionHandler","scrollOffset","scrollTopOffsetDelta","scrollTopOffset","OnSetAdditionalClass","IsHeaderCollapsed","r0","mC","l0","ScreenSize$","RefreshMenuSidePanelVisibility","state","sidePanelState","menuPositon","SetMenuPositon","c0","Dp","m0","ot","f0","g0","fC","ElementOption","itemOptionService","GetItemOption","Item","ItemOptionID","DisplayType","ItemKitChildrenQuantity","GetItemKitChildrenQuantity","IsKitCollapsed","GetItemKitVisibility","processShoppingCart","addonEvent$Subscription","Addons","parseAdditionalDataAndSendToAddons","IsVirtualPromotionItem","IsPromotionPrice","IsShowSalesKitParentLabel","KitType","PriceDetails","FinalPrice","IsShowAppItemQuantityComponent","IsRenderAddToCart","VariationRelation","Parent","ItemActionPermissions","EnableDelete","IsAllowItemDeleting","DefineShoppingCartDisplayMode","EnableNavigate","DocumentLineData","ParentUniqueItemID","IsItemHiddenOnUI","OnDelete","IsShowRemoveItemConfirmation","EnableEdit","OnDuplicate","OnEdit","disablePromotionInShoppingCart","EffectPromotionID","OnQuantityValidation","pickoutItem","OnMultipleClick","addKit","IsShowQuantityDirectlyFromItem","IsCurrentItemDocumentItem","IsKitSeparate","IsBlockedKitSeparate","IsMultipleQuantity","IgnoreItemUpdate","h0","y0","S0","Op","I0","hC","EnablePromotionDisable","HandlePromotionDisable","HandleDelete","OnPromotionDisable","ShowItemActionContextMenu","b0","w0","gC","AttributeGroups","processAttributeGroups","TextAttributes","CombinedTextAttributes","IsCombineByName","IsShowDescription","Description","AttrsTooltipVisibility","T0","N0","yC","item","RefreshState","elementOption","IsRenderBadges","badges","getBadges","IsAnyBadges","getBadge","Variations","A0","H0","DefineInitialButtonState","IsCollapsed","ToggleButtonCaption","ToggleButtonText","j0","U0","k0","Q0","SC","SaleMethod","StockUnitName","SalePackageName","StockUnitsInPackage","IsRenderPricePer100G","PricePer100G","K0","J0","vC","Z0","oR","rR","lR","cR","mR","GetItemFile","pop","fR","vR","xC","InitializeMediaItems","popupOption","IsAllowImageEnlargement","ImageBackgroundColor","InitImagePopupSize","ImagePopupWidth","ImagePopupHeight","ToggleImagePopup","IsImagePopupVisible","PopupOption","MediaItems","MediaItemsSoloImages","CC","smallImageRequest","GetImageRequest","imageRequest","videoSafeUrl","VideoLink","ImageVersions","ItemVideos","IsRenderImages","IsRenderVideos","IsShowThumbnailsArea","IsRenderThumbnails","itemsGallery","AlternativeEntryID","AlternativeImageType","ChangeThumbnailsAreaItem","selectedIndex","IsShowVideoLoading","thumbnailsScrollView","scrollToElement","getElementById","GetItemId","SR","bC","_R","DisplayAlternativePriceAsDefault","GetTotalPerItemPrice","Price","GetFinalPriceMainPart","GetFinalPriceChangePart","GetPricePer100MainPart","GetPricePer100ChangePart","InvertedPromotionPrice","GetInvertedPromotionPriceMainPart","GetInvertedPromotionPriceChangePart","IsShowDiscount","Discount","BeforeDiscountAndDiscountPercent","BeforeDiscountDiscountPercentAndFinal","IsShowOldPrice","BeforeDiscountAndAfterDiscount","IsShowFinalPrice","AfterDiscount","IsShowPer100Gr","PriceInfoDisplayType","IsShowPriceComments","PriceComments","HidePriceComments","IsRenderPriceDescriptionBlock","ControlRenderEvent","WithCommentBlock","GetItemElementID","random","substring","AlternativePriceTitle","GetAlternativePriceTitle","IsAlternativePriceActive","AlternativePriceTitleOff","AlternativePriceTitleOn","CurrencySymbol","AlternativePriceDetails","IsUseAlternativePriceAsDefault","IR","ER","IC","PromotionID","promotionTextTemplate","IsPromotionAvailable","wR","MR","_C","IsFocused","QuantityBefore","MaxQuantity","MaxOrderQuantity","MinOrderQuantity","MinQuantity","IsAllowNegativeQuantity","IsReturnRequest","IsRenderTotalPerItem","TotalPerItem","TotalPerItemMain","TotalPerItemChange","QuantityIncrement","trunc","IsAllowOrder","IsReadOnly","IsAllowQuantityEditing","Units","Packages","ElementID","IgnoreMultipleQuantity","IsQuantityCorrect","IsSeparate","changeItemQuantity3","restoreQuantity","IsShowQuantityError","CurrentPageForQuiantityError","IsShowValidationMessage","GetCurrentRoute","CompactShoppingCartOpened","getTotalItemQuantity","Invalid","getIsNeedToCheckBatchesSerials","IsNumberSelectionEnabledByBaseDocType","getItemBatchesQuantity","getItemSerialNumbersQuantity","OnAddKitClick","NR","BR","DC","IsShowInStock","IsShowOutStock","StockCustomStatus","IsInStock","QuantityInStockValue","IsRenderQuantityInStock","IsRenderQuantityOutOfStock","VR","zR","OC","WR","qR","IsEnableWishlist","wishlistItemUpdated$Subscription","wishlistItemUpdated$","IsInWishlist","wishlistCleaned$Subscription","wishlistCleaned$","UpdateItemInWishlist","notifyWishlistItemUpdated","XR","tA","TC","InitImageRequest","imageSize","eA","iA","aA","uA","ForceScreenSize","screenSize","dA","hA","gA","CA","wC","xA","OA","EC","ItemPriceHasCommentBlock","DA","RA","PA","NA","PC","InStock","PendingSalesOrders","PendingPurchaseOrders","AA","jA","FormatQuantity","HA","kA","AC","GetItemAvailabilities","ItemAvailabilities","UA","QA","NC","GetPromotionsForItem","Promotions","KA","JA","MC","InitDefaultValues","GetItemKitItems","KitItems","KitItemsViewOption","SelectedKitTypeText","ZA","LC","n4","r4","FC","o4","l4","itemId","currentCustomerOnly","c4","d4","HC","CurrentCustomerItemSales","itemSaleEndpoint","GetItemSales","ItemSales","dv","u4","h4","f4","y4","jC","g4","b4","VC","GetItemPurchaseOrders","PurchaseOrders","C4","T4","BC","SelectedRelationType","InitializeFilter","RelatedItemsViewOption","AdditionalItems","Alternatives","AlsoBought","O4","A4","GC","InitVariations","ReloadDimensionValues","VariationsVisible","SingleVariationViewOption","DimensionValue1ID","DimensionValues1","DimensionValue2ID","DimensionValues2","DimensionValue3ID","DimensionValues3","ReloadVariations","PreviousEntryID","R4","F4","H4","Zi","j4","UC","V4","G4","B4","W4","k4","$4","WC","ItemName","InitEntity","ReflectEntityLoaded","GotoTabName","AddTab","IsRenderKitItems","IsRenderDimensions","LoadItemAttributes","LoadItemRelatedItems","IsRenderPromotions","IsEnablePromotions","IsRenderLastSales","IsRenderAvailability","IsRenderPlannedPurchases","changeItemAddonData3","IsRenderTextAttributes","IsRenderSpecificationAttributes","IsRenderDimensionValues","IsLoadSpecificationAttributes","IsLoadTextAttributes","IsLoadDimensionValues","ColorAttributes","TagAttributes","LinkAttributes","itemAttributeEndpoint","GetItemAttributes","AttributeGroupsMainTab","DisplayTab","AttributeGroupsAttrTab","IsRenderRelatedItems","kC","GetItemAdditionalItems","AdditionalItemsData","VirtualTabs","SetTabByName","wp","z4","K4","Q4","$C","zC","Y4","Z4","QC","tN","mobileCatalogueScroll","IsEnableAutoHideHeaderOnMobile","reachedBottom","nN","sN","XC","IsShowSearchPanel","eC","aN","ShoppingCartMode","dN","JC","gN","ZC","ReceiptFilterAction","hN","pv","fN","xN","mv","eb","CN","IN","tb","IsCash","PaymentTypes","IsCheque","IsWire","IsCreditCard","bN","TN","ob","ON","AN","rb","RN","HN","ib","Expanded","OnToggle","FN","UN","ab","paymentAmountDialog","OnEditableTotalChange","OnSelectionChange","IsSelected","Ledger","GN","KN","sb","EnablePayment","OnPageIndexChanged","$N","ZN","YN","eM","lb","GetDocumentTypeTranslation","JN","iM","cb","SelectedLedgersIDs","setValue","OnTotalCellChange","Balance","OnSelectedRowsChange","rM","uM","ub","OnTotalChange","SelectedLedgers","cM","fM","hM","vM","xM","OM","db","PaymentToAccountAmount","ReceiptSaved","ShoppingPaymentViewEntity","GetLedgersForPayment","AllLedgers","GetDraft","PaymentOnAccount","ShoppingPaymentDocumentItemViews","DocEntry","SumApplied","UpdateStateForPayments","AllowSelectorCallback","TimerId","UpdateShoppingPayment","Delay","Ep","UpdateDraftShoppingPayment","OnComplete","PaymentDifference","SaveReceipt","dxCheckBox","off","DM","TM","wM","pb","RM","AmountsExpanded","Pp","AM","FM","hb","LM","GM","gb","LocalCurrency","SBODocumentType","GetDocumentTypeString","JournalEntryID","BM","$M","yb","TotalLocal","TotalForeign","AccountPayment","ClosingSumLocal","ClosingSumForeign","CustomerTitleCode","GetFullReceipt","PaidDocuments","ReceiptPaidDocuments","CashPayments","ReceiptPaymentMeans","WirePayments","CreditCardPayments","ChequePayments","IsSupportHistory","zM","XM","vb","AllowAdd","Receipts","nb","qM","nL","Cb","Width","Height","GetFirstModuleName","ResourcesService","tL","rL","Ib","GetAvailableForSalesPerson","IsShowAlertForExistingCustomerWithCart","isInternalChange","ChangeCustomer","ReturnToPreviousCustomer","bb","oL","dL","_b","searchByText","Ad","uL","mL","Ob","selectCustomerPopup","getHours","DisplayUserName","Db","pL","SL","Tb","customersList","searchValue","yL","IL","wb","CreateDocumentButtons","createShoppingCartByDocumentType","bL","TL","OL","EL","wL","RL","Eb","PL","LL","FL","jL","VL","Pb","LoadOptions","GetItemsLite","GetItemLiteByID","customerGroupEndpoint","SalePeriodPartUniqueIDs","CustomerGroupIDs","CustomerIDs","ItemIDs","OnIsGroupBySalePeriodChanged","IsGroupBySalePeriod","Ap","Rp","HL","WL","kL","$L","Rb","RowClick","TargetDimensions","TargetSalesPersonName","TargetCustomerGroupName","TargetCustomerCardCode","TargetCategoryName","TargetItemCode","zL","XL","YL","ZL","JL","tF","Ab","TargetCustomerGroupID","TargetCustomerID","TargetCategoryID","TargetItemID","TargetMeasure","ActualValue","TargetValue","ReportType","CustomerCode","CustomerName","TargetCustomerCardName","TargetItemName","saleTargetEndpoint","GetSalesDocumentLayer","SalesDocumentLayer","DisableFilterApply","OnApplyFilter","CleanupData","HandleFilterActionButton","FILTER_EVENT","BaseTitle","yc","ys","eF","nF","oF","rF","SaleTargetPerformanceEntitiesRaw","SaleTargetPerformanceEntitiesGrouped","targetPerformanceEndpoint","GetSaleTargetPerformance","ProcessEntities","SalePeriodPartID","TargetDimension","TargetSalesPersonID","FilterParams","Nb","RecalculateTargetExecutionPercent","TargetExecutionPercent","getTargetExecutionPercent","fv","iF","Mb","cF","Fb","saleDataEndpoint","GetDataParamsDescriptor","DataParamsDescriptorResult","GetTotals","SaleDataTotalsResult","SalesData","GetData","GroupName","lF","mF","BuildDataGrid","gridDataSource","SalesSummaries","GetDataProjection","area","customizeText","SalePeriodPartUniqueID","GetFieldNameByProjectionName","customerCodeNameFn","itemCodeNameFn","hv","caption","dataType","summaryType","pF","fields","cell","columnType","columnPath","columnFields","rowPath","rowFields","SalePeriodName","CategoryName","CustomerGroupName","CustomerGroupID","SalesPersonName","SaleQuantity","SaleTotal","fF","Np","gF","yF","SF","vF","OnManageCredentials","GetLinkParams","CredentialID","ReturnUrl","gv","xF","bF","IF","OF","Admins","TF","PF","EF","AF","Gb","DisplayTabs","RF","FF","HF","VF","Ub","Et","Mp","jF","GF","UF","WF","kF","$F","Wb","contactSubjectEndpoint","GetActivityTypesList","ActivityTypes","GetSubjectTypesList","SubjectTypes","GetSBOUsersList","SBOUsers","yv","zF","zb","qF","YF","XF","JF","$b","ZF","oH","rH","aH","Qb","DepositGroups","Kb","iH","Sv","cH","Xb","uH","mH","Zb","ExternalLinkConfigsAdmin","pH","gH","eI","hH","xH","tI","vH","_H","nI","ExternalQueriesAdmin","IH","wH","rI","QueryTypes","TH","Lp","PH","AH","aI","RH","FH","sI","BusinessOptionsAdmin","LH","VH","BH","UH","cI","Warehouses","warehouseEndpoint","DefaultDocumentTypes","uI","LastSaleInfoDocumentTypes","IsEnabledCustomCurrencies","IsAutoCreateInvoice","vv","GH","xv","WH","$H","pI","zH","qH","XH","ZH","mI","CatalogueOptionsAdmin","Fp","YH","nj","hI","DisplayGroupingOptions","DisplaySortingOptions","HandleIsShowGroupSortBy","tj","Cv","yI","ij","SI","rj","lj","cj","dj","vI","ContactUsOptionsAdmin","contactUsOptionEndpoint","Hp","uj","hj","CI","IsXLargeScreen","fj","bv","yj","vj","II","Sj","bj","Ij","Dj","_I","CustomerDetailOptionsAdmin","jp","_j","OI","wj","Iv","Pj","Dv","_v","Ov","Rj","wv","Tv","Ev","Aj","Rv","Pv","Av","Nj","Nv","Mj","Mv","Lj","Lv","Fj","jj","wI","Hj","Uj","EI","CustomerOptionsAdmin","Gj","zj","$j","Kj","Qj","qj","Xj","Yj","Zj","Jj","e1","t1","n1","o1","r1","i1","a1","s1","l1","c1","u1","d1","p1","f1","RI","LoadCatalogueOptions","catalogueOptionsEndpoint","PaymentOptionsAdmin","paymentOptionEndpoint","ShipmentOptionsAdmin","shipmentOptionEndpoint","FilterOptionsAdmin","filterOptionEndpoin","NotificationOptionsAdmin","notificationOptionEndpoin","HomePageOptionsAdmin","homepageOptionEndpoint","customerDetailOptionEndpoint","FeatureOptionsAdmin","featureOptionEndpoin","TermsOfUseOptionsAdmin","termsOfUseOptionEndpoin","DocumentOptionsAdmin","documentOptionEndpoint","SeriesOptionsAdmin","seriesOptionEndpoint","ItemOptionsAdmin","fieldsetEndpoint","CustomerFieldSets","Location","AddressOptionsAdmin","addressOptionEndpoint","Vp","Bp","Gp","Up","kp","Wp","zp","$p","Kp","Sc","Ji","m1","NI","g1","S1","MI","y1","b1","I1","_1","D1","O1","T1","E1","LI","DimensionConfigurationsAdmin","DimensionsAdmin","dimensionEndpoint","DimensionScalesAdmin","dimensionScaleEndpoint","DimensionValuesAdmin","dimensionValueEndpoint","dimensionChangeSubject","dimensionScaleSubject","ShowMessageBox","GetDimensionValidities","InvalidDimensions","HasNoChild","RelativeItemsWithoutDimensionConfig","NonDefinedParentItems","NonDefinedChildItems","Fv","Qp","qp","w1","HI","LoadSelectOptions","A1","L1","M1","H1","VI","DimensionChange","OnDimensionScaleScaleChange","F1","BI","B1","U1","G1","W1","GI","DimensionScaleChange","k1","K1","kI","Q1","X1","WI","deleteRow","rowIndex","q1","nV","oV","zI","rV","iV","specificationAttributeID","aV","lV","$I","FT","LoadDataSources","AttributeGroupsAdmin","attributeGroupEndpoint","SpecificationAttributeValues","specificationAttributeValueEndpoint","requireTotalCount","FilterAttributeDisplayOptionSet","KI","FilterAttributeDisplayOptions","FilterDisplayOption","Hv","jv","sV","uV","qI","cV","YI","Ss","pV","mV","fV","hV","gV","SV","ZI","yV","CV","bV","_V","JI","DiscountPermissionsAdmin","Xp","IV","TV","wV","PV","t_","PermissionTabs","DiscountRulesAdmin","discountRuleEndpoint","Jr","EV","NV","o_","BrandsAdmin","brandEndpoint","ListLite","AV","HV","r_","CategoriesAdmin","FV","GV","i_","ItemsAdmin","BV","zV","a_","ManufacturersAdmin","manufacturerEndpoint","WV","qV","s_","VendorsAdmin","vendorEndpoint","QV","l_","ZV","eB","c_","JV","rB","u_","oB","p_","sB","uB","f_","cB","mB","g_","pB","yB","S_","IsAllowSelectingAddressVisible","IsAllowSelectingContactVisible","TotalOption","TotalAfterVatOption","OnlyVisibleOptions","WithoutViewOptions","HeaderFieldSets","gB","xB","x_","vB","_B","C_","IB","wB","I_","ExternalQueries","ExternalLinks","TB","RB","D_","PB","LB","O_","MB","w_","jB","P_","GB","UB","kB","WB","zB","KB","R_","originalSecretText","Promise","resolve","promotionEndpoint","CheckUniqueSecretTextAvailable","ValidFrom","ValidUntil","ActivationCode","GiftCardStatus","IsUsed","IsReactivateGiftCardButtonVisible","FlushDataAfterDuplicate","LoadItems","HiddenItems","GetHiddenItems","giftCardEndpoint","ReactivateGiftCardByID","Yp","vs","$B","XB","N_","qB","eG","M_","GiftCardsAdmin","JB","oG","F_","nG","sG","H_","HomepageOptionsAdmin","aG","V_","uG","mG","G_","pG","gG","yG","vG","U_","ItemDisplayElementOptionsAdmin","Zp","SG","bG","IG","W_","HandleEntityAfterDuplication","PriceDisplayOptions","priceDisplayOptionsEndpoint","vc","_G","TG","$_","OG","PG","RG","NG","K_","ItemDisplayPopupOptionsAdmin","Jp","AG","HG","q_","FG","BG","Y_","VG","WG","Z_","kG","eD","PopupDesktopOptionID","itemDisplayElementOptionEndpoint","itemDisplayPopupOptionEndpoint","KG","XG","nD","qG","e3","oD","JG","r3","o3","a3","aD","InvoiceOneTemplateIDEng","PrintingDocCodeEng","InitInvoiceOneTemplates","InitPrintDocCodes","ActualInvoiceOneNotificationTypes","HandleInvoiceOneNotificationChanged","Vv","notificationOptionEndpoint","GetInvoiceOneTemplates","InvoiceOneTemplatesDataSourceDictionary","FilterInvoiceOneByTypeAndCastToView","GetPrintingDocCodes","PrintingDocCodesDataSourceDictionary","FilterPrintingByTypeAndCastToView","iD","i3","c3","lD","l3","m3","cD","p3","g3","y3","S3","v3","C3","pD","GoCreditPasswordSecure","LoadAccounts","UpdateGoCreditModeEffect","accountEndpoint","Accounts","GoCreditTransactionMode","IsGoCreditNotJ4","Bv","dD","x3","D3","fD","_3","w3","gD","T3","A3","yD","PriceDisplayOptionsAdmin","R3","Gv","ea","F3","vD","EffectType","Boolean","EffectQuantity","ResultType","EffectDiscount","EffectFixedPrice","EffectItemID","EffectItemFilterType","RequiredType","RequiredQuantity","RequiredSum","ItemFilterType","itemFilterItemsIds","itemFilterCategoryIds","CustomerFilterType","customerFilterGroupIds","customerFilterCustomerIds","LoadValuesOfCustomFields","effectCategoryIds","EffectiveCategories","effectItemsIds","EffectiveItems","loadSelectedItems","availableForSearchItems","EffectItems","IsManualName","AutomaticName","getAutomaticName","CommercialName","getTextForEffectTargetEffectType","OnSave","L3","V3","CD","getVisibleRows","toIndex","Priority","fromIndex","SaveBatch","j3","k3","bD","PromotionsAdmin","U3","Uv","_D","z3","K3","DD","$3","Y3","OD","SalePeriodsAdmin","X3","e2","wD","J3","a2","ED","toDateString","r2","i2","RD","em","l2","u2","AD","c2","y2","ND","xc","Cc","SaleTargetSalesPersonIDs","SaleTargetSalesPersons","BuildSaleTargetLines","PrepareSaleTargetLines","SaleTargetLines","SaleTargetLineValues","LinesChanged","BuildSaleTargetLinesBySalePeriod","SaleTargetLinesExtended","SaleTargetLineUniqueID","ValueColumnDescriptors","TargetDimensionID","TempUniqueID","MD","g2","x2","FD","CustomerGroupsAdmin","cells","TARGET_COLUMN_NAME","v2","_2","HD","SaleTargetsAdmin","I2","kv","O2","w2","VD","T2","R2","A2","M2","BD","SalesPersonOptions","tm","N2","j2","H2","V2","B2","k2","kD","LoadCustomerGroups","LoadPaymentTerms","LoadDiscountPermissions","LoadCustomFieldsets","U2","paymentTermsEndpoint","DiscountPermissions","discountPermissionEndpoint","customFieldsetEndpoint","CustomFieldsets","UD","G2","$2","zD","z2","X2","$D","q2","eU","QD","DeliveryNoteSeriesID","QuoteSeriesID","InvoiceSeriesID","OrderSeriesID","RefundSeriesID","ReturnRequestSeriesID","ReturnSeriesID","PaymentDocumentSeriesID","DefaultCustomerSeriesID","seriesEndpoint","GetSeries","AllSeries","SetSeriesByDocument","AllQuoteSeries","AddDefaultOption","AllOrderSeries","AllInvoiceSeries","AllDeliveryNoteSeries","AllReturnSeries","AllReturnRequestSeries","AllRefundSeries","AllPaymentDocumentSeries","AllCustomerSeries","AddDefaultCustomerOption","qD","IsCustomerSeries","J2","oU","YD","GetItemShipments","ItemShipments","IsNoShipment","ItemShipmentID","nU","sU","ZD","aU","uU","dU","mU","JD","ShipmentMethodsAdmin","shipmentMethodEndpoint","Wv","pU","yU","tO","ShipmentDistributionCycles","SelectedCycles","Loaded","gU","xU","oO","vU","IU","_U","OU","rO","SystemOptionsAdmin","zv","DU","PU","aO","ErrorNotificationTemplate","ErrorNotificationEmailAddress","GuestContactPersonsAdmin","GuestCustomersAdmin","SalePersonOptions","salesPersonOptionEndpoint","EU","NU","lO","AU","HU","cO","FU","dO","htmlEditorDialog","HTMLBody","BU","kU","mO","UU","QU","fO","SpecificationAttributesAdmin","GetAttributeValidities","InvalidAttributes","EmptyAttributes","KU","YU","XU","JU","gO","SetData","SpecificationAttributeID","ZU","rk","yO","_isDuplicateAction","SelectedDocumentID","addedItems","_documentType","_customerID","OriginalDocuments","ok","sk","OnDocumentSelection","lk","mk","SO","wishlistLoaded$Subscription","wishlistLoaded$","IsWishlistLoadedFirstHandled","UpdateWishlistQuantity","getWishlistQuantity","IsShoppingCartLoadedFirstHandled","pk","vi","Coupon","removedItems","vO","yk","vk","xO","IsEnableShoppingCartListView","IsEnableShoppingCartCompactView","IsEnableShoppingCartLineView","ShoppingCartItemDisplayTypeStorageKey","InitContextMenu","No","HandleNewLine","IsSuggestedPromotionsLinkVisible","SuggestedPromotions","DefaultShoppingCartMobileItemViewOption","DefaultShoppingCartDesktopItemViewOption","duplicateRepeatDialogComponent","CouponIds","$v","Sk","_k","CO","Batch","BatchesQuantity","Serial","SerialNumbers","Default","_shoppingCartItemView","_uniqueItemID","InitItem","Batches","ShoppingCartItem","IsNumberSelectionEnabled","AllNumbers","LoadNumbers","DisableFormFields","IsItemCodeFieldDisabled","IsFieldDisabled","BaseEntryID","Permissions","IsAllowItemCodeEditing","IsQuantityFieldDisabled","CustomValues","IsVatLiable","GetCurrentCustomerWithDetails","CustomerVatGroup","SalesPersonItems","GetSerialNumbers","Warehouse","GetBatches","IsPriceRelatedFieldDisabled","IsAllowPriceEditing","GetSingleItemWithTotals","CalculateTotals","CalculatePriceAfterVat","CalculatePriceAfterDiscountValue","CalculatePriceAfterDiscountAndVatValue","PriceAfterVat","GetVatMultiplier","PriceAfterDiscount","PriceAfterDiscountAndVat","CalculateDiscountPercent","CalculateTotalAfterVAT","DefaultVatGroupCode","VatPercent","shoppingCartItemNumbersDialog","AllowManualInput","IsNegative","NumberItems","bO","CalculateTotal","nm","SerialNumber","OnChanged","Ik","Ek","_O","IsSortDescending","Sort","SortIndex","selectedItems","SelectedNumbers","SerialNum","InitSortContextMenu","sortByContextMenu","SearchNumber","wk","Barcode","SortByItems","Tk","Mk","Nk","Fk","Lk","Vk","DO","ResetValidationGroup","InitMaxQuantity","selectItemNumberDialog","jk","AddItemToList","ShowNumberAlreadyAddedMessage","AddToList","IsNumberInList","ShowNumberIsNotIncludedMessage","messageBoxDialog","Hk","Wk","kk","$k","OO","HandleItemDragEnd","proccessShoppingCart","loading$","Loading","pickout$","PickoutItemID","HandleKitChildrenVisibilityChange","shoppingCartItemsList","CheckOpenedState","IsVisible","updateShoppingCartItemsVisibility","IsKitChild","GetTopLevelKitParent","GetAllDescendantsOfParentItem","IsItemTopKitItem","IsKitParent","GetKitItemNestingLevel","ReorderedRowUniqueIds","SaveShoppingCartItemsOrder","reorderShoppingCartItems","removeItem","OnItemDuplicate","OnItemEdit","InvalidItems","OnQuantitiesValidation","WarehouseName","zk","Yk","TO","ShowVatPercent","OnEditSummary","Xk","nW","wO","ForceNavigation","ShowTotalOnTopOption","Ox","tW","aW","Promotion","IsUseFeaturedPromotionsHints","EffectCategories","sW","mW","dW","FilterSuggestedPromotions","FeaturedPromotions","SuggestionType","RelevantPromotions","pW","yW","PO","gW","AO","bW","RO","IsDesktopExpanded","ProcessQueryParams","IsEnableAllPromotionItemsButtonVisible","Yn","NavigateToSuggestedPromotionsComponent","DragAndDropButtonLabel","ShowCloseButton","CW","OW","MO","DW","PW","FO","LoadWishlistItems","WishlistItems","shoppingCartDescription$Subscription","shoppinCartService","WishlistViewOption","GetWishlistItems","notifyWishlistRemoveAll","EW","RW","FW","jO","Performances","SaleTargetDimension","SaleTargetsLoaded","SaleTargetPerformanceEntities","GoalValue","PerformanceItems","GetTargetName","DimensionName","ActualValuePercent","TargetValuePercent","TotalTargetMeasure","TargetTotal","ActualTotal","LW","GW","VO","clearTimeoutInstance","loadTimeoutInstance","PreviousTotal","CurrentTotal","IsBySalePeriod","PartName","TooltipCurrentPeriodName","TooltipCurrentPeriodValue","IsShowPrevious","TooltipPreviousPeriodName","TooltipPreviousPeriodValue","GetSalesAnalysis","BW","$W","BO","GetLatestDocuments","zW","YW","GO","XW","n5","UO","t5","s5","kO","a5","p5","WO","GetBalanceLate","BalanceLate","d5","zO","h5","KO","IsLicensedForB2B","CustomerSelected","HasNoSaleTargets","LoadSaleAnalysis","f5","g5","y5","QO","S5","v5","I5","XO","b5","T5","ZO","FocusBarcode","barcodeInput","focus","O5","A5","JO","CustomField","R5","H5","eT","InitValue","OnFieldChange","F5","U5","tT","Fieldset","IsCustomerView","IsItemView","DefaultValue","OnFormChange","G5","K5","nT","$5","Y5","oT","CustomFieldLocations","X5","t6","rT","e6","r6","i6","s6","aT","customFieldEndpoint","AllCustomFields","CustomFields","FilterCustomFields","CustomFieldsetLines","om","a6","u6","lT","CustomFieldTypes","c6","f6","cT","m6","S6","dT","y6","b6","mT","C6","T6","fT","InitFiles","MaxFileSize","NewFile","Attachments","Size","IsDisplayedAsImage","CreatedDate","IsAllowDeleteForcely","IconStyle","hT","deleteAttachment","getAttachment","Uploading","uploadAttachments","O6","R6","A6","M6","gT","rm","N6","H6","ST","F6","G6","vT","DistributionCategories","B6","z6","CT","distributionCategoryEndpoint","DistributionCycleCategories","SelectedCategories","DistributionCategoryID","W6","Q6","IT","K6","Z6","_T","Y6","o9","t9","DistributionDate","DaysStep","GenerateDistributionCycleDates","UiComponentService","n9","s9","TT","a9","u9","ET","c9","f9","PT","m9","S9","AT","GetDocumentFiles","FullName","FileExt","GetDocumentFile","y9","I9","NT","IsShowLastSaleInfo","GetLastItemSale","LastItemSale","b9","T9","MT","generateDialog","NewDatesGenerated","LT","OT","O9","E9","Vb","Bb","_F","_E","tP","HE","MP","Cm","im","Sm","Kk","Zk","HO","lm","AW","Hx","jx","wx","ze","dm","Bm","Lm","ZT","ow","vS","KT","Cx","Dm","md","iS","LO","kb","NF","qb","eH","KF","hD","SD","E3","NH","lI","dI","gI","fI","KH","PI","Vj","AI","E_","T_","AB","z_","k_","fG","X_","Q_","wG","tD","J_","GG","TI","DI","xj","mD","uD","u3","nO","eO","lU","rU","B_","j_","rG","sD","rD","YG","sO","iO","CU","jI","FI","v1","Y1","XI","j1","z1","Yb","yH","Jb","iI","CH","oI","QI","WU","hO","ek","cr","zh","bI","aj","xI","__","CB","b_","np","Qy","rp","YC","lN","qE","u0","i0","pA","sA","nA","q0","M0","DR","GR","YR","W0","eR","FR","KC","qC","EO","lW","TA","xR","E0","hR","N4","w4","fk","oW","NO","ad","Vu","Vf","ug","vg","US","$R","V0","v0","oN","_P","vP","fP","EP","kP","bA","SW","hg","_g","ig","pO","uO","MU","Jc","eu","lf","nC","zm","Sw","Km","xD","ID","B3","A_","L_","YB","PR","qA","WD","GD","E2","iL","fL","_L","qP","xk","yA","uR","iR","v_","y_","h_","IO","Vg","Pd","uc","dc","_0","i4","p4","I4","e4","S4","WA","MA","VA","cd","m","HS","AS","xp","nh","dS","qf","AE","wo","KS","Pm","Bk","Pk","XD","KD","K2","yE","tE","aE","uE","Yw","Gw","Hw","mb","Sb","xb","QN","yN","YS","TS","gM","aM","vL","hd","ck","NN","wN","UM","HM","fb","jN","CM","dM","kN","tM","Lf","Wl","Au","d_","tB","m_","e_","vV","n_","MV","XV","$V","UV","jV","TD","Q3","PD","t2","jD","d2","LD","C2","jb","Ul","bf","pT","uT","d6","sT","iT","Z5","Q5","k5","j5","N5","w5","AL","BL","Lb","KL","Hb","YO","py","Bd","by","Ay","jd","wy","yy","Yg","Fy","Uy","HW","UW","KW","ZW","o5","l5","m5","qO","Kv","I6","w6","yT","j6","xT","bT","q6","DT","wT","d9","RT","v9","_9","w9","P9","R9","N9","M9","F9","H9","V9","j9","A9","L9","B9","sidebarActionSubject","G9","allowedCredentialTypes","isRouteAllowedForCurrentUser","routeConfig","appConfigService","AppConfig","OnGetDefaultRouteParams","uiService","url","HT","VT","k9","jT","BT","z9","router","navigateByUrl","$9","K9","Q9","Le","ta","Qv","U9","X9","canDeactivate","IsExternal","q9","GT","Ft","IsEnableTermsOfUseMenu","Kt","hn","ei","_s","Yv","Zv","Jv","ex","tx","nx","ExternalLink","GetExternalMenuItems","J9","Zo","ez","tz","nz","oz","rz","Xv","iz","sz","lz","queries","links","DimensionValues","Currencies","qv","pl","Initialize","UnsubscribeAll","ReloadMenuItems","OnGetGlobalDataSources","SetDataSources","checkIsEditMode","TermsAccepted","Clear","Y9","Icon","Z9","AppConfigService","getModuleNameByInstance","StateType","FocusOnMe_V","FocusOnMe_C","Sections_V","Sections_C","OnGetCustomComponentStateName","LoadState","OnInitState","DoValidatorReset","validationGroups","ChangeDetector","destroyed","IsCustomBuild","ComponentStateName","IsNeedSaveState","SaveState","GoBack","OnInputPropertiesChanged","OnPropertiesChanged","subscribtionOnEntitySaved","OnEntitySaved","OnExternalEntitySaved","subscribtionOnEntityLoaded","OnEntityLoaded","OnExternalEntityLoaded","subscribtionOnReloadComponent","OnReloadComponent","ReloadComponent","RunDestroyCycle","RunInitStartCycle","RunInitFinishCycle","RunInitStartCycleInternal","RunInitFinishCycleInternal","RunDestroyCycleInternal","UnsubscribeRegisteredSubscriptions","OnStartInitCycleInternal","OnStartInitCycle","SubscribeEvents","InitState","OnInitDataSources","ExecuteInitComponentHandler","InitFocus","OnInitComponentFinishedInternal","IsUseFinishCycleChangeDetection","DetectChanges","OnInitComponentFinishedAfterDetectInternal","CustomizeComponentsVisibility","CustomizationService","SetComponentCustomizations","Grids","toArray","changes","UnsubscribeEvents","OnDestroyComponentInternal","FocusOnMe","IsAutoFocusEnabled","Sections","LockControls","ResetValidation","AcceptGridChanges","SetLastSavedEntity","status","brokenRules","validator","registeredSubscriptions","registeredInitComponentHandlers","GetRowCount","_disposed","GetGridHeightRelativeToPage","element","offsetParent","offsetHeight","offsetTop","bottom","defaultView","getPropertyValue","match","totalCount","GetGridRowContextMenu","appendChild","elementAttr","class","CreateContextMenuComponent","_dataSource","_showAddButton","_gridToolbarComponent","_addButtonText","AddButtonText","_title","_addButtonNavParams","AddButtonNavParams","SetLoadPanelState","_isUpdateScrollPosition","SetScrollPosition","AfterInit","CreateGridToolbarComponent","_subscriptions","onContentReady","RefreshGridHeight","columnOption","visibleIndex","groupIndex","showInColumnChooser","cellTemplate","GridRowContextMenu","search","enabled","cssClass","allowResizing","allowReordering","resolveComponentFactory","containerRef","createComponent","IsAutoHeight","getScrollable","scrollWidth","StartExtraButtonsTemplate","EndExtraButtonsTemplate","previousSibling","tagName","AddButtonNavPath","before","_gridToolbarRef","destroy","read","Fields_V","Fields_C","SetFieldDefaultValues","SetDefaultFieldsLabels","IsDuplicateMode","StartNewEntity","UnexpectedMessage","OnIsAllowDuplicate","ContextMenuDefault","OnDuplicateInternal","Toolbar","ToolbarSettings","PageComponentName","Share","GetRenderedTemplate","OnGetEndpoint","OnEntityValidate","EntityValidations","toPromise","all","NotifyEntityLoaded","OnEntityDeleted","OnEntityPrepareForSave","ValidateEntity","OnEntityConfirmSave","OnDoSave","DeleteEntity","Delete","ReflectEntityDeleted","OnEntityNew","SubscribeOnEntityChanges","OnEntityDuplicated","OnSetDefaults","GetEntityObjectName","OnEntityInitObjectName","GetDefaultEntityObjectName","TargetDocEntry","IsValidEntity","GetHistory","_fieldsCount","_fieldsNames","GetEditorControl","ShowAsWindowOnMobile","BindHandler","_showAsWindowOnMobile","OnShowAsWindowOnMobile","OnIsDirtyDisabled","_isDirtyEntity","_isDirtyCustom","IsRunCycle","pageHistory$Subscription","PageHistory$","Component","GetTitle","UpdateHistoryItem","onFilterPanel$Subscription","OnClearFilter","OnReadyFilter","m_IsDialogVisible","m_IsDialogRendered","onScreenSizeChanged$Subscription","onEntityChange$Subscription","IsCurrentRouteWindow","InitToolbarSettings","EntityOriginal","EntityMode","OnInitEntity","OnInitTitle","OnInitSubtitle","OnInitContextMenus","OnInitViewModes","OnInitDefaultViewModeID","SetToolbarTitle","SetToolbarButtonsVisibility","BackButtonClick","GetContextMenus","ContextMenuTitle","OnGetContextMenuTitle","ViewModes","GetViewModes","CloseButtonClick","OnShareButtonClick","ShareService","OpenShareDialog","OnGetRenderedTemplate","OnGetToolbarSettings","GetDefaultOnGetRenderedTemplate","Subtitle","GetSubtitle","SetHistoryItemTitle","ShowMenuButton","ShowBreadcrumb","IsShowAsFullScreen","HistoryLength","HasHistoryForWindow","IsAllowNotifications","_showDialogAsBottomSheet","m_DialogCompletedHandler","m_DialogCanceledHandler","InitDialog","ShowDialog","HideDialog","OnClose","CloseWindow","GetLastPageBodyElement","SetPagePreviewState","OnGetHistoryCustom","OnGetHistoryInternal","decorators","IsRaw","m_store","loadMode","ImplementLoad","onLoaded","byKey","ImplementByKey","customLoadAction","ShapeResponse","ActionName","customGetAction","ImplementTotalCount","Count","m_DataSource","Store","pageSize","isLoaded","m_DataStore","IsLoaded","GetByValue","update","ImplementUpdate","ImplementRemove","ImplementInsert","__rawData","Search","SearchFields","searchExpr","desc","DistinctField","skip","take","DLOSearch","DLOSearchFields","DLOSort","DLOIsSortDescending","DLOSkip","DLOTake","DLOComplexFilter","DLODistinctField","EntryIDs","NotificationTemplateID","DeliveryOption","Resolve","Reject","body","gridEl","gridParent","AllowCustomization","AllowAdvancedFilters","EntityTypeName","currentRowIndex","_entityTypeName","IsColumnExists","IsRowExists","cellValue","saveEditData","hasEditData","cancelEditData","refresh","getSelectedRowKeys","rowData","editCell","GetColumn","columns","NumberRate","NumberPercent","customizeExcelCell","onAfterExporting","beginUpdate","endUpdate","onExporting","selectedRowsOnly","numFmt","alignment","texts","exportTo","IsRowDeletable","IsNewRowCreatable","addRow","getCellElement","MapEventsEdit","BeforeEdit","AfterEdit","AfterEditPromise","AfterEditAsync","setCellValue","ColumnEditHandler","MapEventsOptions","that","QueryEditCell","QueryShowCell","editing","form","customizeItem","ColumnCustomizeItemHandler","defaultSetCellValue","RaiseDependantEvents","allowAdding","Function","IsRowEditableOrUpdatable","allowUpdating","allowDeleting","IsRowEditable","editRow","getRowIndexByKey","parentType","mode","editorOptions","readOnly","tabIndex","cancel","newColumnIndex","prevColumnIndex","newRowIndex","prevRowIndex","rows","promise","SetColumnsCaption","fullName","columnCount","formItem","InitGridGeneral","InitGridEditable","InitGridReport","InitGridLines","allowColumnReordering","allowColumnResizing","stateStoring","subscribtions","onInitialized","onRowClick","observed","focusedRowEnabled","SetColumnCaption","CurrentEntityTypeName","_resourceService","putOnlyUsedFonts","addFont","setTextColor","GetPrintHeaderInfo","setFontSize","setFont","GetTextWidth","internal","scaleFactor","ReverseHebrewText","GetPrintLogoPath","addImage","jsPDFDocument","topLeft","textColor","borderColor","borderWidth","drawLeftBorder","drawRightBorder","backgroundColor","groupSummaryItems","parseValue","lookup","customizePdfCell","pdfCell","output","OnGetPrintTitle","OnGetFilterDescription","innerHTML","fontSize","fontWeight","whiteSpace","clientWidth","removeChild","M4UConfig","customBuild","columnHidingEnabled","buttons","sorting","paging","OnRowClick","onEditingStart","OnEditingStart","onInitNewRow","OnInitNewRow","onEditorPreparing","OnEditorPreparing","onFocusedCellChanging","OnFocusCellChanging","onCellPrepared","OnCellPrepared","onOptionChanged","OnOptionChanged","onRowPrepared","OnRowPrepared","onRowValidating","OnRowValidating","hoverStateEnabled","visibleWidth","_popup","IsRowsExists","CreateNewRow","dataSource","loadOptions","getCombinedFilter","_Component","InitExtender","_Mode","_AllowCustomization","_AllowAdvancedFilters","_Name","InitGrid","OnGridClick","DestroyGrid","vcRef","_data","componentView","UserInfos","Components","Endpoints","Services","useClass","useValue","loadM4UConfig","_m4uConfig","projects","moduleName","build","builds","major","minor","Resources","_resources","CustomResources","_customResources","deploymentPort","GetDeploymentPort","deploymentLocation","GetDeploymentLocation","IsDevelopmentPort","protocol","port","hostname","GetDeploymentLocationAPIURL","_appConfig","S","appConfig","ProjectName","loadResources","mergeConfigs","OnGetHomePagePath","RoutesWithEmptyLayout","RoutesAnonymous","RoutesProtected","IsHomePage","EntryComponents","getRoutes","SupportLegacyDisplaySizes","OnLogoutApplicationAsync","OnGetAppLoginExtensionLinks","setMenuModuleName","OnGetMenu","OnGetNavbarItems","GetLists","GetInjectableComponentOptions","OnLoginPage","ShareableEntities","flat","menu","cordova","uid","loadFile","DataSourceName","CredentialType","ReturnURL","DeliveryOptions","credentialID","_notificationReadSubject","ignoreLoadingBar","set","notificationID","MID","CreateBottomSheetInstance","ContentPortal","ResolveContent","ContentParams","ShowBottomSheet","ListParams","MenuItems","componentFactoryResolver","ViewContainerRef","IsDirty","resourceService","OpenMessageBox","sysEvents","CloseMessageBoxSubject","GetComponentCustomizations","GetSeparatedGridCustomizations","HideGridColumns","IsNeedToHideElement","ComponentsCustomizations","FilterCustomizations","Columns","GetRelevantCustomizations","Logic","HideValues","IsHide","ReadOnly","ValidationFunction","validationCallback","OnFieldValidation","rule","FieldsCustomizations","User","CurrentUserID","Hide","HideOnDesktop","HideOnMobile","columnResizingMode","columnAutoWidth","dateSerializationFormat","showBorders","showRowLines","renderAsync","savingTimeout","customSave","selectionFilter","searchText","filterType","filterValues","filterValue","sortOrder","sortIndex","customLoad","columnChooser","headerFilter","container","scrolling","preloadEnabled","useNative","excelFilterEnabled","remoteOperations","filtering","useIcons","selectTextOnEditStart","isMobile","colCountByScreen","searchPanel","onToolbarPreparing","totalItems","getView","_popupContainer","_initializePopupContainer","render","my","offset","isExpanded","onRowExpanded","expandRow","collapsedItems","getDataSource","customizeColumns","allowSorting","allowFiltering","valueExpr","displayExpr","minWidth","allowGrouping","onContextMenuPreparing","allowHiding","onItemClick","groupCellTemplate","showColumnChooser","RemoveItem","clearFilter","getController","showHeaderFilterMenu","SetFloatingButtonsDefault","valueChangeEvent","inputAttr","autocomplete","onFocusIn","OnFocusIn","onKeyDown","OnChangeInputDirection","validationMessageMode","stylingMode","addEventListener","autoResizeEnabled","step","code","stopImmediatePropagation","pickerType","displayFormat","useMaskBehavior","calendarOptions","showTodayButton","dropDownOptions","onOpened","GetDateBoxTodayButton","SetTodaysDate","OnCloseDateBox","onClosed","removeEventListener","placeholder","searchTimeout","ShowBottomSheetList","noDataText","showSelectionControls","multiline","maxDisplayedTags","applyValueMode","pageLoadMode","activeStateEnabled","showTitle","showCloseButton","dragEnabled","hideOnOutsideClick","animation","duration","resolveLabelOverlapping","palette","legend","weight","tooltip","horizontalAlignment","argumentAxis","overlappingBehavior","rotationAngle","_options","showIndicator","showPane","shading","shadingColor","showArrowIcon","validationRules","floatingActionButtonConfig","select","ctrlKey","dir","_popupContentId","getMinutes","isDesktop","showAsBottomSheet","SearchExpr","_saveValueChangeEvent","_isEnabled","_field","_savedEntity","Deactivate","Yes","Cancel","Done","Select","Back","CheckState","systemOptionsService","getSystemOption","getSystemOptionAsBoolean","m_CompanyInfoDict","m_bIsFrameworkInitialized","resources","ResponseCode","createEvent","initEvent","dispatchEvent","systemEndpoint","GetCompanyInfo","GetSystemOptions","ThousandsSeparator","InitCompanyInfoDictinary","setOptions","InitLanguage","InitializeDevExpress","InitializeInjectableComponentsOptions","devExpress","defaultLanguage","rtlEnabled","forceIsoDateParsing","InitDictionaries","NumberGeneral","Params","sysEventsService","InitializeFramework","_languageSubject","IsSelectedLanguageLoaded","frameworkService","_localStoragePrefix","apiGatewayService","MigrateOldStorage","GetPrefixedKey","setItem","getItem","startsWith","getParams","GetSessionID","NavigateByUrl","goToLoginPage","RegExp","ClientFingerprint","clientFingerprintService","GetClientFingerprint","LoginEndpoint","Login","CheckResult","OnLoginSuccess","CheckResultMessage","OnLoginBySessionFailed","IsFrameworkInitialized","SessionService","SaveSessionCredentials","ClearSessionCredentials","SetSession","routeHistoryService","StartSaveHistory","Logout","GetUrl","pathname","activatedRoute","snapshot","parent","queryParams","getParamValue","GetQueryParamsInternal","GetQueryParamsWithoutPrefixes","GetQueryParamsPrefix","params","FixDeploymentLocation","RefreshExpiredSessionTimeout","GetUrlTree","GetCleanRoutes","config","getParam","shift","GetPagesPrefix","routerState","root","firstChild","createUrlTree","outlets","primary","serializeUrl","toISOString","test","_notificationUnreadSubject","_notificationsSubject","LoadPushMessagesUnread","_notificationReadSubscription","pushMessageEndpoint","NotificationRead$","_notificationUnReadSubscription","GetPushMessagesUnread","Item1","Item2","_timerId","clearInterval","Pages","login","logout","credentials_activity_status","notificationshistory","notification_dispatches","notification_servers","notification_templates","notifications","system_options","credential_login_history","request_history","credentials_report","credentials_creation","data_views","remote_request_history","NotificationViewComponent","PrintBoxDialogComponent","SignBoxDialogComponent","ImageBoxDialogComponent","PhotoBoxDialogComponent","PasswordManageComponent","CredentialsActivityStatusComponent","NotificationsHistoryComponent","PreviewDialogComponent","NotificationDispatchComponent","NotificationDispatchListComponent","NotificationServerComponent","NotificationServerListComponent","NotificationTemplateListComponent","NotificationTemplateComponent","HtmlBoxDialogComponent","NotificationTestDialogComponent","NotificationPreviewDialogComponent","SystemOptionsComponent","AddSystemOptionDialogComponent","BarcodeBoxDialogComponent","CredentialLoginHistoryComponent","RequestHistoryListComponent","RequestHistoryComponent","RemoteRequestHistoryListComponent","RemoteRequestHistoryComponent","WelcomeUserDialogComponent","HistoryViewComponent","SystemCredentialsComponent","SystemCredentialsCreationComponent","WelcomeMessageConfigDialogComponent","DataViewListComponent","MenuButtonListComponent","ShareDialogComponent","Lists","Languages","NotificationDeliveryOptions","NotificationDispatchDeliveryOptions","NotificationTemplateEditingModes","UserCreationOptions","WelcomeDeliveryOptions","NotificationStatuses","NotificationPredefinedSmtpServers","SMTPServer","SMTPPort","SMTPUseSSL","NotificationPredefinedSmsServers","SMSEndpoint","SMSToken","SMSEndPointIsInforU","MFAMethods","ExportMenuItems","PopupShowStatuses","InfoUTypes","SystemOptions","DataType","SectionName","UserLoginStatuses","IsSuccessStatuses","HistoryEventTypesEnum","PageTypes","LogLevels","Translations","lblLanguage","lblUserName","lblPassword","titleLogin","btnLogin","btnLogout","btnChangePassword","btnContactUs","btnRecoverPassword","lblSaveCredentials","titleLogout","titleLogoutLong","titleLogoutLast","titleSessionExpiredTitle","titleSessionExpired","titleChangePasswordTitle","titleChangePassword","titleChangePasswordTitle2","titleException","titleExceptionLong","titleComingSoonTitle","titlePasswordChanged","titleIdentification","titlePasswordEntry","titleRecoverPasswordTitle","titleWelcomePasswordTitle","titleRecoverPassword1","titleRecoverPassword2","titleRecoverPassword3","titleRecoverPassword4","titleWelcomePassword2","titleWelcomePassword3","btnReEntry","genOK","genYes","genNo","genCancel","genNoData","genPrint","genSign","genReset","genTakePhoto","genSavePhotos","genDownload","msgSignHere","msgSignatureRequired","msgPasswordsDontMatch","errorNetwork","errorSessionExpired","errorUserInvalid","errorNotInitialized","errorUnexpected","errorUnauthorized","errorPasswordExpired","msgFinishEditing","errorUserNameNotFound","errorIsNotExistsPhoneAndEmail","errorSessionIsFrozen","lblDay1","lblDay2","lblDay3","lblDay4","lblDay5","lblDay6","lblDay7","lblDay1s","lblDay2s","lblDay3s","lblDay4s","lblDay5s","lblDay6s","lblDay7s","msgSuccess","msgNotPerformed","lblTimes","lblUser","btnCancelDocument","lblBy","titleCreatedBy","titleCreated","titleCreatedAt","titleAgo","lblAgo","lblSearch","lblCloseSearch","lblColumnChooser","lblColumnHiding","lblShowGridFilter","lblHideGridFilter","lblExcel","lblPdf","lblViewList","lblViewGrid","lblDisplayUserName","lblLastUseDate","lblLastUseBefore","progressIndicator","lblUpdated","lblNoSorting","lblVersion","lblDateIsNull","lblDateApproximate","f702","f703","f704","f705","f706","f707","f709","f710","f711","f712","f713","f714","f715","f716","f717","f718","f720","f721","f722","f723","f724","f725","lblOldPassword","lblNewPassword1","lblNewPassword2","lblRecoveryType","lblRecoveryPhone","lblRecoveryEmail","btnSendNotificationDispatch","btnSendRecoveryCode","btnCheckUserName","btnBackToLogin","lblRecoveryToken","btnResend","btnSaveChanges","btnGeneratePassword","btnCreateCredentials","btnUnlockUser","lblDisplayUsername","lblDisplayUserDescription","lblCredentialsNotExist","lblPendingWelcome","titleUserInformation","errorMaxSizeUploadError","msgFileSizeRestriction","btnSelectFiles","btnMakePhoto","lblAttachFileSize","lblFilters","lblAt","lblObjectName","lblIsOverride","lblValidation","lblDViewsDBDuration","lblXViewsDBDuration","lblCheckPerformance","lblValidateViews","lblViewError","lblLoginOTPSendMethod","lblLoginOTPEmail","lblLoginOTPPhone","lblLoginOTPOTP","lnkLoginByOTP","msgNotificationSent","btnLoginOtpSendOtp","lnkLoginByPassword","lblApply","lblTaxNumber","lblIsActive","lblEmail","lblPhone","lblIsPendingWelcome","lblIsOnline","lblIsLockedOut","lblCreateCredentials","lblCredentialFilter","msgRouteNotFound","btnReload","lblHideColumn","lblShowHiddenColumns","lblName","lblDescription","msgLoading","lblSentDate","lblSentBy","lblEntryID","lblFromAddress","lblFromDisplayAddress","lblAddress","lblSubject","lblMailBody","lblDeliveryOption","lblSendNotificationBy","lblUsernameCreationOption","lblStatus","lblToAddress","lblCCAddress","lblBccAddress","lblFailureDescription","lblNotificationTemplate","lblFrom","lblUntil","lblAdd","lblClear","lblCompactMode","lblSessionAlmostExpiredTitle","lblSessionAlmostExpiredPrompt","lblSessionExpiredTitle","lblFirstDate","lblLastDate","lblSessionExpiredPrompt","lblNotificationContent","lblGeneral","lblOptions","lblCustom","lblMFACode","titleMFACodeOnEmailSent","titleMFACodeOnPhoneSent","lblMFAMethod","Month_1","Month_2","Month_3","Month_4","Month_5","Month_6","Month_7","Month_8","Month_9","Month_10","Month_11","Month_12","lblExport","lblCredentialType","lblIsRestrictByIP","lblIsExcludeFromMFA","lblIPRangeStart","lblIPRangeEnd","lblIPErrorMessage","msgIPRangesIsEmpty","msgIPRangeIsEmpty","msgPasswordMinLength","msgPasswordMinCountDigits","msgPasswordMinCountLetters","msgPasswordComplexityRequirement","errorOnlyImageAllowed","btnClose","lblPhoto","lblDragAndDrop","errorRequiredMessage","titleDuplicate","lblAllNotifications","lblSMTPServer","lblSMTPPort","lblSMTPUserName","lblSMTPPassword","lblSMTPUseSSL","lblSMSEndpoint","lblSMSUserName","lblSMSPassword","lblSMSToken","lblSMSEndPointIsInforU","titleTemplateInformation","titleEmailInformation","lblFromEmail","lblFromEmailDisplay","titlePhoneInformation","lblNotificationServer","lblFromPhone","lblSMSBody","titlePushMessagesInformation","lblPushMessageBody","lblHTMLBody","btnSave","titleDelete","lblUseDefault","lblNoUnreadMessages","lblTo","lblPushMessageContent","lblSmsMessageContent","lblIsAutomatic","lblSystem","lblPopupShowStatus","lblEmailContent","btnShowInEditor","titleLeavePageConfirmation","btnLogOff","btnStayConnected","btnGoToHomePage","lblReadDate","msgDeleteNotificationTemplateQuestion","lblNotificationServerWrong","msgInvalidEmail","btnTestServer","lblMIDIsMissing","lblEnterMID","btnShowPreview","lblIsServer","lblIsClient","lblModuleName","lblLogin","lblFramework","lblOption","lblValue","lblSectionName","lblAddOption","msgOptionAlreadyExists","msgOptionEmpty","lblBadLogin","msgRemoveOption","titleEmailConfiguration","titleSMSConfiguration","msgDeleteNotificationServerQuestion","msgNoData","lblEmailHeader","lblConfigure","lblDefaultFromAddressForInforU","lblDefaultFromAddressForUnicel","lblInforUFromPhoneValidationTooltip","lblNotifications","lblMinimize","lblShowMore","titleWhatsAppInformation","lblWhatsAppBody","lblWhatsAppApiKey","lblWhatsAppEndpoint","titleWhatsAppConfiguration","titleNotificationDispatchList","titleNotificationServerList","titleNotificationTemplateList","lblPoweredBy","titleChooseOption","titleWebAPIAllowedIPs","lblIpAddress","lblLoginDate","lblPrint","lblDateFrom","lblDateTo","lblDate","msgCouldNotStartVideoError","msgCameraPermissionDenied","lblCameraModeVideo","lblCameraModePhoto","titlePreview","msgLogoutQuestion","lblGroupPanel","lblExpandAll","lblMultiEmailError","msgPhotoMinCountError","msgPhotoMaxCountError","lblRestoreDefaultView","lblStartDate","lblDuration","lblController","lblAction","lblMethod","lblStatusCode","lblRequestData","lblQueryString","lblBody","lblResponse","msgTextCopied","lblCopy","btnGoToLoginHistory","btnGoToRequestsHistory","btnManageCredentials","btnGoToCredentialsReport","btnWelcomeUser","lblTestFromPhone","lblHistory","lblNewValue","lblOldValue","lblFieldCaption","lblDocumentCaption","lblHistoryLineAdded","lblHistoryLineRemoved","lblHistoryLineNumber","lblHistoryNotFound","lblHistoryChangeAdded","lblHistoryChangeRemoved","msgLoadingPDF","lblImpersonatedBy","lblIsUserCustomTemplate","msgIsUserCustomTemplateEnable","btnEnableEditable","btnDisableEditable","msgScreenSizeChangedRefresh","msgOrientationChangedRefresh","lblDeliveryMethod","lblNotificationDispatch","lblRecipients","lblPreview","msgRecipientsAreEmpty","lblCreatedBy","btnCancelNotifications","lblCancelNotificationsPrompt","lblNotificationMessage","lblIsDeleted","lblShareMethodEmail","lblShareMethodSms","lblShareMethodWhatsapp","lblShareMethodPrint","lblShare","lblEntityType","lblPageName","btnSend","lblChooseTemplate","lblShareMethodDownload","lblShareMethodShare","lblUploadCrystalTemplate","lblNotificationTemplateEditingMode","msgShareNotificationTemplateNotFoundError","btnShare","msgNotificationTemplatePrefixNotFoundError","lblPrefixBody","lblIsSharePdf","lblFileNameFormat","lblEntityBindingPageType","titleEntityBindingInformation","msgNotificationTemplateFileMissingError","lblSharedFile","msgNotificationTemplateEmptyError","lblIsSupportEmail","lblIsSupportSMS","lblIsSupportWhatsapp","lblIsSupportPush","lblIsSupportSharing","lblIsShareByEntities","ttlLogs","lblObjectType","lblObjectID","lblLevel","lblNotAssigned","msgNotificationSentTo","lblHeader","m_Dictionaries","m_CustomDictionaries","m_Lists","OverrideModuleName","LoadFieldCustomizations","LoadComponentCustomizations","GetEntitiesResources","SelectedLanguages","GetLanguagesList","EnsureInitialized","getResourceValue","StringMap","Old","tryGetValueFromDictionaries","GetValueFromPath","sortListfunc","languages","_pageHistorySubject","_historyItemsSubject","navigationId","_history","OnNavigateDefault","onPopState","OnBrowserButtonClick","events","GetCurrentRouteWithUrl","getCurrentNavigation","IsWindow","SaveHistoryItem","ShareHistory","GoBackFromWindow","NavigateItem","navigatorService","ClearPagesState","ClearPageState","route","onScreenSizeChanged","showMessageHandler","_currentOrientation","breakpointObserver","observe","processRefreshMessage","_currentScreenSize","isMatched","deviceType","matchMedia","matches","sessionStateChangedSubject","m_Session","DisplayUserDescription","m_UserInfoDict","m_DataSources","initAppSubscription","notificationService","Started","Ended","logoutAppSubscription","Stop","sessionExpiredTimeoutHandler","sessionAlmostExpiredTimeoutHandler","AlmostExpired","AutoEndSession","Expired","shareEndpoint","GetNotificationsTemplates","_notificationTemplates","GetNotificationTemplatesByPageAndEntity","CreateInstance","PageName","ShareEntityType","_sidebarSubject","_sidebars","CreateSidebarInstance","SidebarComponentOptions","SidebarPinned","Success","_onEntitySavedSubject","_toolbarReloadSubject","_selectedRouteChangedSubject","_reloadMenuItemsSubject","_menuPositonSubject","_filterPanelSubject","_pageSidePanelStateSubject","_pagePreviewStateSubject","_openMessageBoxSubject","_closeMessageBoxSubject","_breadcrumbSubject","_defaultNavigationSubject","_loadPanelSubject","_loadingSubject","_dialogShownSubject","fileName","systemOptions","CloseMessageBox","ShowMessage","GetNotifyOptions","closeOnClick","closeOnSwipe","GetNotificationTop","contentTemplate","ExecuteGetRequest","ExecutePostRequest","ExecuteDeleteRequest","http","post","GetParams","get","PrepareQueryParams","headers","GetHeaders","reportProgress","context","responseType","PrepareQueryParamsInternal","ConvertToServerDate","UTC","getSeconds","standaloneApplicationApiUrl","prototype","ToDate","IsToday","Time","GetDateApproximateInternal","IsSameDate","IsHasTime","floor","setDate","MapObject","GetNewInstance","CloneObject","charCodeAt","imul","padStart","Uint16Array","Uint8Array","byteLength","String","fromCharCode","buffer","TextEncoder","encode","fromCodePoint","ConvertToBase64","FileReader","onloadend","result","Buffer","readAsArrayBuffer","ConvertToBlob","DownloadFile","revokeObjectURL","IsObject","StringifyObject","readAsDataURL","XMLHttpRequest","overrideMimeType","send","responseText","deep","dateParser","Proxy","IsArray","DeepProxy","deleteProperty","SearchTree","getResponseHeader","readyState","Map","_reISO","_reMsAjax","FilterTree","declarations","exports","Yo","production","version","CreateSections","OptionName","CurrentOption","InOut","GetElementID","scrollIntoView","behavior","block","p","getElementsByTagName","attributes","DeleteOption","SectionInfo","SectionIndex","IsGeneral","I","animations","ModulesDataSource","IsServer","IsClient","DefaultIsClient","InitModulesDataSource","InitSystemOptions","addGeneralOptionDialog","AddGeneralOption","AddCustomOption","systemOptionsList","ShowOption","GeneralOptions","ValueBoolean","ValueNumber","CustomOptions","systemOptionsEndpoint","IsDeleted","GetOptions","GeneralOptionSettings","CustomSections","IsShowPasswordTooltip","PasswordComplexityLen","PasswordComplexityMinChars","PasswordComplexityMinDigits","TextBox","OnShowPasswordTooltip","expandedCard","IsOpened","childElementCount","ShowAsUsualOnMobile","ShowContextMenu","opacity","Group","IsGridEditable","WindowPath","WindowParams","handler","fileLoader","ReturnDataType","ResetInput","readAsText","_mediaItems","SetPreview","StartVideo","IsCameraStarted","StopVideo","VideoStream","PreviewMediaItem","IsPreview","video","pause","srcObject","getVideoTracks","stop","permissions","query","CanUseCamera","PreviewWidth","GetClientWidth","PreviewHeight","GetClientHeight","mediaDevices","getUserMedia","facingMode","ideal","MaxWidthPx","MaxHeightPx","audio","VideoAspectRatio","getSettings","aspectRatio","VideoWidth","VideoHeight","play","TakePhoto","IsAutoSavePhotoAfterTake","OnSavePhotos","Recording","RecordInterval","RecordTimeSeconds","RecordTimeString","StartRecording","GetVideoBlob","VideoDataUrl","GetSafeUrlFromBlob","VideoBytes","MediaRecorder","IsVideoRecording","IsDialogVisible","preview","src","ImageBase64","thumbs","OnClosePreview","MinCount","MaxCount","IsVideoMode","bt","Image","Qt","getContext","onload","Tn","drawImage","canvas","toDataURL","_imageMimeType","ImageQuality","AddPhoto","GetNewMediaItemEntryID","GetVideoCover","ImageBytes","ondataavailable","start","onstop","onerror","bypassSecurityTrustUrl","setAttribute","currentTime","videoWidth","videoHeight","toBlob","GetClientBodyElementRect","SetClientSizes","ClientWidth","GetCanvasWidth","ClientHeight","fps","qrbox","QrBoxFunction","useBarCodeDetectorIfSupported","rememberLastUsedCamera","showTorchButtonIfSupported","formatsToSupport","showZoomSliderIfSupported","defaultZoomValueIfSupported","OnTextDecoded","OnResultDecoded","IsInititialized","DeviceIDs","StartHtmlQrCode","StopHtml5QrCode","html5QrCode","isScanning","deviceId","GetSavedDeviceID","Config","QrCodeSuccessCallback","ReaderElement","CurrentDeviceIndex","SaveDeviceID","_lastUsedCameraStorageName","Reverse","hasView","viewContainer","createEmbeddedView","templateRef","elRef","onShow","_contextMenus","onHide","maxZoomLevel","minZoomLevel","subscribtion","inputmode","lastIndexOf","ignoreEmptyValue","_Currency","IsHideLabel","ReverseValue","viewContainerRef","UseColumnCaption","Color","TrueColor","_defaultActiveColor","FalseColor","getHtmlContent","focusStateEnabled","_disabled","NavPath","NavEntryID","NavParams","displayValue","onclick","contextMenuService","addContextMenu","searchEnabled","searchMode","SetItemTemplate","_DataMode","minSearchLength","openOnFieldClick","_ShowExtra","SetDisplayExpression","_ShowValue","_ItemCssClass","itemTemplate","PrepareItemTemplate","_DisplayExpr","ExtraField","ValueField","TextField","ShowValue","ShowExtra","_TextField","_ValueField","_ExtraField","GetHighlightedString","ItemCssClass","calculateFilterExpression","getCalculateFilterExpression","CustomFilterType","RelatedToAtLeastOneFilterExpressionBuilder","commands","LinkQueryParams","pure","warn","DateFormatCompact","DateFormatFull","getDay","bypassSecurityTrustStyle","bypassSecurityTrustScript","Enabled","_Enabled","m_bInitComplete","Init","IsColumn","InitColumnRules","InitNormalRules","DoNotShowRequiredMsg","RequiredMessage","_getOption","_setOption","eventsQueue","eventUnsubscribeFunction","renderer","listen","elementRef","IgnoreNavigationKeys","ignoreKeyCodes","OnEvent","subscription","DebounceTime","ThrottledEvent","MessageCode","vt","applicationPath","IsSupported","swPush","notificationClicks","OnNotificationClicked","notification","NavigateCallback","Notification","permission","requestPermission","serviceWorker","getRegistration","showNotification","browser","device","IsIphone","clone","session","method","detectContentTypeHeader","AddHeaders","GetTrackProgressHeader","FormatFields","handle","HandleEvent","HandleError","GetErrorResponse","EndSession","ResponseExtendedMessage","statusText","stack","HandleTrackProgressEvent","total","dateRegex","Sizes","getInitialRoute","handleRoutes","LoadPanel","loadPanelVisible","Loading$","isLoading","baseUrl","shareService","bottomSheetContainerRef","getSelectedMenuItem","menuItems","ChangeSelectedRoute","shouldGetInitialURL","initialURL","GetCurrentUrl","handleNavigationEnd","OpenMessageBoxSubject","OpenMessageBoxDialog","MenuOpened","IsMultiLanguage","SwitchLanguage","OnOpenContactUs","OnChangePassword","OnLogout","_menuOpened","MenuInstance","ExpandParentItems","collapseAll","_contentReadyAction","_initContentReadyAction","isMultiLanguage","InitMenuItems","InitializeItems","ModulesVersion","getModulesVersion","UserMenuItems","GetUserMenuItems","SelectedRoute","_selectedItem","TargetComponentType","BaseAction","containerViewChild","InitializeItem","GetMenuTranslation","InitMenuItem","permissionFunction","isVisibleOnMobile","selected","GetParentMenus","pathParams","MenuTooltip","Target","Visible","GetMenuIconElement","messageBox","loginEndpoint","ChangeLanguage","currentPath","HomeMenu","RepaintToolbar","Ra","LoadPushMessages","_sidebarStateSubscription","IsLoadAllNotifications","PushMessages","GetPushMessages","OnAllNotificationsLoad","fl","viewModesMenu","HideBreadcrumbs","di","InitInjectedComponents","Breadcrumb","IsBreadcrumbVisible","TargetComponentName","InjectedComponents","TargetAppName","OnInitInjectableComponent","Hint","Click","ToolbarButtons","ButtonSettings","IsStandardApplicationMode","OnTitleClick","IsShowViewModesButton","OnShowViewModes","callback","gl","xl","La","OnSubmit","IsSupportedLoginByOTP","IsUseSessionCredentials","DisplayName","Stage","Language$","ReloadApplication","ShowPasswordRecoveryLink","GetUserName","LoadExtension","PrepareEntity","IsSaveCredentials","OnAfterInit","ClearSavedSessionState","MFACodeSent","LoginExtensionLinks","MFACode","Password","Il","iss","OnDoLogin","OnRedirectToAuthority","OnAfterLogin","GetOAuthRedirectURL","ClearSidebars","credentialActivityGrid","credentialActivityEndpoint","ListCredentialTypes","CredentialsInfo","ListActivity","widget","OnRefresh","Templates","CurrentDeliveryOption","emailGrid","smsGrid","pushMessageGrid","whatsAppGrid","sharingAppGrid","notificationEndpoint","GetRelevantDeliveryOptions","RelevantNotificationTypes","IsDeliveryOptionAvailable","IsTabsVisible","IsNoData","SearchAddress","SearchUntilDate","SearchFromDate","Template","SearchTemplate","Notifications","GetNotificationsReport","WindowWidth","GetGridExtender","itemIndex","scrollHeight","HistoryChanges","getChangeLabel","GetEntityChangeLabel","HistoryLineChanges","GetLineChangeLabel","EntityLineID","imports","Hc","cm","OldPassword","NewPassword","NewPassword1","ChangePassword","NewPassword2","VerifyPasswordComplexity","pm","AdditionalTitle","ChangePasswordExpired","GoToLogin","RecoverPassword","CheckUserName","UserNameCheckResponse","IsExists","HasEmail","HasPhone","Token","VerifyRecoveryToken","ChangePasswordByToken","vm","bm","LoadCredentials","LoadCredentialsInfo","CredentialInfo","GetCredentialInfo","Credential","IsPendingWelcome","MFAMethod","IsRestrictByIP","IsExcludeFromMFA","IsLockedOut","IsSupportedUserWelcome","WebAPIAllowedIPs","OnGenerateRandomPassword","GetExternalInfo","OnInitMFAMethodsList","GenerateRandomPassword","SaveCredentials","ReturnUrlParams","onValueChanged","IPRangeEnd","IPRangeStart","UnlockCredentials","welcomeUserDialog","MFAMethodList","captchaKey","OnResolved","ExtendFileInfo","AllowDownload","DownloadItem","DeleteItem","FilesChanged","fileBoxDialog","OnChangeUpload","Accept","AllowOnlyImages","IsImage","NotImageErrorErrorMessage","MaxFileSizeErrorMessage","fileSizePipe","transform","PreventDefault","DragOverCount","dataTransfer","photoBoxDialog","ConvertBase64ToImageJpeg","GetIconStyle","GetStringDateNow","FormatDatePart","MinSymbols","loadComponents","service","GetComponents","Destination","inputs","IsSupportedLoginByPassword","IsRequireTaxNumberForOTP","OnSendOtp","OnLogin","SendOtp","LoginExtensionLinks$","NotificationServers","notificationServerEndpoint","dialog","NotificationServerID","FromAddress","TestNotificationServer","GetListViews","Bl","rx","inputBoxDialog","StoreMID","ix","au","ff","uu","SelectOptions","GetSelectOptions","RadioGroupItems","GetRadioGroupItems","ButtonGroupOptions","GetButtonGroupOptions","SelectGroupedOptions","GetSelectGroupOptions","SelectedDataItems","gf","group","Styles","WithTitleAndIcon","WithCustomIcon","SelectedType","SelectedStyle","IsCollapsable","WithShadow","yu","GetPageTabs","IsShowOnlyTabs","IsShowOnlyAccordion","IsShowStepNumbers","IsShowCustomButtonText","IsShowCustomButtonIcon","bu","BrandID","ModelID","Models","Colors","GetColors","AttachColumnEditHandler","Phones","IsAvailable","CalculateTotalSum","ListItems","GetListItems","ContextMenu","bottomListSubscription","Nf","back","Af","ax","Wf","zf","GetSelectBoxDialogOptions","simpleDialog","htmlBoxDialog","imageBoxDialog","FieldLabel","previewDialog","selectBoxDialog","signBoxDialog","Fu","oh","UserLogins","CurrentCredentialID","ListLogins","ReadQuery","webAPICredentialEndpoint","ql","ch","InitControllers","InitActions","InitModules","Module","Controller","Requests","webAPIRequestEndpoint","GetPossibleControllers","Controllers","GetPossibleActions","Actions","GetPossibleModules","Modules","OnCredentialChanged","InitBody","InitResponse","InitQueryString","clipboard","writeText","Body","Response","QueryString","ShowUserCreationOption","NotificationDeliveryOption","IsSelectionMode","LastUseDate","OnSelectionChanged","getSelectedRowsData","CredentialFilter","GetParamsFromQuery","CredentialTypes","systemCredentialEndpoint","GetAdditionalInfoMetadata","AdditionalInfoMetadata","GetAvailableCredentialFilters","CredentialFilters","SystemCredentials","ListSystemCredentials","IsAllowPagination","SelectedRows","LanguageID","CredentialsForCreation","SendWelcomeUserMessage","dx","px","ListCredentialsForCreations","UserCreationOptionID","UserCreationOption","CreateCredentials","fx","hx","Dh","dataEditorEndpoint","ListViews","Views","CheckPerformance","CheckValidity","_h","Ph","NotificationDispatchID","Rh","yx","ed","InitDeliveryOptions","FindAsync","NotificationTemplate","IsSimplifiedHtmlBodyEdit","NotificationBody","Recipients","Header","RecipientIDs","SendNotificationDispatch","PushMessageBody","WhatsAppBody","SMSBody","ic","gx","nd","LoadDeliveryOptions","notificationDispatchGrid","TemplateID","NotificationDispatches","notificationDispatchEndpoint","GetNotificationDispatchesReport","RelevantNotificationDeliveryOptions","ObjectID","_initDataSource","_initObjectTypes","RelatedObjectID","RelatedObjectType","Level","Logs","logEndpoint","GetObjectTypes","ObjectTypes","Lh","jh","Nu","Wu","Vc","Uc","gm","$c","df","us","qc","cf","uf","td","fh","Fc","xh","Ih","redirectTo","pathMatch","onSameUrlNavigation","relativeLinkResolution","StackTrace","errorMessage","Device","DeviceType","Browser","BrowserVersion","browser_version","OSVersion","os_version","history","replaceState","Gh","kh","GetCustomRouteData","_selectedIndex","SelectedIndexChange","_visible","SetVisibility","tabs","accordion","IsInitialized","updateDimensions","Instance","_currentItemIndex","SelectedIndex","OnCustomButtonClicked","Xh","delteRtl","ScreenMode","IsScreenModeVisible","_id","IsRound","DoNotUseIconColorForText","IsHideTextOnMobile","btn","OnGoToLoginHistory","OnGoToRequestsHistory","ag","SetElementStyles","setProperty","sessionState$Subscription","ShowExpiredDialog","Buttons","ButtonID","KeepAlive","isMessageDialogInDOM","Cg","LabelLines","InitTooltipContainer","addClass","tooltipEl","IconClass","IconColor","setStyle","_viewContainerRef","_componentFactoryResolver","SetVisible","currentValue","_tooltipComponent","hostView","detach","textBox","_subscription","NotificationUnread$","UnreadCount","Hg","Fg","Bg","OnCancelPushNotifications","CancelPushNotification","Gg","zg","LoadSystemCredentials","ToRequestBoolParam","Wg","Jg","_notification","NotificationButtons","notificationConfigurationService","GetButtons","IsRead","ReadPushNotification","OnNotificationRead","ny","notificationsSubscription","Notifications$","ConvertToMessage","ShowToasts","life","closable","messageService","addAll","toast","messages","onMessageClose","oy","sy","LoadAttachment","PreviewBody","GetView","SharedFileUID","FileView","FileData","ay","Iy","_y","zd","Ey","Kd","HtmlBody","Ny","qd","_navbarItems$","NavbarItems","GetItemTranslation","GetItemVisible","Hy","Xd","VisibleChange","ky","xx","DisableApply","FilterPanelAction","ep","FilterTemplateRef","GetGridExternder","ExportExcel","ShowContextMenuAsUsualOnMobile","insertBefore","historyViewDialog","ip","GetPages","sS","pS","HistoryItems$","History","SetBreadCrumbVisible","NavigateHistoryItem","WelcomeUser","TooltipUIID","_onClickObserved","wS","pivotGrid","VS","WS","_items","checked","MoveSlider","ValueChange","labels","slider","offsetLeft","QS","ZS","SelectedIDs","Sp","xS","NS","tl","_c","Wh","mS","ES","Jh","sg","Sy","qS","fy","Qm","JS","provide","multi","useFactory","gg","Sd","_S","jS","Xi","Si","ev","apiKey","googleMapsApiKey","language","region","isRegisterServiceWorker","isDemoEnabled","entryComponents","defaultLocale","latencyThreshold","reCAPTCHAv3Key","bootstrap","schemas","Cp","rv","bootstrapModule","CompleteSelection","selectedItemKeys","FilteredDataSource","ShowLoadPanel","SetStyles","GetLanguage","OnDocumentLoaded","contentDocument","createTextNode","head","$implicit","ShowLargeWindow","WindowHeight","OKButtonText","CancelButtonText","ExtraButtons","OKButtonTabIndex","TabIndex","pageButtons","okBtnRef","CloseButtonHidden","DoPrint","OnCustomPrint","observers","SelectedTemplates","SelectedTemplate","EditingMode","PageTemplates","IsReportAndEntity","EntityBindingPageType","IsSupportEmail","IsSupportSharing","IsSupportSMS","IsSupportWhatsapp","SelectedTemplateID","SharingInformation","FilterTemplates","SetRenderedTemplate","ShareBase","NotificationTempalteID","Download","OnSend","ShareOnMobile","IsShareByEntities","CcAddress","BccAddress","IsEmail","IsPreviewMode","IsDrawing","pad","isEmpty","_clientHeight","ResizePad","_clientWidth","LoadSignature","OnTouchMove","passive","penColor","maxWidth","MaxSignatureHeight","_areaAroundSize","fromDataURL","ratio","CustomCloseAction","OnCancel","CloseBottomSheet","ValidationGroup","OnOK","OnOkValidationFailed","IsPageShowAsFullScreen","AutoCloseBottomSheet","changeDetection","_Label","SetPlaceHolder","m_bEventAttached","customizationService","SetFieldDefaultValue","SetFieldCustomizations","Controls","first","ctlSelectBoxes","ctlTextBoxes","ctlTextAreas","ctlNumberBoxes","ctlDateBoxes","ctlCheckBoxes","ctlTagBoxes","ctlRadioGroup","ctlDropDownBoxes","IsContentHidden","cdr","subscriptionOnSetDefaults","SetDefaultValues","SetCustomizations","ValidateGrid","validationError","validationErrors","validationStatus","grids","editableGrids","ctlSliders","ctlButtons","ctlSwitches","fields1","fields2","fields3","fields4","OnSectionToggle","IsHeaderLink","OnHeaderClick","ToggleSection","descendants","host","EscPressed","GetPopupElement","HidePageBreadcrumb","_pageToolbarSettings","ButtonsPosition","_isPageButtonsVisible","IsPageSidePanelVisible","PagePreviewState","ShowPreview","PreviewPDFData","PreviewFileName","OnGetPreviewTitle","IsQuickFiltersEmpty","HasContent","pageHeader","IsMobileTitleVisible","QuickFilters","HeaderButtonsBefore","HeaderButtonsAfter","GetPageLoadingClass","GetPopupWidthClass","GetCustomClass","ShowDialogAsBottomSheet","GetPopupSize","GetBottomSheetHeight","ShowDialogAsWindow","GetPopupPosition","GetPreviewSize","direction","IsNoBodyScroll","IsNoToolbar","IsAllowNavbar","DialogShown","OnStateChanged","IsBodyFilled","LoadNotificationServers","SetShareableEntities","SetPages","IsUserCustomTemplate","IsUserCustomTemplateOriginal","CrystalTemplateFileView","IsSharePdf","CrystalTemplateFileID","PageComponents","create","injector","TypeDictionary","LabelDictionary","PageType","PageComponent","GetViewByID","htmlBody","phone","UpdateIsUserCustomTemplate"],"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./projects/dato/_proxy/enums.ts","./projects/dato/dialogs/payment-dialog/payment-dialog.component.ts","./projects/dato/_proxy/entities/basedocument.entity.ts","./projects/dato/_proxy/entities/basetransdocument.entity.ts","./projects/dato/_proxy/entities/agingtransdocument.entity.ts","./projects/dato/_globals.ts","./projects/dato/pages/base/base-grid-document-component.ts","./projects/dato/pages/reports/Components/aging-report-grid/aging-report-grid.component.ts","./projects/dato/pages/reports/Components/aging-report-grid/aging-report-grid.component.html","./projects/dato/_proxy/endpoints/contactperson.endpoint.ts","./projects/dato/_proxy/entities/contactperson.entity.ts","./projects/dato/pages/contact-person/contact-person.component.ts","./projects/dato/pages/contact-person/contact-person.component.html","./projects/dato/_proxy/endpoints/customeraddress.endpoint.ts","./projects/dato/_proxy/entities/customeraddress.entity.ts","./projects/dato/pages/customer-address/customer-address.component.ts","./projects/dato/pages/customer-address/customer-address.component.html","./projects/dato/_proxy/entities/delivery.entity.ts","./projects/dato/pages/reports/Components/delivery-grid/delivery-grid.component.ts","./projects/dato/pages/reports/Components/delivery-grid/delivery-grid.component.html","./projects/dato/_proxy/params/invoiceonedocumentcode.param.ts","./projects/dato/_proxy/endpoints/loginrequest.endpoint.ts","./projects/dato/pages/go-from-document-code/go-from-document-code.component.ts","./projects/dato/pages/go-from-document-code/go-from-document-code.component.html","./projects/dato/_proxy/entities/invoice.entity.ts","./projects/dato/pages/reports/Components/invoice-grid/invoice-grid.component.ts","./projects/dato/pages/reports/Components/invoice-grid/invoice-grid.component.html","./projects/dato/_proxy/entities/ledger.entity.ts","./projects/dato/pages/reports/Components/ledger-grid/ledger-grid.component.ts","./projects/dato/pages/reports/Components/ledger-grid/ledger-grid.component.html","./projects/dato/_proxy/endpoints/customer.endpoint.ts","./projects/dato/_proxy/entities/documentline.entity.ts","./projects/dato/_proxy/entities/paymentrequest.entity.ts","./projects/dato/pages/my-details/Components/change-credit-card-dialog/change-credit-card.component.ts","./projects/dato/pages/my-details/Components/change-credit-card-dialog/change-credit-card-dialog.component.html","./projects/dato/pages/my-details/Components/contact-person-grid/contact-person-grid.component.ts","./projects/dato/pages/my-details/Components/contact-person-grid/contact-person-grid.component.html","./projects/dato/pages/my-details/Components/customer-address-grid/customer-address-grid.component.ts","./projects/dato/pages/my-details/Components/customer-address-grid/customer-address-grid.component.html","./projects/dato/_proxy/entities/customer.entity.ts","./projects/dato/_proxy/params/customeraddresseslist.param.ts","./projects/dato/pages/my-details/my-details.component.ts","./projects/dato/pages/my-details/my-details.component.html","./projects/dato/_proxy/endpoints/paymentrequest.endpoint.ts","./projects/dato/_proxy/params/confirmpaymentrequest.param.ts","./projects/dato/_proxy/params/makepayment.param.ts","./projects/dato/pages/pdf-page/pdf-page.component.ts","./projects/dato/dialogs/payment-dialog/payment-dialog.component.html","./projects/dato/_proxy/endpoints/document.endpoint.ts","./projects/dato/_proxy/endpoints/pdf.endpoint.ts","./projects/dato/pages/pdf-page/pdf-page.component.html","./projects/dato/pipes/format-price-with-currency.pipe.ts","./projects/dato/_proxy/endpoints/agingtransdocument.endpoint.ts","./projects/dato/_proxy/endpoints/delivery.endpoint.ts","./projects/dato/_proxy/endpoints/invoice.endpoint.ts","./projects/dato/_proxy/endpoints/ledger.endpoint.ts","./projects/dato/_proxy/endpoints/systemoption.endpoint.ts","./projects/dato/_proxy/params/deliverieslist.param.ts","./projects/dato/dialogs/file-list-dialog/file-list-dialog.component.ts","./projects/dato/dialogs/file-list-dialog/file-list-dialog.component.html","./projects/dato/_proxy/params/transdocumentlist.param.ts","./projects/dato/_proxy/endpoints/file.endpoint.ts","./projects/dato/_proxy/endpoints/company.endpoint.ts","./projects/dato/_proxy/views/company.view.ts","./projects/dato/_proxy/params/documentsdownload.param.ts","./projects/dato/pages/reports/reports.component.ts","./projects/dato/pages/reports/reports.component.html","./projects/dato/_resources/LISTS_EN.ts","./projects/dato/_resources/LISTS_HE.ts","./projects/dato/_resources/LISTS_ES.ts","./projects/dato/pages/bank-details/bank-details.component.ts","./projects/dato/pages/bank-details/bank-details.component.html","./projects/dato/_proxy/entities/systemoption.entity.ts","./projects/dato/_proxy/views/optionsource.view.ts","./projects/dato/_proxy/params/senddocument.param.ts","./projects/dato/dialogs/test-options-dialog/test-options-dialog.component.ts","./projects/dato/dialogs/test-options-dialog/test-options-dialog.component.html","./projects/dato/pages/options/options.component.ts","./projects/dato/pages/options/options.component.html","./projects/dato/_proxy/params/paymentrequestlist.param.ts","./projects/dato/pages/payment-request-report/Components/payment-request-grid/payment-request-grid.component.ts","./projects/dato/pages/payment-request-report/Components/payment-request-grid/payment-request-grid.component.html","./projects/dato/pages/payment-request-report/payment-request-report.component.ts","./projects/dato/pages/payment-request-report/payment-request-report.component.html","./projects/dato/pages/payment-request-report/Components/payment-request-step-grid/payment-request-step-grid.component.ts","./projects/dato/pages/payment-request-report/Components/payment-request-step-grid/payment-request-step-grid.component.html","./projects/dato/pages/payment-request-report/Components/payment-request-line-document/payment-request-line-document.component.ts","./projects/dato/pages/payment-request-report/Components/payment-request-line-document/payment-request-line-document.component.html","./projects/dato/directives/format-price-with-currency.directive.ts","./projects/dato/_proxy/endpoints/user.endpoint.ts","./projects/dato/pages/payment-request/Components/document-line-grid/document-line-grid.component.ts","./projects/dato/pages/payment-request/Components/document-line-grid/document-line-grid.component.html","./projects/dato/pages/reports/mobile/reports-mobile/reports-mobile.component.ts","./projects/dato/pages/reports/mobile/reports-mobile/reports-mobile.component.html","./projects/dato/pages/reports/Components/total-balance/total-balance.component.ts","./projects/dato/pages/reports/Components/total-balance/total-balance.component.html","./projects/dato/pages/base/base-document-list/base-document-list.component.ts","./projects/dato/pages/reports/mobile/ledger-list/ledger-list.component.ts","./projects/dato/pages/reports/mobile/ledger-list/ledger-list.component.html","./projects/dato/pages/reports/mobile/document-line-list/document-line-list.component.ts","./projects/dato/pages/reports/mobile/document-line-list/document-line-list.component.html","./projects/dato/pages/reports/mobile/invoice-list/invoice-list.component.ts","./projects/dato/pages/reports/mobile/invoice-list/invoice-list.component.html","./projects/dato/pages/reports/mobile/delivery-list/delivery-list.component.ts","./projects/dato/pages/reports/mobile/delivery-list/delivery-list.component.html","./projects/dato/_proxy/entities/state.entity.ts","./projects/dato/pages/my-details/Components/contact-person-list/contact-person-list.component.ts","./projects/dato/pages/my-details/Components/contact-person-list/contact-person-list.component.html","./projects/dato/pages/my-details/Components/customer-address-list/customer-address-list.component.ts","./projects/dato/pages/my-details/Components/customer-address-list/customer-address-list.component.html","./projects/dato/pages/credential-selector/credential-selector.component.ts","./projects/dato/pages/credential-selector/credential-selector.component.html","./projects/dato/pages/payment-result/payment-result.component.ts","./projects/dato/pages/payment-result/payment-result.component.html","./src/base/component/BaseInjectableComponent.ts","./projects/dato/pages/contact-us-injectable/contact-us-injectable.component.ts","./projects/dato/pages/contact-us-injectable/contact-us-injectable.component.html","./projects/dato/dialogs/contact-us-dialog/contact-us-dialog.component.ts","./projects/dato/dialogs/contact-us-dialog/contact-us-dialog.component.html","./projects/dato/_app.config.ts","./projects/dino/_proxy/enums.ts","./projects/dino/_proxy/endpoints/brand.endpoint.ts","./projects/dino/_proxy/endpoints/contactperson.endpoint.ts","./projects/dino/_proxy/endpoints/country.endpoint.ts","./projects/dino/_proxy/endpoints/customeraddress.endpoint.ts","./projects/dino/_proxy/endpoints/externallink.endpoint.ts","./projects/dino/_proxy/endpoints/filterattribute.endpoint.ts","./projects/dino/_proxy/endpoints/items.endpoint.ts","./projects/dino/_proxy/endpoints/manufacturer.endpoint.ts","./projects/dino/_proxy/endpoints/state.endpoint.ts","./projects/dino/_proxy/endpoints/vendor.endpoint.ts","./projects/dino/services/ui-component.service.ts","./projects/dino/_proxy/endpoints/category.endpoint.ts","./projects/dino/_proxy/entities/category.entity.ts","./projects/dino/_proxy/views/category.view.ts","./projects/dino/_proxy/endpoints/salesperson.endpoint.ts","./projects/dino/_proxy/endpoints/customeroption.endpoint.ts","./projects/dino/services/customer-option.service.ts","./projects/dino/services/items-filter.service.ts","./projects/dino/_proxy/endpoints/customer.endpoint.ts","./projects/dino/services/customer.service.ts","./projects/dino/classes/items-filter.ts","./projects/dino/services/item-option.service.ts","./projects/dino/services/categories.service.ts","./projects/dino/_proxy/endpoints/itemoption.endpoint.ts","./projects/dino/components/share-document/share-document.component.ts","./projects/dino/classes/base-option-state.ts","./projects/dino/_proxy/endpoints/document.endpoint.ts","./projects/dino/_proxy/endpoints/receipt.endpoint.ts","./projects/dino/pages/documents/components/copy-to-dialog/copy-to-dialog.component.ts","./projects/dino/components/share-document/share-document.component.html","./projects/dino/_globals.ts","./projects/dino/_proxy/entities/contactperson.entity.ts","./projects/dino/_proxy/entities/customeraddress.entity.ts","./projects/dino/_proxy/entities/itemshipment.entity.ts","./projects/dino/_proxy/entities/vatinfo.entity.ts","./projects/dino/_proxy/entities/shipmentmethodprice.entity.ts","./projects/dino/_proxy/entities/shipmentmethod.entity.ts","./projects/dino/_proxy/entities/salesperson.entity.ts","./projects/dino/_proxy/entities/paymentterm.entity.ts","./projects/dino/_proxy/entities/warehouse.entity.ts","./projects/dino/_proxy/entities/item.entity.ts","./projects/dino/_proxy/entities/document.entity.ts","./projects/dino/_proxy/entities/validationresult.entity.ts","./projects/dino/_proxy/views/document.view.ts","./projects/dino/_proxy/endpoints/shoppingcart.endpoint.ts","./projects/dino/services/document.service.ts","./projects/dino/_proxy/endpoints/distributioncycle.endpoint.ts","./projects/dino/pages/checkout2/components/distribution-cycle-select-dialog/distribution-cycle-select-dialog.component.ts","./projects/dino/pages/checkout2/components/distribution-cycle-select-dialog/distribution-cycle-select-dialog.component.html","./projects/dino/services/shopping-cart.service.ts","./projects/dino/classes/route-paths.ts","./projects/dino/components/image-badge/image-badge.component.ts","./projects/dino/pages/documents/components/copy-to-dialog/copy-to-dialog.component.html","./projects/dino/_resources/LISTS_EN.ts","./projects/dino/_resources/LISTS_HE.ts","./projects/dino/pages/guest-access/guest-access.component.ts","./projects/dino/pages/guest-access/guest-access.component.html","./projects/dino/_proxy/endpoints/dimensionvalue.endpoint.ts","./projects/dino/_proxy/endpoints/externalquery.endpoint.ts","./projects/dino/pages/home/terms-of-use-dialog/terms-of-use-dialog.component.ts","./projects/dino/pages/home/terms-of-use-dialog/terms-of-use-dialog.component.html","./projects/dino/_proxy/endpoints/bank.endpoint.ts","./projects/dino/components/accordion/accordion.component.ts","./projects/dino/components/accordion/accordion.component.html","./projects/dino/components/app-impersonate-selector/app-impersonate-dropdown.component.ts","./projects/dino/components/app-impersonate-selector/app-impersonate-dropdown.component.html","./projects/dino/components/barcode/barcode.component.ts","./projects/dino/components/barcode/barcode.component.html","./projects/dino/components/city-selector/city-selector.component.ts","./projects/dino/components/city-selector/city-selector.component.html","./projects/dino/components/code-name-display/code-name-display.component.ts","./projects/dino/components/code-name-display/code-name-display.component.html","./projects/dino/components/contact-person/contact-dialog/contact-dialog.component.ts","./projects/dino/components/contact-person/contact-dialog/contact-dialog.component.html","./projects/dino/components/contact-person/contact-person.component.ts","./projects/dino/components/contact-person/contact-person.component.html","./projects/dino/components/coupons/coupons.component.ts","./projects/dino/components/coupons/coupons.component.html","./projects/dino/components/customer-address/address-dialog/address-dialog.component.ts","./projects/dino/components/customer-address/address-dialog/address-dialog.component.html","./projects/dino/components/customer-address/customer-address.component.ts","./projects/dino/components/customer-address/customer-address.component.html","./projects/dino/components/edit-buttons/edit-buttons.component.ts","./projects/dino/components/edit-buttons/edit-buttons.component.html","./projects/dino/components/filters-panel-slider/filters-panel-slider.component.ts","./projects/dino/components/filters-panel-slider/filters-panel-slider.component.html","./projects/dino/services/items.service.ts","./projects/dino/components/image-badge/image-badge.component.html","./projects/dino/components/image-button/image-button.component.ts","./projects/dino/components/image-button/image-button.component.html","./projects/dino/services/image.service.ts","./projects/dino/components/image/image.component.ts","./projects/dino/components/image/image.component.html","./projects/dino/components/item-display-options/item-display-options-helper/item-display-options.helper.ts","./projects/dino/components/item-display-options/item-display-options.component.ts","./projects/dino/components/item-display-options/item-display-options.component.html","./projects/dino/components/number-iterator/number-iterator.component.ts","./projects/dino/components/number-iterator/number-iterator.component.html","./projects/dino/components/number-iterator3/number-iterator3.component.ts","./projects/dino/components/number-iterator3/number-iterator3.component.html","./projects/dino/components/number-range/number-range.component.ts","./projects/dino/components/number-range/number-range.component.html","./projects/dino/components/price/price.component.ts","./projects/dino/components/price/price.component.html","./projects/dino/components/total-balance/total-balance.component.ts","./projects/dino/components/total-balance/total-balance.component.html","./projects/dino/directives/format-price-currency.directive.ts","./projects/dino/_proxy/entities/allordereditemscountresult.entity.ts","./projects/dino/pages/admin-dashboard/components/all-ordered-items-grid/all-ordered-items-grid.component.ts","./projects/dino/pages/admin-dashboard/components/all-ordered-items-grid/all-ordered-items-grid.component.html","./projects/dino/_proxy/entities/allordersbycustomercountresult.entity.ts","./projects/dino/pages/admin-dashboard/components/all-orders-grid/all-orders-grid.component.ts","./projects/dino/pages/admin-dashboard/components/all-orders-grid/all-orders-grid.component.html","./projects/dino/_proxy/entities/itemsearchcountresult.entity.ts","./projects/dino/pages/admin-dashboard/components/item-searches-grid/item-searches-grid.component.ts","./projects/dino/pages/admin-dashboard/components/item-searches-grid/item-searches-grid.component.html","./projects/dino/_proxy/entities/customer.entity.ts","./projects/dino/services/restricted-navigation.service.ts","./projects/dino/pages/aging-customers/aging-customers-grid/aging-customers-grid.component.ts","./projects/dino/pages/aging-customers/aging-customers-grid/aging-customers-grid.component.html","./projects/dino/pages/aging-customers/aging-customers-list/aging-customers-list.component.ts","./projects/dino/pages/aging-customers/aging-customers-list/aging-customers-list.component.html","./projects/dino/_proxy/endpoints/agingcustomerreport.endpoint.ts","./projects/dino/pages/customers/components/customer-filter/customer-filter.component.ts","./projects/dino/pages/customers/components/customer-filter/customer-filter.component.html","./projects/dino/pages/aging-customers/aging-customers.component.ts","./projects/dino/pages/aging-customers/aging-customers.component.html","./projects/dino/pages/aging/aging.component.html","./projects/dino/_proxy/params/transdocumentlist.param.ts","./projects/dino/classes/base-customer-page-component.ts","./projects/dino/_proxy/endpoints/agingreport.endpoint.ts","./projects/dino/_proxy/entities/basetransdocument.entity.ts","./projects/dino/_proxy/entities/agingreport.entity.ts","./projects/dino/pages/aging/aging-grid/aging-grid.component.ts","./projects/dino/pages/aging/aging-grid/aging-grid.component.html","./projects/dino/pages/aging/base/base-aging.component.ts","./projects/dino/pages/aging/aging-fullscreen.component.ts","./projects/dino/pages/aging/aging-list/aging-list.component.ts","./projects/dino/pages/aging/aging-list/aging-list.component.html","./projects/dino/pages/aging/aging-window.component.ts","./projects/dino/pages/checkout2/components/checkout-completed/checkout-completed.component.ts","./projects/dino/pages/checkout2/components/checkout-completed/checkout-completed.component.html","./projects/dino/pages/checkout2/components/checkout-navigator/checkout-navigator.component.ts","./projects/dino/pages/checkout2/components/checkout-navigator/checkout-navigator.component.html","./projects/dino/pages/checkout2/components/signature-dialog/checkout-signature-dialog.component.ts","./projects/dino/pages/checkout2/components/signature-dialog/checkout-signature-dialog.component.html","./projects/dino/pages/checkout2/components/checkout-signature/checkout-signature.component.ts","./projects/dino/pages/checkout2/components/checkout-signature/checkout-signature.component.html","./projects/dino/pages/checkout2/components/checkout-terms-of-use-dialog/checkout-terms-of-use-dialog.component.ts","./projects/dino/pages/checkout2/components/checkout-terms-of-use-dialog/checkout-terms-of-use-dialog.component.html","./projects/dino/pages/checkout2/components/document-details/document-details.component.ts","./projects/dino/pages/checkout2/components/document-details/document-details.component.html","./projects/dino/pages/checkout2/components/edit-summary/edit-summary.component.ts","./projects/dino/pages/checkout2/components/edit-summary/edit-summary.component.html","./projects/dino/_proxy/endpoints/wishlist.endpoint.ts","./projects/dino/_proxy/endpoints/filter.endpoint.ts","./projects/dino/services/addon.service.ts","./projects/dino/_proxy/entities/signature.entity.ts","./projects/dino/_proxy/entities/shoppingpayment.entity.ts","./projects/dino/_proxy/entities/distributioncategory.entity.ts","./projects/dino/_proxy/entities/distributioncycle.entity.ts","./projects/dino/_proxy/entities/baseoption.entity.ts","./projects/dino/_proxy/entities/addressoption.entity.ts","./projects/dino/_proxy/entities/customfield.entity.ts","./projects/dino/_proxy/entities/customfieldset.entity.ts","./projects/dino/_proxy/entities/documentoption.entity.ts","./projects/dino/_proxy/entities/itemactionpermissions.entity.ts","./projects/dino/_proxy/entities/shoppingcart.entity.ts","./projects/dino/_proxy/views/shoppingcart.view.ts","./projects/dino/pages/checkout2/base/navigator-tabs.ts","./projects/dino/pages/dashboard2/components/documents-by-source/documents-by-source.component.ts","./projects/dino/_proxy/params/empty.param.ts","./projects/dino/pages/checkout2/base/base-checkout.ts","./projects/dino/pages/checkout2/desktop/desktop-checkout.component.ts","./projects/dino/pages/checkout2/desktop/desktop-checkout.component.html","./projects/dino/pages/checkout2/mobile/mobile-checkout.component.ts","./projects/dino/pages/checkout2/mobile/mobile-checkout.component.html","./projects/dino/pages/checkout2/pages/edit-shopping-cart-item/edit-shopping-cart-item.component.ts","./projects/dino/pages/checkout2/pages/edit-shopping-cart-item/edit-shopping-cart-item.component.html","./projects/dino/pages/credential-selector/component/credential-with-sales--selector.component.ts","./projects/dino/pages/credential-selector/component/credential-with-sales-selector.component.html","./projects/dino/pages/credential-selector/impersonate-page.component.ts","./projects/dino/pages/credential-selector/impersonate-page.component.html","./projects/dino/pages/customers/bank-details/customer-bank-details.component.ts","./projects/dino/pages/customers/bank-details/customer-bank-details.component.html","./projects/dino/_proxy/entities/createpaymentrequestresult.entity.ts","./projects/dino/pages/customers/components/change-credit-card-dialog/change-credit-card.component.ts","./projects/dino/pages/customers/components/change-credit-card-dialog/change-credit-card-dialog.component.html","./projects/dino/pages/customers/components/customer-addresses-grid/customer-addresses-grid.component.ts","./projects/dino/pages/customers/components/customer-addresses-grid/customer-addresses-grid.component.html","./projects/dino/pages/customers/components/customer-addresses-list/customer-addresses-list.component.ts","./projects/dino/pages/customers/components/customer-addresses-list/customer-addresses-list.component.html","./projects/dino/pages/customers/components/customer-contact-persons-grid/customer-contact-persons-grid.component.ts","./projects/dino/pages/customers/components/customer-contact-persons-grid/customer-contact-persons-grid.component.html","./projects/dino/pages/customers/components/customer-contact-persons-list/customer-contact-persons-list.component.ts","./projects/dino/pages/customers/components/customer-contact-persons-list/customer-contact-persons-list.component.html","./projects/dino/pages/customers/customer-details/customer-details.component.html","./projects/dino/classes/base-customer-crud-page-component.ts","./projects/dino/_proxy/endpoints/vatgroup.endpoint.ts","./projects/dino/_proxy/endpoints/businessoption.endpoint.ts","./projects/dino/pages/customers/base/base-customer-details.component.ts","./projects/dino/pages/customers/customer-details/customer-details-fullscreen.component.ts","./projects/dino/pages/customers/customer-details/customer-details-window.component.ts","./projects/dino/pages/customers/customers-grid/customers-grid.component.ts","./projects/dino/pages/customers/customers-grid/customers-grid.component.html","./projects/dino/pages/customers/customers-list/customers-list.component.ts","./projects/dino/pages/customers/customers-list/customers-list.component.html","./projects/dino/pages/customers/customers.component.ts","./projects/dino/pages/customers/customers.component.html","./projects/dino/_proxy/endpoints/dashboard.endpoint.ts","./projects/dino/pages/dashboard2/components/active-customers-from-dino/dashboard-active-customers-from-dino.component.ts","./projects/dino/pages/dashboard2/components/active-customers-from-dino/dashboard-active-customers-from-dino.component.html","./projects/dino/pages/dashboard2/components/active-customers/dashboard-active-customers.component.ts","./projects/dino/pages/dashboard2/components/active-customers/dashboard-active-customers.component.html","./projects/dino/pages/dashboard2/components/active-users/dashboard-active-users.component.ts","./projects/dino/pages/dashboard2/components/active-users/dashboard-active-users.component.html","./projects/dino/_proxy/endpoints/saleperiod.endpoint.ts","./projects/dino/pages/dashboard2/components/dashboard-filter/dashboard-filter.component.ts","./projects/dino/pages/dashboard2/components/dashboard-filter/dashboard-filter.component.html","./projects/dino/pages/dashboard2/components/documents-from-dino/dashboard-documents-from-dino.component.ts","./projects/dino/pages/dashboard2/components/documents-from-dino/dashboard-documents-from-dino.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-price2/item-price2.component.ts","./projects/dino/pages/dashboard2/components/documents-by-source/documents-by-source.component.html","./projects/dino/pages/dashboard2/components/inactive-customers/dashboard-inactive-customers.component.ts","./projects/dino/pages/dashboard2/components/inactive-customers/dashboard-inactive-customers.component.html","./projects/dino/pages/dashboard2/components/open-documents/dashboard-open-documents.component.ts","./projects/dino/pages/dashboard2/components/open-documents/dashboard-open-documents.component.html","./projects/dino/pages/dashboard2/components/top10-customers/dashboard-top10-customers.component.ts","./projects/dino/pages/dashboard2/components/top10-customers/dashboard-top10-customers.component.html","./projects/dino/classes/base-customer-component.ts","./projects/dino/pages/dashboard2/components/top10-items/dashboard-top10-items.component.ts","./projects/dino/pages/dashboard2/components/top10-items/dashboard-top10-items.component.html","./projects/dino/_proxy/endpoints/documentprocessing.endpoint.ts","./projects/dino/_proxy/entities/documentprocessing.entity.ts","./projects/dino/pages/document-processing/document-processing-grid/document-processing-grid.component.ts","./projects/dino/pages/document-processing/document-processing-grid/document-processing-grid.component.html","./projects/dino/pages/document-processing/document-processing-list/document-processing-list.component.ts","./projects/dino/pages/document-processing/document-processing-list/document-processing-list.component.html","./projects/dino/pages/document-processing/document-processing.component.ts","./projects/dino/pages/document-processing/document-processing.component.html","./projects/dino/pages/documents/components/additional-status/additional-status.component.ts","./projects/dino/pages/documents/components/additional-status/additional-status.component.html","./projects/dino/pages/documents/components/document-filter/document-filter.component.ts","./projects/dino/pages/documents/components/document-filter/document-filter.component.html","./projects/dino/_proxy/params/documentlist.param.ts","./projects/dino/_proxy/params/documentsummary.param.ts","./projects/dino/pages/documents/components/document-grid-summary/document-grid-summary.component.ts","./projects/dino/pages/documents/components/document-grid-summary/document-grid-summary.component.html","./projects/dino/pages/documents/components/document-grid/document-grid.component.ts","./projects/dino/pages/documents/components/document-grid/document-grid.component.html","./projects/dino/pages/documents/components/document-item-numbers/document-item-numbers.component.ts","./projects/dino/pages/documents/components/document-item-numbers/document-item-numbers.component.html","./projects/dino/pages/documents/components/document-list/document-list-item/document-list-item.component.ts","./projects/dino/pages/documents/components/document-list/document-list-item/document-list-item.component.html","./projects/dino/pages/documents/components/document-list/document-list.component.ts","./projects/dino/pages/documents/components/document-list/document-list.component.html","./projects/dino/pages/documents/components/document-status/document-status.component.ts","./projects/dino/pages/documents/components/document-status/document-status.component.html","./projects/dino/pages/documents/components/related-documents-dialog/related-documents-dialog.component.ts","./projects/dino/pages/documents/components/related-documents-dialog/related-documents-dialog.component.html","./projects/dino/pages/documents/components/share-document-dialog/share-document-dialog.component.ts","./projects/dino/pages/documents/components/share-document-dialog/share-document-dialog.component.html","./projects/dino/classes/helper.ts","./projects/dino/pages/documents/document/document.component.ts","./projects/dino/pages/documents/document/document.component.html","./projects/dino/pages/documents/documents.component.ts","./projects/dino/pages/documents/documents.component.html","./projects/dino/pages/external-link/external-link.component.ts","./projects/dino/pages/external-link/external-link.component.html","./projects/dino/_proxy/entities/externalquery.entity.ts","./projects/dino/pages/external-query-data/external-query-data.component.ts","./projects/dino/pages/external-query-data/external-query-data.component.html","./projects/dino/pages/home/components/home-banner/home-banner.component.ts","./projects/dino/pages/home/components/home-banner/home-banner.component.html","./projects/dino/pages/home/components/home-categories/home-categories.component.ts","./projects/dino/pages/home/components/home-categories/home-categories.component.html","./projects/dino/pages/home/components/home-items/home-items.component.ts","./projects/dino/pages/home/components/home-items/home-items.component.html","./projects/dino/pages/home/contact-us-dialog/contact-us-dialog.component.ts","./projects/dino/pages/home/contact-us-dialog/contact-us-dialog.component.html","./projects/dino/_proxy/endpoints/itemsearch.endpoint.ts","./projects/dino/pages/home/home.component.ts","./projects/dino/pages/home/home.component.html","./projects/dino/pages/ledgers/ledger-list/ledger-mobile-list.component.ts","./projects/dino/pages/ledgers/ledger-list/ledger-mobile-list.component.html","./projects/dino/pages/ledgers/ledgers.component.html","./projects/dino/_proxy/endpoints/ledger.endpoint.ts","./projects/dino/_proxy/entities/ledger.entity.ts","./projects/dino/pages/ledgers/ledgers-grid/ledgers-grid.component.ts","./projects/dino/pages/ledgers/ledgers-grid/ledgers-grid.component.html","./projects/dino/pages/ledgers/base/base-ledgers.component.ts","./projects/dino/pages/ledgers/ledgers-fullscreen.component.ts","./projects/dino/pages/ledgers/ledgers-window.component.ts","./projects/dino/pages/payment/components/base/base-type-payment.component.ts","./projects/dino/pages/payment/components/cash-payment/cash-payment.component.ts","./projects/dino/pages/payment/components/cash-payment/cash-payment.component.html","./projects/dino/pages/payment/components/cheque-payment/cheque-payment.component.ts","./projects/dino/pages/payment/components/cheque-payment/cheque-payment.component.html","./projects/dino/_proxy/endpoints/shoppingpayment.endpoint.ts","./projects/dino/pages/payment/components/credit-card-payment-dialog/credit-card-payment-dialog.component.ts","./projects/dino/pages/payment/components/credit-card-payment-dialog/credit-card-payment-dialog.component.html","./projects/dino/pages/payment/components/later-payment/later-payment.component.ts","./projects/dino/pages/payment/components/later-payment/later-payment.component.html","./projects/dino/pages/payment/components/payment-type-select-dialog/payment-type-select-dialog.component.ts","./projects/dino/pages/payment/components/payment-type-select-dialog/payment-type-select-dialog.component.html","./projects/dino/pages/payment/components/payment-type-select/payment-type-select.component.ts","./projects/dino/pages/payment/components/payment-type-select/payment-type-select.component.html","./projects/dino/pages/payment/components/wire-payment/wire-payment.component.ts","./projects/dino/pages/payment/components/wire-payment/wire-payment.component.html","./projects/dino/_proxy/views/shoppingpayment.view.ts","./projects/dino/pages/payment/payment.component.ts","./projects/dino/pages/payment/payment.component.html","./projects/dino/_proxy/endpoints/assortment.endpoint.ts","./projects/dino/pages/product-catalogue2/components/assortment/assortment.component.ts","./projects/dino/pages/product-catalogue2/components/assortment/assortment.component.html","./projects/dino/pages/product-catalogue2/components/base-document/base-document-dialog/base-document-dialog.component.ts","./projects/dino/pages/product-catalogue2/components/base-document/base-document-dialog/base-document-dialog.component.html","./projects/dino/pages/product-catalogue2/components/base-document/use-base-document-button/use-base-document-button.component.ts","./projects/dino/pages/product-catalogue2/components/base-document/use-base-document-button/use-base-document-button.component.html","./projects/dino/pages/product-catalogue2/components/breadcrumb/breadcrumb.component.ts","./projects/dino/pages/product-catalogue2/components/breadcrumb/breadcrumb.component.html","./projects/dino/pages/product-catalogue2/components/categories-panel/categories-panel.component.ts","./projects/dino/pages/product-catalogue2/components/categories-panel/categories-panel.component.html","./projects/dino/pages/product-catalogue2/components/category-selector/category-selector.component.ts","./projects/dino/pages/product-catalogue2/components/category-selector/category-selector.component.html","./projects/dino/pages/product-catalogue2/components/classification/classification.component.ts","./projects/dino/pages/product-catalogue2/components/classification/classification.component.html","./projects/dino/pages/product-catalogue2/components/display-options/display-options.component.ts","./projects/dino/pages/product-catalogue2/components/display-options/display-options.component.html","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-attributes2/filter-attributes2.component.ts","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-attributes2/filter-attributes2.component.html","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-group-container/filter-group-container.component.ts","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-group-container/filter-group-container.component.html","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-list-group/filter-list-group.component.ts","./projects/dino/pages/product-catalogue2/components/filter-panel2/components/filter-list-group/filter-list-group.component.html","./projects/dino/pages/product-catalogue2/components/filter-panel2/filter-panel2.component.ts","./projects/dino/pages/product-catalogue2/components/filter-panel2/filter-panel2.component.html","./projects/dino/pages/product-catalogue2/components/group-options/group-options.component.ts","./projects/dino/pages/product-catalogue2/components/group-options/group-options.component.html","./projects/dino/pages/product-catalogue2/components/search-bar/search-bar.component.ts","./projects/dino/pages/product-catalogue2/components/search-bar/search-bar.component.html","./projects/dino/pages/product-catalogue2/components/sort-group-assortment-panel/sort-group-assortment-panel.component.ts","./projects/dino/pages/product-catalogue2/components/sort-group-assortment-panel/sort-group-assortment-panel.component.html","./projects/dino/pages/product-catalogue2/components/sort-options/sort-options.component.ts","./projects/dino/pages/product-catalogue2/components/sort-options/sort-options.component.html","./projects/dino/pages/product-catalogue2/base/base-product-catalogue.ts","./projects/dino/pages/product-catalogue2/fixed-catalogue/fixed-catalogue.component.ts","./projects/dino/pages/product-catalogue2/fixed-catalogue/fixed-catalogue.component.html","./projects/dino/_proxy/entities/itemgroup.entity.ts","./projects/dino/pages/product-catalogue2/base/base-list.ts","./projects/dino/pages/product-catalogue2/floating-catalogue/components/desktop-list/desktop-list.component.ts","./projects/dino/pages/product-catalogue2/floating-catalogue/components/desktop-list/desktop-list.component.html","./projects/dino/pages/product-catalogue2/floating-catalogue/floating-catalogue.component.ts","./projects/dino/pages/product-catalogue2/floating-catalogue/floating-catalogue.component.html","./projects/dino/_proxy/entities/pricedisplayoption.entity.ts","./projects/dino/_proxy/entities/itemdisplayelementoption.entity.ts","./projects/dino/pages/product-catalogue2/item-list/base/base-list-item.component.ts","./projects/dino/pages/product-catalogue2/item-list/compact-item/compact-item.component.ts","./projects/dino/pages/product-catalogue2/item-list/compact-item/compact-item.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-actions/item-actions.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-actions/item-actions.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-badges/item-badges.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-badges/item-badges.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-children-visibility-toggle/item-children-visibility-toggle.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-children-visibility-toggle/item-children-visibility-toggle.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-delete/item-delete.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-delete/item-delete.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-description/item-description.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-description/item-description.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-dimensions/item-dimensions.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-dimensions/item-dimensions.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-disable-promotion/item-disable-promotion.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-disable-promotion/item-disable-promotion.html","./projects/dino/pages/product-catalogue2/item-list/components/item-edit/item-edit.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-edit/item-edit.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-files2/item-files2.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-files2/item-files2.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-media/item-media.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-media/item-media.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-price2/item-price2.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-promotions/item-promotions.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-promotions/item-promotions.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-quantity/item-quantity.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-quantity/item-quantity.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-stock/item-stock.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-stock/item-stock.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-variation-button/item-variation-button.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-variation-button/item-variation-button.component.html","./projects/dino/pages/product-catalogue2/item-list/components/item-wishlist/item-wishlist.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-wishlist/item-wishlist.component.html","./projects/dino/pages/product-catalogue2/item-list/components/list-item-image/list-item-image2.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/list-item-image/list-item-image2.component.html","./projects/dino/pages/product-catalogue2/item-list/grid-item2/grid-item2.component.ts","./projects/dino/pages/product-catalogue2/item-list/grid-item2/grid-item2.component.html","./projects/dino/pages/product-catalogue2/item-list/list-item2/list-item2.component.ts","./projects/dino/pages/product-catalogue2/item-list/list-item2/list-item2.component.html","./projects/dino/pages/product-catalogue2/item-list/ultra-compact-item/ultra-compact-item.component.ts","./projects/dino/pages/product-catalogue2/item-list/ultra-compact-item/ultra-compact-item.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/general-tab-mobile/general-tab-mobile.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/general-tab-mobile/general-tab-mobile.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/general-tab/general-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/general-tab/general-tab.component.html","./projects/dino/_proxy/entities/itemavailability.entity.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-grid/item-availability-grid.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-grid/item-availability-grid.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-list/item-availability-list.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-list/item-availability-list.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-tab.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/item-promotions-tab/item-promotions-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-promotions-tab/item-promotions-tab.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/kit-items-tab/kit-items-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/kit-items-tab/kit-items-tab.component.html","./projects/dino/_proxy/entities/itemsale.entity.ts","./projects/dino/pages/product-catalogue2/item-popup/components/last-sales-tab/item-sales-grid/item-sales-grid.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/last-sales-tab/item-sales-grid/item-sales-grid.component.html","./projects/dino/_proxy/endpoints/itemsale.endpoint.ts","./projects/dino/pages/product-catalogue2/item-popup/components/last-sales-tab/last-sales-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/last-sales-tab/last-sales-tab.component.html","./projects/dino/_proxy/entities/itempurchaseorder.entity.ts","./projects/dino/pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-grid/purchase-orders-grid.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-grid/purchase-orders-grid.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-tab.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-tab.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/similar-items/similar-items.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/similar-items/similar-items.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/variations-by-dimension/variations-by-dimension.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/variations-by-dimension/variations-by-dimension.component.html","./projects/dino/_proxy/endpoints/itemattributes.endpoint.ts","./projects/dino/_proxy/entities/itemdisplaypopupoption.entity.ts","./projects/dino/_proxy/views/itempricedetails.view.ts","./projects/dino/_proxy/views/item.view.ts","./projects/dino/_proxy/params/itemattributegroup.param.ts","./projects/dino/pages/product-catalogue2/item-popup/base/base-item-popup.component.ts","./projects/dino/pages/product-catalogue2/item-popup/desktop/desktop-item-popup.component.ts","./projects/dino/pages/product-catalogue2/item-popup/desktop/desktop-item-popup.component.html","./projects/dino/pages/product-catalogue2/item-popup/mobile/mobile-item-popup.component.ts","./projects/dino/pages/product-catalogue2/item-popup/mobile/mobile-item-popup.component.html","./projects/dino/pages/product-catalogue2/mobile/components/mobile-list/mobile-list.component.ts","./projects/dino/pages/product-catalogue2/mobile/components/mobile-list/mobile-list.component.html","./projects/dino/pages/product-catalogue2/mobile/mobile-catalogue.component.ts","./projects/dino/pages/product-catalogue2/mobile/mobile-catalogue.component.html","./projects/dino/pages/product-catalogue2/product-catalogue2.component.ts","./projects/dino/pages/product-catalogue2/product-catalogue2.component.html","./projects/dino/pages/receipts/components/receipt-filter/receipt-filter.component.ts","./projects/dino/pages/receipts/components/receipt-filter/receipt-filter.component.html","./projects/dino/_proxy/entities/receipt.entity.ts","./projects/dino/_proxy/views/receipt.view.ts","./projects/dino/pages/receipts/components/receipt-grid/receipt-grid.component.ts","./projects/dino/pages/receipts/components/receipt-grid/receipt-grid.component.html","./projects/dino/pages/receipts/components/receipt-list/receipt-list-item/receipt-list-item.component.ts","./projects/dino/pages/receipts/components/receipt-list/receipt-list-item/receipt-list-item.component.html","./projects/dino/pages/receipts/components/receipt-list/receipt-list.component.ts","./projects/dino/pages/receipts/components/receipt-list/receipt-list.component.html","./projects/dino/pages/receipts/create-receipt/components/create-receipt-amounts-button/create-receipt-amounts-button.component.ts","./projects/dino/pages/receipts/create-receipt/components/create-receipt-amounts-button/create-receipt-amounts-button.component.html","./projects/dino/pages/receipts/create-receipt/components/create-receipt-ledger-list-item/create-receipt-ledger-list-item.component.ts","./projects/dino/pages/receipts/create-receipt/components/create-receipt-ledger-list-item/create-receipt-ledger-list-item.component.html","./projects/dino/pages/receipts/create-receipt/components/create-receipt-navigator/create-receipt-navigator.component.ts","./projects/dino/pages/receipts/create-receipt/components/create-receipt-navigator/create-receipt-navigator.component.html","./projects/dino/_proxy/views/ledger.view.ts","./projects/dino/pages/receipts/create-receipt/components/payment-amount-dialog/payment-amount-dialog.component.ts","./projects/dino/pages/receipts/create-receipt/components/payment-amount-dialog/payment-amount-dialog.component.html","./projects/dino/pages/receipts/create-receipt/components/receipt-documents-to-select-grid/receipt-documents-to-select-grid.component.ts","./projects/dino/pages/receipts/create-receipt/components/receipt-documents-to-select-grid/receipt-documents-to-select-grid.component.html","./projects/dino/pages/receipts/create-receipt/components/receipt-documents-to-select-list/receipt-documents-to-select-list.component.ts","./projects/dino/pages/receipts/create-receipt/components/receipt-documents-to-select-list/receipt-documents-to-select-list.component.html","./projects/dino/pages/receipts/create-receipt/components/selected-receipt-document-grid/selected-receipt-documents-grid.component.ts","./projects/dino/pages/receipts/create-receipt/components/selected-receipt-document-grid/selected-receipt-documents-grid.component.html","./projects/dino/pages/receipts/create-receipt/components/selected-receipt-document-list/selected-receipt-documents-list.component.ts","./projects/dino/pages/receipts/create-receipt/components/selected-receipt-document-list/selected-receipt-documents-list.component.html","./projects/dino/pages/receipts/create-receipt/base/base-create-receipt.component.ts","./projects/dino/pages/receipts/create-receipt/desktop/create-receipt-desktop.component.ts","./projects/dino/pages/receipts/create-receipt/desktop/create-receipt-desktop.component.html","./projects/dino/pages/receipts/create-receipt/mobile/create-receipt-mobile.component.ts","./projects/dino/pages/receipts/create-receipt/mobile/create-receipt-mobile.component.html","./projects/dino/pages/receipts/receipt/receipt-payments/receipt-payments.component.ts","./projects/dino/pages/receipts/receipt/receipt-payments/receipt-payments.component.html","./projects/dino/pages/receipts/receipt/receipt-related-documents/receipt-related-documents.component.ts","./projects/dino/pages/receipts/receipt/receipt-related-documents/receipt-related-documents.component.html","./projects/dino/pages/receipts/receipt/receipt.component.ts","./projects/dino/pages/receipts/receipt/receipt.component.html","./projects/dino/pages/receipts/receipts.component.ts","./projects/dino/pages/receipts/receipts.component.html","./projects/dino/pages/sales/components/change-customer-confirm-dialog/change-customer-confirm-dialog.component.ts","./projects/dino/pages/sales/components/change-customer-confirm-dialog/change-customer-confirm-dialog.component.html","./projects/dino/pages/sales/components/select-customer-dropdown/select-customer-dropdown.component.ts","./projects/dino/pages/sales/components/select-customer-dropdown/select-customer-dropdown.component.html","./projects/dino/pages/sales/components/select-customer-popup/select-customer-popup.component.ts","./projects/dino/pages/sales/components/select-customer-popup/select-customer-popup.component.html","./projects/dino/pages/sales/components/select-customer-info/select-customer-info.component.ts","./projects/dino/pages/sales/components/select-customer-info/select-customer-info.component.html","./projects/dino/pages/sales/components/select-customer-mobile-list/select-customer-mobile-list.component.ts","./projects/dino/pages/sales/components/select-customer-mobile-list/select-customer-mobile-list.component.html","./projects/dino/pages/sales/components/select-document-type/select-document-type.component.ts","./projects/dino/pages/sales/components/select-document-type/select-document-type.component.html","./projects/dino/_proxy/entities/salesobjectbase.entity.ts","./projects/dino/_proxy/entities/salesdatabase.entity.ts","./projects/dino/pages/sales/sale-targets/components/sales-data-grid/sales-data-grid.component.ts","./projects/dino/pages/sales/sale-targets/components/sales-data-grid/sales-data-grid.component.html","./projects/dino/_proxy/endpoints/customergroup.endpoint.ts","./projects/dino/pages/sales/sale-targets/components/sales-target-filter/sales-target-filter.component.ts","./projects/dino/pages/sales/sale-targets/components/sales-target-filter/sales-target-filter.component.html","./projects/dino/_proxy/entities/saletargetperformancebase.entity.ts","./projects/dino/pages/sales/sale-targets/components/target-performance-grid/target-performance-grid.component.ts","./projects/dino/pages/sales/sale-targets/components/target-performance-grid/target-performance-grid.component.html","./projects/dino/_proxy/endpoints/saletarget.endpoint.ts","./projects/dino/_proxy/endpoints/saledata.endpoint.ts","./projects/dino/pages/sales/sale-targets/base/base-sale-targets.ts","./projects/dino/_proxy/endpoints/saletargetperformance.endpoint.ts","./projects/dino/pages/sales/sale-targets/sale-target-performance/sale-target-performance.component.ts","./projects/dino/pages/sales/sale-targets/sale-target-performance/sale-target-performance.component.html","./projects/dino/pages/sales/sale-targets/sales-data/sales-data.component.ts","./projects/dino/pages/sales/sale-targets/sales-data/sales-data.component.html","./projects/dino/pages/sales/sale-targets/sales-summary/sales-summary.component.ts","./projects/dino/pages/sales/sale-targets/sales-summary/sales-summary.component.html","./projects/dino/_proxy/entities/admin.entity.ts","./projects/dino/_proxy/endpoints/admin.endpoint.ts","./projects/dino/pages/settings/admins/admin.component.ts","./projects/dino/pages/settings/admins/admin.component.html","./projects/dino/pages/settings/admins/list/admin-grid.component.ts","./projects/dino/pages/settings/admins/list/admin-grid.component.html","./projects/dino/pages/settings/admins/list/admin-list.component.ts","./projects/dino/pages/settings/admins/list/admin-list.component.html","./projects/dino/_proxy/entities/attributegroup.entity.ts","./projects/dino/pages/settings/attribute-groups/attribute-groups-grid/attribute-groups-grid.component.ts","./projects/dino/pages/settings/attribute-groups/attribute-groups-grid/attribute-groups-grid.component.html","./projects/dino/_proxy/endpoints/attributegroup.endpoint.ts","./projects/dino/pages/settings/attribute-groups/attribute-groups.component.ts","./projects/dino/pages/settings/attribute-groups/attribute-groups.component.html","./projects/dino/_proxy/endpoints/contactussubject.endpoint.ts","./projects/dino/_proxy/entities/contactussubject.entity.ts","./projects/dino/pages/settings/contact-us-subjects/contact-us-subjects-grid/contact-us-subjects-grid.component.ts","./projects/dino/pages/settings/contact-us-subjects/contact-us-subjects-grid/contact-us-subjects-grid.component.html","./projects/dino/_proxy/entities/hiddenitem.entity.ts","./projects/dino/_proxy/entities/depositgroup.entity.ts","./projects/dino/pages/settings/deposit-groups/deposit-groups-grid/deposit-groups-grid.component.ts","./projects/dino/pages/settings/deposit-groups/deposit-groups-grid/deposit-groups-grid.component.html","./projects/dino/_proxy/endpoints/depositgroup.endpoint.ts","./projects/dino/pages/settings/deposit-groups/deposit-groups.component.ts","./projects/dino/pages/settings/deposit-groups/deposit-groups.component.html","./projects/dino/_proxy/entities/externallink.entity.ts","./projects/dino/pages/settings/external-links-config/external-link-config.component.ts","./projects/dino/pages/settings/external-links-config/external-link-config.component.html","./projects/dino/pages/settings/external-links-config/external-link-config/external-link-config-list.component.ts","./projects/dino/pages/settings/external-links-config/external-link-config/external-link-config-list.component.html","./projects/dino/pages/settings/external-links-config/external-link-grid-config/external-link-config-grid.component.ts","./projects/dino/pages/settings/external-links-config/external-link-grid-config/external-link-config-grid.component.html","./projects/dino/pages/settings/external-queries/external-query-grid/external-query-grid.component.ts","./projects/dino/pages/settings/external-queries/external-query-grid/external-query-grid.component.html","./projects/dino/pages/settings/external-queries/external-query-list/external-query-list.component.ts","./projects/dino/pages/settings/external-queries/external-query-list/external-query-list.component.html","./projects/dino/pages/settings/external-queries/external-query.component.ts","./projects/dino/pages/settings/external-queries/external-query.component.html","./projects/dino/_proxy/entities/businessoption.entity.ts","./projects/dino/pages/settings/options/business-options/business-option-grid/business-option-grid.component.ts","./projects/dino/pages/settings/options/business-options/business-option-grid/business-option-grid.component.html","./projects/dino/pages/settings/options/business-options/business-option-list/business-option-list.component.ts","./projects/dino/pages/settings/options/business-options/business-option-list/business-option-list.component.html","./projects/dino/_proxy/endpoints/warehouse.endpoint.ts","./projects/dino/pages/settings/options/business-options/business-option.component.ts","./projects/dino/pages/settings/options/business-options/business-option.component.html","./projects/dino/_proxy/entities/catalogueoption.entity.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option-grid/catalogue-option-grid.component.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option-grid/catalogue-option-grid.component.html","./projects/dino/_proxy/endpoints/catalogueoption.endpoint.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option-list/catalogue-option-list.component.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option-list/catalogue-option-list.component.html","./projects/dino/pages/settings/options/catalogue-options/catalogue-option.component.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option.component.html","./projects/dino/_proxy/entities/contactusoption.entity.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-option-grid/contact-us-option-grid.component.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-option-grid/contact-us-option-grid.component.html","./projects/dino/_proxy/endpoints/contactusoption.endpoint.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-option-list/contact-us-option-list.component.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-option-list/contact-us-option-list.component.html","./projects/dino/pages/settings/options/contact-us-options/contact-us-option.component.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-option.component.html","./projects/dino/_proxy/entities/customerdetailoption.entity.ts","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option-grid/customer-detail-option-grid.component.ts","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option-grid/customer-detail-option-grid.component.html","./projects/dino/_proxy/endpoints/customerdetailoption.endpoint.ts","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option-list/customer-detail-option-list.component.ts","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option-list/customer-detail-option-list.component.html","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option.component.ts","./projects/dino/pages/settings/options/customer-detail-options/customer-detail-option.component.html","./projects/dino/_proxy/entities/paymentoption.entity.ts","./projects/dino/_proxy/entities/shipmentoption.entity.ts","./projects/dino/_proxy/entities/filteroption.entity.ts","./projects/dino/_proxy/entities/notificationoption.entity.ts","./projects/dino/_proxy/entities/homepageoption.entity.ts","./projects/dino/_proxy/entities/featureoption.entity.ts","./projects/dino/_proxy/entities/termsofuseoption.entity.ts","./projects/dino/_proxy/entities/seriesoption.entity.ts","./projects/dino/_proxy/entities/itemoption.entity.ts","./projects/dino/_proxy/entities/customeroption.entity.ts","./projects/dino/pages/settings/options/customer-options/customer-option-grid/customer-option-grid.component.ts","./projects/dino/pages/settings/options/customer-options/customer-option-grid/customer-option-grid.component.html","./projects/dino/pages/settings/options/customer-options/customer-option-list/customer-option-list.component.ts","./projects/dino/pages/settings/options/customer-options/customer-option-list/customer-option-list.component.html","./projects/dino/_proxy/endpoints/paymentoption.endpoint.ts","./projects/dino/_proxy/endpoints/shipmentoption.endpoint.ts","./projects/dino/_proxy/endpoints/filteroption.endpoint.ts","./projects/dino/_proxy/endpoints/notificationoption.endpoint.ts","./projects/dino/_proxy/endpoints/homepageoption.endpoint.ts","./projects/dino/_proxy/endpoints/featureoption.endpoint.ts","./projects/dino/_proxy/endpoints/termsofuseoption.endpoint.ts","./projects/dino/_proxy/endpoints/documentoption.endpoint.ts","./projects/dino/_proxy/endpoints/seriesoption.endpoint.ts","./projects/dino/_proxy/endpoints/addressoption.endpoint.ts","./projects/dino/_proxy/endpoints/customfieldset.endpoint.ts","./projects/dino/pages/settings/options/customer-options/customer-option.component.ts","./projects/dino/pages/settings/options/customer-options/customer-option.component.html","./projects/dino/_proxy/entities/dimensionconfiguration.entity.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration-grid/dimension-configuration-grid.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration-grid/dimension-configuration-grid.component.html","./projects/dino/_proxy/endpoints/dimensionconfiguration.endpoint.ts","./projects/dino/_proxy/endpoints/dimension.endpoint.ts","./projects/dino/_proxy/endpoints/dimensionscale.endpoint.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration-list/dimension-configuration-list.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration-list/dimension-configuration-list.component.html","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration.component.html","./projects/dino/_proxy/entities/dimensionscale.entity.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-scales/dimension-scale-grid/dimension-scale-grid.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-scales/dimension-scale-grid/dimension-scale-grid.component.html","./projects/dino/_proxy/entities/filterattributevalue.entity.ts","./projects/dino/_proxy/entities/dimensionvalue.entity.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-values/dimension-value-grid/dimension-value-grid.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-values/dimension-value-grid/dimension-value-grid.component.html","./projects/dino/_proxy/entities/filterattribute.entity.ts","./projects/dino/_proxy/entities/dimension.entity.ts","./projects/dino/pages/settings/options/dimension-configurations/dimensions/dimension-grid/dimension-grid.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimensions/dimension-grid/dimension-grid.component.html","./projects/dino/_proxy/endpoints/specificationattribute.endpoint.ts","./projects/dino/_proxy/entities/specificationattribute.entity.ts","./projects/dino/_proxy/endpoints/specificationattributevalue.endpoint.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute.component.ts","./projects/dino/services/sidebars.service.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute.component.html","./projects/dino/pages/settings/options/dimension-configurations/dimensions/dimension.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimensions/dimension.component.html","./projects/dino/_proxy/entities/discountpermission.entity.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission-grid/discount-permission-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission-grid/discount-permission-grid.component.html","./projects/dino/_proxy/endpoints/discountpermission.endpoint.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission-list/discount-permission-list.component.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission-list/discount-permission-list.component.html","./projects/dino/_proxy/endpoints/discountrule.endpoint%20.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission.component.ts","./projects/dino/pages/settings/options/discount-permissions/discount-permission.component.html","./projects/dino/pages/settings/options/discount-permissions/permission-grids/brands-grid/permission-brand-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/permission-grids/brands-grid/permission-brand-grid.component.html","./projects/dino/pages/settings/options/discount-permissions/permission-grids/categories-grid/permission-category-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/permission-grids/categories-grid/permission-category-grid.component.html","./projects/dino/pages/settings/options/discount-permissions/permission-grids/items-grid/permission-item-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/permission-grids/items-grid/permission-item-grid.component.html","./projects/dino/pages/settings/options/discount-permissions/permission-grids/manufacturers-grid/permission-manufacturer-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/permission-grids/manufacturers-grid/permission-manufacturer-grid.component.html","./projects/dino/pages/settings/options/discount-permissions/permission-grids/vendors-grid/permission-vendor-grid.component.ts","./projects/dino/pages/settings/options/discount-permissions/permission-grids/vendors-grid/permission-vendor-grid.component.html","./projects/dino/_proxy/entities/discountrule.entity.ts","./projects/dino/pages/settings/options/discount-rules/discount-rule-grid/discount-rule-grid.component.ts","./projects/dino/pages/settings/options/discount-rules/discount-rule-grid/discount-rule-grid.component.html","./projects/dino/pages/settings/options/discount-rules/discount-rule-list/discount-rule-list.component.ts","./projects/dino/pages/settings/options/discount-rules/discount-rule-list/discount-rule-list.component.html","./projects/dino/pages/settings/options/discount-rules/discount-rule.component.ts","./projects/dino/pages/settings/options/discount-rules/discount-rule.component.html","./projects/dino/pages/settings/options/document-options/document-option-grid/document-option-grid.component.ts","./projects/dino/pages/settings/options/document-options/document-option-grid/document-option-grid.component.html","./projects/dino/pages/settings/options/document-options/document-option-list/document-option-list.component.ts","./projects/dino/pages/settings/options/document-options/document-option-list/document-option-list.component.html","./projects/dino/pages/settings/options/document-options/document-option.component.ts","./projects/dino/pages/settings/options/document-options/document-option.component.html","./projects/dino/pages/settings/options/feature-options/feature-option-grid/feature-option-grid.component.ts","./projects/dino/pages/settings/options/feature-options/feature-option-grid/feature-option-grid.component.html","./projects/dino/pages/settings/options/feature-options/feature-option-list/feature-option-list.component.ts","./projects/dino/pages/settings/options/feature-options/feature-option-list/feature-option-list.component.html","./projects/dino/pages/settings/options/feature-options/feature-option.component.ts","./projects/dino/pages/settings/options/feature-options/feature-option.component.html","./projects/dino/pages/settings/options/filter-options/filter-option-grid/filter-option-grid.component.ts","./projects/dino/pages/settings/options/filter-options/filter-option-grid/filter-option-grid.component.html","./projects/dino/pages/settings/options/filter-options/filter-option-list/filter-option-list.component.ts","./projects/dino/pages/settings/options/filter-options/filter-option-list/filter-option-list.component.html","./projects/dino/pages/settings/options/filter-options/filter-option.component.ts","./projects/dino/pages/settings/options/filter-options/filter-option.component.html","./projects/dino/_proxy/entities/giftcard.entity.ts","./projects/dino/_proxy/endpoints/giftcard.endpoint.ts","./projects/dino/_proxy/endpoints/promotion.endpoint.ts","./projects/dino/pages/settings/options/gift-cards/gift-card.component.ts","./projects/dino/pages/settings/options/gift-cards/gift-card.component.html","./projects/dino/pages/settings/options/gift-cards/gift-cards-grid/gift-cards-grid.component.ts","./projects/dino/pages/settings/options/gift-cards/gift-cards-grid/gift-cards-grid.component.html","./projects/dino/pages/settings/options/gift-cards/gift-cards-list/gift-cards-list.component.ts","./projects/dino/pages/settings/options/gift-cards/gift-cards-list/gift-cards-list.component.html","./projects/dino/pages/settings/options/homepage-options/homepage-option-grid/homepage-option-grid.component.ts","./projects/dino/pages/settings/options/homepage-options/homepage-option-grid/homepage-option-grid.component.html","./projects/dino/pages/settings/options/homepage-options/homepage-option-list/homepage-option-list.component.ts","./projects/dino/pages/settings/options/homepage-options/homepage-option-list/homepage-option-list.component.html","./projects/dino/pages/settings/options/homepage-options/homepage-option.component.ts","./projects/dino/pages/settings/options/homepage-options/homepage-option.component.html","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option-grid/item-display-element-option-grid.component.ts","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option-grid/item-display-element-option-grid.component.html","./projects/dino/_proxy/endpoints/itemdisplayelementoption.endpoint.ts","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option-list/item-display-element-option-list.component.ts","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option-list/item-display-element-option-list.component.html","./projects/dino/_proxy/endpoints/pricedisplayoption.endpoint.ts","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option.component.ts","./projects/dino/pages/settings/options/item-display-element-options/item-display-element-option.component.html","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option-grid/item-display-popup-option-grid.component.ts","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option-grid/item-display-popup-option-grid.component.html","./projects/dino/_proxy/endpoints/itemdisplaypopupoption.endpoint.ts","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option-list/item-display-popup-option-list.component.ts","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option-list/item-display-popup-option-list.component.html","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option.component.ts","./projects/dino/pages/settings/options/item-display-popup-options/item-display-popup-option.component.html","./projects/dino/pages/settings/options/item-options/item-option-grid/item-option-grid.component.ts","./projects/dino/pages/settings/options/item-options/item-option-grid/item-option-grid.component.html","./projects/dino/pages/settings/options/item-options/item-option-list/item-option-list.component.ts","./projects/dino/pages/settings/options/item-options/item-option-list/item-option-list.component.html","./projects/dino/pages/settings/options/item-options/item-option.component.ts","./projects/dino/pages/settings/options/item-options/item-option.component.html","./projects/dino/pages/settings/options/notification-options/notification-option-grid/notification-option-grid.component.ts","./projects/dino/pages/settings/options/notification-options/notification-option-grid/notification-option-grid.component.html","./projects/dino/pages/settings/options/notification-options/notification-option-list/notification-option-list.component.ts","./projects/dino/pages/settings/options/notification-options/notification-option-list/notification-option-list.component.html","./projects/dino/_proxy/views/notificationoption.view.ts","./projects/dino/pages/settings/options/notification-options/notification-option.component.ts","./projects/dino/pages/settings/options/notification-options/notification-option.component.html","./projects/dino/pages/settings/options/payment-options/payment-option-grid/payment-option-grid.component.ts","./projects/dino/pages/settings/options/payment-options/payment-option-grid/payment-option-grid.component.html","./projects/dino/pages/settings/options/payment-options/payment-option-list/payment-option-list.component.ts","./projects/dino/pages/settings/options/payment-options/payment-option-list/payment-option-list.component.html","./projects/dino/_proxy/endpoints/series.endpoint.ts","./projects/dino/_proxy/endpoints/account.endpoint.ts","./projects/dino/pages/settings/options/payment-options/payment-option.component.ts","./projects/dino/pages/settings/options/payment-options/payment-option.component.html","./projects/dino/pages/settings/options/price-display-options/price-display-option.component.ts","./projects/dino/pages/settings/options/price-display-options/price-display-option.component.html","./projects/dino/pages/settings/options/price-display-options/price-display-options-grid/price-display-option-grid.component.ts","./projects/dino/pages/settings/options/price-display-options/price-display-options-grid/price-display-option-grid.component.html","./projects/dino/pages/settings/options/price-display-options/price-display-options-list/price-display-option-list.component.ts","./projects/dino/pages/settings/options/price-display-options/price-display-options-list/price-display-option-list.component.html","./projects/dino/_proxy/entities/promotion.entity.ts","./projects/dino/pages/settings/options/promotions/promotion.component.ts","./projects/dino/pages/settings/options/promotions/promotion.component.html","./projects/dino/pages/settings/options/promotions/promotions-grid/promotions-grid.component.ts","./projects/dino/pages/settings/options/promotions/promotions-grid/promotions-grid.component.html","./projects/dino/pages/settings/options/promotions/promotions-list/promotions-list.component.ts","./projects/dino/pages/settings/options/promotions/promotions-list/promotions-list.component.html","./projects/dino/_proxy/entities/saleperiod.entity.ts","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-grid/sale-period-grid.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-grid/sale-period-grid.component.html","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-list/sale-period-list.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-list/sale-period-list.component.html","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-parts-grid/sale-period-parts.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period-parts-grid/sale-period-parts.component.html","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-periods/sale-period.component.html","./projects/dino/_proxy/entities/saletarget.entity.ts","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-grid/sale-target-grid.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-grid/sale-target-grid.component.html","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target.component.html","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-lines-grid/sale-target-lines.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-lines-grid/sale-target-lines.component.html","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-list/sale-target-list.component.ts","./projects/dino/pages/settings/options/sale-targets/sale-targets/sale-target-list/sale-target-list.component.html","./projects/dino/_proxy/entities/systemoption.entity.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option-grid/sales-person-option-grid.component.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option-grid/sales-person-option-grid.component.html","./projects/dino/_proxy/endpoints/salespersonoption.endpoint.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option-list/sales-person-option-list.component.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option-list/sales-person-option-list.component.html","./projects/dino/_proxy/entities/salespersonoption.entity.ts","./projects/dino/_proxy/endpoints/paymentterm.endpoint.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option.component.ts","./projects/dino/pages/settings/options/sales-person-options/sales-person-option.component.html","./projects/dino/pages/settings/options/series-options/series-option-grid/series-option-grid.component.ts","./projects/dino/pages/settings/options/series-options/series-option-grid/series-option-grid.component.html","./projects/dino/pages/settings/options/series-options/series-option-list/series-option-list.component.ts","./projects/dino/pages/settings/options/series-options/series-option-list/series-option-list.component.html","./projects/dino/pages/settings/options/series-options/series-option.component.ts","./projects/dino/pages/settings/options/series-options/series-option.component.html","./projects/dino/pages/settings/options/shipment-options/shipment-methods/shipment-method-grid/shipment-method-grid.component.ts","./projects/dino/pages/settings/options/shipment-options/shipment-methods/shipment-method-grid/shipment-method-grid.component.html","./projects/dino/pages/settings/options/shipment-options/shipment-option-grid/shipment-option-grid.component.ts","./projects/dino/pages/settings/options/shipment-options/shipment-option-grid/shipment-option-grid.component.html","./projects/dino/_proxy/endpoints/shipmentmethod.endpoint.ts","./projects/dino/pages/settings/options/shipment-options/shipment-option-list/shipment-option-list.component.ts","./projects/dino/pages/settings/options/shipment-options/shipment-option-list/shipment-option-list.component.html","./projects/dino/pages/settings/options/shipment-options/shipment-option.component.ts","./projects/dino/pages/settings/options/shipment-options/shipment-option.component.html","./projects/dino/pages/settings/options/system-options/system-option-grid/system-option-grid.component.ts","./projects/dino/pages/settings/options/system-options/system-option-grid/system-option-grid.component.html","./projects/dino/_proxy/endpoints/systemoption.endpoint.ts","./projects/dino/pages/settings/options/system-options/system-option-list/system-option-list.component.ts","./projects/dino/pages/settings/options/system-options/system-option-list/system-option-list.component.html","./projects/dino/pages/settings/options/system-options/system-option.component.ts","./projects/dino/pages/settings/options/system-options/system-option.component.html","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option-grid/terms-of-use-option-grid.component.ts","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option-grid/terms-of-use-option-grid.component.html","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option-list/terms-of-use-option-list.component.ts","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option-list/terms-of-use-option-list.component.html","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option.component.ts","./projects/dino/pages/settings/options/terms-of-use-options/terms-of-use-option.component.html","./projects/dino/pages/settings/specification-attributes/specification-attribute-grid/specification-attribute-grid.component.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute-grid/specification-attribute-grid.component.html","./projects/dino/pages/settings/specification-attributes/specification-attribute-list/specification-attribute-list.component.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute-list/specification-attribute-list.component.html","./projects/dino/_proxy/entities/specificationattributevalue.entity.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute-value-grid/specification-attribute-value-grid.component.ts","./projects/dino/pages/settings/specification-attributes/specification-attribute-value-grid/specification-attribute-value-grid.component.html","./projects/dino/pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-dialog.component.ts","./projects/dino/pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-dialog.component.html","./projects/dino/pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-documents-grid/duplicate-repeat-documents-grid.component.ts","./projects/dino/pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-documents-grid/duplicate-repeat-documents-grid.component.html","./projects/dino/pages/shopping-cart/components/quantity-badge/quantity-badge.component.ts","./projects/dino/pages/shopping-cart/components/quantity-badge/quantity-badge.component.html","./projects/dino/pages/shopping-cart/base/coupon.helper.ts","./projects/dino/pages/shopping-cart/base/base-shopping-cart-state.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-compact/shopping-cart-compact.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-compact/shopping-cart-compact.component.html","./projects/dino/pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component.html","./projects/dino/pages/shopping-cart/components/shopping-cart-item-numbers-dialog/select-item-numbers-dialog/select-item-numbers-dialog.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-item-numbers-dialog/select-item-numbers-dialog/select-item-numbers-dialog.component.html","./projects/dino/_proxy/entities/shoppingcartitemserialnumber.entity.ts","./projects/dino/_proxy/entities/shoppingcartitembatch.entity.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-item-numbers-dialog/shopping-cart-item-numbers-dialog.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-item-numbers-dialog/shopping-cart-item-numbers-dialog.component.html","./projects/dino/_proxy/entities/shoppingcartitemvisibilityentry.entity.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-items/shopping-cart-items.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-items/shopping-cart-items.component.html","./projects/dino/pages/shopping-cart/components/shopping-cart-totals/shopping-cart-totals.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-totals/shopping-cart-totals.component.html","./projects/dino/pages/shopping-cart/components/shopping-wishlist-buttons/shopping-wishlist-buttons.component.ts","./projects/dino/pages/shopping-cart/components/shopping-wishlist-buttons/shopping-wishlist-buttons.component.html","./projects/dino/pages/shopping-cart/components/suggested-promotions/suggested-promotions-accordion/suggested-promotions-accordion.component.ts","./projects/dino/pages/shopping-cart/components/suggested-promotions/suggested-promotions-accordion/suggested-promotions-accordion.component.html","./projects/dino/pages/shopping-cart/components/suggested-promotions/suggested-promotions.component.ts","./projects/dino/pages/shopping-cart/components/suggested-promotions/suggested-promotions.component.html","./projects/dino/pages/shopping-cart/components/total-after-button/total-after-button.component.ts","./projects/dino/pages/shopping-cart/components/total-after-button/total-after-button.component.html","./projects/dino/pages/shopping-cart/shopping-cart2.component.ts","./projects/dino/pages/shopping-cart/shopping-cart2.component.html","./projects/dino/pages/terms-of-use/terms-of-use.component.ts","./projects/dino/pages/terms-of-use/terms-of-use.component.html","./projects/dino/pages/wishlist/wishlist.component.ts","./projects/dino/pages/wishlist/wishlist.component.html","./projects/dino/pipes/lookup-category.pipe.ts","./projects/dino/pages/dashboard2/components/targets/dashboard-targets.component.ts","./projects/dino/pages/dashboard2/components/targets/dashboard-targets.component.html","./projects/dino/pages/dashboard2/components/sale-analysis/sale-analysis.component.ts","./projects/dino/pages/dashboard2/components/sale-analysis/sale-analysis.component.html","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents.component.ts","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents.component.html","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents-list/latest-documents-list.component.ts","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents-list/latest-documents-list.component.html","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents-grid/latest-documents-grid.component.ts","./projects/dino/pages/dashboard2/components/latest-documents/latest-documents-grid/latest-documents-grid.component.html","./projects/dino/pages/dashboard2/components/balance/dashboard-balance.component.ts","./projects/dino/pages/dashboard2/components/balance/dashboard-balance.component.html","./projects/dino/pages/dashboard2/components/balance-late/dashboard-balance-late.component.ts","./projects/dino/pages/dashboard2/components/balance-late/dashboard-balance-late.component.html","./projects/dino/pages/dashboard2/dashboard.component.html","./projects/dino/pages/dashboard2/base/base-dashboard-component.ts","./projects/dino/pages/dashboard2/dashboard-window.component.ts","./projects/dino/pages/dashboard2/dashboard-fullscreen.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-edit-mode-dialog/shopping-cart-edit-mode-warning-dialog.component.ts","./projects/dino/pages/shopping-cart/components/shopping-cart-edit-mode-dialog/shopping-cart-edit-mode-warning-dialog.component.html","./projects/dino/components/barcode-external/barcode-external-dialog.component.ts","./projects/dino/components/barcode-external/barcode-external-dialog.component.html","./projects/dino/components/custom-fieldset-form/custom-item-field/custom-item-field.component.ts","./projects/dino/components/custom-fieldset-form/custom-item-field/custom-item-field.component.html","./projects/dino/components/custom-fieldset-form/custom-form-field-edit/custom-form-field-edit.component.ts","./projects/dino/components/custom-fieldset-form/custom-form-field-edit/custom-form-field-edit.component.html","./projects/dino/components/custom-fieldset-form/custom-fieldset-form.component.ts","./projects/dino/components/custom-fieldset-form/custom-fieldset-form.component.html","./projects/dino/components/custom-fieldset-form/custom-form-field/custom-form-field.component.ts","./projects/dino/components/custom-fieldset-form/custom-form-field/custom-form-field.component.html","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset-grid/custom-fieldset-grid.component.ts","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset-grid/custom-fieldset-grid.component.html","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset-list/custom-fieldset-list.component.ts","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset-list/custom-fieldset-list.component.html","./projects/dino/_proxy/endpoints/customfield.endpoint.ts","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset.component.ts","./projects/dino/pages/settings/custom-fieldsets/custom-fieldset.component.html","./projects/dino/pages/settings/custom-fields/custom-field-grid/custom-field-grid.component.ts","./projects/dino/pages/settings/custom-fields/custom-field-grid/custom-field-grid.component.html","./projects/dino/pages/settings/custom-fields/custom-field-list/custom-field-list.component.ts","./projects/dino/pages/settings/custom-fields/custom-field-list/custom-field-list.component.html","./projects/dino/pages/settings/custom-fields/custom-field.component.ts","./projects/dino/pages/settings/custom-fields/custom-field.component.html","./projects/dino/pages/checkout2/components/complete-checkout-button/complete-checkout-button.component.ts","./projects/dino/pages/checkout2/components/complete-checkout-button/complete-checkout-button.component.html","./projects/dino/pages/checkout2/components/checkout-attachments/checkout-attachments.component.ts","./projects/dino/pages/checkout2/components/checkout-attachments/checkout-attachments.component.html","./projects/dino/_proxy/endpoints/distributioncategory.endpoint.ts","./projects/dino/pages/settings/distribution-categories/distribution-category.component.ts","./projects/dino/pages/settings/distribution-categories/distribution-category.component.html","./projects/dino/pages/settings/distribution-categories/distribution-category-grid/distribution-category-grid.component.ts","./projects/dino/pages/settings/distribution-categories/distribution-category-grid/distribution-category-grid.component.html","./projects/dino/pages/settings/distribution-categories/distribution-category-list/distribution-category-list.component.ts","./projects/dino/pages/settings/distribution-categories/distribution-category-list/distribution-category-list.component.html","./projects/dino/pages/settings/distribution-cycles/distribution-cycle.component.ts","./projects/dino/pages/settings/distribution-cycles/distribution-cycle.component.html","./projects/dino/pages/settings/distribution-cycles/distribution-cycle-grid/distribution-cycle-grid.component.ts","./projects/dino/pages/settings/distribution-cycles/distribution-cycle-grid/distribution-cycle-grid.component.html","./projects/dino/pages/settings/distribution-cycles/distribution-cycle-list/distribution-cycle-list.component.ts","./projects/dino/pages/settings/distribution-cycles/distribution-cycle-list/distribution-cycle-list.component.html","./projects/dino/pages/settings/distribution-cycles/distribution-dates-generate-dialog/distribution-dates-generate-dialog.component.ts","./projects/dino/pages/settings/distribution-cycles/distribution-dates-generate-dialog/distribution-dates-generate-dialog.component.html","./projects/dino/pages/settings/options/address-options/address-option.component.ts","./projects/dino/pages/settings/options/address-options/address-option.component.html","./projects/dino/pages/settings/options/address-options/address-option-grid/address-option-grid.component.ts","./projects/dino/pages/settings/options/address-options/address-option-grid/address-option-grid.component.html","./projects/dino/pages/settings/options/address-options/address-option-list/address-option-list.component.ts","./projects/dino/pages/settings/options/address-options/address-option-list/address-option-list.component.html","./projects/dino/pages/documents/components/document-files/document-files.component.ts","./projects/dino/pages/documents/components/document-files/document-files.component.html","./projects/dino/pages/product-catalogue2/item-popup/components/last-sale-info/last-sale-info.component.ts","./projects/dino/pages/product-catalogue2/item-popup/components/last-sale-info/last-sale-info.component.html","./projects/dino/pages/settings/distribution-cycles/distribution-dates-grid/distribution-dates-grid.component.ts","./projects/dino/pages/settings/distribution-cycles/distribution-dates-grid/distribution-dates-grid.component.html","./projects/dino/configs/components.ts","./projects/dino/_proxy/endpoints/addon.endpoint.ts","./projects/dino/_proxy/endpoints/externalqueryfield.endpoint.ts","./projects/dino/_proxy/endpoints/image.endpoint.ts","./projects/dino/configs/endpoints.ts","./projects/dino/pages/checkout2/services/can-deactivate-checkout2.ts","./projects/dino/guards/credential-type.guard.ts","./projects/dino/guards/auth.guard.ts","./projects/dino/guards/device.guard.ts","./projects/dino/configs/services.ts","./projects/dino/configs/routes-protected.ts","./projects/dino/_app.config.ts","./src/base/classes/BaseClasses.ts","./src/base/component/BaseComponent.ts","./src/core/helpers/GridHelper.ts","./src/base/component/BaseGridComponent.ts","./src/base/component/BasePageCRUDComponent.ts","./src/base/component/BasePageComponent.ts","./src/base/component/ServiceBag.ts","./src/base/datalayer/BaseDataStoreReadOnly.ts","./src/base/datalayer/BaseDataStoreCRUD.ts","./src/base/datalayer/BaseDataSourceAbstract.ts","./src/base/datalayer/BaseDataSources.ts","./src/base/datalayer/BaseDataStoreAbstract.ts","./src/base/datalayer/BaseDataStoreCRUDServer.ts","./src/base/datalayer/DataLoadOptions.ts","./src/base/endpoint/BaseEndpoint.ts","./src/base/endpoint/BaseEndpointCRUD.ts","./src/base/entities/BaseEntities.ts","./src/base/grid/Grid.extender.ts","./src/base/grid/Grid.directive.ts","./src/base/service/BaseService.ts","./src/common/Cities.ts","./src/configuration/app.config.model.ts","./src/configuration/app.config.service.ts","./src/core/endpoints/file.endpoint.ts","./src/core/endpoints/genericlist.endpoint.ts","./src/core/endpoints/login.endpoint.ts","./src/core/endpoints/notification-server.endpoint.ts","./src/core/endpoints/notification-template.endpoint.ts","./src/core/endpoints/push-message.endpoint.ts","./src/core/endpoints/share.endpoint.ts","./src/core/endpoints/system-options.endpoint.ts","./src/core/endpoints/system.endpoint.ts","./src/core/framework/bottom-sheet.service.ts","./src/core/framework/client-fingerprint.service.ts","./src/core/framework/confirm-cancel.guard.ts","./src/core/framework/customization-service.ts","./src/core/framework/devexpress.service.ts","./src/base/grid/Grid.defaults.ts","./src/base/pivotgrid/PivotGrid.defaults.ts","./src/core/framework/entity.service.ts","./src/_resources/DEVX.he.ts","./src/_resources/DEVX.es.ts","./src/core/framework/framework.service.ts","./src/core/framework/language.service.ts","./src/core/framework/local-storage.service.ts","./src/core/framework/login.guard.ts","./src/core/framework/login.service.ts","./src/core/framework/navigator.service.ts","./src/core/framework/notification.service.ts","./src/_resources/EN.ts","./src/_resources/HE.ts","./src/_resources/ES.ts","./src/core/framework/resources.service.ts","./src/core/framework/route-history.service.ts","./src/core/framework/screen.service.ts","./src/core/framework/session.service.ts","./src/core/framework/share.service.ts","./src/core/framework/sidebar.service.ts","./src/core/framework/sysenums.enum.ts","./src/core/framework/sysevents.service.ts","./src/core/framework/sysglobals.ts","./src/core/framework/system-options.service.ts","./src/core/framework/ui.service.ts","./src/core/gateway/APIGateway.service.ts","./src/core/helpers/DateExtensions.ts","./src/core/helpers/DateHelpers.ts","./src/core/helpers/Utils.ts","./src/core/injector/injector.module.ts","./src/core/injector/injector.component.ts","./src/ui/demo/models/enum-demo-mobile-phone-color.ts","./src/environment/environment.prod.ts","./src/ui/animations/colorinout.animation.ts","./src/ui/components/general/system-options/Components/system-options-list/system-options-list.component.ts","./src/ui/components/general/system-options/Components/system-options-list/system-options-list.component.html","./src/ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component.ts","./src/ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component.html","./src/ui/components/general/system-options/Components/system-option/system-option.component.ts","./src/ui/components/general/system-options/Components/system-option/system-option.component.html","./src/ui/components/general/system-options/system-options.component.ts","./src/ui/components/general/system-options/system-options.component.html","./src/ui/components/password/password-tooltip/password-tooltip.component.ts","./src/ui/components/password/password-tooltip/password-tooltip.component.html","./src/base/component/NullComponent.ts","./src/ui/layouts/componentlayouts/card/card.component.ts","./src/ui/layouts/componentlayouts/card/card.component.html","./src/ui/layouts/componentlayouts/link/link.component.ts","./src/ui/layouts/componentlayouts/link/link.component.html","./src/ui/animations/slideinout.animation.ts","./src/ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component.ts","./src/ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component.html","./src/ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component.ts","./src/ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component.html","./src/ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component.ts","./src/ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component.html","./src/ui/dialogs/filebox-dialog/fileboxdialog.component.ts","./src/ui/dialogs/filebox-dialog/fileboxdialog.component.html","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.ts","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.html","./src/ui/dialogs/photobox-dialog/photoboxdialog.component.ts","./src/ui/dialogs/photobox-dialog/photoboxdialog.component.html","./src/ui/dialogs/selectbox-dialog/selectboxdialog.component.ts","./src/ui/dialogs/selectbox-dialog/selectboxdialog.component.html","./src/ui/dialogs/signbox-dialog/signboxdialog.component.ts","./src/ui/dialogs/signbox-dialog/signboxdialog.component.html","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.ts","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.html","./src/ui/directives/CustomBuild.ts","./src/ui/components/status-column/status-column.component.ts","./src/ui/components/status-column/status-column.component.html","./src/core/framework/context-menu.service.ts","./src/ui/directives/Directives.ts","./src/ui/directives/FormatSearch.directive.ts","./src/ui/directives/CustomServerSideFilter.directive.ts","./src/ui/directives/Link.directive.ts","./src/ui/directives/ViewContainer.directive.ts","./src/ui/directives/Pipes.ts","./src/ui/directives/Required.directive.ts","./src/ui/directives/ThrottleEvent.directive.ts","./src/core/exceptions/exception.component.ts","./src/core/exceptions/exception.component.html","./src/core/endpoints/history.endpoint.ts","./src/core/framework/nativenotifications.service.ts","./src/core/gateway/APIGateway.intercept.ts","./src/ui/layouts/layout/app.component.ts","./src/ui/layouts/layout/app.component.html","./src/ui/layouts/layout/empty-layout/emptylayout.component.ts","./src/ui/layouts/layout/empty-layout/emptylayout.component.html","./src/ui/layouts/layout/main-layout/mainlayout.component.ts","./src/ui/layouts/layout/main-layout/mainlayout.component.html","./src/ui/layouts/layout/nav-menu/navmenu.component.ts","./src/ui/layouts/layout/nav-menu/navmenu.component.html","./src/ui/components/general/menu-button-list/menu-button-list.component.ts","./src/ui/components/general/menu-button-list/menu-button-list.component.html","./src/ui/layouts/layout/progress-panel/progresspanel.component.ts","./src/ui/layouts/layout/progress-panel/progresspanel.component.html","./src/ui/notifications/push-message-list/push-message-list.component.ts","./src/ui/notifications/push-message-list/push-message-list.component.html","./src/ui/layouts/layout/toolbar/toolbar.component.ts","./src/ui/layouts/layout/toolbar/toolbar.component.html","./src/ui/components/login/coming-soon/comingsoon.component.ts","./src/ui/components/login/coming-soon/comingsoon.component.html","./src/ui/components/login/login/login.component.ts","./src/ui/components/login/login/login.component.html","./src/ui/components/login/login-oauth/login-oauth.component.ts","./src/ui/components/login/login-oauth/login-oauth.component.html","./src/ui/components/login/logout/logout.component.ts","./src/ui/components/login/logout/logout.component.html","./src/ui/components/login/session-expire/sessionexpire.component.ts","./src/ui/components/login/session-expire/sessionexpire.component.html","./src/core/endpoints/credential-activity.endpoint.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.html","./src/core/endpoints/notification.endpoint.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.html","./src/ui/notifications/notifications-history/notificationshistory.component.ts","./src/ui/notifications/notifications-history/notificationshistory.component.html","./src/ui/notifications/notifications-history/notification-view/notificationview.component.ts","./src/ui/notifications/notifications-history/notification-view/notificationview.component.html","./src/ui/components/general/history-view/historyview.component.ts","./src/ui/components/general/history-view/historyview.component.html","./src/_modules/devexpress.module.ts","./src/ui/components/password/password-change/passwordchange.component.ts","./src/ui/components/password/password-change/passwordchange.component.html","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.ts","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.html","./src/ui/components/password/password-recovery/passwordrecovery.component.ts","./src/ui/components/password/password-recovery/passwordrecovery.component.html","./src/ui/components/password/password-welcome/passwordwelcome.component.ts","./src/ui/components/password/password-welcome/passwordwelcome.component.html","./src/ui/components/password/password-manage/passwordmanage.component.ts","./src/ui/components/password/password-manage/passwordmanage.component.html","./src/ui/layouts/componentlayouts/captcha/captcha.component.ts","./src/ui/layouts/componentlayouts/captcha/captcha.component.html","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.ts","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.html","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.ts","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.html","./src/ui/layouts/componentlayouts/search/search.component.ts","./src/ui/layouts/componentlayouts/search/search.component.html","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.ts","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.html","./src/core/framework/injected-components-base.service.ts","./src/ui/layouts/componentlayouts/injected-components/injected-components.component.ts","./src/ui/layouts/componentlayouts/injected-components/injected-components.component.html","./src/ui/components/login/login-by-otp/login-by-otp.component.ts","./src/ui/components/login/login-by-otp/login-by-otp.component.html","./src/ui/notifications/notification-server/list/notification-server-list.component.ts","./src/ui/notifications/notification-server/list/notification-server-list.component.html","./src/ui/notifications/notification-server/notification-server.component.ts","./src/ui/notifications/notification-server/notification-server.component.html","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.ts","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.html","./src/core/mid/mid-store.component.ts","./src/core/mid/mid-store.component.html","./src/ui/demo/components/buttons/demo-buttons.component.ts","./src/ui/demo/components/buttons/demo-buttons.component.html","./src/ui/demo/layouts/demo-layout/demo-layout.component.ts","./src/ui/demo/layouts/demo-layout/demo-layout.component.html","./src/ui/demo/components/editors/demo-editors.component.ts","./src/ui/demo/components/editors/demo-editors.component.html","./src/ui/demo/components/layouts/demo-layouts.component.ts","./src/ui/demo/components/layouts/demo-layouts.component.html","./src/ui/demo/components/sections/demo-sections.component.ts","./src/ui/demo/components/sections/demo-sections.component.html","./src/ui/demo/components/cards/demo-cards.component.ts","./src/ui/demo/components/cards/demo-cards.component.html","./src/ui/demo/components/tabs/demo-tabs.component.ts","./src/ui/demo/components/tabs/demo-tabs.component.html","./src/ui/demo/components/grids/demo-grids.component.ts","./src/ui/demo/components/grids/demo-grids.component.html","./src/ui/demo/components/bottom-sheets/demo-bottom-sheets.component.ts","./src/ui/demo/components/bottom-sheets/demo-bottom-sheets.component.html","./src/ui/demo/components/pages/demo-pages.component.ts","./src/ui/demo/components/pages/demo-pages.component.html","./src/ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component.ts","./src/ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component.html","./src/ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component.ts","./src/ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component.html","./src/ui/demo/components/sidebars/demo-sidebars.component.ts","./src/ui/demo/components/sidebars/demo-sidebars.component.html","./src/ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component.ts","./src/ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component.html","./src/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component.ts","./src/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component.html","./src/ui/dialogs/preview-dialog/previewdialog.component.ts","./src/ui/dialogs/preview-dialog/previewdialog.component.html","./src/ui/demo/components/dialogs/demo-dialogs.component.ts","./src/ui/demo/components/dialogs/demo-dialogs.component.html","./src/ui/demo/components/pipes/demo-pipes.component.ts","./src/ui/demo/components/pipes/demo-pipes.component.html","./src/ui/demo/components/components/demo-components.component.ts","./src/ui/demo/components/components/demo-components.component.html","./src/ui/components/general/credential-login-history/grid/credential-login-history-grid.component.ts","./src/ui/components/general/credential-login-history/grid/credential-login-history-grid.component.html","./src/core/endpoints/webapi-credential.endpoint.ts","./src/ui/components/general/credential-login-history/credential-login-history.component.ts","./src/ui/components/general/credential-login-history/credential-login-history.component.html","./src/core/endpoints/webapi-request.endpoint.ts","./src/ui/components/general/request-history/request-history-grid/request-history-grid.component.ts","./src/ui/components/general/request-history/request-history-grid/request-history-grid.component.html","./src/ui/components/general/request-history/request-history-list/request-history-list.component.ts","./src/ui/components/general/request-history/request-history-list/request-history-list.component.html","./src/ui/components/general/request-history/request-history.component.ts","./src/ui/components/general/request-history/request-history.component.html","./src/core/endpoints/system-credentials.endpoint.ts","./src/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component.ts","./src/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component.html","./src/ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component.ts","./src/ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component.html","./src/ui/components/general/system-credentials/system-credentials.component.ts","./src/ui/components/general/system-credentials/system-credentials.component.html","./src/ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component.html","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.html","./src/core/endpoints/data-editor.endpoint.ts","./src/ui/components/general/data-views/data-view-list.component.ts","./src/ui/components/general/data-views/data-view-list.component.html","./src/core/endpoints/notification-dispatch.endpoint.ts","./src/ui/notifications/notification-dispatch/notification-dispatch.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component.html","./src/core/endpoints/log.endpoint.ts","./src/ui/components/logs/logs.component.ts","./src/ui/components/logs/logs.component.html","./src/_modules/app-routing.module.ts","./src/core/exceptions/exception.handler.ts","./src/environment/environment.model.ts","./src/ui/components/general/commonsettings/commonsetting.component.ts","./src/ui/components/general/commonsettings/commonsetting.component.html","./src/ui/layouts/layout/footer/footer.component.ts","./src/ui/layouts/layout/footer/footer.component.html","./src/ui/components/tabs/tabs.component.ts","./src/ui/components/tabs/tabs.component.html","./src/ui/components/login/base/login-base.component.ts","./src/ui/components/login/base/login-base.component.html","./src/ui/components/button/button.component.ts","./src/ui/components/button/button.component.html","./src/ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component.ts","./src/ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component.html","./src/ui/components/tag/tag.component.ts","./src/ui/components/tag/tag.component.html","./src/ui/components/session-expired/session-expired.component.ts","./src/ui/components/session-expired/session-expired.component.html","./src/ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component.ts","./src/ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component.html","./src/ui/components/tooltip/tooltip.component.ts","./src/ui/components/tooltip/tooltip.component.html","./src/ui/directives/Tooltip.directive.ts","./src/ui/directives/ViewPassword.directive.ts","./src/ui/notifications/push-message-badge/push-message-badge.component.ts","./src/ui/notifications/push-message-badge/push-message-badge.component.html","./src/ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component.ts","./src/ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component.html","./src/ui/notifications/notification-template/notification-template-grid/notification-template-grid.component.ts","./src/ui/notifications/notification-template/notification-template-grid/notification-template-grid.component.html","./src/core/framework/notification-configuration-base.service.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component.html","./src/ui/notifications/push-message/push-message.component.ts","./src/ui/notifications/push-message/push-message.component.html","./src/ui/notifications/push-message-toasts/push-message-toasts.component.ts","./src/ui/notifications/push-message-toasts/push-message-toasts.component.html","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.ts","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.html","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.ts","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.html","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.ts","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.html","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.html","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.ts","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.html","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.ts","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.html","./src/ui/layouts/layout/nav-bar/nav-bar.component.ts","./src/ui/layouts/layout/nav-bar/nav-bar.component.html","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.ts","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.html","./src/ui/layouts/layout/page-filter/page-filter.component.ts","./src/ui/layouts/layout/page-filter/page-filter.component.html","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.ts","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.html","./src/ui/components/spin-loader/spin-loader.component.ts","./src/ui/components/spin-loader/spin-loader.component.html","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.ts","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.html","./src/ui/demo/components/grids/grid/demo-grid.component.ts","./src/ui/demo/components/grids/grid/demo-grid.component.html","./src/ui/components/breadcrumb/breadcrumb.component.ts","./src/ui/components/breadcrumb/breadcrumb.component.html","./src/ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component.ts","./src/ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component.html","./src/ui/components/general/history-view/grid/historyview-grid.component.ts","./src/ui/components/general/history-view/grid/historyview-grid.component.html","./src/core/helpers/HtmlUtils.ts","./src/ui/components/total-balance-card/total-balance-card.component.ts","./src/ui/components/total-balance-card/total-balance-card.component.html","./src/ui/components/icon/icon.component.ts","./src/ui/components/icon/icon.component.html","./src/ui/components/general/data-views/data-views-grid/data-view-grid.component.ts","./src/ui/components/general/data-views/data-views-grid/data-view-grid.component.html","./src/base/pivotgrid/PivotGrid.directive.ts","./src/ui/components/switch-button/switch-button.component.ts","./src/ui/components/switch-button/switch-button.component.html","./src/ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component.html","./src/ui/components/logs/log-grid/log-grid.component.ts","./src/ui/components/logs/log-grid/log-grid.component.html","./src/_modules/m4uangular.module.ts","./src/main.ts","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.html","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.ts","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.html","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.ts","./src/ui/components/pdf-viewer/pdf-viewer.component.html","./src/ui/components/pdf-viewer/pdf-viewer.component.ts","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.html","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.ts","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.html","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.ts","./src/ui/dialogs/messagebox-dialog/messageboxdialog.component.html","./src/ui/dialogs/messagebox-dialog/messageboxdialog.component.ts","./src/ui/dialogs/printbox-dialog/printboxdialog.component.html","./src/ui/dialogs/printbox-dialog/printboxdialog.component.ts","./src/ui/dialogs/share-dialog/share-dialog.component.html","./src/ui/dialogs/share-dialog/share-dialog.component.ts","./src/ui/dialogs/signbox-dialog/signbox/signbox.component.html","./src/ui/dialogs/signbox-dialog/signbox/signbox.component.ts","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component.html","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component.ts","./src/ui/layouts/componentlayouts/page-buttons/pagebuttons.component.html","./src/ui/layouts/componentlayouts/page-buttons/pagebuttons.component.ts","./src/ui/layouts/fieldlayouts/field-detail/fielddetail.component.html","./src/ui/layouts/fieldlayouts/field-detail/fielddetail.component.ts","./src/ui/layouts/fieldlayouts/field-detailx/fielddetailx.component.html","./src/ui/layouts/fieldlayouts/field-detailx/fielddetailx.component.ts","./src/ui/layouts/fieldlayouts/field-form/fieldform.component.html","./src/ui/layouts/fieldlayouts/field-form/fieldform.component.ts","./src/ui/layouts/fieldlayouts/field-formx/fieldformx.component.html","./src/ui/layouts/fieldlayouts/field-formx/fieldformx.component.ts","./src/ui/layouts/fieldlayouts/section/section.component.html","./src/ui/layouts/fieldlayouts/section/section.component.ts","./src/ui/layouts/layout/page-layout/pagelayout.component.html","./src/ui/layouts/layout/page-layout/pagelayout.component.ts","./src/ui/layouts/layout/side-bar/side-bar.component.html","./src/ui/layouts/layout/side-bar/side-bar.component.ts","./src/ui/notifications/notification-template/notification-template.component.html","./src/ui/notifications/notification-template/notification-template.component.ts","./projects|sync|/^/.*/_app/.config$"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","\r\n\r\n\r\nexport enum EnumSystemOptionsZ {\r\n SystemOptionID = \"SystemOptionID\",\r\n PaymentSuccessURL = \"PaymentSuccessURL\",\r\n PaymentBackURL = \"PaymentBackURL\"\r\n\r\n\r\n}\r\nexport enum EnumEntityTypes {\r\n Invoice = \"Invoice\",\r\n Receipt = \"Receipt\",\r\n Order = \"Order\",\r\n PaymentRequest = \"PaymentRequest\",\r\n ContactPerson = \"ContactPerson\",\r\n CustomerAddress = \"CustomerAddress\"\r\n\r\n\r\n}\r\nexport enum EnumInvoicePaymentTypes {\r\n NotPaid = \"NotPaid\",\r\n PaidPartially = \"PaidPartially\",\r\n Paid = \"Paid\",\r\n OutstandingCredit = \"OutstandingCredit\",\r\n Open = \"Open\",\r\n Closed = \"Closed\"\r\n\r\n\r\n}\r\nexport enum EnumLoginRequestTypes {\r\n Payment = \"Payment\",\r\n AgingReport = \"AgingReport\",\r\n PersonDetails = \"PersonDetails\",\r\n Ledger = \"Ledger\"\r\n\r\n\r\n}\r\nexport enum EnumCustomerAddressTypes {\r\n Ship = \"Ship\",\r\n Bill = \"Bill\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentRequestTypes {\r\n PaymentByExistingCard = \"PaymentByExistingCard\",\r\n PaymentByNewCard = \"PaymentByNewCard\",\r\n ChangeCard = \"ChangeCard\",\r\n Paypal = \"Paypal\",\r\n Bit = \"Bit\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentRequestStatuses {\r\n Created = \"Created\",\r\n Sent = \"Sent\",\r\n Confirmed = \"Confirmed\",\r\n Executed = \"Executed\",\r\n Error = \"Error\",\r\n Cancelled = \"Cancelled\",\r\n Resolved = \"Resolved\",\r\n PendingConfirm = \"PendingConfirm\"\r\n\r\n\r\n}\r\nexport enum EnumAutoCreationDocumentTypes {\r\n None = \"None\",\r\n Invoice = \"Invoice\",\r\n Order = \"Order\",\r\n DownPayment = \"DownPayment\"\r\n\r\n}\r\nexport enum EnumFileTypes {\r\n Pdf = \"Pdf\",\r\n Word = \"Word\",\r\n Excel = \"Excel\",\r\n Text = \"Text\",\r\n Archive = \"Archive\",\r\n Html = \"Html\",\r\n Image = \"Image\",\r\n Xml = \"Xml\",\r\n Video = \"Video\",\r\n Email = \"Email\",\r\n Unknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumReportTabs {\r\n Ledger = \"Ledger\",\r\n Invoice = \"Invoice\",\r\n AgingReport = \"AgingReport\",\r\n Delivery = \"Delivery\"\r\n\r\n\r\n}\r\nexport enum EnumUserTypes {\r\n User = \"User\",\r\n Admin = \"Admin\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentRequestSteps {\r\n SendToPaymentService = \"SendToPaymentService\",\r\n ConfirmInPaymentService = \"ConfirmInPaymentService\",\r\n ExecuteInPaymentService = \"ExecuteInPaymentService\",\r\n SaveInvoice = \"SaveInvoice\",\r\n SaveOrder = \"SaveOrder\",\r\n SaveReceipt = \"SaveReceipt\",\r\n UpdateTransactionRefDataInPaymentService = \"UpdateTransactionRefDataInPaymentService\",\r\n SaveCreditCard = \"SaveCreditCard\",\r\n SendInvoice = \"SendInvoice\",\r\n SendOrder = \"SendOrder\",\r\n SendReceipt = \"SendReceipt\",\r\n Rollback = \"Rollback\",\r\n AdminNotificationSent = \"AdminNotificationSent\",\r\n TransferedToPaymentService = \"TransferedToPaymentService\",\r\n AdditionalActionFailed = \"AdditionalActionFailed\",\r\n SaveDownPayment = \"SaveDownPayment\",\r\n CommitTransaction = \"CommitTransaction\"\r\n}\r\n\r\nexport enum EnumSystemTypes {\r\n SBO = \"SBO\",\r\n Zulu = \"Zulu\",\r\n Landlord = \"Landlord\"\r\n\r\n\r\n}\r\nexport enum EnumCredentialTypes {\r\n Admin = \"Admin\",\r\n User = \"User\"\r\n\r\n\r\n}\r\nexport enum EnumCredentialCheckerTypes {\r\n ContactPerson = \"ContactPerson\",\r\n Customer = \"Customer\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentTypes {\r\n LedgerTypes = \"LedgerTypes\",\r\n Delivery = \"Delivery\",\r\n Order = \"Order\",\r\n PriceProposal = \"PriceProposal\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentMethod {\r\n CreditCard = \"CreditCard\",\r\n Paypal = \"Paypal\",\r\n Bit = \"Bit\",\r\n AuthorizeNet = \"AuthorizeNet\"\r\n}\r\n\r\nexport enum EnumCardProcessingServices {\r\n GoCredit = \"GoCredit\",\r\n AuthorizeNet = \"AuthorizeNet\", \r\n}\r\nexport enum EnumDeliveryMethods {\r\n Email = \"Email\",\r\n Phone = \"Phone\",\r\n WhatsApp = \"WhatsApp\",\r\n Portal = \"Portal\",\r\n Unknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentFilteringOption {\r\n ShowOpen = \"ShowOpen\",\r\n ShowAll = \"ShowAll\",\r\n Automatic = \"Automatic\"\r\n\r\n\r\n}\r\n\r\nexport enum EnumDocumentDownloadOption {\r\n PDF = \"PDF\",\r\n ZIP = \"ZIP\"\r\n}\r\n\r\n\r\nexport const Enums = {\r\n EnumSystemOptionsZ: EnumSystemOptionsZ,\r\n EnumEntityTypes: EnumEntityTypes,\r\n EnumInvoicePaymentTypes: EnumInvoicePaymentTypes,\r\n EnumLoginRequestTypes: EnumLoginRequestTypes,\r\n EnumCustomerAddressTypes: EnumCustomerAddressTypes,\r\n EnumPaymentRequestTypes: EnumPaymentRequestTypes,\r\n EnumPaymentRequestStatuses: EnumPaymentRequestStatuses,\r\n EnumAutoCreationDocumentTypes: EnumAutoCreationDocumentTypes,\r\n EnumFileTypes: EnumFileTypes,\r\n EnumReportTabs: EnumReportTabs,\r\n EnumUserTypes: EnumUserTypes,\r\n EnumPaymentRequestSteps: EnumPaymentRequestSteps,\r\n EnumSystemTypes: EnumSystemTypes,\r\n EnumCredentialTypes: EnumCredentialTypes,\r\n EnumCredentialCheckerTypes: EnumCredentialCheckerTypes,\r\n EnumDocumentTypes: EnumDocumentTypes,\r\n EnumPaymentMethod: EnumPaymentMethod,\r\n EnumDeliveryMethods: EnumDeliveryMethods,\r\n EnumDocumentFilteringOption: EnumDocumentFilteringOption,\r\n EnumDocumentDownloadOption: EnumDocumentDownloadOption\r\n};\r\n\r\n\r\n\r\n","import { Component, ElementRef, ViewChild } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { PaymentRequestEndpoint } from '@dato-proxy/endpoints/paymentrequest.endpoint';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { DocumentLine } from '@dato-proxy/entities/documentline.entity';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { EnumCardProcessingServices, EnumDeliveryMethods, EnumDocumentTypes, EnumPaymentMethod } from '@dato-proxy/enums';\r\nimport { ConfirmPaymentRequestParams } from '@dato-proxy/params/confirmpaymentrequest.param';\r\nimport { MakePaymentParams } from '@dato-proxy/params/makepayment.param';\r\nimport { PaymentRequestResponseParams } from '@dato-proxy/params/paymentrequestresponse.param';\r\nimport { PaymentConfigView } from '@dato-proxy/views/paymentconfig.view';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { Steps } from 'primeng/steps';\r\nimport { Globals } from '../../_globals';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\nenum EnumCreditCardPaymentType {\r\n Existing = 'Old',\r\n New = 'New'\r\n}\r\n\r\nenum EnumStepType {\r\n PaymentDetails,\r\n DocumentDetails,\r\n Payment,\r\n Final\r\n}\r\n\r\nclass State extends BaseState {\r\n Steps: MenuItem[] = [];\r\n Step: number;\r\n StepType: EnumStepType;\r\n PaymentMethod: EnumPaymentMethod;\r\n PaymentTotal: number;\r\n IsPartialPayment: boolean;\r\n NumberOfPayments: number;\r\n ReceiptEmail: string;\r\n DeliveryMethods = [];\r\n DeliveryMethod: EnumDeliveryMethods;\r\n CreditCardPaymentType: EnumCreditCardPaymentType;\r\n IsSaveCardNumberAsDefault: boolean;\r\n IsAgreeWithTermsOfUse: boolean;\r\n\r\n Documents: BaseDocument[] = Globals.PaymentDocuments;\r\n DocumentItems: DocumentLine[] = [];\r\n SelectedDocumentItems: DocumentLine[] = [];\r\n Options = Globals.SystemOption;\r\n\r\n VisibleLoadPanel: boolean;\r\n Currency: string;\r\n CustomerCardNumber: string;\r\n IsAllowPartialPayment: boolean;\r\n NewCreditCardUrl: SafeResourceUrl;\r\n IsSucceedPayment: boolean;\r\n IsLargeIframe: boolean;\r\n ErrorMessage: string;\r\n IsAccountPayment: boolean = false;\r\n\r\n PaymentRequest: PaymentRequest;\r\n AuthorizeNetToken: string;\r\n PrivateRequestID: string;\r\n AuthorizeNetUrl: SafeResourceUrl;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-dialog',\r\n templateUrl: './payment-dialog.component.html',\r\n styleUrls: ['./payment-dialog.component.scss']\r\n})\r\nexport class PaymentDialogComponent extends BasePageComponent {\r\n\r\n EnumPaymentMethod = EnumPaymentMethod;\r\n EnumStepType = EnumStepType;\r\n EnumCreditCardPaymentType = EnumCreditCardPaymentType;\r\n\r\n CreditCardPaymentTypes = [...this.LIST('ChoiseCardByPayment')];\r\n EnumCardProcessingServices = EnumCardProcessingServices;\r\n\r\n private formSubmitted: boolean = false;\r\n\r\n get Steps(): MenuItem[] {\r\n const steps = [\r\n { id: EnumStepType.PaymentDetails.toString(), label: this.RC('titlePaymentDetails') },\r\n { id: EnumStepType.Payment.toString(), label: this.RC('titlePayment') }\r\n ];\r\n if (this.State.IsPartialPayment) {\r\n steps.splice(1, 0, { id: EnumStepType.DocumentDetails.toString(), label: this.RC('titleDocumentDetails') });\r\n }\r\n return steps;\r\n }\r\n\r\n get DeliveryMethods() {\r\n const deliveryMethods = [];\r\n if (this.State.Options.InvoiceOneIsAllowEmail) deliveryMethods.push({...this.LISTITEMX('DeliveryMethods', EnumDeliveryMethods.Email)});\r\n if (this.State.Options.InvoiceOneIsAllowSMS) deliveryMethods.push({...this.LISTITEMX('DeliveryMethods', EnumDeliveryMethods.Phone)});\r\n if (this.State.Options.InvoiceOneIsAllowWhatsapp) deliveryMethods.push({...this.LISTITEMX('DeliveryMethods', EnumDeliveryMethods.WhatsApp)});\r\n return deliveryMethods;\r\n }\r\n\r\n PaymentNumbers = Array.from(Array(this.State.Options.MaxNumberOfPayments).keys())\r\n .map(x => {\r\n return { Text: formatNumber(x + 1, this.F.NumberQuantity), Value: x + 1 }; \r\n });\r\n\r\n @ViewChild('steps') steps: Steps;\r\n @ViewChild('page') pageLayout: PageLayoutComponent;\r\n @ViewChild('iframe') iframe: ElementRef;\r\n @ViewChild('sendTokenForm') sendTokenForm: ElementRef;\r\n\r\n constructor(A: ServiceBagService,\r\n private paymentRequestEndpoint: PaymentRequestEndpoint,\r\n private sanitizer: DomSanitizer,\r\n private deviceDetector: DeviceDetectorService) {\r\n super(A, 'PaymentDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (!this.State.Options.IsAllowPayment) {\r\n this.UI.StopMessage('Payment is not allowed');\r\n this.CloseDialogWithCancel();\r\n return;\r\n }\r\n \r\n this.State.IsLargeIframe = false;\r\n this.State.Step = 0;\r\n\r\n this.State.NumberOfPayments = 1;\r\n this.State.Documents = Globals.PaymentDocuments;\r\n this.State.IsAccountPayment = Globals.IsAccountPayment;\r\n this.State.PaymentTotal = this.State.IsAccountPayment \r\n ? 0 \r\n : this.State.Documents.reduce((sum, current) => sum + current.PaymentSum, 0);\r\n\r\n let entryID, transType = 0;\r\n this.State.VisibleLoadPanel = true;\r\n\r\n if (!this.State.IsAccountPayment) {\r\n const firstDocument = this.State.Documents[0];\r\n entryID = firstDocument.EntryID;\r\n transType = firstDocument.TransType;\r\n }\r\n\r\n this.InitSteps();\r\n this.InitDeliveryMethods();\r\n \r\n this.Do(this.paymentRequestEndpoint.GetPaymentConfig(entryID, transType, this.State.IsAccountPayment), false, (response: BaseEntityResponse) => {\r\n\r\n this.State.PaymentMethod = response.Entity.PaymentProcessingService == EnumCardProcessingServices.GoCredit ? EnumPaymentMethod.CreditCard : EnumPaymentMethod.AuthorizeNet;\r\n this.State.IsSaveCardNumberAsDefault = response.Entity.PaymentProcessingService == EnumCardProcessingServices.GoCredit ? true : false;\r\n\r\n this.State.CustomerCardNumber = response.Entity.CustomerCardNumber;\r\n this.State.Currency = response.Entity.Currency;\r\n this.CreditCardPaymentTypes = Utils.CloneObject(this.LIST('ChoiseCardByPayment'));\r\n this.CreditCardPaymentTypes.forEach(x => x.Text = x.Text.replace('{0}', this.State.CustomerCardNumber));\r\n\r\n this.State.ReceiptEmail = response.Entity.Email;\r\n this.State.DeliveryMethod = !response.Entity.DeliveryMethod || response.Entity.DeliveryMethod === EnumDeliveryMethods.Unknown \r\n ? this.State.DeliveryMethods[0]?.Value : response.Entity.DeliveryMethod;\r\n this.State.DocumentItems = response.Entity.DocumentLines || [];\r\n this.State.IsAllowPartialPayment = this.State.Options.IsAllowPaymentByDocumentItems && this.State.DocumentItems?.length && this.State.Documents.length < 2 && !this.State.IsAccountPayment;\r\n this.State.CreditCardPaymentType = this.State.Options.IsAllowPaymentByExistsCreditCard && response.Entity.PaymentProcessingService === EnumCardProcessingServices.GoCredit\r\n && !Utils.IsEmpty(this.State.CustomerCardNumber) ? EnumCreditCardPaymentType.Existing : EnumCreditCardPaymentType.New;\r\n this.State.VisibleLoadPanel = false;\r\n this.NotifyReloadTitle();\r\n setTimeout(() => this.A.Screen.IsMobile() && this.pageLayout?.popup?.instance?.repaint());\r\n }, (response: BaseEntityResponse) => {\r\n this.State.VisibleLoadPanel = false;\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.CloseDialogWithCancel();\r\n });\r\n\r\n // Init reload actions\r\n (window.document as any).OnSuccessfulPayment = (privateRequestID: string) => {\r\n this.ConfirmPaymentRequest(privateRequestID); \r\n };\r\n (window.document as any).OnBackPayment = () => {\r\n this.CloseDialogWithCancel(); \r\n };\r\n\r\n window.onmessage = (event: any) => {\r\n if (event.data.type && event.data.type == 'OnHeightChanged') {\r\n this.ResizeIframe(event.data.height);\r\n }\r\n };\r\n\r\n // Define CommunicationHandler\r\n (window as any).CommunicationHandler = (window as any).CommunicationHandler || {};\r\n (window as any).CommunicationHandler.onReceiveCommunication = this.onReceiveCommunication.bind(this);\r\n\r\n }\r\n\r\n private onReceiveCommunication(data: { qstr: string; parent: string }) {\r\n const querystr = data.qstr;\r\n const params = this.parseQueryString(querystr);\r\n\r\n console.log(params);\r\n\r\n switch (params['action']) {\r\n case 'cancel':\r\n // Handle cancel\r\n this.CloseDialogWithCancel();\r\n break;\r\n case 'resizeWindow':\r\n const w = parseInt(params['width'], 10);\r\n const h = parseInt(params['height'], 10);\r\n const ifrm = this.iframe?.nativeElement;\r\n if (ifrm) {\r\n this.ResizeIframe(h, w);\r\n }\r\n break;\r\n case 'transactResponse':\r\n // Handle transaction response\r\n if (params['response']) {\r\n\r\n const messageData = JSON.parse(params['response']);\r\n\r\n if (messageData && messageData.responseCode === '1') {\r\n // Transaction approved\r\n this.ConfirmPaymentRequest(this.State.PrivateRequestID, messageData.transId);\r\n }\r\n } else {\r\n // Transaction failed or canceled\r\n this.CloseDialogWithCancel();\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n this.steps?.activeIndexChange.emit(this.State.Step);\r\n this.Repaint(true);\r\n }\r\n\r\n override OnInitTitle() {\r\n if (this.State.Documents?.length) {\r\n if (this.State.Documents.length === 1) {\r\n return `${this.RC('titlePaymentByOneDoc')} ${this.State.Documents[0].DocumentNumber}`;\r\n } else if (this.State.Documents.length > 1) {\r\n return this.RC('titlePaymentByManyDocs')?.replace('{n}', this.State.Documents.length.toString());\r\n }\r\n }\r\n\r\n return this.RC('titlePayment');\r\n }\r\n\r\n override OnIsDirtyDisabled(): boolean {\r\n return true;\r\n }\r\n\r\n private ConfirmPaymentRequest(privateRequestID: string, authorizeNetTransID: string = null) {\r\n // Show loading panel\r\n this.State.VisibleLoadPanel = true;\r\n\r\n // Update params\r\n const params = new ConfirmPaymentRequestParams();\r\n params.IsSaveCardNumberAsDefault = this.State.IsSaveCardNumberAsDefault;\r\n params.PrivateID = privateRequestID;\r\n params.AuthorizeNetTransID = authorizeNetTransID;\r\n\r\n // Excecute confirm\r\n this.Do(this.paymentRequestEndpoint.Confirm(params), false, (response: PaymentRequestResponseParams) => {\r\n this.State.CustomerCardNumber = response.CreditCardNumber;\r\n this.ShowPaymentResult(true);\r\n }, () => {\r\n this.ShowPaymentResult(false);\r\n });\r\n }\r\n\r\n private ShowPaymentResult(isSuccess: boolean, response?: PaymentRequestResponseParams, errorMessage?: string) {\r\n this.State.IsSucceedPayment = isSuccess;\r\n this.State.VisibleLoadPanel = false;\r\n this.State.ErrorMessage = errorMessage;\r\n\r\n if (isSuccess) this.NotifyEntitySaved(undefined, PaymentRequest);\r\n else {\r\n if (response && response.IsGoCreditError) {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n }\r\n }\r\n \r\n this.State.Step = this.Steps.length;\r\n this.steps.activeIndexChange.emit(this.State.Step);\r\n }\r\n\r\n IsValidTotalSum = () => {\r\n return this.State.PaymentTotal > 0;\r\n };\r\n\r\n IsValidReceiptTarget = () => {\r\n return this.State.DeliveryMethod === EnumDeliveryMethods.Email\r\n ? (Utils.IsEmpty(this.State.ReceiptEmail) || Utils.IsEmail(this.State.ReceiptEmail, true))\r\n : (Utils.IsEmpty(this.State.ReceiptEmail) || !Utils.IsEmail(this.State.ReceiptEmail, true));\r\n };\r\n\r\n GetReceiptTargetValidationMessage() {\r\n return this.State.DeliveryMethod === EnumDeliveryMethods.Email\r\n ? this.RC('msgValidationEmailNotValid')\r\n : this.RC('msgValidationReceiptTargetNotValid');\r\n }\r\n\r\n OnDeliveryMethodChanged(e) {\r\n // this is for validation rule reevaluation\r\n const receiptEmail = this.State.ReceiptEmail;\r\n this.State.ReceiptEmail = '';\r\n setTimeout(() => this.State.ReceiptEmail = receiptEmail);\r\n }\r\n\r\n OnPaymentMethodSelected(type: EnumPaymentMethod) {\r\n this.State.PaymentMethod = type;\r\n this.State.NumberOfPayments = 1;\r\n }\r\n\r\n OKText() {\r\n return this.State.StepType === EnumStepType.Payment ? this.RC('linkDocumentPayNow') : \r\n this.State.StepType === EnumStepType.Final ? this.RC('lblFinish') : this.RC('lblNext');\r\n }\r\n\r\n OnOK() {\r\n if (this.State.StepType === EnumStepType.Final) {\r\n this.State.IsSucceedPayment ? this.CloseDialogWithSuccess() : this.CloseDialogWithCancel();\r\n return;\r\n }\r\n\r\n if (this.State.StepType === EnumStepType.Payment) {\r\n this.OnPay();\r\n }\r\n\r\n this.State.Step++;\r\n this.steps.activeIndexChange.emit(this.State.Step);\r\n }\r\n\r\n CancelText() {\r\n return this.State.StepType === EnumStepType.PaymentDetails ? this.RC('genCancel') : this.RC('lblBack');\r\n }\r\n\r\n OnCancel() {\r\n if (this.State.StepType === EnumStepType.PaymentDetails) {\r\n this.CloseDialogWithCancel();\r\n } else {\r\n this.State.Step--;\r\n this.steps.activeIndexChange.emit(this.State.Step);\r\n }\r\n }\r\n\r\n private OnPay() {\r\n\r\n if (this.State.PaymentMethod === EnumPaymentMethod.AuthorizeNet) {\r\n this.ShowNewCardDetails();\r\n return;\r\n }\r\n\r\n if (this.State.PaymentMethod === EnumPaymentMethod.CreditCard) {\r\n this.State.VisibleLoadPanel = true;\r\n this.Do(this.paymentRequestEndpoint.Execute(this.GetMakePaymentParams()), false, (response) => {\r\n this.State.CustomerCardNumber = response.CreditCardNumber;\r\n this.ShowPaymentResult(true, response);\r\n }, (response) => this.ShowPaymentResult(false, response));\r\n return;\r\n }\r\n this.SendPaymentRequest((response) => {\r\n const externalPaymentUrl = response.Entity.Url;\r\n window.location.href = externalPaymentUrl;\r\n });\r\n }\r\n\r\n private ShowNewCardDetails() {\r\n if (this.State.PaymentMethod !== EnumPaymentMethod.CreditCard &&\r\n this.State.PaymentMethod !== EnumPaymentMethod.AuthorizeNet) return;\r\n\r\n this.SendPaymentRequest((response) => {\r\n switch (this.State.PaymentMethod) {\r\n case EnumPaymentMethod.CreditCard:\r\n this.State.NewCreditCardUrl = this.sanitizer.bypassSecurityTrustResourceUrl(response.Entity.Url);\r\n break;\r\n case EnumPaymentMethod.AuthorizeNet:\r\n // Get the URL with the token in the fragment\r\n const urlWithParams = response.Entity.Url;\r\n\r\n // Split the URL at the '?' character to separate the base URL and query string\r\n const [iframeUrl, queryString] = urlWithParams.split('?');\r\n\r\n // Parse the query string manually to extract privateID and token\r\n const params = this.parseQueryString(queryString);\r\n\r\n // Extract the token and privateID\r\n this.State.AuthorizeNetToken = params['token'];\r\n this.State.PrivateRequestID = params['privateID'];\r\n\r\n // Update the iframe source without query parameters\r\n this.State.AuthorizeNetUrl = this.sanitizer.bypassSecurityTrustResourceUrl(iframeUrl);\r\n\r\n // Set the NewCreditCardUrl to an empty trusted URL\r\n this.State.NewCreditCardUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\r\n\r\n // Do submit for the token form \r\n setTimeout(() => this.sendTokenForm.nativeElement.submit(), 500);\r\n\r\n break;\r\n }\r\n\r\n this.Repaint();\r\n });\r\n }\r\n\r\n // Helper method to parse the query string safely\r\n private parseQueryString(queryString: string): { [key: string]: string } {\r\n const params: { [key: string]: string } = {};\r\n if (!queryString) return params;\r\n\r\n // Regular expression to match key=value pairs\r\n const regex = /([^&=]+)=?([^&]*)/g;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = regex.exec(queryString))) {\r\n const key = decodeURIComponent(match[1]);\r\n const value = decodeURIComponent(match[2] || '');\r\n params[key] = value;\r\n }\r\n return params;\r\n }\r\n\r\n private SendPaymentRequest(callback: (response: BaseEntityResponse) => void) {\r\n this.State.VisibleLoadPanel = true;\r\n\r\n this.Do(this.paymentRequestEndpoint.Send(this.GetMakePaymentParams()), false, (response: BaseEntityResponse) => {\r\n this.State.VisibleLoadPanel = false;\r\n callback(response);\r\n }, (response) => {\r\n this.State.VisibleLoadPanel = false;\r\n this.ShowPaymentResult(false);\r\n this.UI.StopMessage(response.ResponseMessage);\r\n });\r\n }\r\n\r\n private GetMakePaymentParams() {\r\n const params = new MakePaymentParams();\r\n params.Sum = this.State.PaymentTotal;\r\n params.Currency = this.State.Currency;\r\n params.NumberOfPayments = this.State.NumberOfPayments;\r\n params.DocumentIDs = this.State.Documents.map(x => x.EntryID) || [];\r\n params.Email = this.State.ReceiptEmail;\r\n params.DeliveryMethod = this.State.DeliveryMethod;\r\n params.PaymentMethod = this.State.PaymentMethod;\r\n params.SessionID = this.A.Session.SessionID;\r\n params.IsAccountPayment = this.State.IsAccountPayment;\r\n\r\n if (this.State.Options.IsEnableMultiCompany && ! params.IsAccountPayment) {\r\n params.CompanyID = this.State.Documents[0].CompanyID; \r\n }\r\n if (this.State.Options.IsAllowPaymentByDocumentItems && this.State.SelectedDocumentItems) {\r\n params.DocumentLineIDs = this.State.SelectedDocumentItems.map(x => (x as any).LineID) || []; \r\n }\r\n\r\n if (!params.IsAccountPayment) {\r\n const firstDocument = this.State.Documents[0];\r\n params.DocumentsType = this.GetDocumentType(firstDocument.TransType);\r\n }\r\n\r\n return params;\r\n }\r\n\r\n private GetDocumentType(transType: number) {\r\n switch (transType) {\r\n case 15: return EnumDocumentTypes.Delivery;\r\n case 17: return EnumDocumentTypes.Order;\r\n case 23: return EnumDocumentTypes.PriceProposal;\r\n default: EnumDocumentTypes.LedgerTypes;\r\n }\r\n }\r\n\r\n OnCreditCardPaymentTypeChanged() {\r\n if (this.State.CreditCardPaymentType === EnumCreditCardPaymentType.New) {\r\n this.ShowNewCardDetails();\r\n } else {\r\n this.State.NewCreditCardUrl = null;\r\n }\r\n }\r\n\r\n OnSelectedLineIDsChange(selectedLines: DocumentLine[]) {\r\n this.State.PaymentTotal = selectedLines.reduce((sum, current) => sum + current.TotalSum, 0);\r\n this.State.SelectedDocumentItems = selectedLines;\r\n }\r\n\r\n OnStepChanged(e) {\r\n if (Utils.IsEmpty(e) || !this.Steps || !this.Steps.length) return;\r\n\r\n this.State.StepType = e === this.Steps.length ? EnumStepType.Final : +this.Steps[e].id as EnumStepType;\r\n if (this.State.StepType === EnumStepType.Payment) {\r\n if ((this.State.PaymentMethod === EnumPaymentMethod.CreditCard || this.State.PaymentMethod === EnumPaymentMethod.AuthorizeNet)\r\n && this.State.CreditCardPaymentType === EnumCreditCardPaymentType.New) {\r\n this.ShowNewCardDetails();\r\n return;\r\n }\r\n if (this.State.PaymentMethod === EnumPaymentMethod.Paypal || this.State.PaymentMethod === EnumPaymentMethod.Bit) {\r\n this.OnPay();\r\n return;\r\n }\r\n }\r\n this.Repaint(true);\r\n }\r\n\r\n GetPaymentMethod() {\r\n switch (this.State.PaymentMethod) {\r\n case EnumPaymentMethod.CreditCard: return this.State.CustomerCardNumber ? `****${this.State.CustomerCardNumber}` : this.RC('lblCreditCard');\r\n case EnumPaymentMethod.Paypal: return this.RC('lblPaypal');\r\n case EnumPaymentMethod.Bit: return this.RC('lblBit');\r\n }\r\n }\r\n\r\n Repaint(isAutoHeight?: boolean) {\r\n const popupInstance = this.pageLayout?.popup?.instance as any;\r\n if (!popupInstance) return;\r\n\r\n if (isAutoHeight) popupInstance.option('height', 'auto');\r\n setTimeout(() => popupInstance.repaint());\r\n }\r\n\r\n ResizeIframe = (iframeHeight: number, iframeWidth: number = 0) => {\r\n if (iframeHeight == null || iframeHeight == 0) return;\r\n\r\n this.State.VisibleLoadPanel = true;\r\n\r\n const iframeHeightPx = `${iframeHeight}px`;\r\n const iframeWidthPx = iframeWidth > 0 ? `${iframeWidth}px` : null;\r\n\r\n const popupInstance = this.pageLayout?.popup?.instance as any;\r\n if (popupInstance) {\r\n // Set iframe height\r\n this.iframe.nativeElement.style.height = iframeHeightPx;\r\n // Set iframe width if provided\r\n if (iframeWidthPx) {\r\n this.iframe.nativeElement.style.width = iframeWidthPx;\r\n }\r\n\r\n const iframeRect = this.iframe.nativeElement.getBoundingClientRect();\r\n const iframeTop = iframeRect.top;\r\n\r\n const popupContent = popupInstance.content();\r\n const popupTop = popupContent.getBoundingClientRect().top;\r\n const popupPadding = parseFloat(\r\n window.getComputedStyle(\r\n popupContent.querySelector(`.${popupInstance.content().classList[0]} .page-body`)\r\n ).padding\r\n );\r\n\r\n const calculatedPopupHeight = iframeTop - popupTop + iframeHeight + popupPadding;\r\n const maxHeight = window.innerHeight - 20; // some indent to make it look like a window\r\n this.State.IsLargeIframe = calculatedPopupHeight > maxHeight;\r\n\r\n const newPopupHeight = this.State.IsLargeIframe ? maxHeight : calculatedPopupHeight;\r\n popupInstance.option('height', newPopupHeight);\r\n\r\n // Optionally adjust popup width if iframeWidth is provided\r\n if (iframeWidth > 0) {\r\n const calculatedPopupWidth = iframeWidth + popupPadding * 2;\r\n const maxWidth = window.innerWidth - 20;\r\n const newPopupWidth = calculatedPopupWidth > maxWidth ? maxWidth : calculatedPopupWidth;\r\n popupInstance.option('width', newPopupWidth);\r\n }\r\n\r\n this.Repaint();\r\n } else {\r\n const iframes = document.querySelectorAll('.sheet-content iframe');\r\n const iframe = iframes.length && iframes[iframes.length - 1] as HTMLElement;\r\n\r\n if (iframe) {\r\n iframe.style.height = iframeHeightPx;\r\n if (iframeWidthPx) {\r\n iframe.style.width = iframeWidthPx;\r\n }\r\n }\r\n }\r\n\r\n this.State.VisibleLoadPanel = false;\r\n };\r\n\r\n\r\n InitSteps() {\r\n this.State.Steps = this.Steps;\r\n }\r\n\r\n InitDeliveryMethods() {\r\n this.State.DeliveryMethods = this.DeliveryMethods;\r\n }\r\n\r\n OnIsPartialPaymentChanged() {\r\n this.InitSteps();\r\n }\r\n\r\n IsDeliveryMethodVisible() {\r\n return [this.State.Options.InvoiceOneIsAllowEmail, this.State.Options.InvoiceOneIsAllowSMS, this.State.Options.InvoiceOneIsAllowWhatsapp]\r\n .reduce((sum, current) => sum += +current, 0) > 1;\r\n }\r\n\r\n IsBitMethodVisible() {\r\n return this.State.Options.IsAllowBitPayment && (this.deviceDetector.os === 'Android' || this.deviceDetector.os === 'iOS');\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class BaseDocument extends BaseEntity\r\n{ \r\n public DocumentNumber: number; \r\n public SBODocumentEntry: number; \r\n public CustomerID: number; \r\n public ContactPersonID: number; \r\n public TransType: number; \r\n public PdfUrl: string; \r\n public DocumentCurrency: string; \r\n public OpenSumOrigin: number; \r\n public CurrencyOrigin: string; \r\n public CountFiles: number; \r\n public CompanyID: number; \r\n public PaymentSum: number; \r\n public PaymentCurrency: string; \r\n public TransTypeString: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nexport class BaseTransDocument extends BaseDocument\r\n{ \r\n public RefDate: Date; \r\n public DueDate: Date; \r\n public OpenSum: number; \r\n public IsOpen: boolean; \r\n public Comments: string; \r\n public IsPaymentAllowed: boolean; \r\n public AdditionalNotes: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nexport class AgingTransDocument extends BaseTransDocument\r\n{ \r\n public AgingDays: number; \r\n public TotalSum: number; \r\n public OpenSumFeature: number; \r\n public OpenSum1_30: number; \r\n public OpenSum31_60: number; \r\n public OpenSum61_90: number; \r\n public OpenSum90_180: number; \r\n public OpenSum180Plus: number; \r\n public TotalSumFeature: number; \r\n public TotalSum1_30: number; \r\n public TotalSum31_60: number; \r\n public TotalSum61_90: number; \r\n public TotalSum90_180: number; \r\n public TotalSum180Plus: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { SystemOptionView } from '@dato-proxy/views/systemoption.view';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\nexport class GlobalsClass {\r\n SystemOption: SystemOptionView;\r\n IsActiveUser: boolean;\r\n PaymentDocuments: BaseDocument[];\r\n IsAccountPayment: boolean;\r\n\r\n IsAllowAccounting() {\r\n if (!this.SystemOption) {\r\n return false; \r\n }\r\n\r\n return this.SystemOption.IsAllowLedger || this.SystemOption.IsAllowInvoices \r\n || this.SystemOption.IsAllowAgingReport || this.SystemOption.IsAllowDeliveries;\r\n }\r\n\r\n get MonthAgoDate(): Date {\r\n return DateHelpers.AddMonth(new Date(), -1);// new Date(new Date().getFullYear(), new Date().getMonth(), 0); \r\n }\r\n get ThreeMonthsAgoDate(): Date {\r\n return DateHelpers.AddMonth(new Date(), -3);//return new Date(new Date().getFullYear(), new Date().getMonth() - 3, 0); \r\n }\r\n get SixMonthsAgoDate(): Date {\r\n return DateHelpers.AddMonth(new Date(), -6);//return new Date(new Date().getFullYear(), new Date().getMonth() - 6, 0); \r\n }\r\n get YearAgoDate(): Date { \r\n const date = new Date();\r\n date.setFullYear(date.getFullYear() - 1);\r\n return date;\r\n }\r\n get Today(): Date {\r\n return new Date();\r\n }\r\n}\r\n\r\nexport const Globals = new GlobalsClass();\r\n","import { BaseTransDocument } from '@dato-proxy/entities/basetransdocument.entity';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Globals } from '../../_globals';\r\nimport { CompanyView } from '@dato-proxy/views/company.view';\r\n\r\nclass State extends BaseState {\r\n IsShowAdditionalNotes: boolean;\r\n IsActiveUser: boolean;\r\n IsAllowPayment: boolean;\r\n IsEnableMultiCompany: boolean;\r\n}\r\n@Component({\r\n selector: 'base-grid-document',\r\n template: '
'\r\n})\r\nexport abstract class BaseGridDocumentComponent extends BaseGridComponent {\r\n\r\n @Input() IsShowAttachments: boolean;\r\n @Input() Companies: CompanyView[];\r\n @Input() QuickFilters: TemplateRef;\r\n\r\n @Output() SelectionChanged: EventEmitter = new EventEmitter();\r\n @Output() PayByOne: EventEmitter = new EventEmitter();\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n @Output() ShowFiles: EventEmitter = new EventEmitter();\r\n\r\n constructor(public override A: ServiceBagService, public override ComponentName: string, EntityType: (new () => TEntity)) {\r\n super(A, ComponentName, EntityType, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsShowAdditionalNotes = Globals.SystemOption.IsShowAdditionalNotes;\r\n this.State.IsActiveUser = Globals.IsActiveUser;\r\n this.State.IsAllowPayment = Globals.SystemOption.IsAllowPayment;\r\n this.State.IsEnableMultiCompany = Globals.SystemOption.IsEnableMultiCompany;\r\n }\r\n\r\n OnPay(Document: BaseDocument) {\r\n this.ClearSelection();\r\n this.PayByOne.emit(Document);\r\n }\r\n\r\n IsDocNumDisabled = (cell) => {\r\n return !cell?.data || (!this.IsAllowedToViewUnsent(cell?.data?.TransType) && !cell?.data?.PdfUrl) ;\r\n }\r\n\r\n private IsAllowedToViewUnsent(transType: number): boolean {\r\n switch (transType) {\r\n case (13): case (14): {\r\n return Globals.SystemOption.IsAllowViewingUnsentInvoices;\r\n }\r\n case (15): case (16): {\r\n return Globals.SystemOption.IsAllowViewingUnsentDeliveries;\r\n }\r\n case (24): {\r\n return Globals.SystemOption.IsAllowViewingUnsentReceipt;\r\n }\r\n default: {return false }\r\n }\r\n }\r\n\r\n OnDocNumClick(cell: any) {\r\n const document = cell?.data as BaseDocument;\r\n if (!document) return;\r\n\r\n this.DocNumClick.emit(document);\r\n }\r\n\r\n OnSelectionChanged(e) {\r\n const documents = e.selectedRowsData as BaseDocument[];\r\n\r\n const documentsForClear = documents.filter(x => !x.PaymentSum || x.PaymentSum === 0 || (x as BaseTransDocument).IsPaymentAllowed == false);\r\n this.grid.instance.deselectRows(documentsForClear.map(x => x.EntryID));\r\n \r\n this.SelectionChanged.emit(documents);\r\n }\r\n\r\n OnCellPrepared(e) {\r\n if (e.column.command == 'select') {\r\n const document = e.data as BaseDocument;\r\n\r\n if (document && (!document.PaymentSum || document.PaymentSum == 0 || (document as BaseTransDocument).IsPaymentAllowed == false)) {\r\n (e.cellElement.children[0] as HTMLElement).style.visibility = 'hidden';\r\n }\r\n }\r\n }\r\n\r\n OnShowFiles(document: BaseDocument) {\r\n this.ShowFiles.emit(document);\r\n }\r\n\r\n ClearSelection() {\r\n this.grid.selectedRowKeys = [];\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'quickFilters',\r\n isCustom: true\r\n });\r\n }\r\n}\r\n","import { AgingTransDocument } from '@dato-proxy/entities/agingtransdocument.entity';\r\nimport { BaseGridDocumentComponent } from '@dato-pages/base/base-grid-document-component';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-report-grid',\r\n templateUrl: './aging-report-grid.component.html',\r\n styleUrls: ['./aging-report-grid.component.scss']\r\n})\r\nexport class AgingReportGridComponent extends BaseGridDocumentComponent {\r\n @Input() public IsOpen: boolean;\r\n @Input() public Currency: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AgingReportGridComponent', AgingTransDocument);\r\n }\r\n\r\n calculateCustomSummary = (options) => {\r\n const item: AgingTransDocument = options.value;\r\n\r\n if (item) {\r\n if (options.name === 'Sum') { this.calculate(options, this.IsOpen ? item.OpenSum : item.TotalSum); }\r\n if (options.name === 'SumFeature') { this.calculate(options, this.IsOpen ? item.OpenSumFeature : item.TotalSumFeature); }\r\n if (options.name === 'Sum1_30') { this.calculate(options, this.IsOpen ? item.OpenSum1_30 : item.TotalSum1_30); }\r\n if (options.name === 'Sum31_60') { this.calculate(options, this.IsOpen ? item.OpenSum31_60 : item.TotalSum31_60); }\r\n if (options.name === 'Sum61_90') { this.calculate(options, this.IsOpen ? item.OpenSum61_90 : item.TotalSum61_90); }\r\n if (options.name === 'Sum90_180') { this.calculate(options, this.IsOpen ? item.OpenSum90_180 : item.TotalSum90_180); }\r\n if (options.name === 'Sum180Plus') { this.calculate(options, this.IsOpen ? item.OpenSum180Plus : item.TotalSum180Plus); }\r\n }\r\n }\r\n\r\n calculate(options: any, value: number) {\r\n if (!options.totalValue) { options.totalValue = 0; }\r\n if (value) { options.totalValue += value; }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
0\\\"\\r\\n class=\\\"pay-items-column-button\\\"\\r\\n (click)=\\\"OnPay(cell.data)\\\">\\r\\n {{'linkDocumentPayNow' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n 0\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles(cell.data)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactPerson } from './../entities/contactperson.entity';\r\n@Injectable()\r\nexport class ContactPersonEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ContactPerson\", api);}\r\n\t\r\n\r\n public ListEx(iCustomerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {iCustomerID: iCustomerID} );\r\n }\r\n\r\n public List(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', options?.GetLoadOptions() );\r\n }\r\n\r\n public override Get(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {EntryID: EntryID} );\r\n }\r\n\r\n public override Save(Entity: ContactPerson) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ContactPerson extends BaseEntity\r\n{ \r\n public CustomerID: number; \r\n public Name: string; \r\n public CardName: string; \r\n public Password: string; \r\n public Position: string; \r\n public Phone: string; \r\n public Cellular: string; \r\n public Email: string; \r\n public IsDefault: boolean; \r\n public IsActive: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ContactPersonEndpoint } from '@dato-proxy/endpoints/contactperson.endpoint';\r\nimport { ContactPerson } from '@dato-proxy/entities/contactperson.entity';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component } from '@angular/core';\r\nimport { EnumSystemTypes } from '@dato-proxy/enums';\r\nimport { Globals } from 'projects/dato/_globals';\r\n\r\nclass State extends BaseState {\r\n IsReadOnlyIsDefault: boolean = false;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-person',\r\n templateUrl: './contact-person.component.html',\r\n styleUrls: ['./contact-person.component.scss']\r\n})\r\nexport class ContactPersonComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService,\r\n ContactPersonEndpoint: ContactPersonEndpoint) {\r\n super(A, 'ContactPersonComponent', ContactPerson, State, ContactPersonEndpoint);\r\n }\r\n public IsLandlord() { return Globals.SystemOption && Globals.SystemOption.SystemType === EnumSystemTypes.Landlord; }\r\n\r\n override OnIsDirtyDisabled() { return true };\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n }\r\n\r\n override OnEntityInitObjectName(){\r\n return this.Entity && this.Entity.EntryID > 0 && this.Entity.Name;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.ClosePage();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n if (this.Entity.IsDefault) this.State.IsReadOnlyIsDefault = true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerAddress } from './../entities/customeraddress.entity';\r\nimport { Country } from './../entities/country.entity';\r\nimport { State } from './../entities/state.entity';\r\nimport { CustomerAddressesListParams } from './../params/customeraddresseslist.param';\r\n@Injectable()\r\nexport class CustomerAddressEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CustomerAddress\", api);}\r\n\t\r\n\r\n public ListEx(oParams: CustomerAddressesListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', oParams, options?.GetLoadOptions() );\r\n }\r\n\r\n public override Get(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {EntryID: EntryID} );\r\n }\r\n\r\n public override Save(Entity: CustomerAddress) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public GetCountries() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCountries', undefined );\r\n }\r\n\r\n public GetStatesByCountryCode(sCountryCode: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetStatesByCountryCode', {sCountryCode: sCountryCode} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCustomerAddressTypes } from './../enums';\r\nexport class CustomerAddress extends BaseEntity\r\n{ \r\n public CustomerID: number; \r\n public AddressName: string; \r\n public AddressDisplayName: string; \r\n public City: string; \r\n public Street: string; \r\n public Country: string; \r\n public CountryName: string; \r\n public State: string; \r\n public StateName: string; \r\n public ZipCode: string; \r\n public IsDefaultShipment: boolean; \r\n public IsDefaultBilling: boolean; \r\n public Type: EnumCustomerAddressTypes; \r\n public FullAddress: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { CustomerAddressEndpoint } from '@dato-proxy/endpoints/customeraddress.endpoint';\r\nimport { CustomerAddress } from '@dato-proxy/entities/customeraddress.entity';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCustomerAddressTypes, EnumSystemTypes } from '@dato-proxy/enums';\r\nimport { State as StateEntity } from '@dato-proxy/entities/state.entity';\r\nimport { Globals } from 'projects/dato/_globals';\r\n\r\nclass State extends BaseState {\r\n IsReadOnlyIsDefault = false;\r\n StatesDataSource: StateEntity[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-address',\r\n templateUrl: './customer-address.component.html',\r\n styleUrls: ['./customer-address.component.scss']\r\n})\r\nexport class CustomerAddressComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n protected customerAddressEndpoint: CustomerAddressEndpoint) {\r\n super(A, 'CustomerAddressComponent', CustomerAddress, State, customerAddressEndpoint);\r\n }\r\n public IsLandlord() { return Globals.SystemOption && Globals.SystemOption.SystemType === EnumSystemTypes.Landlord; }\r\n\r\n override OnIsDirtyDisabled() { return true };\r\n\r\n override OnEntityLoaded() {\r\n if (this.Entity.Type === EnumCustomerAddressTypes.Bill && this.Entity.IsDefaultBilling) { this.State.IsReadOnlyIsDefault = true; }\r\n if (this.Entity.Type === EnumCustomerAddressTypes.Ship && this.Entity.IsDefaultShipment) { this.State.IsReadOnlyIsDefault = true; }\r\n\r\n this.LoadStatesDataSource();\r\n }\r\n\r\n override OnEntityInitObjectName(){\r\n return this.Entity && this.Entity.EntryID > 0 && this.Entity.AddressName;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.QueryParams.Type) { this.Entity.Type = this.QueryParams.Type; }\r\n\r\n this.DataSources['Countries'] = new DataSourceCustomAction(() => this.customerAddressEndpoint.GetCountries());\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.ClosePage();\r\n }\r\n\r\n OnCountryChanged(e) {\r\n if (e.previousValue) { this.Entity.State = null; }\r\n\r\n this.LoadStatesDataSource();\r\n }\r\n\r\n private LoadStatesDataSource() {\r\n this.Do(this.customerAddressEndpoint.GetStatesByCountryCode(this.Entity.Country), false, (response) => {\r\n this.State.StatesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nexport class Delivery extends BaseDocument\r\n{ \r\n public CustomerAddressID: number; \r\n public TotalBeforeVat: number; \r\n public TotalAfterVat: number; \r\n public TotalBeforeVatOrigin: number; \r\n public TotalAfterVatOrigin: number; \r\n public DeliveryDate: Date; \r\n public ObjType: number; \r\n public ContactPersonName: string; \r\n public CustomerFullAddress: string; \r\n public ObjTypeString: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { BaseGridDocumentComponent } from '@dato-pages/base/base-grid-document-component';\r\nimport { Component, } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nimport { EnumSystemTypes } from '@dato-proxy/enums';\r\nimport { Globals } from '../../../../_globals';\r\nimport { Delivery } from '@dato-proxy/entities/delivery.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-delivery-grid',\r\n templateUrl: './delivery-grid.component.html',\r\n styleUrls: ['./delivery-grid.component.scss']\r\n})\r\nexport class DeliveryGridComponent extends BaseGridDocumentComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DeliveryGridComponent', Delivery);\r\n }\r\n\r\n public IsLandlord() { return Globals.SystemOption && Globals.SystemOption.SystemType === EnumSystemTypes.Landlord; }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
0\\\"\\r\\n class=\\\"pay-items-column-button\\\"\\r\\n (click)=\\\"OnPay(cell.data)\\\">\\r\\n {{'linkDocumentPayNow' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n 0\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles(cell.data)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class InvoiceOneDocumentCodeParams extends BaseEntity\r\n{ \r\n public DocumentCode: string; \r\n public IsGoToPersonalDetails: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { LoginRequest } from './../entities/loginrequest.entity';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nimport { InvoiceOneDocumentCodeParams } from './../params/invoiceonedocumentcode.param';\r\n@Injectable()\r\nexport class LoginRequestEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"LoginRequest\", api);}\r\n\t\r\n\r\n public CreateByInvoiceOneCode(Params: InvoiceOneDocumentCodeParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CreateByInvoiceOneCode', Params, undefined );\r\n }\r\n\r\n public GetRelatedDocument(iLoginRequestID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelatedDocument', {iLoginRequestID: iLoginRequestID} );\r\n }\r\n}\r\n\r\n","import { EnumLoginSecureKeyTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { InvoiceOneDocumentCodeParams } from '@dato-proxy/params/invoiceonedocumentcode.param';\r\nimport { EnumLoginRequestTypes } from '@dato-proxy/enums';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { LoginRequest } from '@dato-proxy/entities/loginrequest.entity';\r\nimport { LoginRequestEndpoint } from '@dato-proxy/endpoints/loginrequest.endpoint';\r\nimport { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, BaseEntityResponse, LoginParams, WebAPILoginResponse} from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Globals } from '../../_globals';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nclass State extends BaseState {\r\n Language: string;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'go-from-document-code',\r\n templateUrl: './go-from-document-code.component.html',\r\n styleUrls: ['./go-from-document-code.component.scss']\r\n})\r\nexport class GoFromDocumentCodeComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private loginRequestEndpoint: LoginRequestEndpoint,\r\n private loginService: LoginService,\r\n private languageService: LanguageService) {\r\n super(A, 'GoFromDocumentCodeComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n // Getting document number from query params\r\n const DocumentCode = this.QueryParams.DocumentCode;\r\n const IsGoToPersonalDetails = this.QueryParams.IsGoToPersonalDetails;\r\n this.State.Language = this.QueryParams.Language;\r\n this.A.Navigator.ClearQueryParams();\r\n\r\n // Checking pdf link\r\n if (!DocumentCode) {\r\n this.A.UI.StopMessage(this.RC('msgErrorDocumentCodeNotValid'));\r\n this.A.Navigator.Navigate(['/system/login']);\r\n return;\r\n }\r\n\r\n // Handling a language\r\n if (this.State.Language) { this.languageService.SetLanguage(this.State.Language); }\r\n\r\n // Creating Params\r\n const Params = new InvoiceOneDocumentCodeParams();\r\n Params.DocumentCode = DocumentCode;\r\n Params.IsGoToPersonalDetails = IsGoToPersonalDetails;\r\n\r\n this.Do(this.loginRequestEndpoint.CreateByInvoiceOneCode(Params), false,\r\n (response: BaseEntityResponse) => { this.OnCreateLoginRequestSuccess(response); },\r\n (response: BaseEntityResponse) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.A.Navigator.Navigate(['/system/login']);\r\n }\r\n\r\n );\r\n }\r\n\r\n private OnCreateLoginRequestSuccess(response: BaseEntityResponse) {\r\n // Create Params\r\n const oLoginParams = new LoginParams();\r\n oLoginParams.UserName = response.Entity.UserName;\r\n oLoginParams.SecureKey = response.Entity.OTP;\r\n oLoginParams.SecureKeyType = EnumLoginSecureKeyTypes.Password;\r\n\r\n if (this.State.Language) { oLoginParams.Language = this.State.Language; }\r\n else { oLoginParams.Language = SysGlobals.Language }\r\n\r\n // Login\r\n this.loginService.DoLogin(oLoginParams, false, false, () => {\r\n if (response.Entity.Type === EnumLoginRequestTypes.Payment || response.Entity.Type === EnumLoginRequestTypes.Ledger) {\r\n if (Globals.IsAllowAccounting() || Globals.SystemOption.IsAllowMyDetails) {\r\n this.Navigate([`/pages/pdf_view/${response.Entity.EntryID}`]);\r\n } else {\r\n this.Navigate([`/pages/pdf_view_np/${response.Entity.EntryID}`]);\r\n }\r\n } else if (response.Entity.Type === EnumLoginRequestTypes.PersonDetails) {\r\n this.Navigate(['/pages/my-details']);\r\n } else {\r\n this.Navigate(['/pages/reports'], { Tab: 2 });\r\n }\r\n }, (responseSession: BaseEntityResponse) => {\r\n this.A.UI.StopMessage(responseSession.ResponseMessage);\r\n this.A.Navigator.Navigate(['/system/login']);\r\n }).subscribe(() => {});;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nimport { EnumInvoicePaymentTypes } from './../enums';\r\nexport class Invoice extends BaseTransDocument\r\n{ \r\n public TotalSum: number; \r\n public TotalSumOrigin: number; \r\n public PaymentStatus: EnumInvoicePaymentTypes; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { BaseGridDocumentComponent } from '@dato-pages/base/base-grid-document-component';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { Invoice } from '@dato-proxy/entities/invoice.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-invoice-grid',\r\n templateUrl: './invoice-grid.component.html',\r\n styleUrls: ['./invoice-grid.component.scss']\r\n})\r\nexport class InvoiceGridComponent extends BaseGridDocumentComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'InvoiceGridComponent', Invoice);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
0\\\"\\r\\n class=\\\"pay-items-column-button\\\"\\r\\n (click)=\\\"OnPay(cell.data)\\\">\\r\\n {{'linkDocumentPayNow' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n 0\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles(cell.data)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
= 0 }\\\">\\r\\n {{ cell.value }}\\r\\n
\\r\\n
\\r\\n \\r\\n
= 0 }\\\">\\r\\n {{ cell.value }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nexport class Ledger extends BaseTransDocument\r\n{ \r\n public Debit: number; \r\n public Credit: number; \r\n public DebitOpen: number; \r\n public CreditOpen: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { BaseGridDocumentComponent } from '@dato-pages/base/base-grid-document-component';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { Ledger } from '@dato-proxy/entities/ledger.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-grid',\r\n templateUrl: './ledger-grid.component.html',\r\n styleUrls: ['./ledger-grid.component.scss']\r\n})\r\nexport class LedgerGridComponent extends BaseGridDocumentComponent {\r\n\r\n @Input() IsOpen: boolean;\r\n KeyExpr = [\"EntryID\", \"LineID\"];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LedgerGridComponent', Ledger);\r\n }\r\n\r\n OnRowPrepared(e) {\r\n // Hide row if it is 'Opening balance' row and opening balance equal 0\r\n if (e.data && e.data.EntryID === 0 && e.data.OpenBalance === 0) {\r\n e.rowElement.style.display = 'none';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
0\\\" \\r\\n class=\\\"pay-items-column-button\\\"\\r\\n (click)=\\\"OnPay(cell.data)\\\">\\r\\n {{'linkDocumentPayNow' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n 0\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles(cell.data)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Customer } from './../entities/customer.entity';\r\nimport { BalanceView } from './../views/balance.view';\r\nimport { CredentialResult } from './../entities/credentialresult.entity';\r\n@Injectable()\r\nexport class CustomerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Customer\", api);}\r\n\t\r\n\r\n public GetCurrent() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrent', undefined );\r\n }\r\n\r\n public GetBalance(iCompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBalance', {iCompanyID: iCompanyID} );\r\n }\r\n\r\n public SaveBankDetails(oCustomer: Customer) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveBankDetails', oCustomer, undefined );\r\n }\r\n\r\n public List(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', options?.GetLoadOptions() );\r\n }\r\n\r\n public ChangeCreditCardRequest() : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ChangeCreditCardRequest', undefined );\r\n }\r\n\r\n public ConfirmChangeCreditCardRequest(sPrivateID: string) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ConfirmChangeCreditCardRequest', {sPrivateID: sPrivateID} );\r\n }\r\n\r\n public GetBanksList() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBanksList', undefined );\r\n }\r\n\r\n public GetCredentials() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCredentials', undefined );\r\n }\r\n public HasOpenDocuments(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'HasOpenDocuments', { });\r\n }\r\n \r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DocumentLine extends BaseEntity\r\n{ \r\n public DocumentType: number; \r\n public ItemCode: string; \r\n public Description: string; \r\n public Quantity: number; \r\n public Price: number; \r\n public TotalSum: number; \r\n public Currency: string; \r\n public Notes: string; \r\n public IsOpen: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPaymentRequestTypes } from './../enums';\r\nimport { EnumDeliveryMethods } from './../enums';\r\nimport { EnumPaymentRequestStatuses } from './../enums';\r\nimport { EnumPaymentRequestSteps } from './../enums';\r\nimport { DocumentLine } from './../entities/documentline.entity';\r\nexport class PaymentRequest extends BaseEntity\r\n{ \r\n public CustomerID: number; //READ ONLY (BlockWrite)\r\n public ContactPersonID: number; //READ ONLY (BlockWrite)\r\n public CompanyID: number; //READ ONLY (BlockWrite)\r\n public Url: string; \r\n public TotalSum: number; \r\n public Type: EnumPaymentRequestTypes; //READ ONLY (BlockWrite)\r\n public NumberOfPayments: number; \r\n public EmailForReceipt: string; \r\n public DeliveryMethod: EnumDeliveryMethods; \r\n public InvoiceDocumentNumber: number; //READ ONLY (BlockWrite)\r\n public ReceiptDocumentNumber: number; //READ ONLY (BlockWrite)\r\n public OrderDocumentNumber: number; //READ ONLY (BlockWrite)\r\n public Status: EnumPaymentRequestStatuses; //READ ONLY (BlockWrite)\r\n public Currency: string; //READ ONLY (BlockWrite)\r\n public Created: Date; \r\n public CustomerDisplayText: string; \r\n public ContactPersonName: string; \r\n public Sum: number; \r\n public BaseTypeString: string; \r\n public BaseNumber: number; \r\n public Lines: PaymentRequestLine[] = []; \r\n public CreditCardNumber: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class PaymentRequestLine extends BaseEntity\r\n{ \r\n public LedgerID: number; \r\n public OrderID: number; \r\n public PriceProposalID: number; \r\n public DeliveryID: number; \r\n public LineID: number;\r\n}\r\nexport class PaymentRequestStep extends BaseEntity\r\n{ \r\n public Step: EnumPaymentRequestSteps; \r\n public IsSuccess: boolean; \r\n public Comment: string; \r\n public LineID: number;\r\n}\r\nexport class PaymentRequestDocumentLine extends BaseEntity\r\n{ \r\n public DocumentType: number; \r\n public SBODocumentEntry: number; \r\n public DocumentLine: DocumentLine = new DocumentLine; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ChangeDetectorRef, Component, ElementRef, ViewChild } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\n\r\nclass State extends BaseState\r\n{\r\n Url: SafeResourceUrl;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-change-credit-card-dialog',\r\n templateUrl: './change-credit-card-dialog.component.html',\r\n styleUrls: ['./change-credit-card-dialog.component.scss']\r\n})\r\nexport class ChangeCreditCardDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('page') pageLayout: PageLayoutComponent;\r\n @ViewChild('iframe') iframe: ElementRef;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private Sanitizer: DomSanitizer,\r\n private ref: ChangeDetectorRef) {\r\n super(A, 'ChangeCreditCardDialogComponent', PaymentRequest, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n this.Do(this.customerEndpoint.ChangeCreditCardRequest(), false, (response: BaseEntityResponse) => {\r\n this.State.Url = this.Sanitizer.bypassSecurityTrustResourceUrl(response.Entity.Url);\r\n this.Repaint();\r\n });\r\n\r\n (window.document as any).OnSuccessfulPayment = (PrivateRequestID: string) => {\r\n this.OnSuccessfulPaymentHandler(PrivateRequestID);\r\n };\r\n\r\n (window.document as any).OnBackPayment = () => {\r\n this.OnBackPaymentHandler();\r\n };\r\n\r\n window.onmessage = (event: any) => {\r\n if (event.data.type && event.data.type == \"OnHeightChanged\") {\r\n this.ResizeIframe(event.data.height);\r\n }\r\n };\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n this.Repaint();\r\n }\r\n\r\n private OnSuccessfulPaymentHandler(PrivateRequestID: string) {\r\n this.Do(this.customerEndpoint.ConfirmChangeCreditCardRequest(PrivateRequestID), false, () => {\r\n this.CloseDialogWithSuccess();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n private OnBackPaymentHandler() {\r\n this.CloseDialogWithCancel();\r\n }\r\n\r\n ResizeIframe = (iframeHeight: number) => {\r\n if (iframeHeight == null || iframeHeight == 0) return;\r\n const iframeHeightPx = `${iframeHeight}px`;\r\n\r\n const popupInstance = this.pageLayout?.popup?.instance;\r\n if (popupInstance) {\r\n this.iframe.nativeElement.style.height = iframeHeightPx;\r\n\r\n const iframeRect = document.querySelector(`.${this.pageLayout.Class} iframe`).getBoundingClientRect();\r\n const iframeTop = iframeRect.top;\r\n\r\n const popupTop = popupInstance.content().getBoundingClientRect().top;\r\n const popupPadding = +window.getComputedStyle(document.querySelector(`.${this.pageLayout.Class} .${popupInstance.content().classList[0]} .page-body`))\r\n .padding.replace('px', '');\r\n \r\n const newPopupHeight = iframeTop - popupTop + iframeHeight + popupPadding;\r\n popupInstance.option('height', newPopupHeight);\r\n this.Repaint();\r\n } else {\r\n const iframes = document.querySelectorAll('.sheet-content iframe');\r\n const iframe = iframes.length && iframes[iframes.length - 1] as any;\r\n\r\n iframe && (iframe.style.height = iframeHeightPx);\r\n }\r\n }\r\n\r\n Repaint() {\r\n setTimeout(() => this.pageLayout?.popup?.instance?.repaint());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Globals } from '../../../../_globals';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ContactPerson } from '@dato-proxy/entities/contactperson.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-person-grid',\r\n templateUrl: './contact-person-grid.component.html',\r\n styleUrls: ['./contact-person-grid.component.scss']\r\n})\r\nexport class ContactPersonGridComponent extends BaseGridComponent\r\n{\r\n Options = Globals.SystemOption;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ContactPersonGridComponent', ContactPerson, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n // condition is the same for editing and adding\r\n if (!this.ShowAddButton) return;\r\n\r\n this.Navigate([\"/pages/contact-person\", e.data.EntryID]);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, Input } from '@angular/core';\r\nimport { EnumCustomerAddressTypes } from '@dato-proxy/enums';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CustomerAddress } from '@dato-proxy/entities/customeraddress.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-address-grid',\r\n templateUrl: './customer-address-grid.component.html',\r\n styleUrls: ['./customer-address-grid.component.scss']\r\n})\r\nexport class CustomerAddressGridComponent extends BaseGridComponent\r\n{\r\n @Input() public Type: EnumCustomerAddressTypes;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CustomerAddressGridComponent', CustomerAddress, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n // condition is the same for editing and adding\r\n if (!this.ShowAddButton) return;\r\n\r\n this.Navigate([\"/pages/customer-address/\", e.data.EntryID], { Type: this.Type });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Customer extends BaseEntity\r\n{ \r\n public CardCode: string; \r\n public CardName: string; \r\n public Obligo: number; \r\n public MaxBalance: number; \r\n public MaxObligo: number; \r\n public IsVatLiable: boolean; \r\n public DisplayCurrency: string; \r\n public PdfUrl: string; \r\n public TradeLicenseNumber: string; \r\n public DefaultBank: string; \r\n public DefaultBranchCode: string; \r\n public DefaultAccount: string;\r\n public DefaultBankName: string;\r\n public IsActive: boolean; \r\n public CardNumberEnding: string; \r\n public CardInfo: string; \r\n public Balance: number; \r\n public BalanceLate: number; \r\n public HasOpenDocuments: boolean;\r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCustomerAddressTypes } from './../enums';\r\nexport class CustomerAddressesListParams extends BaseEntity\r\n{ \r\n public Type: EnumCustomerAddressTypes; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ChangeCreditCardDialogComponent } from './Components/change-credit-card-dialog/change-credit-card.component';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntityResponse, BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Customer } from '@dato-proxy/entities/customer.entity';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumCustomerAddressTypes } from '@dato-proxy/enums';\r\nimport { SystemOptionView } from '@dato-proxy/views/systemoption.view';\r\nimport { ContactPersonEndpoint } from '@dato-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dato-proxy/endpoints/customeraddress.endpoint';\r\nimport { ContactPerson } from '@dato-proxy/entities/contactperson.entity';\r\nimport { CustomerAddress } from '@dato-proxy/entities/customeraddress.entity';\r\nimport { CustomerAddressesListParams } from '@dato-proxy/params/customeraddresseslist.param';\r\n\r\nclass State extends BaseState {\r\n Customer: Customer;\r\n CurrentTabIndex = 0;\r\n CurrentTab: any;\r\n CurrentAddressTabIndex = 0;\r\n CurrentAddressTab: any;\r\n Options: SystemOptionView;\r\n IsActiveUser: boolean;\r\n\r\n ContactPersons: ContactPerson[];\r\n BillCustomerAddresses: CustomerAddress[];\r\n ShipCustomerAddresses: CustomerAddress[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-my-details',\r\n templateUrl: './my-details.component.html',\r\n styleUrls: ['./my-details.component.scss']\r\n})\r\nexport class MyDetailsComponent extends BasePageComponent {\r\n @ViewChild(ChangeCreditCardDialogComponent) changeCreditCardDialogComponent: ChangeCreditCardDialogComponent;\r\n public EnumCustomerAddressTypes = EnumCustomerAddressTypes;\r\n\r\n MyDetailsTabs = [];\r\n CustomerAddressTabs = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private contactPersonEndpoint: ContactPersonEndpoint,\r\n private customerAddressEndpoint: CustomerAddressEndpoint) {\r\n super(A, 'MyDetailsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Options = Globals.SystemOption;\r\n this.State.IsActiveUser = Globals.IsActiveUser;\r\n this.State.CurrentTabIndex = this.State.CurrentAddressTabIndex = 0;\r\n this.InitMyDetailsTabs();\r\n if (!Globals.SystemOption.IsAllowMyDetails) { this.Navigate(['/system/login']); }\r\n this.InitCustomer();\r\n this.LoadData();\r\n }\r\n\r\n InitMyDetailsTabs() {\r\n const myDetailsTabs = this.LIST('MyDetailsTabs') as any[];\r\n \r\n if (this.State.Options.IsAllowContactPersons) {\r\n const contactPersonsTab = myDetailsTabs.find(x => x.Name === 'ContactPersons');\r\n contactPersonsTab && this.MyDetailsTabs.push(contactPersonsTab);\r\n }\r\n\r\n const customerAddressesTabs = this.LIST('CustomerAddressTabs') as any[];\r\n if (this.State.Options.IsAllowBillCustomerAddresses) {\r\n const billAddressesTab = customerAddressesTabs.find(x => x.Name === 'BillCustomerAddresses');\r\n billAddressesTab && this.CustomerAddressTabs.push(billAddressesTab);\r\n }\r\n if (this.State.Options.IsAllowShipCustomerAddresses) {\r\n const shipAddressesTab = customerAddressesTabs.find(x => x.Name === 'ShipCustomerAddresses');\r\n shipAddressesTab && this.CustomerAddressTabs.push(shipAddressesTab);\r\n }\r\n\r\n if (this.CustomerAddressTabs.length) {\r\n const customerAddressesTab = myDetailsTabs.find(x => x.Name === 'CustomerAddresses');\r\n customerAddressesTab && this.MyDetailsTabs.push(customerAddressesTab);\r\n }\r\n }\r\n\r\n OnSelectedTabIndexChanged(index: number) {\r\n this.State.CurrentTab = this.MyDetailsTabs[index];\r\n this.State.CurrentTabIndex = index;\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === Customer) { this.InitCustomer(); }\r\n if (ExternalEntityType === CustomerAddress) this.LoadCustomerAddresses();\r\n if (ExternalEntityType === ContactPerson) this.LoadContactPersons();\r\n }\r\n\r\n IsShowEmptyField() {\r\n return this.State.Options.IsShowCreditCard || this.State.Options.IsShowBankDetails || this.State.Options.IsShowMaxBalance || this.State.Options.IsShowMaxObligo;\r\n }\r\n\r\n OnGotoDetails(goto: 'balance' | 'obligo') {\r\n const path = this.A.Screen.IsDesktop() ? '/pages/reports' : '/pages/accounting';\r\n switch (goto) {\r\n case 'balance':\r\n if (Globals.SystemOption.IsAllowLedger) { this.Navigate([path]); }\r\n break;\r\n case 'obligo':\r\n if (Globals.SystemOption.IsAllowDeliveries) { this.Navigate([path], { Tab: 3 }); }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n OnEditCreditCard() {\r\n if (Globals.SystemOption.IsAllowCreditCardEdit) {\r\n this.changeCreditCardDialogComponent.ShowDialogShort(() => { this.InitCustomer(); });\r\n }\r\n }\r\n\r\n OnEditBankDetails() {\r\n if (this.State.Options.IsAllowBankDetailsEdit) {\r\n this.Navigate(['/pages/bank-details']);\r\n }\r\n }\r\n\r\n OnGetBankDetails() {\r\n if (this.State.Customer && !Utils.IsEmpty(this.State.Customer.DefaultBank) && !Utils.IsEmpty(this.State.Customer.DefaultBranchCode) && !Utils.IsEmpty(this.State.Customer.DefaultAccount)) {\r\n return `${this.State.Customer.DefaultBankName} - ${this.State.Customer.DefaultBank}-${this.State.Customer.DefaultBranchCode}-${this.State.Customer.DefaultAccount}`;\r\n }\r\n\r\n return this.RC('lblBankDetailsEmpty');\r\n }\r\n\r\n OnSelectedAddressTabIndexChanged(index: number) {\r\n this.State.CurrentAddressTab = this.CustomerAddressTabs[index];\r\n this.State.CurrentAddressTabIndex = index;\r\n }\r\n\r\n private InitCustomer() {\r\n this.Do(this.customerEndpoint.GetCurrent(), false, (response: BaseEntityResponse) => {\r\n this.State.Customer = response.Entity;\r\n });\r\n }\r\n\r\n private LoadData() {\r\n this.LoadContactPersons();\r\n this.LoadCustomerAddresses();\r\n }\r\n\r\n private LoadContactPersons() {\r\n if (!this.State.Options?.IsAllowContactPersons) return;\r\n\r\n this.Do(this.contactPersonEndpoint.GetList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.ContactPersons = response.Entities;\r\n });\r\n }\r\n\r\n private LoadCustomerAddresses() {\r\n if (this.State.Options?.IsAllowBillCustomerAddresses) {\r\n this.LoadCustomerAddressByType(this.Enums.EnumCustomerAddressTypes.Bill).subscribe((response: BaseEntitiesResponse) => {\r\n this.State.BillCustomerAddresses = response.Entities;\r\n });\r\n }\r\n\r\n if (this.State.Options?.IsAllowShipCustomerAddresses) {\r\n this.LoadCustomerAddressByType(this.Enums.EnumCustomerAddressTypes.Ship).subscribe((response: BaseEntitiesResponse) => {\r\n this.State.ShipCustomerAddresses = response.Entities;\r\n });\r\n }\r\n }\r\n\r\n private LoadCustomerAddressByType(type: EnumCustomerAddressTypes) {\r\n let params = new CustomerAddressesListParams();\r\n params.Type = type;\r\n\r\n return this.customerAddressEndpoint.ListEx(params, null);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'btnChangeCreditCard' | RC:THIS}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'btnChangeBankDetails' | RC:THIS}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'lblMyDetailsBalance' | RC:THIS}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'btnObligo' | RC:THIS}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'lblDocumentBalanceLate' | RC:THIS}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PaymentRequest } from './../entities/paymentrequest.entity';\r\nimport { PaymentRequestStep } from './../entities/paymentrequest.entity';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\nimport { PaymentConfigView } from './../views/paymentconfig.view';\r\nimport { PaymentRequestResponseParams } from './../params/paymentrequestresponse.param';\r\nimport { PaymentRequestListParams } from './../params/paymentrequestlist.param';\r\nimport { MakePaymentParams } from './../params/makepayment.param';\r\nimport { ConfirmPaymentRequestParams } from './../params/confirmpaymentrequest.param';\r\n@Injectable()\r\nexport class PaymentRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"PaymentRequest\", api);}\r\n\t\r\n\r\n public ListEx(oParams: PaymentRequestListParams, oOptions: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', oParams, {oOptions: oOptions} );\r\n }\r\n\r\n public GetSteps(iEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSteps', {iEntryID: iEntryID} );\r\n }\r\n\r\n public GetLinesDocuments(iEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLinesDocuments', {iEntryID: iEntryID} );\r\n }\r\n\r\n public ResolveStatus(iEntryID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ResolveStatus', {iEntryID: iEntryID} );\r\n }\r\n\r\n public GetPaymentConfig(iEntryID: number, iObjectType: number, isAccountPayment: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPaymentConfig', {iEntryID: iEntryID, iObjectType: iObjectType, isAccountPayment: isAccountPayment} );\r\n }\r\n\r\n public Send(oParams: MakePaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Send', oParams, undefined );\r\n }\r\n\r\n public Confirm(oParams: ConfirmPaymentRequestParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Confirm', oParams, undefined );\r\n }\r\n\r\n public ConfirmPayment(paymentRequestID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ConfirmPayment', {paymentRequestID: paymentRequestID} );\r\n }\r\n\r\n public GetPaymentRequest(privateRequestID: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPaymentRequest', {privateRequestID: privateRequestID} );\r\n }\r\n\r\n public Execute(oParams: MakePaymentParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Execute', oParams, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ConfirmPaymentRequestParams extends BaseEntity\r\n{ \r\n public PrivateID: string; \r\n public IsSaveCardNumberAsDefault: boolean; \r\n public AuthorizeNetTransID: string;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { EnumPaymentMethod } from './../enums';\r\nimport { EnumDeliveryMethods } from './../enums';\r\nexport class MakePaymentParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'MakePaymentParams';\r\n }\r\n \r\n public Sum: number; \r\n public Currency: string; \r\n public NumberOfPayments: number; \r\n public CompanyID: number; \r\n public Email: string; \r\n public DocumentsType: EnumDocumentTypes; \r\n public DocumentIDs: number[]; \r\n public DocumentLineIDs: number[]; \r\n public PaymentMethod: EnumPaymentMethod; \r\n public DeliveryMethod: EnumDeliveryMethods; \r\n public SessionID: string; \r\n public IsAccountPayment: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { PaymentDialogComponent } from '@dato-dialogs/payment-dialog/payment-dialog.component';\r\nimport { DocumentEndpoint } from '@dato-proxy/endpoints/document.endpoint';\r\nimport { PdfEndpoint } from '@dato-proxy/endpoints/pdf.endpoint';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { BaseTransDocument } from '@dato-proxy/entities/basetransdocument.entity';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { PdfView } from '@dato-proxy/views/pdf.view';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PdfViewerComponent } from '@m4u-angular/ui/components/pdf-viewer/pdf-viewer.component';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumLoginRequestTypes } from '../../_proxy/enums';\r\nimport { LoginRequestEndpoint } from './../../_proxy/endpoints/loginrequest.endpoint';\r\n\r\nclass State extends BaseState {\r\n PDFData: any;\r\n FileName: string;\r\n EntryID: number;\r\n TotalSum: number;\r\n IsPaymentAllowed: boolean;\r\n IsHasAdditionalDocuments: boolean;\r\n IsAllowLedger: boolean;\r\n IsAllowPayment: boolean;\r\n ViewType: EnumPdfDocumentViewType = EnumPdfDocumentViewType.External;\r\n DocumentType: number;\r\n IsLedger: boolean;\r\n PayButtonText: string;\r\n}\r\n\r\nexport enum EnumPdfDocumentViewType {\r\n Inner,\r\n External\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-pdf-page',\r\n templateUrl: './pdf-page.component.html',\r\n styleUrls: ['./pdf-page.component.scss']\r\n})\r\nexport class PdfPageComponent extends BasePageComponent {\r\n\r\n @ViewChild(PdfViewerComponent) pdfViewer: PdfViewerComponent;\r\n @ViewChild(PaymentDialogComponent) paymentDialog: PaymentDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private pdfEndpoint: PdfEndpoint,\r\n private loginRequestEndpoint: LoginRequestEndpoint,\r\n private documentEndpoint: DocumentEndpoint) {\r\n super(A, 'PdfPageComponent', BaseEntity, State);\r\n }\r\n\r\n override InitState() {}\r\n\r\n override OnInitComponent() {\r\n this.State.IsAllowLedger = Globals.SystemOption.IsAllowLedger;\r\n this.State.IsAllowPayment = Globals.SystemOption.IsAllowPayment;\r\n this.State.EntryID = this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n const queryParams = this.A.Navigator.GetQueryParams(true);\r\n queryParams?.ViewType && (this.State.ViewType = +queryParams?.ViewType);\r\n queryParams?.DocumentType && (this.State.DocumentType = +queryParams?.DocumentType);\r\n\r\n this.DisplayMode = this.State.ViewType === EnumPdfDocumentViewType.Inner \r\n ? this.A.Screen.IsDesktop() ? EnumPageDisplayModes.Window : EnumPageDisplayModes.BottomSheet\r\n : EnumPageDisplayModes.FullScreen;\r\n\r\n this.LoadData();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = {\r\n IsAllowPrint: true,\r\n OnPrintButtonClick: (e) => this.pdfViewer.instance.iframe.nativeElement.contentWindow.print()\r\n } as ToolbarSettings;\r\n return settings;\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === PaymentRequest) { this.LoadData(); }\r\n }\r\n\r\n override GetTitle() {\r\n this.SetPayButtonText();\r\n return this.State.FileName;\r\n }\r\n\r\n SetPayButtonText() {\r\n this.State.PayButtonText = this.RC('btnPayDocumentNow');\r\n if (this.State.IsLedger) this.State.PayButtonText = this.RC('btnPayDocuments');\r\n }\r\n IsShowPayButton() {\r\n return this.State.IsAllowPayment && (this.State.IsPaymentAllowed == null || this.State.IsPaymentAllowed == true) && this.State.TotalSum > 0;\r\n }\r\n\r\n IsShowAdditionalDocumentsButton() {\r\n return this.State.IsHasAdditionalDocuments && this.State.IsAllowLedger;\r\n }\r\n\r\n GetLocale(): string {\r\n return SysGlobals.Language === 'HE' ? 'he' : 'en-US';\r\n }\r\n\r\n OnClickPay() {\r\n if (this.State.ViewType === EnumPdfDocumentViewType.Inner) {\r\n if (this.State.ViewType == null || this.State.DocumentType == null) {\r\n this.UI.StopMessage('Document type is wrong');\r\n return;\r\n }\r\n this.Do(this.documentEndpoint.GetDocument(this.State.EntryID, this.State.DocumentType), false, this.OnPayDocument);\r\n } else {\r\n if (this.State.IsLedger) {\r\n this.Navigate(['/pages/reports'], { Tab: 2 });\r\n }\r\n else { this.Do(this.loginRequestEndpoint.GetRelatedDocument(this.State.EntryID), false, this.OnPayDocument); }\r\n \r\n }\r\n }\r\n\r\n private OnPayDocument = (response: BaseEntityResponse) => {\r\n Globals.PaymentDocuments = [response.Entity];\r\n\r\n this.paymentDialog.ShowDialogShort(() => {});\r\n }\r\n\r\n OnSeeAdditional() {\r\n if (Globals.SystemOption.IsAllowLedger) { this.Navigate(['/pages/reports']);\r\n } else { this.Navigate(['/system/login']); }\r\n }\r\n\r\n IsNoToolbar() {\r\n return !Globals.IsAllowAccounting() && !Globals.SystemOption.IsAllowMyDetails;\r\n }\r\n\r\n private LoadData() {\r\n if (this.State.ViewType === EnumPdfDocumentViewType.Inner) {\r\n if (this.State.ViewType == null || this.State.DocumentType == null) {\r\n this.UI.StopMessage('Document type is wrong');\r\n return;\r\n }\r\n this.Do(this.documentEndpoint.GetDocumentForPdf(this.State.EntryID, this.State.DocumentType), false, (documentResponse) => {\r\n const transDocument = documentResponse.Entity as BaseTransDocument;\r\n if (!transDocument) {\r\n this.UI.StopMessage('Document was not loaded correctly');\r\n return;\r\n }\r\n this.Do(this.pdfEndpoint.GetPDFByLink(transDocument.PdfUrl), false, (response) => {\r\n this.State.PDFData = Utils.ConvertToBlob(response.Data.toString(), 'application/pdf');\r\n this.State.TotalSum = transDocument.PaymentSum;\r\n this.State.FileName = `${transDocument.TransTypeString} - ${transDocument.DocumentNumber}`;\r\n this.State.IsPaymentAllowed = transDocument.IsPaymentAllowed;\r\n this.State.IsHasAdditionalDocuments = false;\r\n this.NotifyReloadTitle();\r\n });\r\n });\r\n } else {\r\n this.Do(this.pdfEndpoint.GetPDFByLoginRequestID(this.State.EntryID), false, (response: BaseEntityResponse) => {\r\n this.State.PDFData = Utils.ConvertToBlob(response.Entity.Pdf, 'application/pdf');\r\n \r\n this.State.IsLedger = response.Entity.IsLedger;\r\n if (this.State.IsLedger) {\r\n this.State.FileName = `${response.Entity.DocumentType}`;\r\n this.State.TotalSum = 1;\r\n this.State.IsPaymentAllowed = true;\r\n }\r\n else {\r\n this.State.FileName = `${response.Entity.DocumentType} - ${response.Entity.DocumentNumber}`;\r\n this.State.TotalSum = response.Entity.TotalSum;\r\n this.State.IsPaymentAllowed = response.Entity.IsPaymentAllowed;\r\n }\r\n \r\n this.State.IsHasAdditionalDocuments = response.Entity.IsHasAdditionalDocuments;\r\n this.NotifyReloadTitle();\r\n });\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
{{ 'titleChoosePaymentMethod' | RC:THIS }}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1 || !State.Options.IsAllowChangePaymentSum || State.IsAllowPartialPayment\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1\\\" [Component]=\\\"THIS\\\" Name=\\\"Name\\\" Label=\\\"{{'lblPaymantCount' | RC:THIS}}\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ 'msgWaitingPayment' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{ State.ErrorMessage || ('lblPaymentError' | RC:THIS) }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{'msgPaymentSuccessful' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n 1\\\"\\r\\n [Component]=\\\"THIS\\\"\\r\\n Label=\\\"{{'lblPaymantCount' | RC:THIS}}\\\"\\r\\n Name=\\\"NumberOfPayments\\\"\\r\\n Position=\\\"horizontal\\\"\\r\\n ValueAlignment=\\\"end\\\"\\r\\n Value=\\\"{{ State.NumberOfPayments }}\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ name }}
\\r\\n
\\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseDocument } from './../entities/basedocument.entity';\r\n@Injectable()\r\nexport class DocumentEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"Document\", api);}\r\n\t\r\n\r\n public GetDocument(entryID: number, documentType: number) : Observable>\r\n\t{\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetDocument', { docEntry: entryID, documentType: documentType} );\r\n }\r\n public GetDocumentForPdf(entryID: number, documentType: number): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetDocumentForPdf', { docEntry: entryID, documentType: documentType });\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PdfView } from './../views/pdf.view';\r\n@Injectable()\r\nexport class PdfEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"Pdf\", api);}\r\n\t\r\n\r\n public GetPDFByLink(sLink: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPDFByLink', {sLink: sLink} );\r\n }\r\n\r\n public GetPDFByPaymentRequestID(iEntryID: number) : Observable>\r\n\t{\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPDFByPaymentRequestID', { iEntryID: iEntryID} );\r\n }\r\n\r\n public GetPDFByLoginRequestID(iEntryID: number) : Observable>\r\n\t{\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPDFByLoginRequestID', { iEntryID: iEntryID} );\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { formatNumber } from 'devextreme/localization';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\n\r\n@Pipe({\r\n name: 'formatPriceWithCurrency'\r\n})\r\nexport class FormatPriceWithCurrencyPipe implements PipeTransform \r\n{\r\n constructor(private framework: FrameworkService) { }\r\n\r\n transform(value: number, currency: string = null, isShowZero: boolean = false): string \r\n {\r\n let result = '';\r\n\r\n if(value == null) value = 0;\r\n if(value == 0 && !isShowZero) return result;\r\n\r\n result = formatNumber(value, this.framework.CompanyInfo.NumberSum);\r\n if(currency != null)\r\n {\r\n result += ' ' + currency;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AgingTransDocument } from './../entities/agingtransdocument.entity';\r\nimport { TransDocumentListParams } from './../params/transdocumentlist.param';\r\n@Injectable()\r\nexport class AgingTransDocumentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"AgingTransDocument\", api);}\r\n\t\r\n\r\n public GetListByParams(Params: TransDocumentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Delivery } from './../entities/delivery.entity';\r\nimport { DeliveriesListParams } from './../params/deliverieslist.param';\r\n@Injectable()\r\nexport class DeliveryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Delivery\", api);}\r\n\t\r\n\r\n public GetListByParams(Params: DeliveriesListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Invoice } from './../entities/invoice.entity';\r\nimport { TransDocumentListParams } from './../params/transdocumentlist.param';\r\n@Injectable()\r\nexport class InvoiceEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Invoice\", api);}\r\n\t\r\n\r\n public GetListByParams(Params: TransDocumentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { LedgerView } from './../views/ledger.view';\r\nimport { TransDocumentListParams } from './../params/transdocumentlist.param';\r\n@Injectable()\r\nexport class LedgerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Ledger\", api);}\r\n\t\r\n\r\n public GetListByParams(Params: TransDocumentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SystemOptionView } from './../views/systemoption.view';\r\nimport { SystemOption } from './../entities/systemoption.entity';\r\nimport { OptionSourceView } from './../views/optionsource.view';\r\nimport { SendDocumentParams } from './../params/senddocument.param';\r\n@Injectable()\r\nexport class SystemOptionEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"SystemOption\", api);}\r\n\t\r\n\r\n public GetCurrent() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrent', undefined );\r\n }\r\n\r\n public GetFull() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFull', undefined );\r\n }\r\n\r\n public SaveOptions(oOptions: SystemOption) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveOptions', oOptions, undefined );\r\n }\r\n\r\n public GetReceiptSeries() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetReceiptSeries', undefined );\r\n }\r\n\r\n public GetInvoiceOneReceiptTemplates() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneReceiptTemplates', undefined );\r\n }\r\n\r\n public GetInvoiceOneReceiptDocCodes() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneReceiptDocCodes', undefined );\r\n }\r\n\r\n public GetInvoiceSeries() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceSeries', undefined );\r\n }\r\n\r\n public GetInvoiceOneInvoiceTemplates() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneInvoiceTemplates', undefined );\r\n }\r\n\r\n public GetInvoiceOneInvoiceDocCodes() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneInvoiceDocCodes', undefined );\r\n }\r\n\r\n public GetOrderSeries() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetOrderSeries', undefined );\r\n }\r\n\r\n public GetInvoiceOneOrderTemplates() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneOrderTemplates', undefined );\r\n }\r\n\r\n public GetInvoiceOneOrderDocCodes() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneOrderDocCodes', undefined );\r\n }\r\n\r\n public SendDocument(Params: SendDocumentParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SendDocument', Params, undefined );\r\n }\r\n\r\n public GetInvoiceOneDeliveriesDocCodes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneDeliveriesDocCodes', undefined);\r\n }\r\n\r\n public GetInvoiceOneRefundDocCodes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneRefundDocCodes', undefined);\r\n }\r\n\r\n public GetInvoiceOneReturnDocCodes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneReturnDocCodes', undefined);\r\n }\r\n\r\n public GetDownPaymentSeries(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetDownPaymentSeries', undefined);\r\n }\r\n \r\n\r\n public GetAuthNetCreditCards(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetAuthNetCreditCards', undefined);\r\n }\r\n \r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DeliveriesListParams extends BaseEntity\r\n{ \r\n public DeliveryDateFrom: Date; \r\n public DeliveryDateUntil: Date; \r\n public CompanyID: number; \r\n public IsOpen: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { File } from '@dato-proxy/entities/file.entity';\r\nimport { EnumFileTypes } from '@dato-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n Files: File[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-file-list-dialog',\r\n templateUrl: './file-list-dialog.component.html',\r\n styleUrls: ['./file-list-dialog.component.scss']\r\n})\r\nexport class FileListDialogComponent extends BasePageComponent {\r\n\r\n @Output() ShowFile: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FileListDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n Show(files: File[]) {\r\n this.State.Files = files;\r\n this.ShowDialogShort(() => {});\r\n }\r\n\r\n OnShowFile(file: File) {\r\n this.ShowFile.emit(file);\r\n }\r\n\r\n GetIconStyle(FileType: EnumFileTypes): string {\r\n switch (FileType) {\r\n case EnumFileTypes.Pdf: return 'mdi mdi-file-pdf-box';\r\n case EnumFileTypes.Word: return 'mdi mdi-file-word-box';\r\n case EnumFileTypes.Excel: return 'mdi mdi-file-excel-box';\r\n case EnumFileTypes.Text: return 'mdi mdi-text-box';\r\n case EnumFileTypes.Archive: return 'mdi mdi-zip-box';\r\n case EnumFileTypes.Html: return 'mdi mdi-language-html5';\r\n case EnumFileTypes.Image: return 'mdi mdi-image';\r\n case EnumFileTypes.Xml: return 'mdi mdi-xml';\r\n case EnumFileTypes.Email: return 'mdi mdi-email';\r\n default: return 'mdi mdi-file';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n {{item.Name}}{{item.Extension}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class TransDocumentListParams extends BaseEntity\r\n{ \r\n public RefDateFrom: Date; \r\n public RefDateUntil: Date; \r\n public IsOpen: boolean; \r\n public CompanyID: number; \r\n public HasComplexFilter: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { File } from './../entities/file.entity';\r\nimport { DocumentsDownloadParams } from '../params/documentsdownload.param';\r\n@Injectable()\r\nexport class FileEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"File\", api);}\r\n\t\r\n\r\n public GetList(iObjectType: number, iDocEntry: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetList', {iObjectType: iObjectType, iDocEntry: iDocEntry} );\r\n }\r\n\r\n public GetFileData(iEntryID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFileData', {iEntryID: iEntryID} , undefined, 'blob');\r\n }\r\n public GetAllDocumentsPdfData(param: DocumentsDownloadParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetAllDocumentsPdfData', param);\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CompanyView } from './../views/company.view';\r\n@Injectable()\r\nexport class CompanyEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"Company\", api);}\r\n\t\r\n\r\n public List() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class CompanyView extends BaseEntity\r\n{ \r\n public Name: string; \r\n public Code: string; \r\n public FullName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentDownloadOption, EnumReportTabs } from '../enums';\r\n\r\nexport class DocumentsDownloadParams extends BaseEntity\r\n{ \r\n public DateFrom: Date; \r\n public DateUntil: Date; \r\n public IsOpen: boolean; \r\n public CompanyID: number; \r\n public HasComplexFilter: boolean; \r\n public ReportTab: EnumReportTabs;\r\n public DownloadOption: EnumDocumentDownloadOption;\r\n}\r\n\r\n\r\n\r\n","import { DeliveriesListParams } from './../../_proxy/params/deliverieslist.param';\r\nimport { ImageBoxDialogComponent } from '@m4u-angular/ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { FileListDialogComponent } from '@dato-dialogs/file-list-dialog/file-list-dialog.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BalanceView } from '@dato-proxy/views/balance.view';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { PrintBoxDialogComponent } from '@m4u-angular/ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { TransDocumentListParams } from '@dato-proxy/params/transdocumentlist.param';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { LedgerEndpoint } from '@dato-proxy/endpoints/ledger.endpoint';\r\nimport { InvoiceEndpoint } from '@dato-proxy/endpoints/invoice.endpoint';\r\nimport { AgingTransDocumentEndpoint } from '@dato-proxy/endpoints/agingtransdocument.endpoint';\r\nimport { DeliveryEndpoint } from '@dato-proxy/endpoints/delivery.endpoint';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { PdfEndpoint } from '@dato-proxy/endpoints/pdf.endpoint';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { Globals } from '../../_globals';\r\nimport { BaseGridDocumentComponent } from '../base/base-grid-document-component';\r\nimport { ToolbarSettings, ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FileEndpoint } from '@dato-proxy/endpoints/file.endpoint';\r\nimport { File as FileEntity } from '@dato-proxy/entities/file.entity';\r\nimport { EnumFileTypes, EnumReportTabs, EnumSystemTypes, EnumDocumentFilteringOption } from '@dato-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { CompanyEndpoint } from '@dato-proxy/endpoints/company.endpoint';\r\nimport { CompanyView } from '@dato-proxy/views/company.view';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { DocumentsDownloadParams } from '../../_proxy/params/documentsdownload.param';\r\nimport { EnumPdfDocumentViewType } from '@dato-pages/pdf-page/pdf-page.component';\r\nimport { PaymentDialogComponent } from '@dato-dialogs/payment-dialog/payment-dialog.component';\r\nimport { EnumDocumentDownloadOption } from '../../_proxy/enums';\r\nimport { Customer } from '@dato-proxy/entities/customer.entity';\r\n\r\nexport class ReportsState extends BaseState {\r\n FromDate: Date;\r\n UntilDate: Date;\r\n IsOpen = true;\r\n BalanceView: BalanceView;\r\n ReportTabs: any[];\r\n\r\n Document: BaseDocument;\r\n Documents: BaseDocument[];\r\n TotalSum: number;\r\n IsSingleCurrency: boolean;\r\n PaymentCurrency: string;\r\n\r\n CurrentTabIndex = 0;\r\n IsShowBalance: boolean;\r\n IsShowBalanceLate: boolean;\r\n IsAllowLedger: boolean;\r\n IsHideShowOpenOnly: boolean;\r\n IsShowAttachments: boolean;\r\n IsAllowPayment: boolean;\r\n IsAllowPaymentOnAccount: boolean;\r\n\r\n IsActiveUser: boolean;\r\n\r\n CurrentFileName: string;\r\n CurrentFileData: any;\r\n\r\n IsEnableMultiCompany: boolean;\r\n IsSingleCompany: boolean;\r\n Companies: CompanyView[];\r\n CompanyID: number;\r\n PaymentCompanyID: number;\r\n IsInitDone: boolean=false;\r\n\r\n IsPrintMode: boolean;\r\n Customer: Customer;\r\n\r\n TimePeriod: number;\r\n HasOpenDocuments: boolean = false;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reports',\r\n templateUrl: './reports.component.html',\r\n styleUrls: ['./reports.component.scss']\r\n})\r\nexport class ReportsComponent extends BasePageComponent {\r\n\r\n @ViewChild('printBoxDialog') printBoxDialog: PrintBoxDialogComponent;\r\n @ViewChild(FileListDialogComponent) fileListDialog: FileListDialogComponent;\r\n @ViewChild(ImageBoxDialogComponent) imageDialog: ImageBoxDialogComponent;\r\n @ViewChild(PaymentDialogComponent) paymentDialog: PaymentDialogComponent;\r\n @ViewChild('grid') grid: BaseGridDocumentComponent;\r\n public get G() {\r\n return (this.grid as any)?.G; \r\n }\r\n public downloadOptions = ['PDF', 'ZIP'];\r\n\r\n constructor(A: ServiceBagService,\r\n private ledgerEndpoint: LedgerEndpoint,\r\n private invoiceEndpoint: InvoiceEndpoint,\r\n private agingTransDocumentEndpoint: AgingTransDocumentEndpoint,\r\n private deliveryEndpoint: DeliveryEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private fileEndpoint: FileEndpoint,\r\n private companyEndpoint: CompanyEndpoint) {\r\n super(A, 'ReportsComponent', BaseEntity, ReportsState);\r\n }\r\n\r\n override OnInitComponent() {\r\n if ((this.A.Screen.IsMobile() && this.A.Navigator.GetCurrentRouteWithoutParams().endsWith('reports'))\r\n || (this.A.Screen.IsDesktop() && this.A.Navigator.GetCurrentRouteWithoutParams().endsWith('accounting'))) {\r\n this.Framework.NavigateDefault();\r\n return;\r\n }\r\n\r\n this.State.IsShowBalance = Globals.SystemOption.IsShowBalance;\r\n this.State.IsShowBalanceLate = Globals.SystemOption.IsShowBalanceLate;\r\n this.State.IsAllowLedger = Globals.SystemOption.IsAllowLedger;\r\n this.State.IsActiveUser = Globals.IsActiveUser;\r\n this.State.IsHideShowOpenOnly = Globals.SystemOption.IsShowOpenOnly;\r\n this.State.IsShowAttachments = Globals.SystemOption.IsShowAttachments;\r\n this.State.IsAllowPayment = Globals.SystemOption.IsAllowPayment;\r\n this.State.IsAllowPaymentOnAccount = Globals.SystemOption.IsAllowPaymentOnAccount;\r\n\r\n this.SetDefaultDateFrom();\r\n\r\n this.InitCompanies();\r\n this.InitCustomer();\r\n this.InitTabs();\r\n\r\n // if filter option is automatic then first check if customer has open documents and only then refresh the data\r\n this.Do(this.customerEndpoint.HasOpenDocuments(), false, (response) => {\r\n this.State.IsOpen = Globals.SystemOption.DocumentFilteringOption == EnumDocumentFilteringOption.Automatic \r\n ? response.Data\r\n : Globals.SystemOption.DocumentFilteringOption == EnumDocumentFilteringOption.ShowAll \r\n ? false\r\n : true;\r\n this.State.HasOpenDocuments = response.Data;\r\n this.LoadDataSource();\r\n this.State.IsInitDone = true;\r\n });\r\n this.InitTotalBalance();\r\n }\r\n\r\n private SetDefaultDateFrom() {\r\n // if default date is set then add filter\r\n if (Globals.SystemOption.DefaultMonthToShow >= 1 && Globals.SystemOption.DefaultMonthToShow < 50) {\r\n const date = new Date();\r\n const newDate = new Date(date.valueOf());\r\n newDate.setMonth(date.getMonth() - Globals.SystemOption.DefaultMonthToShow);\r\n this.State.FromDate = newDate;\r\n } else {\r\n this.State.FromDate = undefined;\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = {\r\n IsAllowExport: true,\r\n IsAllowPrint: true,\r\n GridExtender: this.G,\r\n OnPrintButtonClick: (e) => {\r\n this.State.IsPrintMode = true;\r\n this.G.Print();\r\n this.State.IsPrintMode = false;\r\n }\r\n } as ToolbarSettings;\r\n return settings;\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n const defaultTitle = this.GetDefaultTitle();\r\n return this.State.IsPrintMode ? `${defaultTitle} - ${this.CurrentTabName}` : defaultTitle;\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === PaymentRequest) {\r\n this.LoadDataSource();\r\n this.InitTotalBalance();\r\n }\r\n }\r\n\r\n override OnGetFilterDescription(): string {\r\n let sDescription: string = \"\";\r\n if(!(!this.State.Customer?.CardName)) sDescription = `${this.State.Customer?.CardName}\\n`;\r\n if(!(!this.State.Customer?.TradeLicenseNumber)) sDescription += `${this.RC('lblFederalTaxId')}: ${this.State.Customer?.TradeLicenseNumber}`;\r\n \r\n return sDescription;\r\n }\r\n\r\n protected override OnGetPrintTitle(): string {\r\n if (this.State.FromDate || this.State.UntilDate) {\r\n const periodFrom = this.State.FromDate ? formatDate(this.State.FromDate, this.F.DateFormatShort) : '';\r\n const periodTo = this.State.UntilDate ? formatDate(this.State.UntilDate, this.F.DateFormatShort) : '';\r\n return `${this.RC('lblReportPeriod')}: ${periodFrom} - ${periodTo}`;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n OnFilterChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n OnShowPdf(document: BaseDocument) {\r\n this.Navigate(['/pages/pdf_view', document.EntryID], { \r\n ViewType: EnumPdfDocumentViewType.Inner, \r\n DocumentType: document.TransType, \r\n ShowAsWindow: true \r\n });\r\n return;\r\n }\r\n\r\n OnPayBySelected() {\r\n Globals.PaymentDocuments = this.State.Documents;\r\n Globals.IsAccountPayment = this.State.Documents.length === 0;\r\n this.paymentDialog.ShowDialogShort(() => {\r\n this.Do(this.customerEndpoint.HasOpenDocuments(), false, (response) => {\r\n this.State.HasOpenDocuments = response.Data;\r\n });\r\n }, () => {});\r\n }\r\n\r\n OnPayByOne(document: BaseDocument) {\r\n Globals.PaymentDocuments = [document];\r\n Globals.IsAccountPayment = false;\r\n this.paymentDialog.ShowDialogShort(() => {\r\n this.Do(this.customerEndpoint.HasOpenDocuments(), false, (response) => {\r\n this.State.HasOpenDocuments = response.Data;\r\n });\r\n }, () => {});\r\n }\r\n\r\n OnSelectionChanged(Documents: BaseDocument[]) {\r\n this.State.Documents = Documents.filter(x => x.PaymentSum && x.PaymentSum !== 0 && x['IsPaymentAllowed'] !== false);\r\n this.State.TotalSum = this.State.Documents.reduce((sum, current) => sum + current.PaymentSum, 0);\r\n\r\n if (this.HasRepeatedValue(this.State.Documents, 'PaymentCurrency')) {\r\n this.State.IsSingleCurrency = false;\r\n this.A.UI.StopMessage(this.State.CurrentTabIndex === 3 \r\n ? this.RC('msgDeliveriesDifferentCurrencies') \r\n : this.RC('msgDocumentDifferentCurrencies'));\r\n return;\r\n }\r\n\r\n this.State.PaymentCurrency = this.State.Documents.length > 0 ? this.State.Documents[0].PaymentCurrency : null;\r\n this.State.IsSingleCurrency = true;\r\n\r\n if (this.State.IsEnableMultiCompany) {\r\n if (this.HasRepeatedValue(this.State.Documents, 'CompanyID')) {\r\n this.State.IsSingleCompany = false;\r\n this.A.UI.StopMessage(this.State.CurrentTabIndex === 3 \r\n ? this.RC('msgDeliveriesDifferentCompanies') \r\n : this.RC('msgDocumentDifferentCompanies'));\r\n return;\r\n }\r\n\r\n this.State.PaymentCompanyID = this.State.Documents.length > 0 ? this.State.Documents[0].CompanyID : null;\r\n this.State.IsSingleCompany = true;\r\n }\r\n }\r\n\r\n OnTabChanged() {\r\n this.InitDocuments();\r\n this.LoadDataSource();\r\n this.InitTotalBalance();\r\n this.Do(this.customerEndpoint.HasOpenDocuments(), false, (response) => {\r\n this.State.HasOpenDocuments = response.Data;\r\n });\r\n setTimeout(() => {\r\n this.ReloadToolbar(); \r\n });\r\n }\r\n\r\n Abs(value: number) {\r\n return Math.abs(value);\r\n }\r\n \r\n OnShowFiles(document: BaseDocument) {\r\n this.Do(this.fileEndpoint.GetList(document.TransType, document.SBODocumentEntry), false, (response) => {\r\n if (response.Entities.length === 1) {\r\n this.OnShowFile(response.Entities[0]);\r\n } else {\r\n this.fileListDialog.Show(response.Entities);\r\n }\r\n });\r\n }\r\n\r\n OnShowFile(file: FileEntity) {\r\n this.State.CurrentFileName = `${file.Name}${file.Extension}`;\r\n\r\n this.Do(this.fileEndpoint.GetFileData(file.EntryID), false, (response: any) => {\r\n this.State.CurrentFileData = response;\r\n\r\n // Show the pdf\r\n if (file.FileType === EnumFileTypes.Pdf) {\r\n this.ShowFilePdf();\r\n // Show the image\r\n } else if (file.FileType === EnumFileTypes.Image) {\r\n this.ShowFileImage();\r\n // Download the file\r\n } else {\r\n this.OnDownloadFile(); \r\n }\r\n });\r\n }\r\n\r\n OnDownloadFile() {\r\n // Create a tag 'a' and click it\r\n const a = document.createElement('a');\r\n a.href = window.URL.createObjectURL(this.State.CurrentFileData);\r\n a.download = this.State.CurrentFileName;\r\n a.click();\r\n }\r\n\r\n\r\n OnDownloadAllFiles(e) {\r\n const bIsZIP: boolean = e.itemData == 'ZIP';\r\n const params = new DocumentsDownloadParams();\r\n params.DateFrom = this.State.FromDate;\r\n params.DateUntil = this.State.UntilDate;\r\n params.IsOpen = this.State.IsOpen;\r\n params.DownloadOption = bIsZIP ? EnumDocumentDownloadOption.ZIP : EnumDocumentDownloadOption.PDF;\r\n if (this.State.IsEnableMultiCompany && this.State.CompanyID) {\r\n params.CompanyID = this.State.CompanyID; \r\n }\r\n //params.ReportTab = this.State.CurrentTabIndex\r\n switch (this.State.CurrentTabIndex) {\r\n case 0:\r\n params.ReportTab = EnumReportTabs.Ledger;\r\n break;\r\n case 1:\r\n params.ReportTab = EnumReportTabs.Invoice;\r\n break;\r\n case 2:\r\n params.ReportTab = EnumReportTabs.AgingReport;\r\n break;\r\n case 3:\r\n params.ReportTab = EnumReportTabs.Delivery;\r\n break;\r\n default:\r\n return;\r\n }\r\n this.Do(this.fileEndpoint.GetAllDocumentsPdfData(params), true, (response: any) => {\r\n if (response.IsSuccess) {\r\n if (response.Data != undefined && response.Data != '') {\r\n const oBlob = Utils.ConvertToBlob(response.Data, 'octet/stream');\r\n const oLink = document.createElement('a');\r\n oLink.href = window.URL.createObjectURL(oBlob);\r\n \r\n oLink.download = bIsZIP? 'documents.zip': 'documents.pdf';\r\n oLink.click();\r\n }\r\n }\r\n });\r\n }\r\n\r\n OnChangeCompany() {\r\n if (!this.State.IsInitDone) return;\r\n if (this.State.CompanyID == undefined) this.State.CompanyID = -1;\r\n this.InitTotalBalance();\r\n this.LoadDataSource();\r\n }\r\n\r\n get CurrentTabName(): string {\r\n return this.State.ReportTabs.filter(x => x.index === this.State.CurrentTabIndex)[0].text; \r\n }\r\n\r\n private ShowFileImage() {\r\n // Filling the image dialog\r\n this.imageDialog.Title = this.State.CurrentFileName;\r\n this.imageDialog.ImageSource = this.State.CurrentFileData;\r\n // Show the image dialog\r\n this.imageDialog.ShowDialogShort(() => { });\r\n \r\n }\r\n\r\n protected ShowFilePdf() {\r\n // Set the filename and the title\r\n this.printBoxDialog.FileName = this.State.CurrentFileName;\r\n this.printBoxDialog.Title = this.State.CurrentFileName;\r\n // Set the pdf data\r\n this.printBoxDialog.PDFData = this.State.CurrentFileData;\r\n // Show the dialog\r\n this.printBoxDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n protected InitTabs() {\r\n switch (Globals.SystemOption.SystemType) {\r\n case EnumSystemTypes.Landlord: {\r\n this.State.ReportTabs = this.LIST('ReportTabsLandLord');\r\n break;\r\n }\r\n case EnumSystemTypes.Zulu: {\r\n this.State.ReportTabs = this.LIST('ReportTabsZulu');\r\n break;\r\n }\r\n default: {\r\n this.State.ReportTabs = this.LIST('ReportTabs');\r\n break;\r\n }\r\n }\r\n\r\n\r\n // filter ledger\r\n this.State.ReportTabs[0].visible = Globals.SystemOption.IsAllowLedger;\r\n // filter invoice\r\n this.State.ReportTabs[1].visible = Globals.SystemOption.IsAllowInvoices;\r\n // filter aging report\r\n this.State.ReportTabs[2].visible = Globals.SystemOption.IsAllowAgingReport;\r\n // filter deliveries\r\n this.State.ReportTabs[3].visible = Globals.SystemOption.IsAllowDeliveries;\r\n\r\n // set current tab\r\n const visibleTabs = this.State.ReportTabs.filter(x => x.visible);\r\n\r\n if (this.QueryParams.Tab) {\r\n const tab = visibleTabs.find(x => x.index === parseInt(this.QueryParams.Tab, 10));\r\n if (tab != null) {\r\n this.State.CurrentTabIndex = tab.index; \r\n }\r\n }\r\n\r\n if (!this.State.CurrentTabIndex) {\r\n this.State.CurrentTabIndex = visibleTabs.length > 0 ? visibleTabs[0].index : -1;\r\n }\r\n }\r\n\r\n private InitTotalBalance() {\r\n this.Do(this.customerEndpoint.GetBalance(this.State.CompanyID), false, (response) => {\r\n this.State.BalanceView = response.Entity; \r\n });\r\n }\r\n\r\n protected InitDocuments() {\r\n this.State.Documents = [];\r\n this.State.TotalSum = 0;\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new TransDocumentListParams();\r\n params.RefDateFrom = this.State.FromDate;\r\n params.RefDateUntil = this.State.UntilDate;\r\n params.IsOpen = this.State.IsOpen;\r\n if (this.State.IsEnableMultiCompany && this.State.CompanyID) {\r\n params.CompanyID = this.State.CompanyID; \r\n }\r\n\r\n this.InitDocuments();\r\n if (this.grid) {\r\n this.grid.ClearSelection(); \r\n }\r\n this.DataSources['Ledgers'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n params.HasComplexFilter = options['ComplexFilter'] ? true : false;\r\n return this.ledgerEndpoint.GetListByParams(params, options);\r\n }, undefined, undefined, true, { paginate: false });\r\n\r\n this.DataSources['Invoices'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.invoiceEndpoint.GetListByParams(params, options), undefined, undefined, true, { paginate: false });\r\n\r\n // Show open only for Aging report always\r\n const agingReportParams = Utils.CloneObject(params) as TransDocumentListParams;\r\n agingReportParams.IsOpen = true;\r\n this.DataSources['AgingReport'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.agingTransDocumentEndpoint.GetListByParams(agingReportParams, options), undefined, undefined, false, { paginate: false });\r\n\r\n // Define a data source for the deliveries grid\r\n const deliveriesParams = new DeliveriesListParams();\r\n deliveriesParams.DeliveryDateFrom = this.State.FromDate;\r\n deliveriesParams.DeliveryDateUntil = this.State.UntilDate;\r\n deliveriesParams.IsOpen = this.State.IsOpen;\r\n if (this.State.IsEnableMultiCompany && this.State.CompanyID) {\r\n deliveriesParams.CompanyID = this.State.CompanyID; \r\n }\r\n\r\n this.DataSources['Deliveries'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.deliveryEndpoint.GetListByParams(deliveriesParams, options), undefined, undefined, true, { paginate: false });\r\n\r\n }\r\n\r\n private InitCompanies() {\r\n this.State.IsEnableMultiCompany = Globals.SystemOption.IsEnableMultiCompany;\r\n\r\n if (this.State.IsEnableMultiCompany) {\r\n this.Do(this.companyEndpoint.List(), false, (response) => {\r\n this.State.Companies = response.Entities || [];\r\n if (this.State.Companies.length === 1) {\r\n this.State.CompanyID = this.State.Companies[0].EntryID;\r\n return;\r\n }\r\n if (this.State.Companies.length > 1) {\r\n const allCompaniesItem = this.GetAllCompaniesItem();\r\n this.State.Companies.unshift(allCompaniesItem);\r\n this.State.CompanyID = allCompaniesItem.EntryID;\r\n return;\r\n }\r\n this.State.CompanyID = undefined;\r\n });\r\n }\r\n }\r\n\r\n private InitCustomer() {\r\n this.Do(this.customerEndpoint.GetCurrent(), false, (response: BaseEntityResponse) => {\r\n this.State.Customer = response.Entity;\r\n });\r\n }\r\n\r\n private GetAllCompaniesItem() {\r\n const allCompaniesItem = new CompanyView();\r\n allCompaniesItem.EntryID = -1;\r\n allCompaniesItem.Code = '-1';\r\n allCompaniesItem.Name = this.RC('lblAllCompanies');\r\n\r\n return allCompaniesItem;\r\n }\r\n\r\n private HasRepeatedValue(arr: any[], fieldName: string) {\r\n if (!arr || arr.length === 0) {\r\n return false; \r\n }\r\n\r\n const oldValue = arr[0][fieldName];\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n if (oldValue !== arr[i][fieldName]) {\r\n return true; \r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n OnClearFilter() {\r\n this.State.CompanyID = this.State.FromDate = this.State.UntilDate = undefined;\r\n this.State.IsOpen = true;\r\n }\r\n\r\n OnTimePeriodChanged() {\r\n const timePeriod = this.LISTITEMX('ReportTimePeriods', this.State.TimePeriod) as any;\r\n if (!timePeriod) {\r\n this.SetDefaultDateFrom();\r\n return;\r\n }\r\n\r\n this.State.FromDate = timePeriod?.DateFrom;\r\n this.State.UntilDate = timePeriod?.DateTo;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n 1 && State.CompanyID != -1\\\"\\r\\n (onValueChanged)=\\\"OnChangeCompany()\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{'lblTotal' | RC:THIS}}: {{State.TotalSum | formatPriceWithCurrency: State.PaymentCurrency:true}}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { EnumAutoCreationDocumentTypes, EnumCustomerAddressTypes, EnumDeliveryMethods, EnumInvoicePaymentTypes, EnumPaymentRequestStatuses, EnumPaymentRequestSteps, EnumPaymentRequestTypes, EnumSystemTypes, EnumDocumentFilteringOption, EnumCardProcessingServices } from \"@dato-proxy/enums\";\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../_globals';\r\n\r\nexport const Lists_EN =\r\n{\r\n Properties:\r\n {\r\n Language: EnumLanguages.English\r\n },\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'Open',\r\n Value: true\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: false\r\n }\r\n ],\r\n InvoicePaymentStatuses:\r\n [\r\n {\r\n Text: 'Not paid',\r\n Value: EnumInvoicePaymentTypes.NotPaid\r\n },\r\n {\r\n Text: 'Paid partially',\r\n Value: EnumInvoicePaymentTypes.PaidPartially\r\n },\r\n {\r\n Text: 'Paid',\r\n Value: EnumInvoicePaymentTypes.Paid\r\n },\r\n {\r\n Text: 'Outstanding credit',\r\n Value: EnumInvoicePaymentTypes.OutstandingCredit\r\n },\r\n {\r\n Text: 'Open',\r\n Value: EnumInvoicePaymentTypes.Open\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: EnumInvoicePaymentTypes.Closed\r\n }\r\n ],\r\n ChoiseCardByPayment:\r\n [\r\n {\r\n Text: 'Use existing credit card ending with {0}',\r\n Value: 'Old',\r\n SortOrder: 0\r\n },\r\n {\r\n Text: 'Enter a new credit card',\r\n Value: 'New',\r\n SortOrder: 1\r\n }\r\n ],\r\n ReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Ledger',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Documents report',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Aging report',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Deliveries report',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsLandLord:\r\n [\r\n {\r\n index: 0,\r\n text: 'Ledger',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Documents report',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Aging report',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Proformas report',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsZulu:\r\n [\r\n {\r\n index: 0,\r\n text: 'Ledger',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Documents report',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Aging report',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Deliveries report',\r\n Type: 3\r\n },\r\n ],\r\n CustomerAddressTabs:\r\n [\r\n {\r\n index: 1,\r\n text: 'Bill-to Addresses',\r\n Value: EnumCustomerAddressTypes.Bill,\r\n Name: 'BillCustomerAddresses'\r\n },\r\n {\r\n index: 0,\r\n text: 'Ship-to Addresses',\r\n Value: EnumCustomerAddressTypes.Ship,\r\n Name: 'ShipCustomerAddresses'\r\n }\r\n ],\r\n AutoCreationDocumentType: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Invoice',\r\n Value: EnumAutoCreationDocumentTypes.Invoice\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Order',\r\n Value: EnumAutoCreationDocumentTypes.Order\r\n }, {\r\n SortOrder: 4,\r\n Text: 'None',\r\n Value: EnumAutoCreationDocumentTypes.None\r\n }, {\r\n SortOrder: 3,\r\n Text: 'DownPayment',\r\n Value: EnumAutoCreationDocumentTypes.DownPayment\r\n }\r\n ],\r\n PaymentRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Payment request',\r\n Value: EnumPaymentRequestStatuses.Sent\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Credit card updated',\r\n Value: EnumPaymentRequestStatuses.Confirmed\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Executed',\r\n Value: EnumPaymentRequestStatuses.Executed\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Error when paying',\r\n Value: EnumPaymentRequestStatuses.Error\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Handling required',\r\n Value: EnumPaymentRequestStatuses.Cancelled\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Resolved manualy',\r\n Value: EnumPaymentRequestStatuses.Resolved\r\n }\r\n ],\r\n PaymentRequestTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Existing card',\r\n Value: EnumPaymentRequestTypes.PaymentByExistingCard\r\n }, {\r\n SortOrder: 2,\r\n Text: 'New card',\r\n Value: EnumPaymentRequestTypes.PaymentByNewCard\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Paypal',\r\n Value: EnumPaymentRequestTypes.Paypal\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Bit',\r\n Value: EnumPaymentRequestTypes.Bit\r\n }\r\n ],\r\n PaymentRequestSteps: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Send',\r\n Value: EnumPaymentRequestSteps.SendToPaymentService\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Confirm',\r\n Value: EnumPaymentRequestSteps.ConfirmInPaymentService\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Execute',\r\n Value: EnumPaymentRequestSteps.ExecuteInPaymentService\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Save Invoice',\r\n Value: EnumPaymentRequestSteps.SaveInvoice\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Save Order',\r\n Value: EnumPaymentRequestSteps.SaveOrder\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Save Receipt',\r\n Value: EnumPaymentRequestSteps.SaveReceipt\r\n }, {\r\n SortOrder: 7,\r\n Text: 'Update Transaction Ref Data',\r\n Value: EnumPaymentRequestSteps.UpdateTransactionRefDataInPaymentService\r\n }, {\r\n SortOrder: 8,\r\n Text: 'Save Credit Card',\r\n Value: EnumPaymentRequestSteps.SaveCreditCard\r\n }, {\r\n SortOrder: 9,\r\n Text: 'Send Invoice',\r\n Value: EnumPaymentRequestSteps.SendInvoice\r\n }, {\r\n SortOrder: 10,\r\n Text: 'Send Order',\r\n Value: EnumPaymentRequestSteps.SendOrder\r\n }, {\r\n SortOrder: 11,\r\n Text: 'Send Receipt',\r\n Value: EnumPaymentRequestSteps.SendReceipt\r\n }, {\r\n SortOrder: 12,\r\n Text: 'Rollback',\r\n Value: EnumPaymentRequestSteps.Rollback\r\n }, {\r\n SortOrder: 13,\r\n Text: 'Admin notification sent',\r\n Value: EnumPaymentRequestSteps.AdminNotificationSent\r\n }, {\r\n SortOrder: 14,\r\n Text: 'Transfered to payment service',\r\n Value: EnumPaymentRequestSteps.TransferedToPaymentService\r\n }, {\r\n SortOrder: 15,\r\n Text: 'Additional action failed',\r\n Value: EnumPaymentRequestSteps.AdditionalActionFailed\r\n }, {\r\n SortOrder: 16,\r\n Text: 'Save DownPayment',\r\n Value: EnumPaymentRequestSteps.SaveDownPayment\r\n }, {\r\n SortOrder: 17,\r\n Text: 'Commit transaction',\r\n Value: EnumPaymentRequestSteps.CommitTransaction\r\n }\r\n ],\r\n SystemTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'SBO',\r\n Value: EnumSystemTypes.SBO\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Landlord',\r\n Value: EnumSystemTypes.Landlord\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Zulu',\r\n Value: EnumSystemTypes.Zulu\r\n }\r\n ],\r\n MyDetailsTabs: [\r\n {\r\n index: 0,\r\n text: 'Contact persons',\r\n Name: 'ContactPersons'\r\n },\r\n {\r\n index: 1,\r\n text: 'Customer addresses',\r\n Name: 'CustomerAddresses'\r\n }\r\n ],\r\n DeliveryMethods: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Email',\r\n Value: EnumDeliveryMethods.Email\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Phone',\r\n Value: EnumDeliveryMethods.Phone\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'WhatsApp',\r\n Value: EnumDeliveryMethods.WhatsApp\r\n }\r\n ],\r\n DocumentFilteringOption: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Show Open',\r\n Value: EnumDocumentFilteringOption.ShowOpen\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Show All',\r\n Value: EnumDocumentFilteringOption.ShowAll\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Automatic',\r\n Value: EnumDocumentFilteringOption.Automatic\r\n }\r\n ],\r\n ReportTimePeriods: [\r\n {\r\n DateFrom: Globals.MonthAgoDate,\r\n DateTo: undefined,\r\n Text: 'Last month',\r\n Value: 1,\r\n SortOrder: 1\r\n },\r\n {\r\n DateFrom: Globals.ThreeMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: 'Last 3 months',\r\n Value: 2,\r\n SortOrder: 2\r\n },\r\n {\r\n DateFrom: Globals.SixMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: 'Last 6 month',\r\n Value: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n DateFrom: Globals.YearAgoDate,\r\n DateTo: undefined,\r\n Text: 'Last year',\r\n Value: 4,\r\n SortOrder: 4\r\n },\r\n {\r\n DateFrom: undefined,\r\n DateTo: undefined,\r\n Text: 'All',\r\n Value: 5,\r\n SortOrder: 5\r\n },\r\n ], \r\n CardProcessingServices: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Go Credit',\r\n Value: EnumCardProcessingServices.GoCredit\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Authorize.NET',\r\n Value: EnumCardProcessingServices.AuthorizeNet\r\n }\r\n ],\r\n\r\n};\r\n","import { EnumAutoCreationDocumentTypes, EnumCustomerAddressTypes, EnumDeliveryMethods, EnumInvoicePaymentTypes, EnumPaymentRequestStatuses, EnumPaymentRequestSteps, EnumPaymentRequestTypes, EnumSystemTypes, EnumDocumentFilteringOption, EnumCardProcessingServices } from '@dato-proxy/enums';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../_globals';\r\n\r\nexport const Lists_HE =\r\n{\r\n Properties:\r\n {\r\n Language: EnumLanguages.Hebrew\r\n },\r\n\r\n\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'פתוח',\r\n Value: true\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: false\r\n }\r\n ],\r\n InvoicePaymentStatuses:\r\n [\r\n {\r\n Text: 'לא שולם',\r\n Value: EnumInvoicePaymentTypes.NotPaid\r\n },\r\n {\r\n Text: 'שולם חלקית',\r\n Value: EnumInvoicePaymentTypes.PaidPartially\r\n },\r\n {\r\n Text: 'שולם',\r\n Value: EnumInvoicePaymentTypes.Paid\r\n },\r\n {\r\n Text: 'זיכוי',\r\n Value: EnumInvoicePaymentTypes.OutstandingCredit\r\n },\r\n {\r\n Text: 'פתוח',\r\n Value: EnumInvoicePaymentTypes.Open\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: EnumInvoicePaymentTypes.Closed\r\n }\r\n ],\r\n ChoiseCardByPayment:\r\n [\r\n {\r\n Text: 'השתמש בכרטיס אשראי קיים המסתיים ב {0}',\r\n Value: 'Old',\r\n SortOrder: 0\r\n },\r\n {\r\n Text: 'הזן כרטיס אשראי חדש',\r\n Value: 'New',\r\n SortOrder: 1\r\n }\r\n ],\r\n ReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'כרטסת',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'דוח מסמכים',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'דוח גיול',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'תעודות משלוח',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsLandLord:\r\n [\r\n {\r\n index: 0,\r\n text: 'כרטסת',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'דוח מסמכים',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'דוח גיול',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'דרישות תשלום',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsZulu:\r\n [\r\n {\r\n index: 0,\r\n text: 'כרטסת',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'דוח מסמכים',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'דוח גיול',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'תעודות משלוח',\r\n Type: 3\r\n },\r\n ],\r\n CustomerAddressTabs:\r\n [\r\n {\r\n index: 1,\r\n text: 'כתובות לחיוב',\r\n Value: EnumCustomerAddressTypes.Bill,\r\n Name: 'BillCustomerAddresses'\r\n },\r\n {\r\n index: 0,\r\n text: 'כתובות למשלוח',\r\n Value: EnumCustomerAddressTypes.Ship,\r\n Name: 'ShipCustomerAddresses'\r\n }\r\n ],\r\n AutoCreationDocumentType: [\r\n {\r\n SortOrder: 1,\r\n Text: 'חשבונית מס',\r\n Value: EnumAutoCreationDocumentTypes.Invoice\r\n }, {\r\n SortOrder: 2,\r\n Text: 'הזמנה',\r\n Value: EnumAutoCreationDocumentTypes.Order\r\n }, {\r\n SortOrder: 4,\r\n Text: 'ללא',\r\n Value: EnumAutoCreationDocumentTypes.None\r\n }, {\r\n SortOrder: 3,\r\n Text: 'מקדמה',\r\n Value: EnumAutoCreationDocumentTypes.DownPayment\r\n }\r\n ],\r\n PaymentRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Text: 'ניסיון תשלום',\r\n Value: EnumPaymentRequestStatuses.Sent\r\n }, {\r\n SortOrder: 2,\r\n Text: 'כרטיס אשראי שונה',\r\n Value: EnumPaymentRequestStatuses.Confirmed\r\n }, {\r\n SortOrder: 3,\r\n Text: 'שולם',\r\n Value: EnumPaymentRequestStatuses.Executed\r\n }, {\r\n SortOrder: 4,\r\n Text: 'שגיאה בזמן תשלום',\r\n Value: EnumPaymentRequestStatuses.Error\r\n }, {\r\n SortOrder: 5,\r\n Text: 'נדרשת התערבות ידנית',\r\n Value: EnumPaymentRequestStatuses.Cancelled\r\n }, {\r\n SortOrder: 6,\r\n Text: 'טופל ידני',\r\n Value: EnumPaymentRequestStatuses.Resolved\r\n }\r\n ],\r\n PaymentRequestTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'כרטיס קיים',\r\n Value: EnumPaymentRequestTypes.PaymentByExistingCard\r\n }, {\r\n SortOrder: 2,\r\n Text: 'כרטיס חדש',\r\n Value: EnumPaymentRequestTypes.PaymentByNewCard\r\n }, {\r\n SortOrder: 3,\r\n Text: 'פייפאל',\r\n Value: EnumPaymentRequestTypes.Paypal\r\n }, {\r\n SortOrder: 4,\r\n Text: 'ביט',\r\n Value: EnumPaymentRequestTypes.Bit\r\n }\r\n ],\r\n PaymentRequestSteps: [\r\n {\r\n SortOrder: 1,\r\n Text: 'שליחה',\r\n Value: EnumPaymentRequestSteps.SendToPaymentService\r\n }, {\r\n SortOrder: 2,\r\n Text: 'אישור תשלום',\r\n Value: EnumPaymentRequestSteps.ConfirmInPaymentService\r\n }, {\r\n SortOrder: 3,\r\n Text: 'תשלום',\r\n Value: EnumPaymentRequestSteps.ExecuteInPaymentService\r\n }, {\r\n SortOrder: 4,\r\n Text: 'יצירת חשבונית מס',\r\n Value: EnumPaymentRequestSteps.SaveInvoice\r\n }, {\r\n SortOrder: 5,\r\n Text: 'יצירת הזמנה',\r\n Value: EnumPaymentRequestSteps.SaveOrder\r\n }, {\r\n SortOrder: 6,\r\n Text: 'יצירת קבלה',\r\n Value: EnumPaymentRequestSteps.SaveReceipt\r\n }, {\r\n SortOrder: 7,\r\n Text: 'עדכון ת. אסמכתא תנועת יומן',\r\n Value: EnumPaymentRequestSteps.UpdateTransactionRefDataInPaymentService\r\n }, {\r\n SortOrder: 8,\r\n Text: 'שמירת כרטיס אשראי',\r\n Value: EnumPaymentRequestSteps.SaveCreditCard\r\n }, {\r\n SortOrder: 9,\r\n Text: 'שליחת חשבונית',\r\n Value: EnumPaymentRequestSteps.SendInvoice\r\n }, {\r\n SortOrder: 10,\r\n Text: 'שליחת הזמנה',\r\n Value: EnumPaymentRequestSteps.SendOrder\r\n }, {\r\n SortOrder: 11,\r\n Text: 'שליחת קבלה',\r\n Value: EnumPaymentRequestSteps.SendReceipt\r\n }, {\r\n SortOrder: 12,\r\n Text: 'ביטול תשלום',\r\n Value: EnumPaymentRequestSteps.Rollback\r\n }, {\r\n SortOrder: 13,\r\n Text: 'שליחת התראה לאדמין',\r\n Value: EnumPaymentRequestSteps.AdminNotificationSent\r\n }, {\r\n SortOrder: 14,\r\n Text: 'מעבר למערכת תשלום',\r\n Value: EnumPaymentRequestSteps.TransferedToPaymentService\r\n }, {\r\n SortOrder: 15,\r\n Text: 'פעולה נוספת נכשלה',\r\n Value: EnumPaymentRequestSteps.AdditionalActionFailed\r\n }, {\r\n SortOrder: 16,\r\n Text: 'יצירת מקדמה',\r\n Value: EnumPaymentRequestSteps.SaveDownPayment\r\n }, {\r\n SortOrder: 17,\r\n Text: 'סיום טרנזקציה',\r\n Value: EnumPaymentRequestSteps.CommitTransaction\r\n }\r\n ],\r\n SystemTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'סאפ',\r\n Value: EnumSystemTypes.SBO\r\n }, {\r\n SortOrder: 2,\r\n Text: 'נכסים',\r\n Value: EnumSystemTypes.Landlord\r\n }, {\r\n SortOrder: 3,\r\n Text: 'זולו',\r\n Value: EnumSystemTypes.Zulu\r\n }\r\n ],\r\n MyDetailsTabs: [\r\n {\r\n index: 0,\r\n text: 'אנשי קשר',\r\n Name: 'ContactPersons'\r\n },\r\n {\r\n index: 1,\r\n text: 'כתובות',\r\n Name: 'CustomerAddresses'\r\n }\r\n ],\r\n DeliveryMethods: [\r\n {\r\n SortOrder: 1,\r\n Text: 'אימייל',\r\n Value: EnumDeliveryMethods.Email\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'הודעת SMS',\r\n Value: EnumDeliveryMethods.Phone\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'WhatsApp',\r\n Value: EnumDeliveryMethods.WhatsApp\r\n }\r\n ],\r\n DocumentFilteringOption: [\r\n {\r\n SortOrder: 1,\r\n Text: 'הצג פתוחים',\r\n Value: EnumDocumentFilteringOption.ShowOpen\r\n }, {\r\n SortOrder: 2,\r\n Text: 'הצג כולם',\r\n Value: EnumDocumentFilteringOption.ShowAll\r\n }, {\r\n SortOrder: 3,\r\n Text: 'אוטומטי',\r\n Value: EnumDocumentFilteringOption.Automatic\r\n }\r\n ],\r\n ReportTimePeriods: [\r\n {\r\n DateFrom: Globals.MonthAgoDate,\r\n DateTo: undefined,\r\n Text: 'חודש אחרון',\r\n Value: 1,\r\n SortOrder: 1\r\n },\r\n {\r\n DateFrom: Globals.ThreeMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: '3 חודשים אחרונים',\r\n Value: 2,\r\n SortOrder: 2\r\n },\r\n {\r\n DateFrom: Globals.SixMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: '6 חודשים אחרונים',\r\n Value: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n DateFrom: Globals.YearAgoDate,\r\n DateTo: undefined,\r\n Text: 'שנה אחרונה',\r\n Value: 4,\r\n SortOrder: 4\r\n },\r\n {\r\n DateFrom: undefined,\r\n DateTo: undefined,\r\n Text: 'הכל',\r\n Value: 5,\r\n SortOrder: 5\r\n }\r\n ],\r\n CardProcessingServices: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Go Credit',\r\n Value: EnumCardProcessingServices.GoCredit\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Authorize.NET',\r\n Value: EnumCardProcessingServices.AuthorizeNet\r\n }\r\n ],\r\n};\r\n","import { EnumAutoCreationDocumentTypes, EnumCustomerAddressTypes, EnumDeliveryMethods, EnumInvoicePaymentTypes, EnumPaymentRequestStatuses, EnumPaymentRequestSteps, EnumPaymentRequestTypes, EnumSystemTypes, EnumDocumentFilteringOption, EnumCardProcessingServices } from \"@dato-proxy/enums\";\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../_globals';\r\n\r\nexport const Lists_ES =\r\n{\r\n Properties:\r\n {\r\n Language: EnumLanguages.Spanish\r\n },\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'Abierto',\r\n Value: true\r\n },\r\n {\r\n Text: 'Cerrado',\r\n Value: false\r\n }\r\n ],\r\n InvoicePaymentStatuses:\r\n [\r\n {\r\n Text: 'No pagado',\r\n Value: EnumInvoicePaymentTypes.NotPaid\r\n },\r\n {\r\n Text: 'Pagado parcialmente',\r\n Value: EnumInvoicePaymentTypes.PaidPartially\r\n },\r\n {\r\n Text: 'Pagado',\r\n Value: EnumInvoicePaymentTypes.Paid\r\n },\r\n {\r\n Text: 'Saldo pendiente',\r\n Value: EnumInvoicePaymentTypes.OutstandingCredit\r\n },\r\n {\r\n Text: 'Abierto',\r\n Value: EnumInvoicePaymentTypes.Open\r\n },\r\n {\r\n Text: 'Cerrado',\r\n Value: EnumInvoicePaymentTypes.Closed\r\n }\r\n ],\r\n ChoiseCardByPayment:\r\n [\r\n {\r\n Text: 'Usar la tarjeta de crédito existente que termina en {0}',\r\n Value: 'Old',\r\n SortOrder: 0\r\n },\r\n {\r\n Text: 'Introducir una nueva tarjeta de crédito',\r\n Value: 'New',\r\n SortOrder: 1\r\n }\r\n ],\r\n ReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Libro contable',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Informe de documentos',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Informe de antigüedad',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Informe de envíos',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsLandLord:\r\n [\r\n {\r\n index: 0,\r\n text: 'Libro contable',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Informe de documentos',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Informe de antigüedad',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Informe proforma',\r\n Type: 3\r\n },\r\n ],\r\n ReportTabsZulu:\r\n [\r\n {\r\n index: 0,\r\n text: 'Libro contable',\r\n Type: 0\r\n },\r\n {\r\n index: 1,\r\n text: 'Informe de documentos',\r\n Type: 1\r\n },\r\n {\r\n index: 2,\r\n text: 'Informe de antigüedad',\r\n Type: 2\r\n },\r\n {\r\n index: 3,\r\n text: 'Informe de envíos',\r\n Type: 3\r\n },\r\n ],\r\n CustomerAddressTabs:\r\n [\r\n {\r\n index: 1,\r\n text: 'Direcciones de facturación',\r\n Value: EnumCustomerAddressTypes.Bill,\r\n Name: 'BillCustomerAddresses'\r\n },\r\n {\r\n index: 0,\r\n text: 'Direcciones de envío',\r\n Value: EnumCustomerAddressTypes.Ship,\r\n Name: 'ShipCustomerAddresses'\r\n }\r\n ],\r\n AutoCreationDocumentType: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Factura',\r\n Value: EnumAutoCreationDocumentTypes.Invoice\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Pedido',\r\n Value: EnumAutoCreationDocumentTypes.Order\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Ninguna',\r\n Value: EnumAutoCreationDocumentTypes.None\r\n }, {\r\n SortOrder: 3,\r\n Text: 'DownPayment',\r\n Value: EnumAutoCreationDocumentTypes.DownPayment\r\n }\r\n ],\r\n PaymentRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Solicitud de pago',\r\n Value: EnumPaymentRequestStatuses.Sent\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Tarjeta de crédito actualizada',\r\n Value: EnumPaymentRequestStatuses.Confirmed\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Ejecutado',\r\n Value: EnumPaymentRequestStatuses.Executed\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Error al pagar',\r\n Value: EnumPaymentRequestStatuses.Error\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Manipulación necesaria',\r\n Value: EnumPaymentRequestStatuses.Cancelled\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Resuelto manualmente',\r\n Value: EnumPaymentRequestStatuses.Resolved\r\n }\r\n ],\r\n PaymentRequestTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Tarjeta existente',\r\n Value: EnumPaymentRequestTypes.PaymentByExistingCard\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Nueva tarjeta',\r\n Value: EnumPaymentRequestTypes.PaymentByNewCard\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Paypal',\r\n Value: EnumPaymentRequestTypes.Paypal\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Bit',\r\n Value: EnumPaymentRequestTypes.Bit\r\n }\r\n ],\r\n PaymentRequestSteps: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Enviar',\r\n Value: EnumPaymentRequestSteps.SendToPaymentService\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Confirmar',\r\n Value: EnumPaymentRequestSteps.ConfirmInPaymentService\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Ejecutar',\r\n Value: EnumPaymentRequestSteps.ExecuteInPaymentService\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Guardar factura',\r\n Value: EnumPaymentRequestSteps.SaveInvoice\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Guardar pedido',\r\n Value: EnumPaymentRequestSteps.SaveOrder\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Guardar recibo',\r\n Value: EnumPaymentRequestSteps.SaveReceipt\r\n }, {\r\n SortOrder: 7,\r\n Text: 'Actualizar datos de referencia de la transacción',\r\n Value: EnumPaymentRequestSteps.UpdateTransactionRefDataInPaymentService\r\n }, {\r\n SortOrder: 8,\r\n Text: 'Guardar tarjeta de crédito',\r\n Value: EnumPaymentRequestSteps.SaveCreditCard\r\n }, {\r\n SortOrder: 9,\r\n Text: 'Enviar factura',\r\n Value: EnumPaymentRequestSteps.SendInvoice\r\n }, {\r\n SortOrder: 10,\r\n Text: 'Enviar pedido',\r\n Value: EnumPaymentRequestSteps.SendOrder\r\n }, {\r\n SortOrder: 11,\r\n Text: 'Enviar recibo',\r\n Value: EnumPaymentRequestSteps.SendReceipt\r\n }, {\r\n SortOrder: 12,\r\n Text: 'Retroceso',\r\n Value: EnumPaymentRequestSteps.Rollback\r\n }, {\r\n SortOrder: 13,\r\n Text: 'Notificación de administración enviada',\r\n Value: EnumPaymentRequestSteps.AdminNotificationSent\r\n }, {\r\n SortOrder: 14,\r\n Text: 'Transferido al servicio de pago',\r\n Value: EnumPaymentRequestSteps.TransferedToPaymentService\r\n }, {\r\n SortOrder: 15,\r\n Text: 'Acción adicional fallida',\r\n Value: EnumPaymentRequestSteps.AdditionalActionFailed\r\n }, {\r\n SortOrder: 16,\r\n Text: 'Save DownPayment',\r\n Value: EnumPaymentRequestSteps.SaveDownPayment\r\n }, {\r\n SortOrder: 17,\r\n Text: 'Commit transaction',\r\n Value: EnumPaymentRequestSteps.CommitTransaction\r\n }\r\n ],\r\n SystemTypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'SBO',\r\n Value: EnumSystemTypes.SBO\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Landlord',\r\n Value: EnumSystemTypes.Landlord\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Zulu',\r\n Value: EnumSystemTypes.Zulu\r\n }\r\n ],\r\n MyDetailsTabs: [\r\n {\r\n index: 0,\r\n text: 'Personas de contacto',\r\n Name: 'ContactPersons'\r\n },\r\n {\r\n index: 1,\r\n text: 'Direcciones de los clientes',\r\n Name: 'CustomerAddresses'\r\n }\r\n ],\r\n DeliveryMethods: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Correo electrónico',\r\n Value: EnumDeliveryMethods.Email\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Teléfono',\r\n Value: EnumDeliveryMethods.Phone\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'WhatsApp',\r\n Value: EnumDeliveryMethods.WhatsApp\r\n }\r\n ],\r\n DocumentFilteringOption: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Mostrar abiertos',\r\n Value: EnumDocumentFilteringOption.ShowOpen\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Mostrar todos',\r\n Value: EnumDocumentFilteringOption.ShowAll\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Automático',\r\n Value: EnumDocumentFilteringOption.Automatic\r\n }\r\n ],\r\n ReportTimePeriods: [\r\n {\r\n DateFrom: Globals.MonthAgoDate,\r\n DateTo: undefined,\r\n Text: 'Último mes',\r\n Value: 1,\r\n SortOrder: 1\r\n },\r\n {\r\n DateFrom: Globals.ThreeMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: 'Últimos 3 meses',\r\n Value: 2,\r\n SortOrder: 2\r\n },\r\n {\r\n DateFrom: Globals.SixMonthsAgoDate,\r\n DateTo: undefined,\r\n Text: 'Últimos 6 meses',\r\n Value: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n DateFrom: Globals.YearAgoDate,\r\n DateTo: undefined,\r\n Text: 'Último año',\r\n Value: 4,\r\n SortOrder: 4\r\n },\r\n {\r\n DateFrom: undefined,\r\n DateTo: undefined,\r\n Text: 'Todos',\r\n Value: 5,\r\n SortOrder: 5\r\n },\r\n ],\r\n CardProcessingServices: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Go Credit',\r\n Value: EnumCardProcessingServices.GoCredit\r\n }, {\r\n SortOrder: 2,\r\n Text: 'Authorize.NET',\r\n Value: EnumCardProcessingServices.AuthorizeNet\r\n }\r\n ],\r\n};\r\n","import { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, GenericListEntity, BaseEntitiesResponse, } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { Customer } from '@dato-proxy/entities/customer.entity';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Banks: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bank-details',\r\n templateUrl: './bank-details.component.html',\r\n styleUrls: ['./bank-details.component.scss']\r\n})\r\nexport class BankDetailsComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint) {\r\n super(A, 'BankDetailsComponent', Customer, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.customerEndpoint.GetCurrent(), false, (response) => {\r\n this.Entity = response.Entity;\r\n })\r\n this.Do(this.customerEndpoint.GetBanksList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.Banks = response.Entities;\r\n });\r\n }\r\n\r\n OnSaveDetails() {\r\n this.Do(this.customerEndpoint.SaveBankDetails(this.Entity), true, (response) => {\r\n this.NotifyEntitySaved(this.Entity, Customer);\r\n this.NavigateBack();\r\n })\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAutoCreationDocumentTypes, EnumCardProcessingServices, EnumSystemTypes, EnumDocumentFilteringOption } from './../enums';\r\nexport class SystemOption extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SystemOption';\r\n }\r\n \r\n public SeriesReceipt: string; \r\n public MaxNumberOfPayments: number; \r\n public AutoCreationDocumentType: EnumAutoCreationDocumentTypes; \r\n public SeriesInvoice: string; \r\n public SeriesOrder: string; \r\n public LoginLifeTimePDFDays: number; \r\n public AdminCardCode: string; \r\n public AdminEmail: string; \r\n public SystemType: EnumSystemTypes; \r\n public IsEnableMultiCompany: boolean; \r\n public DocumentFilteringOption: EnumDocumentFilteringOption; \r\n public DefaultMonthToShow: number; \r\n public IsAllowViewingUnsentInvoices: boolean; \r\n public IsAllowViewingUnsentReceipt: boolean; \r\n public IsAllowViewingUnsentDeliveries: boolean; \r\n public UnsentInvoicesTemplate: string; \r\n public UnsentReceiptsTemplate: string; \r\n public UnsentDeliveriesTemplate: string; \r\n public UnsentRefundTemplate: string; \r\n public UnsentReturnTemplate: string; \r\n public GoCreditUserName: string; \r\n public GoCreditPassword: string; //WRITE ONLY (BlockRead)\r\n public GoCreditPaymentPage: string; \r\n public GoCreditPaymentPageEN: string; \r\n public GoCreditTerminalNumber: string; \r\n public InvoiceOneUserName: string; \r\n public InvoiceOnePassword: string; //WRITE ONLY (BlockRead)\r\n public InvoiceOneSenderEmailAddress: string; \r\n public InvoiceOneSenderClientUserName: string; \r\n public InvoiceOneCCEmailAddress: string; \r\n public InvoiceOneIsSendAsAttachment: boolean; \r\n public InvoiceOneReceiptTemplateID: number; \r\n public InvoiceOneReceiptTemplateIDEng: number; \r\n public InvoiceOneReceiptDocCode: string; \r\n public InvoiceOneReceiptDocCodeEng: string; \r\n public InvoiceOneInvoiceTemplateID: number; \r\n public InvoiceOneInvoiceTemplateIDEng: number; \r\n public InvoiceOneInvoiceDocCode: string; \r\n public InvoiceOneInvoiceDocCodeEng: string; \r\n public InvoiceOneOrderTemplateID: number; \r\n public InvoiceOneOrderTemplateIDEng: number; \r\n public InvoiceOneOrderDocCode: string; \r\n public InvoiceOneOrderDocCodeEng: string; \r\n public InvoiceOneIsAllowEmail: boolean; \r\n public InvoiceOneIsAllowSMS: boolean; \r\n public InvoiceOneIsAllowWhatsapp: boolean; \r\n public IsAllowLedger: boolean; \r\n public IsAllowInvoices: boolean; \r\n public IsAllowAgingReport: boolean; \r\n public IsAllowMyDetails: boolean; \r\n public IsAllowDeliveries: boolean; \r\n public IsShowBalanceLate: boolean; \r\n public IsShowAdditionalNotes: boolean; \r\n public IsShowOpenOnly: boolean; \r\n public IsShowFromDate: boolean; \r\n public ShowFromDate: Date; \r\n public IsAllowPayment: boolean; \r\n public IsAllowChangePaymentSum: boolean; \r\n public IsAllowChangePaymentsCount: boolean; \r\n public IsAllowPaymentByDocumentItems: boolean; \r\n public IsAllowPaymentSendEmail: boolean; \r\n public IsAllowPaymentByExistsCreditCard: boolean; \r\n public IsAllowSavePermanentCreditCard: boolean; \r\n public IsAllowPaypalPayment: boolean; \r\n public IsAllowBitPayment: boolean; \r\n public IsShowCCConsent: boolean; \r\n public IsShowCCConsentText: string; \r\n public IsAllowCreditCardEdit: boolean; \r\n public IsAllowContactPersons: boolean; \r\n public IsAllowContactPersonsEdit: boolean; \r\n public IsAllowBillCustomerAddresses: boolean; \r\n public IsAllowBillCustomerAddressesEdit: boolean; \r\n public IsAllowShipCustomerAddresses: boolean; \r\n public IsAllowShipCustomerAddressesEdit: boolean; \r\n public IsShowBalance: boolean; \r\n public IsShowMaxBalance: boolean; \r\n public IsShowObligo: boolean; \r\n public IsShowMaxObligo: boolean; \r\n public IsShowBankDetails: boolean; \r\n public IsAllowBankDetailsEdit: boolean; \r\n public IsShowCreditCard: boolean; \r\n public IsAllowLoginFromEmailLink: boolean; \r\n public IsAllowLoginFromEmailInvoiceLink: boolean; \r\n public IsAllowLoginFromEmailOrderLink: boolean; \r\n public IsAllowLoginFromEmailPriceProposalLink: boolean; \r\n public IsAllowLoginFromEmailDeliveryLink: boolean; \r\n public IsAllowLoginFromEmailCustomerLink: boolean; \r\n public IsShowAttachedDocuments: boolean; \r\n public IsShowAttachedDocumentsToBaseEntity: boolean; \r\n public IsShowAttachedDocumentsToBaseBaseEntity: boolean; \r\n public ContactUsEnabled: boolean; \r\n public ContactUsEmail: string; \r\n public ContactUsWhatsapp: string; \r\n public ContactUsAddress: string; \r\n public ContactUsPhone: string; \r\n public CardProcessingService: EnumCardProcessingServices;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class OptionSourceView extends BaseEntity\r\n{ \r\n public Value: number; \r\n public StrValue: string; \r\n public Text: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumEntityTypes } from './../enums';\r\nimport { EnumDeliveryMethods } from './../enums';\r\nexport class SendDocumentParams extends BaseEntity\r\n{ \r\n public EntityType: EnumEntityTypes; \r\n public IsHebrew: boolean; \r\n public DocumentNumber: number; \r\n public Email: string; \r\n public DeliveryMethod: EnumDeliveryMethods; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { EnumLanguages, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SendDocumentParams } from '@dato-proxy/params/senddocument.param';\r\nimport { EnumDeliveryMethods, EnumEntityTypes } from '@dato-proxy/enums';\r\nimport { SystemOptionEndpoint } from '@dato-proxy/endpoints/systemoption.endpoint';\r\n\r\nclass State extends BaseState {\r\n DocumentNumber: number;\r\n Email: string;\r\n DeliveryMethod: EnumDeliveryMethods;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-test-options-dialog',\r\n templateUrl: './test-options-dialog.component.html',\r\n styleUrls: ['./test-options-dialog.component.scss']\r\n})\r\nexport class TestOptionsDialogComponent extends BasePageComponent {\r\n\r\n @Input() DocumentTypeName: string;\r\n @Input() DocumentType: EnumEntityTypes;\r\n @Input() Language: EnumLanguages;\r\n\r\n constructor(A: ServiceBagService,\r\n private systemOptionEndpoint: SystemOptionEndpoint) {\r\n super(A, 'TestOptionsDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.validationGroup?.instance?.reset();\r\n this.State.DeliveryMethod = EnumDeliveryMethods.Email;\r\n }\r\n\r\n public OnOK() {\r\n const params = new SendDocumentParams();\r\n params.DocumentNumber = this.State.DocumentNumber;\r\n params.Email = this.State.Email;\r\n params.DeliveryMethod = this.State.DeliveryMethod;\r\n params.EntityType = this.DocumentType;\r\n params.IsHebrew = this.Language === EnumLanguages.Hebrew;\r\n\r\n this.Do(this.systemOptionEndpoint.SendDocument(params), true, () => this.CloseDialogWithSuccess());\r\n }\r\n\r\n public GetDocumentNumberLabel() {\r\n return this.RC('lblDocumentNumber').replace('{0}', this.DocumentTypeName);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { EnumAutoCreationDocumentTypes, EnumCardProcessingServices, EnumEntityTypes, EnumSystemTypes, EnumUserTypes } from '@dato-proxy/enums';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { SystemOptionEndpoint } from '@dato-proxy/endpoints/systemoption.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { SystemOption } from '@dato-proxy/entities/systemoption.entity';\r\nimport { BaseEntitiesResponse, BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { OptionSourceView } from '@dato-proxy/views/optionsource.view';\r\nimport { TestOptionsDialogComponent } from '@dato-dialogs/test-options-dialog/test-options-dialog.component';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { SendDocumentParams } from '@dato-proxy/params/senddocument.param';\r\n\r\nclass State extends BaseState {\r\n ReceiptSeriesDataSource: OptionSourceView[];\r\n InvoiceOneReceiptTemplatesDataSource: OptionSourceView[];\r\n InvoiceOneReceiptDocCodesDataSource: OptionSourceView[];\r\n InvoiceOneReceiptDocCodesDataSourceWithDefault: OptionSourceView[];\r\n\r\n InvoiceSeriesDataSource: OptionSourceView[];\r\n InvoiceOneInvoiceTemplatesDataSource: OptionSourceView[];\r\n InvoiceOneInvoiceDocCodesDataSource: OptionSourceView[];\r\n InvoiceOneInvoiceDocCodesDataSourceWithDefault: OptionSourceView[];\r\n InvoiceOneRefundDocCodesDataSource: OptionSourceView[];\r\n InvoiceOneRefundDocCodesDataSourceWithDefault: OptionSourceView[];\r\n\r\n OrderSeriesDataSource: OptionSourceView[];\r\n InvoiceOneOrderTemplatesDataSource: OptionSourceView[];\r\n InvoiceOneOrderDocCodesDataSource: OptionSourceView[];\r\n InvoiceOneOrderDocCodesDataSourceWithDefault: OptionSourceView[];\r\n\r\n DownPaymentSeriesDataSource: OptionSourceView[];\r\n\r\n InvoiceOneDeliveriesDocCodesDataSourceWithDefault: OptionSourceView[];\r\n InvoiceOneReturnDocCodesDataSource: OptionSourceView[];\r\n InvoiceOneReturnDocCodesDataSourceWithDefault: OptionSourceView[];\r\n\r\n TestConfigurationButtonItems: any[];\r\n NotificationTemplates: NotificationTemplate[] = [];\r\n IsDatoPortalEnabled: boolean;\r\n\r\n CardProcessingServiceDataSource: OptionSourceView[];\r\n AuthNetCreditCards: OptionSourceView[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-options',\r\n templateUrl: './options.component.html',\r\n styleUrls: ['./options.component.scss']\r\n})\r\nexport class OptionsComponent extends BasePageComponent {\r\n\r\n @ViewChild(TestOptionsDialogComponent) testOptionsDialog: TestOptionsDialogComponent;\r\n\r\n EnumCardProcessingServices = EnumCardProcessingServices;\r\n\r\n constructor(A: ServiceBagService,\r\n private systemOptionEndpoint: SystemOptionEndpoint,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint,\r\n private loginService: LoginService) {\r\n super(A, 'OptionsComponent', SystemOption, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.CheckAdmin()) { return; }\r\n\r\n this.InitOptions();\r\n\r\n this.InitReceiptSeries();\r\n this.InvoiceOneReceiptTemplates();\r\n this.InitInvoiceOneReceiptDocCodes();\r\n\r\n this.InitInvoiceSeries();\r\n this.InitInvoiceOneInvoiceTemplates();\r\n this.InitInvoiceOneInvoiceDocCodes();\r\n\r\n this.InitOrderSeries();\r\n this.InitInvoiceOneOrderTemplates();\r\n this.InitInvoiceOneOrderDocCodes();\r\n\r\n this.InitDownPaymentSeries();\r\n\r\n this.InitInvoiceOneDeliveriesDocCodes();\r\n this.InitInvoiceOneRefundDocCodes();\r\n this.InitInvoiceOneReturnDocCodes();\r\n\r\n this.InitTestConfigurationButtonItems();\r\n\r\n this.LoadNotificationTemplates();\r\n this.InitAuthNetCreditCards();\r\n\r\n this.State.IsDatoPortalEnabled = this.A.Framework.SystemOptionFlag('IsDatoPortalEnabled');\r\n\r\n // \r\n this.State.CardProcessingServiceDataSource = \r\n [\r\n { Value: 0, Text: EnumCardProcessingServices.GoCredit, StrValue: '', EntryID: 0 },\r\n { Value: 1, Text: EnumCardProcessingServices.AuthorizeNet, StrValue: '', EntryID: 1 }\r\n ];\r\n }\r\n\r\n public IsSBO() { return this.Entity && this.Entity.SystemType === EnumSystemTypes.SBO; }\r\n public IsLandlord() { return this.Entity && this.Entity.SystemType === EnumSystemTypes.Landlord; }\r\n public IsZulu() { return this.Entity && this.Entity.SystemType === EnumSystemTypes.Zulu; }\r\n\r\n public SaveOptions() {\r\n this.Do(this.systemOptionEndpoint.SaveOptions(this.Entity), true, () => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n public AutoCreationDocumentTypeChanged() {\r\n this.InitTestConfigurationButtonItems();\r\n }\r\n\r\n private CheckAdmin() {\r\n if (this.UserInfo.UserType !== EnumUserTypes.Admin) {\r\n this.loginService.DoLogout(undefined);\r\n this.Navigate(['/system/login']);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private InitOptions() {\r\n this.Do(this.systemOptionEndpoint.GetFull(), false, (response) => {\r\n this.Entity = response.Entity;\r\n });\r\n }\r\n\r\n private InitReceiptSeries() {\r\n this.Do(this.systemOptionEndpoint.GetReceiptSeries(), false, (response) => {\r\n this.State.ReceiptSeriesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InvoiceOneReceiptTemplates() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneReceiptTemplates(), false, (response) => {\r\n this.State.InvoiceOneReceiptTemplatesDataSource = response.Entities;\r\n });\r\n }\r\n private InitAuthNetCreditCards() {\r\n this.Do(this.systemOptionEndpoint.GetAuthNetCreditCards(), false, (response) => {\r\n this.State.AuthNetCreditCards = response.Entities;\r\n });\r\n }\r\n \r\n\r\n private InitInvoiceOneReceiptDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneReceiptDocCodes(), false, (response) => {\r\n this.State.InvoiceOneReceiptDocCodesDataSource = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneReceiptDocCodesDataSourceWithDefault = this.State.InvoiceOneReceiptDocCodesDataSource;\r\n this.State.InvoiceOneReceiptDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n /*this.State.UnsentDeliveriesTemplate = defaultItem.EntryID;*/\r\n\r\n });\r\n }\r\n\r\n private InitInvoiceOneDeliveriesDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneDeliveriesDocCodes(), false, (response) => {\r\n this.State.InvoiceOneDeliveriesDocCodesDataSourceWithDefault = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneDeliveriesDocCodesDataSourceWithDefault = this.State.InvoiceOneDeliveriesDocCodesDataSourceWithDefault;\r\n this.State.InvoiceOneDeliveriesDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n });\r\n }\r\n\r\n private GetDefaultPrintItem() {\r\n const DefaultItem = new OptionSourceView();\r\n DefaultItem.EntryID = -1;\r\n DefaultItem.StrValue = '-1';\r\n DefaultItem.Text = this.RC(\"lblDefault\");\r\n\r\n return DefaultItem;\r\n }\r\n\r\n private InitInvoiceSeries() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceSeries(), false, (response) => {\r\n this.State.InvoiceSeriesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InitInvoiceOneInvoiceTemplates() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneInvoiceTemplates(), false, (response) => {\r\n this.State.InvoiceOneInvoiceTemplatesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InitInvoiceOneInvoiceDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneInvoiceDocCodes(), false, (response) => {\r\n this.State.InvoiceOneInvoiceDocCodesDataSource = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneInvoiceDocCodesDataSourceWithDefault = this.State.InvoiceOneInvoiceDocCodesDataSource;\r\n this.State.InvoiceOneInvoiceDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n /*this.State.UnsentDeliveriesTemplate = defaultItem.EntryID;*/\r\n\r\n });\r\n }\r\n\r\n private InitInvoiceOneRefundDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneRefundDocCodes(), false, (response) => {\r\n this.State.InvoiceOneRefundDocCodesDataSource = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneRefundDocCodesDataSourceWithDefault = this.State.InvoiceOneRefundDocCodesDataSource;\r\n this.State.InvoiceOneRefundDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n /*this.State.UnsentDeliveriesTemplate = defaultItem.EntryID;*/\r\n\r\n });\r\n }\r\n\r\n private InitOrderSeries() {\r\n this.Do(this.systemOptionEndpoint.GetOrderSeries(), false, (response) => {\r\n this.State.OrderSeriesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InitInvoiceOneOrderTemplates() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneOrderTemplates(), false, (response) => {\r\n this.State.InvoiceOneOrderTemplatesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InitInvoiceOneOrderDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneOrderDocCodes(), false, (response) => {\r\n this.State.InvoiceOneOrderDocCodesDataSource = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneOrderDocCodesDataSourceWithDefault = this.State.InvoiceOneOrderDocCodesDataSource;\r\n this.State.InvoiceOneOrderDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n /*this.State.UnsentDeliveriesTemplate = defaultItem.EntryID;*/\r\n\r\n });\r\n }\r\n\r\n private InitDownPaymentSeries() {\r\n this.Do(this.systemOptionEndpoint.GetDownPaymentSeries(), false, (response) => {\r\n this.State.DownPaymentSeriesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n private InitInvoiceOneReturnDocCodes() {\r\n this.Do(this.systemOptionEndpoint.GetInvoiceOneReturnDocCodes(), false, (response) => {\r\n this.State.InvoiceOneReturnDocCodesDataSource = response.Entities;\r\n\r\n const defaultItem = this.GetDefaultPrintItem();\r\n this.State.InvoiceOneReturnDocCodesDataSourceWithDefault = this.State.InvoiceOneReturnDocCodesDataSource;\r\n this.State.InvoiceOneReturnDocCodesDataSourceWithDefault.unshift(defaultItem);\r\n /*this.State.UnsentDeliveriesTemplate = defaultItem.EntryID;*/\r\n\r\n });\r\n }\r\n\r\n private InitTestConfigurationButtonItems() {\r\n this.State.TestConfigurationButtonItems = [\r\n { text: this.RC('lblSendHebrewDocument').replace('{0}', this.RC('lblReceipt')), onClick: () => { this.SendDocument(EnumEntityTypes.Receipt, EnumLanguages.Hebrew, this.RC('lblReceipt')); } },\r\n { text: this.RC('lblSendEnglishDocument').replace('{0}', this.RC('lblReceipt')), onClick: () => { this.SendDocument(EnumEntityTypes.Receipt, EnumLanguages.English, this.RC('lblReceipt')); } }\r\n ];\r\n\r\n if (this.Entity.AutoCreationDocumentType === EnumAutoCreationDocumentTypes.Invoice) {\r\n this.State.TestConfigurationButtonItems.push({ text: this.RC('lblSendHebrewDocument').replace('{0}', this.RC('lblInvoice')), onClick: () => { this.SendDocument(EnumEntityTypes.Invoice, EnumLanguages.Hebrew, this.RC('lblInvoice')); } });\r\n this.State.TestConfigurationButtonItems.push({ text: this.RC('lblSendEnglishDocument').replace('{0}', this.RC('lblInvoice')), onClick: () => { this.SendDocument(EnumEntityTypes.Invoice, EnumLanguages.English, this.RC('lblInvoice')); } });\r\n } else if (this.Entity.AutoCreationDocumentType === EnumAutoCreationDocumentTypes.Order) {\r\n this.State.TestConfigurationButtonItems.push({ text: this.RC('lblSendHebrewDocument').replace('{0}', this.RC('lblOrder')), onClick: () => { this.SendDocument(EnumEntityTypes.Order, EnumLanguages.Hebrew, this.RC('lblOrder')); } });\r\n this.State.TestConfigurationButtonItems.push({ text: this.RC('lblSendEnglishDocument').replace('{0}', this.RC('lblOrder')), onClick: () => { this.SendDocument(EnumEntityTypes.Order, EnumLanguages.English, this.RC('lblOrder')); } });\r\n }\r\n }\r\n\r\n private SendDocument(entityType: EnumEntityTypes, language: EnumLanguages, documentTypeName: string) {\r\n this.testOptionsDialog.DocumentTypeName = documentTypeName;\r\n this.testOptionsDialog.DocumentType = entityType;\r\n this.testOptionsDialog.Language = language;\r\n this.testOptionsDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n\r\n private LoadNotificationTemplates() {\r\n this.Do(this.notificationTemplateEndpoint.GetList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.NotificationTemplates = response.Entities;\r\n });\r\n }\r\n\r\n public CardProcessingServiceChanged($event) {\r\n // \r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPaymentRequestStatuses } from './../enums';\r\nimport { EnumPaymentRequestTypes } from './../enums';\r\nexport class PaymentRequestListParams extends BaseEntity\r\n{ \r\n public CustomerID: number; \r\n public ContactPersonID: number; \r\n public Statuses: EnumPaymentRequestStatuses[]; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public SumFrom: number; \r\n public SumTo: number; \r\n public Types: EnumPaymentRequestTypes[]; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { EnumPaymentRequestStatuses } from '@dato-proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-request-grid',\r\n templateUrl: './payment-request-grid.component.html',\r\n styleUrls: ['./payment-request-grid.component.scss']\r\n})\r\nexport class PaymentRequestGridComponent extends BaseGridComponent {\r\n\r\n @Output() PaymentRequestSelected: EventEmitter = new EventEmitter();\r\n @Output() ResolveClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentRequestGridComponent', PaymentRequest, BaseState);\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case EnumPaymentRequestStatuses.Sent:\r\n return 'mango';\r\n case EnumPaymentRequestStatuses.Confirmed:\r\n case EnumPaymentRequestStatuses.Executed:\r\n return 'green-cyan';\r\n case EnumPaymentRequestStatuses.Resolved:\r\n return 'mango';\r\n case EnumPaymentRequestStatuses.Cancelled:\r\n case EnumPaymentRequestStatuses.Error:\r\n return 'cinnabar';\r\n }\r\n }\r\n\r\n OnPaymentRequestSelected(row) {\r\n this.PaymentRequestSelected.emit(row.data);\r\n }\r\n OnResolveClick(data) {\r\n this.ResolveClick.emit(data);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{cell.data.CustomerDisplayText}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{cell.data.ContactPersonName}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{cell.data.Created | formatDateFull}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.Sum | formatPriceWithCurrency:cell.data.Currency:true }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { ContactPersonEndpoint } from './../../_proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { EnumPaymentRequestStatuses, EnumPaymentRequestTypes } from '@dato-proxy/enums';\r\nimport { PaymentRequestEndpoint } from '@dato-proxy/endpoints/paymentrequest.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { PaymentRequestListParams } from '@dato-proxy/params/paymentrequestlist.param';\r\nimport { PaymentRequestStep } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { PaymentRequestGridComponent } from './Components/payment-request-grid/payment-request-grid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseState {\r\n CustomerID: number;\r\n ContactPersonID: number;\r\n Statuses: EnumPaymentRequestStatuses[];\r\n DateFrom: Date;\r\n DateTo: Date;\r\n SumFrom: number;\r\n SumTo: number;\r\n Type: EnumPaymentRequestTypes;\r\n\r\n Steps: PaymentRequestStep[] = null;\r\n LinesDocuments: BaseDocument[] = null;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-request-report',\r\n templateUrl: './payment-request-report.component.html',\r\n styleUrls: ['./payment-request-report.component.scss']\r\n})\r\nexport class PaymentRequestReportComponent extends BasePageComponent {\r\n\r\n @ViewChild(PaymentRequestGridComponent) paymentRequestGrid: PaymentRequestGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private paymentRequestEndpoint: PaymentRequestEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private contactPersonEndpoint: ContactPersonEndpoint) {\r\n super(A, 'PaymentRequestReportComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitDataSource();\r\n this.InitCustomers();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.paymentRequestGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.InitDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.CustomerID = undefined;\r\n this.State.ContactPersonID = undefined;\r\n this.State.Statuses = undefined;\r\n this.State.DateFrom = undefined;\r\n this.State.DateTo = undefined;\r\n this.State.SumFrom = undefined;\r\n this.State.SumTo = undefined;\r\n this.State.Type = undefined;\r\n\r\n this.InitDataSource();\r\n }\r\n\r\n OnPaymentRequestSelected(oPaymentRequest: PaymentRequest) {\r\n if (oPaymentRequest == undefined) return;\r\n this.Do(this.paymentRequestEndpoint.GetSteps(oPaymentRequest.EntryID), false, (response) => {\r\n this.State.Steps = response.Entities;\r\n });\r\n\r\n this.Do(this.paymentRequestEndpoint.GetLinesDocuments(oPaymentRequest.EntryID), false, (response) => {\r\n this.State.LinesDocuments = response.Entities;\r\n });\r\n }\r\n\r\n OnResolveClick(oPaymentRequest: PaymentRequest) {\r\n //let s = e;\r\n this.Do(this.paymentRequestEndpoint.ResolveStatus(oPaymentRequest.EntryID), false, (response) => {\r\n this.InitDataSource();\r\n });\r\n }\r\n\r\n InitDataSource() {\r\n this.State.Steps = null;\r\n this.State.LinesDocuments = null;\r\n\r\n const params = new PaymentRequestListParams();\r\n params.CustomerID = this.State.CustomerID;\r\n params.ContactPersonID = this.State.ContactPersonID;\r\n params.Statuses = this.State.Statuses;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.SumFrom = this.State.SumFrom;\r\n params.SumTo = this.State.SumTo;\r\n if (this.State.Type) { params.Types = [this.State.Type]; }\r\n\r\n this.DataSources['PaymentRequests'] = new DataSourceCustomAction((options: DataLoadOptions) => this.paymentRequestEndpoint.ListEx(params, options?.GetLoadOptions()), undefined, (data) => {\r\n if (this.State.Steps === null && data.length > 0) { this.OnPaymentRequestSelected(data[0]); }\r\n }, false);\r\n }\r\n\r\n OnCustomerChanged() { this.InitContactPersons(); }\r\n\r\n private InitCustomers() {\r\n this.DataSources['Customers'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerEndpoint.List(options), (EntryID) => this.customerEndpoint.Get(EntryID));\r\n }\r\n\r\n private InitContactPersons() {\r\n if (!this.State.CustomerID) {\r\n this.DataSources['ContactPersons'] = [];\r\n return;\r\n }\r\n\r\n this.Do(this.contactPersonEndpoint.ListEx(this.State.CustomerID), false, (response) => {\r\n this.DataSources['ContactPersons'] = response.Entities;\r\n });\r\n\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { PaymentRequestStep } from '@dato-proxy/entities/paymentrequest.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-request-step-grid',\r\n templateUrl: './payment-request-step-grid.component.html',\r\n styleUrls: ['./payment-request-step-grid.component.scss']\r\n})\r\nexport class PaymentRequestStepGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentRequestStepGridComponent', PaymentRequestStep, BaseState);\r\n }\r\n\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { PaymentRequestLine } from '@dato-proxy/entities/paymentrequest.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-request-line-document',\r\n templateUrl: './payment-request-line-document.component.html',\r\n styleUrls: ['./payment-request-line-document.component.scss']\r\n})\r\nexport class PaymentRequestLineDocumentComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentRequestLineDocumentComponent', PaymentRequestLine, BaseState);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { Directive, Input } from '@angular/core';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\n@Directive({\r\n selector: '[formatPriceWithCurrency]'\r\n})\r\nexport class FormatPriceWithCurrencyDirective {\r\n\r\n @Input() dataField: string;\r\n @Input() isShowZero = false;\r\n @Input('formatPriceWithCurrency') set currencyField(value: string) {\r\n this.c.calculateCellValue = (data) => {\r\n let number = data[this.dataField];\r\n const currency = data[value];\r\n\r\n if (number === null || number === undefined) number = 0;\r\n if (!this.isShowZero && number === 0) { return null; }\r\n\r\n let result = formatNumber(number, this.framework.CompanyInfo.NumberSum);\r\n\r\n if (currency) { result = `${result} ${currency}`; }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n constructor(private c: DxiColumnComponent, private framework: FrameworkService) { }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class UserEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"User\", api);}\r\n\t\r\n\r\n public IsActiveUser() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'IsActiveUser', undefined );\r\n }\r\n}\r\n\r\n","import { ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DocumentLine } from '@dato-proxy/entities/documentline.entity';\r\n\r\nclass State extends BaseState {\r\n SelectedLineIDs: number[];\r\n TotalAmount: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-line-grid',\r\n templateUrl: './document-line-grid.component.html',\r\n styleUrls: ['./document-line-grid.component.scss']\r\n})\r\nexport class DocumentLineGridComponent extends BaseGridComponent {\r\n\r\n @Output() SelectedLineIDsChange: EventEmitter = new EventEmitter();\r\n @Output() OnAfterLoad: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentLineGridComponent', DocumentLine, State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.State.SelectedLineIDs = (this.DataSource as DocumentLine[]).filter(x => x.IsOpen).map(x => (x as any).LineID);\r\n }\r\n\r\n OnContentReady() {\r\n this.OnAfterLoad.emit();\r\n }\r\n\r\n OnSelectionChanged(e) {\r\n if (e && e.selectedRowsData) {\r\n this.SelectedLineIDsChange.emit(e.selectedRowsData as DocumentLine[]);\r\n this.State.TotalAmount = (e.selectedRowsData as DocumentLine[]).map(x => x.TotalSum).reduce((sum, current) => sum + current, 0);\r\n return;\r\n }\r\n }\r\n\r\n get Currency() {\r\n const documentLines = this.DataSource as DocumentLine[];\r\n return documentLines?.length && documentLines[0].Currency;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Price | formatPriceWithCurrency: Currency:true }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.TotalSum | formatPriceWithCurrency: Currency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{ 'lblTotal' | RC:THIS }}:
\\r\\n
{{ State.TotalAmount | formatPriceWithCurrency: Currency:true }}
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ReportsComponent } from '@dato-pages/reports/reports.component';\r\nimport { AgingTransDocumentEndpoint } from '@dato-proxy/endpoints/agingtransdocument.endpoint';\r\nimport { CompanyEndpoint } from '@dato-proxy/endpoints/company.endpoint';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { DeliveryEndpoint } from '@dato-proxy/endpoints/delivery.endpoint';\r\nimport { FileEndpoint } from '@dato-proxy/endpoints/file.endpoint';\r\nimport { InvoiceEndpoint } from '@dato-proxy/endpoints/invoice.endpoint';\r\nimport { LedgerEndpoint } from '@dato-proxy/endpoints/ledger.endpoint';\r\nimport { EnumSystemTypes } from '@dato-proxy/enums';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Globals } from '../../../../_globals';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reports-mobile',\r\n templateUrl: './reports-mobile.component.html',\r\n styleUrls: ['./reports-mobile.component.scss']\r\n})\r\nexport class ReportsMobileComponent extends ReportsComponent {\r\n public downloadOptions = ['PDF', 'ZIP'];\r\n constructor(A: ServiceBagService,\r\n ledgerEndpoint: LedgerEndpoint,\r\n invoiceEndpoint: InvoiceEndpoint,\r\n agingTransDocumentEndpoint: AgingTransDocumentEndpoint,\r\n deliveryEndpoint: DeliveryEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n fileEndpoint: FileEndpoint,\r\n companyEndpoint: CompanyEndpoint) {\r\n super(A, ledgerEndpoint, invoiceEndpoint, agingTransDocumentEndpoint, deliveryEndpoint, customerEndpoint, fileEndpoint, companyEndpoint);\r\n }\r\n\r\n override InitTabs(): void {\r\n super.InitTabs();\r\n this.State.ReportTabs = this.State.ReportTabs.filter(x => x.Type !== 2); // remove Aging for mobile\r\n //if (Globals.SystemOption.SystemType === EnumSystemTypes.Landlord || Globals.SystemOption.SystemType === EnumSystemTypes.Zulu) return;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return new ToolbarSettings;\r\n }\r\n\r\n OnAccountingTypeChanged() {\r\n this.State.Documents = [];\r\n this.State.TotalSum = 0;\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1 && State.CompanyID != -1\\\"\\r\\n (onValueChanged)=\\\"OnChangeCompany()\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n {{'lblTotal' | RC:THIS}}: {{State.TotalSum | formatPriceWithCurrency: State.PaymentCurrency:true}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-total-balance',\r\n templateUrl: './total-balance.component.html',\r\n styleUrls: ['./total-balance.component.scss']\r\n})\r\nexport class TotalBalanceComponent extends BaseComponent {\r\n\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() Amount: number;\r\n @Input() Icon: string;\r\n @Input() Color: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceComponent', BaseState);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{Title}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseDocument } from '@dato-proxy/entities/basedocument.entity';\r\nimport { BaseTransDocument } from '@dato-proxy/entities/basetransdocument.entity';\r\nimport { CompanyView } from '@dato-proxy/views/company.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxListComponent } from 'devextreme-angular';\r\nimport dxCheckBox from 'devextreme/ui/check_box';\r\nimport { Globals } from 'projects/dato/_globals';\r\n\r\nclass DocumentListState extends BaseState {\r\n ReportItemsState: any = {};\r\n IsShowAdditionalNotes: boolean;\r\n IsActiveUser: boolean;\r\n IsAllowPayment: boolean;\r\n IsEnableMultiCompany: boolean;\r\n IsAllSelected: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-base-document-list',\r\n template: '
'\r\n})\r\nexport class BaseDocumentListComponent extends BaseComponent {\r\n\r\n @Input() DataSource: BaseDataSourceAbstract;\r\n @Input() IsOpen: boolean;\r\n @Input() IsShowAttachments: boolean;\r\n @Input() Companies: CompanyView[];\r\n\r\n @Output() SelectionChanged: EventEmitter = new EventEmitter();\r\n @Output() PayByOne: EventEmitter = new EventEmitter();\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n @Output() ShowFiles: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(DxListComponent) list: DxListComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BaseDocumentListComponent', DocumentListState);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.IsShowAdditionalNotes = Globals.SystemOption.IsShowAdditionalNotes;\r\n this.State.IsActiveUser = Globals.IsActiveUser;\r\n this.State.IsAllowPayment = Globals.SystemOption.IsAllowPayment;\r\n this.State.IsEnableMultiCompany = Globals.SystemOption.IsEnableMultiCompany;\r\n }\r\n\r\n ToggleReportItem(event: any, item: any) {\r\n this.State.ReportItemsState[item.EntryID] = !this.State.ReportItemsState[item.EntryID];\r\n\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const listItemElement = this.FindListItemElement(event.srcElement);\r\n if (this.State.ReportItemsState[item.EntryID]) listItemElement.classList.add('opened');\r\n else listItemElement.classList.remove('opened');\r\n }\r\n }\r\n\r\n private FindListItemElement(element: HTMLElement): HTMLElement {\r\n const parent = element.parentElement;\r\n if (parent.classList.contains('dx-list-item')) return parent;\r\n\r\n return this.FindListItemElement(parent);\r\n }\r\n\r\n OnContentReady(e) {\r\n this.list?.instance?.option('selectionByClick', false);\r\n this.DataSource && this.DataSource.GetItemsAsync().subscribe(documents => {\r\n if (this.State.IsAllowPayment) {\r\n // get documents that should not be checked\r\n const disabledDocuments = this.GetDisabledDocuments(documents);\r\n\r\n // get documents indexes in datasource\r\n const disabledDocumentIndexes = disabledDocuments.map(x => documents.indexOf(x));\r\n disabledDocumentIndexes.forEach(x => {\r\n // disable checkbox for particular item\r\n if (!this.list?.instance) return;\r\n\r\n let itemElement = this.list.instance['getItemElementByFlatIndex'];\r\n if (!itemElement) return;\r\n\r\n // hotfix -> no context for js function\r\n itemElement = itemElement.bind(this.list.instance);\r\n\r\n if (!itemElement(x) || !itemElement(x).length) return;\r\n\r\n const element = itemElement(x)[0] as HTMLElement;\r\n if (!element) return;\r\n\r\n const elements = element.getElementsByClassName('dx-checkbox');\r\n if (!elements || !elements.length) return;\r\n\r\n const checkbox = elements[0];\r\n const instance = checkbox && dxCheckBox.getInstance(checkbox);\r\n instance && instance.option(\"disabled\", true);\r\n });\r\n }\r\n\r\n const documentsToHide = documents.filter(x => x.EntryID === 0 && x.OpenBalance === 0);\r\n documentsToHide.forEach(x => x.visible = false);\r\n });\r\n }\r\n\r\n OnSelectAllChanged(e) {\r\n if (!e.value) {\r\n this.list.instance.unselectAll();\r\n return;\r\n }\r\n\r\n this.DataSource && this.DataSource.GetItemsAsync().subscribe(documents => {\r\n // get documents that should be selected\r\n const documentsForSelection = this.GetEnabledDocuments(documents);\r\n documentsForSelection.forEach(x => this.list.instance.selectItem(x));\r\n });\r\n }\r\n\r\n OnSelectionChanged(e) {\r\n const documents = this.list.instance.option('selectedItems');\r\n\r\n // unselect needed items\r\n const disabledDocuments = this.GetDisabledDocuments(documents);\r\n disabledDocuments.forEach(x => this.list.instance.unselectItem(x));\r\n\r\n this.SelectionChanged.emit(documents);\r\n }\r\n\r\n private GetDisabledDocuments(documents: BaseDocument[]) {\r\n return documents.filter(x => this.IsDocumentDisabled(x));\r\n }\r\n\r\n private GetEnabledDocuments(documents: BaseDocument[]) {\r\n return documents.filter(x => !this.IsDocumentDisabled(x));\r\n }\r\n\r\n private IsDocumentDisabled(document: BaseDocument) {\r\n return !document.PaymentSum || document.PaymentSum === 0 || (document as BaseTransDocument).IsPaymentAllowed == false;\r\n }\r\n\r\n IsDocNumDisabled = (item) => {\r\n //return !item || !item.PdfUrl;\r\n return !item || (!this.IsAllowedToViewUnsent(item.TransType) && !item.PdfUrl);\r\n }\r\n private IsAllowedToViewUnsent(transType: number): boolean {\r\n switch (transType) {\r\n case (13): case (14): {\r\n return Globals.SystemOption.IsAllowViewingUnsentInvoices;\r\n }\r\n case (15): case (16): {\r\n return Globals.SystemOption.IsAllowViewingUnsentDeliveries;\r\n }\r\n case (24): {\r\n return Globals.SystemOption.IsAllowViewingUnsentReceipt;\r\n }\r\n default: { return false }\r\n }\r\n }\r\n\r\n OnDocNumClick(item: BaseDocument) {\r\n item && this.DocNumClick.emit(item);\r\n }\r\n\r\n OnPay(Document: BaseDocument) {\r\n this.list.instance.unselectAll();\r\n this.PayByOne.emit(Document);\r\n }\r\n\r\n OnShowFiles(e, document: BaseDocument) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n\r\n this.ShowFiles.emit(document);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { BaseDocumentListComponent } from '@dato-pages/base/base-document-list/base-document-list.component';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-list',\r\n templateUrl: './ledger-list.component.html',\r\n styleUrls: ['./ledger-list.component.scss', '../../../base/base-document-list/base-document-list.component.scss']\r\n})\r\nexport class LedgerListComponent extends BaseDocumentListComponent {\r\n\r\n KeyExpr = [\"EntryID\", \"LineID\"];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ item.TransTypeString }}\\r\\n \\r\\n  \\r\\n \\r\\n {{ item.DocumentNumber }}\\r\\n \\r\\n \\r\\n 0\\\"\\r\\n Class=\\\"attachments-button\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles($event, item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{ item.OpenBalance | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n \\r\\n \\r\\n {{ (IsOpen ? item.DebitOpen : item.Debit) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n {{ (IsOpen ? item.CreditOpen : item.Credit) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.RefDate | formatDate }}
\\r\\n
\\r\\n {{ (IsOpen ? item.OpenBalance : item.Balance) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\"\\r\\n Mode=\\\"transparent\\\"\\r\\n Text=\\\"{{'linkDocumentPayNow' | RC:THIS}}\\\"\\r\\n Class=\\\"report-item-pay-button\\\"\\r\\n (OnClick)=\\\"OnPay(item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { DocumentLine } from '@dato-proxy/entities/documentline.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n SelectedLineIDs: number[];\r\n TotalAmount: number;\r\n DocumentLinesState: any = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-line-list',\r\n templateUrl: './document-line-list.component.html',\r\n styleUrls: ['./document-line-list.component.scss']\r\n})\r\nexport class DocumentLineListComponent extends BaseComponent {\r\n\r\n @Input() DocumentLines: DocumentLine[];\r\n @Output() SelectionChanged: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(DxListComponent) list: DxListComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentLineListComponent', State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.State.SelectedLineIDs = this.DocumentLines.filter(x => x.IsOpen).map(x => (x as any).LineID);\r\n }\r\n\r\n OnSelectionChanged(e) {\r\n const documentLines = this.list.instance.option('selectedItems');\r\n this.SelectionChanged.emit(documentLines as DocumentLine[]);\r\n this.State.TotalAmount = (documentLines as DocumentLine[]).map(x => x.TotalSum).reduce((sum, current) => sum + current, 0);\r\n }\r\n\r\n get Currency() {\r\n return this.DocumentLines?.length && this.DocumentLines[0].Currency;\r\n }\r\n\r\n ToggleDocumentLine(event: any, item: any) {\r\n this.State.DocumentLinesState[item.LineID] = !this.State.DocumentLinesState[item.LineID];\r\n\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const listItemElement = this.FindListItemElement(event.srcElement);\r\n if (this.State.DocumentLinesState[item.LineID]) listItemElement.classList.add('opened');\r\n else listItemElement.classList.remove('opened');\r\n }\r\n }\r\n\r\n private FindListItemElement(element: HTMLElement): HTMLElement {\r\n const parent = element.parentElement;\r\n if (parent.classList.contains('dx-list-item')) return parent;\r\n\r\n return this.FindListItemElement(parent);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.ItemCode }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{ 'lblTotal' | RC:THIS }}:
\\r\\n
{{ State.TotalAmount | formatPriceWithCurrency: Currency:true }}
\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseDocumentListComponent } from '@dato-pages/base/base-document-list/base-document-list.component';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-invoice-list',\r\n templateUrl: './invoice-list.component.html',\r\n styleUrls: ['./invoice-list.component.scss', '../../../base/base-document-list/base-document-list.component.scss']\r\n})\r\nexport class InvoiceListComponent extends BaseDocumentListComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ item.TransTypeString }}\\r\\n \\r\\n  \\r\\n \\r\\n {{ item.DocumentNumber }}\\r\\n \\r\\n \\r\\n 0\\\"\\r\\n Class=\\\"attachments-button\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles($event, item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n 0, 'negative-amount': item.TotalSumOrigin < 0}\\\">\\r\\n {{ item.TotalSumOrigin | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.RefDate | formatDate }}
\\r\\n
\\r\\n {{ item.OpenSumOrigin | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\"\\r\\n Mode=\\\"transparent\\\"\\r\\n Text=\\\"{{'linkDocumentPayNow' | RC:THIS}}\\\"\\r\\n Class=\\\"report-item-pay-button\\\"\\r\\n (OnClick)=\\\"OnPay(item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseDocumentListComponent } from '@dato-pages/base/base-document-list/base-document-list.component';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-delivery-list',\r\n templateUrl: './delivery-list.component.html',\r\n styleUrls: ['./delivery-list.component.scss', '../../../base/base-document-list/base-document-list.component.scss']\r\n})\r\nexport class DeliveryListComponent extends BaseDocumentListComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ item.ObjTypeString }}\\r\\n \\r\\n  \\r\\n \\r\\n {{ item.DocumentNumber }}\\r\\n \\r\\n \\r\\n 0\\\"\\r\\n Class=\\\"attachments-button\\\"\\r\\n Icon=\\\"mdi mdi-paperclip\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Size=\\\"small\\\"\\r\\n (OnClick)=\\\"OnShowFiles($event, item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n 0, 'negative-amount': item.TotalAfterVatOrigin < 0}\\\">\\r\\n {{ item.TotalAfterVatOrigin | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.DeliveryDate | formatDate }}
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\"\\r\\n Mode=\\\"transparent\\\"\\r\\n Text=\\\"{{'linkDocumentPayNow' | RC:THIS}}\\\"\\r\\n Class=\\\"report-item-pay-button\\\"\\r\\n (OnClick)=\\\"OnPay(item)\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class State extends BaseEntity\r\n{ \r\n public Code: string; \r\n public CountryCode: string; \r\n public Name: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { ContactPerson } from '@dato-proxy/entities/contactperson.entity';\r\nimport { State } from '@dato-proxy/entities/state.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n selector: 'app-contact-person-list',\r\n templateUrl: './contact-person-list.component.html',\r\n styleUrls: ['./contact-person-list.component.scss']\r\n})\r\nexport class ContactPersonListComponent extends BaseComponent {\r\n @Input() DataSource: ContactPerson[];\r\n @Input() IsAllowEdit: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"ContactPersonListComponent\", State);\r\n }\r\n\r\n override IsUseFinishCycleChangeDetection(): boolean { return false; }\r\n\r\n GetMenu(contactPerson: ContactPerson) {\r\n if (!this.IsAllowEdit) return [];\r\n return [{\r\n text: this.RC('lblEditContact'),\r\n icon: 'mdi mdi-pencil',\r\n onClick: () => this.OnEditContact(contactPerson.EntryID, 'edit')\r\n }];\r\n }\r\n\r\n OnEditContact(entryID, mode: 'new' | 'edit') {\r\n if (!this.IsAllowEdit) return;\r\n\r\n this.Navigate(['pages/contact-person', mode === 'new' ? 'new' : entryID]);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { CustomerAddress } from '@dato-proxy/entities/customeraddress.entity';\r\nimport { State } from '@dato-proxy/entities/state.entity';\r\nimport { EnumCustomerAddressTypes } from '@dato-proxy/enums';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n selector: 'app-customer-address-list',\r\n templateUrl: './customer-address-list.component.html',\r\n styleUrls: ['./customer-address-list.component.scss']\r\n})\r\nexport class CustomerAddressListComponent extends BaseComponent {\r\n @Input() DataSource: CustomerAddress[];\r\n @Input() IsAllowEdit: boolean;\r\n @Input() public Type: EnumCustomerAddressTypes;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CustomerAddressListComponent\", State);\r\n }\r\n\r\n override IsUseFinishCycleChangeDetection(): boolean { return false; }\r\n\r\n GetMenu(customerAddress: CustomerAddress) {\r\n if (!this.IsAllowEdit) return [];\r\n return [{\r\n text: this.RC('lblEditCustomerAddress'),\r\n icon: 'mdi mdi-pencil',\r\n onClick: () => this.OnEditAddress(customerAddress.EntryID, 'edit')\r\n }];\r\n }\r\n\r\n OnEditAddress(entryID, mode: 'new' | 'edit') {\r\n if (!this.IsAllowEdit) return;\r\n\r\n this.Navigate([\"/pages/customer-address/\", mode === 'new' ? 'new' : entryID], { Type: this.Type });\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\";","import { Component, OnInit } from '@angular/core';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { ContactPerson } from '@dato-proxy/entities/contactperson.entity';\r\nimport { CredentialResult } from '@dato-proxy/entities/credentialresult.entity';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\n\r\nclass State extends BaseState {\r\n Credentials: CredentialResult[] = [];\r\n ContactPersons: ContactPerson[] = [];\r\n CustomerID: number;\r\n ContactPersonID: number;\r\n IsUseContactPerson: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-selector',\r\n templateUrl: './credential-selector.component.html',\r\n styleUrls: ['./credential-selector.component.scss']\r\n})\r\nexport class CredentialSelectorComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService,\r\n public customerEndpoint: CustomerEndpoint,\r\n public loginService: LoginService) {\r\n super(A, 'CredentialSelectorComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsUseContactPerson = this.A.Framework.SystemOptionFlag('IsUseContactPerson');\r\n this.DataSources['Credentials'] = new DataSourceCustomAction(() => this.customerEndpoint.GetCredentials());\r\n this.customerEndpoint.GetCredentials()\r\n .subscribe(r => {\r\n this.State.Credentials = r.Entities;\r\n });\r\n }\r\n\r\n OnCustomerChanged() {\r\n if (!this.State.IsUseContactPerson) return;\r\n\r\n this.State.ContactPersonID = null;\r\n this.State.ContactPersons = this.State.CustomerID \r\n ? this.State.Credentials.find(x => x.EntryID === this.State.CustomerID).ContactPersons \r\n : [];\r\n if (this.State.ContactPersons && this.State.ContactPersons.length === 1) {\r\n this.State.ContactPersonID = this.State.ContactPersons[0].EntryID;\r\n }\r\n }\r\n\r\n Impersonate() {\r\n const credentialID = this.State.IsUseContactPerson ? this.State.ContactPersonID : this.State.CustomerID;\r\n if (!credentialID) {\r\n this.A.UI.StopMessage(this.RC('genNoData'));\r\n return;\r\n }\r\n this.loginService.ImpersonateLogin(credentialID).subscribe(() => {});\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport { PaymentRequestEndpoint } from '@dato-proxy/endpoints/paymentrequest.endpoint';\r\nimport { PaymentRequest } from '@dato-proxy/entities/paymentrequest.entity';\r\nimport { EnumPaymentRequestTypes } from '@dato-proxy/enums';\r\nimport { ConfirmPaymentRequestParams } from '@dato-proxy/params/confirmpaymentrequest.param';\r\nimport { PaymentRequestResponseParams } from '@dato-proxy/params/paymentrequestresponse.param';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Globals } from 'projects/dato/_globals';\r\n\r\nclass State extends BaseState {\r\n IsSucceedPayment: boolean;\r\n ErrorMessage: string;\r\n PaymentRequest: PaymentRequest;\r\n Options = Globals.SystemOption;\r\n CustomerCardNumber: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-result',\r\n templateUrl: './payment-result.component.html',\r\n styleUrls: ['./payment-result.component.scss']\r\n})\r\nexport class PaymentResultComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private paymentRequestEndpoint: PaymentRequestEndpoint) {\r\n super(A, 'PaymentResultComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n const paymentRequestID = this.QueryParams?.PrivateRequestID;\r\n if (!paymentRequestID) {\r\n this.State.IsSucceedPayment = false;\r\n return;\r\n }\r\n this.ConfirmPaymentRequest(paymentRequestID);\r\n }\r\n\r\n private ConfirmPaymentRequest(privateRequestID: string) {\r\n const params = new ConfirmPaymentRequestParams();\r\n params.PrivateID = privateRequestID;\r\n\r\n this.Do(this.paymentRequestEndpoint.Confirm(params), false, (response: PaymentRequestResponseParams) => {\r\n this.State.CustomerCardNumber = response.CreditCardNumber;\r\n this.SetPaymentRequest(privateRequestID);\r\n }, (response) => {\r\n this.State.IsSucceedPayment = false;\r\n this.State.ErrorMessage = response.ResponseMessage;\r\n });\r\n }\r\n\r\n private SetPaymentRequest(paymentRequestID: string) {\r\n this.paymentRequestEndpoint.GetPaymentRequest(paymentRequestID).subscribe(response => {\r\n if (!response.IsSuccess) {\r\n this.State.IsSucceedPayment = false;\r\n this.State.ErrorMessage = response.ResponseMessage;\r\n return;\r\n }\r\n this.State.IsSucceedPayment = true;\r\n this.State.PaymentRequest = response.Entity;\r\n });\r\n }\r\n\r\n GetPaymentMethod() {\r\n switch (this.State.PaymentRequest.Type) {\r\n case EnumPaymentRequestTypes.PaymentByExistingCard:\r\n case EnumPaymentRequestTypes.PaymentByNewCard:\r\n const creditCardNumber = this.State.CustomerCardNumber || this.State.PaymentRequest?.CreditCardNumber;\r\n return creditCardNumber ? `****${creditCardNumber}` : this.RC('lblCreditCard');\r\n case EnumPaymentRequestTypes.Paypal: return this.RC('lblPaypal');\r\n case EnumPaymentRequestTypes.Bit: return this.RC('lblBit');\r\n }\r\n }\r\n\r\n OnSeeAdditional() {\r\n if (!this.IsAllowAccounting()) return;\r\n this.Navigate(['/pages/reports']);\r\n }\r\n\r\n IsAllowAccounting() {\r\n return Globals.IsAllowAccounting();\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'lblConfirmingPayment' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ State.ErrorMessage || ('lblPaymentError' | RC:THIS) }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{'msgPaymentSuccessful' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n 1\\\"\\r\\n [Component]=\\\"THIS\\\"\\r\\n Label=\\\"{{'lblPaymantCount' | RC:THIS}}\\\"\\r\\n Name=\\\"NumberOfPayments\\\"\\r\\n Position=\\\"horizontal\\\"\\r\\n ValueAlignment=\\\"end\\\"\\r\\n Value=\\\"{{ State.PaymentRequest.NumberOfPayments }}\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\";","import { Observable, of } from 'rxjs';\r\nimport { BaseEntity } from './../entities/BaseEntities';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { BaseState } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { Input } from '@angular/core';\r\n\r\nexport abstract class BaseInjectableComponent extends BaseComponent {\r\n\r\n @Input() TargetAppName: string;\r\n @Input() TargetComponentName: string;\r\n @Input() TargetDocEntry: number;\r\n @Input() EntityType: (new () => TEntity);\r\n @Input() ButtonSettings: any;\r\n\r\n constructor (public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n abstract BaseAction();\r\n\r\n public IsValidEntity: () => Observable = () => of(true);\r\n}\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ContactUsDialogComponent } from '@dato-dialogs/contact-us-dialog/contact-us-dialog.component';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-injectable',\r\n templateUrl: './contact-us-injectable.component.html',\r\n styleUrls: ['./contact-us-injectable.component.scss']\r\n})\r\nexport class ContactUsInjectableComponent extends BaseInjectableComponent {\r\n\r\n @ViewChild('contactUsDialog') contactUsDialog: ContactUsDialogComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ContactUsInjectableComponent', BaseState);\r\n }\r\n\r\n BaseAction = () => {\r\n this.contactUsDialog.ShowDialogShort(() => {});\r\n };\r\n}\r\n","export default \"\";","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from 'projects/dato/_globals';\r\n\r\nclass State extends BaseState {\r\n Email: string;\r\n Whatsapp: string;\r\n Address: string;\r\n Phone: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-dialog',\r\n templateUrl: './contact-us-dialog.component.html',\r\n styleUrls: ['./contact-us-dialog.component.scss']\r\n})\r\nexport class ContactUsDialogComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ContactUsDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n if (!Globals.SystemOption) return;\r\n\r\n this.State.Email = Globals.SystemOption.ContactUsEmail;\r\n this.State.Whatsapp = Globals.SystemOption.ContactUsWhatsapp;\r\n this.State.Address = Globals.SystemOption.ContactUsAddress;\r\n this.State.Phone = Globals.SystemOption.ContactUsPhone;\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ 'lblContactUsPhoneTitle' | RC:THIS }}
\\r\\n
{{ 'lblContactUsPhoneText' | RC:THIS:State.Phone }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
{{text}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{name}}
\\r\\n
\\r\\n
\";","import { map, tap } from 'rxjs/operators';\r\nimport { AppInjector } from './../../src/core/injector/injector.module';\r\nimport { LoginGuard } from '@m4u-angular/core/framework/login.guard';\r\nimport { Enums, EnumUserTypes } from '@dato-proxy/enums';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { of, Observable, zip } from 'rxjs';\r\nimport { AppConfig } from '@m4u-angular/configuration/app.config.model';\r\nimport { AgingReportGridComponent } from './pages/reports/Components/aging-report-grid/aging-report-grid.component';\r\nimport { ContactPersonComponent } from './pages/contact-person/contact-person.component';\r\nimport { CustomerAddressComponent } from './pages/customer-address/customer-address.component';\r\nimport { DeliveryGridComponent } from './pages/reports/Components/delivery-grid/delivery-grid.component';\r\nimport { GoFromDocumentCodeComponent } from './pages/go-from-document-code/go-from-document-code.component';\r\nimport { InvoiceGridComponent } from './pages/reports/Components/invoice-grid/invoice-grid.component';\r\nimport { LedgerGridComponent } from './pages/reports/Components/ledger-grid/ledger-grid.component';\r\nimport { ChangeCreditCardDialogComponent } from './pages/my-details/Components/change-credit-card-dialog/change-credit-card.component';\r\nimport { ContactPersonGridComponent } from './pages/my-details/Components/contact-person-grid/contact-person-grid.component';\r\nimport { CustomerAddressGridComponent } from './pages/my-details/Components/customer-address-grid/customer-address-grid.component';\r\nimport { MyDetailsComponent } from './pages/my-details/my-details.component';\r\nimport { PdfPageComponent } from './pages/pdf-page/pdf-page.component';\r\nimport { FormatPriceWithCurrencyPipe } from './pipes/format-price-with-currency.pipe';\r\nimport { AgingTransDocumentEndpoint } from '@dato-proxy/endpoints/agingtransdocument.endpoint';\r\nimport { ContactPersonEndpoint } from '@dato-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerEndpoint } from '@dato-proxy/endpoints/customer.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dato-proxy/endpoints/customeraddress.endpoint';\r\nimport { DeliveryEndpoint } from '@dato-proxy/endpoints/delivery.endpoint';\r\nimport { InvoiceEndpoint } from '@dato-proxy/endpoints/invoice.endpoint';\r\nimport { LedgerEndpoint } from '@dato-proxy/endpoints/ledger.endpoint';\r\nimport { LoginRequestEndpoint } from '@dato-proxy/endpoints/loginrequest.endpoint';\r\nimport { PaymentRequestEndpoint } from '@dato-proxy/endpoints/paymentrequest.endpoint';\r\nimport { PdfEndpoint } from '@dato-proxy/endpoints/pdf.endpoint';\r\nimport { SystemOptionEndpoint } from '@dato-proxy/endpoints/systemoption.endpoint';\r\nimport { DefaultRouteParams, InjectableComponentOptions, MainMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Routes } from '@angular/router';\r\nimport { Globals } from './_globals';\r\nimport { ReportsComponent } from './pages/reports/reports.component';\r\nimport { Lists_EN } from './_resources/LISTS_EN';\r\nimport { Lists_HE } from './_resources/LISTS_HE';\r\nimport { Lists_ES } from './_resources/LISTS_ES';\r\nimport { BankDetailsComponent } from './pages/bank-details/bank-details.component';\r\nimport { FileEndpoint } from '@dato-proxy/endpoints/file.endpoint';\r\nimport { FileListDialogComponent } from './dialogs/file-list-dialog/file-list-dialog.component';\r\nimport { OptionsComponent } from './pages/options/options.component';\r\nimport { PaymentRequestReportComponent } from './pages/payment-request-report/payment-request-report.component';\r\nimport { PaymentRequestGridComponent } from './pages/payment-request-report/Components/payment-request-grid/payment-request-grid.component';\r\nimport { PaymentRequestStepGridComponent } from './pages/payment-request-report/Components/payment-request-step-grid/payment-request-step-grid.component';\r\nimport { PaymentRequestLineDocumentComponent } from './pages/payment-request-report/Components/payment-request-line-document/payment-request-line-document.component';\r\nimport { FormatPriceWithCurrencyDirective } from './directives/format-price-with-currency.directive';\r\nimport { TestOptionsDialogComponent } from '@dato-dialogs/test-options-dialog/test-options-dialog.component';\r\nimport { UserEndpoint } from '@dato-proxy/endpoints/user.endpoint';\r\nimport { CompanyEndpoint } from '@dato-proxy/endpoints/company.endpoint';\r\nimport { DocumentLineGridComponent } from '@dato-pages/payment-request/Components/document-line-grid/document-line-grid.component';\r\nimport { DocumentEndpoint } from '@dato-proxy/endpoints/document.endpoint';\r\nimport { PaymentDialogComponent } from '@dato-dialogs/payment-dialog/payment-dialog.component';\r\nimport { ReportsMobileComponent } from '@dato-pages/reports/mobile/reports-mobile/reports-mobile.component';\r\nimport { TotalBalanceComponent } from '@dato-pages/reports/Components/total-balance/total-balance.component';\r\nimport { LedgerListComponent } from '@dato-pages/reports/mobile/ledger-list/ledger-list.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DocumentLineListComponent } from '@dato-pages/reports/mobile/document-line-list/document-line-list.component';\r\nimport { InvoiceListComponent } from '@dato-pages/reports/mobile/invoice-list/invoice-list.component';\r\nimport { DeliveryListComponent } from '@dato-pages/reports/mobile/delivery-list/delivery-list.component';\r\nimport { ContactPersonListComponent } from '@dato-pages/my-details/Components/contact-person-list/contact-person-list.component';\r\nimport { CustomerAddressListComponent } from '@dato-pages/my-details/Components/customer-address-list/customer-address-list.component';\r\nimport { CredentialSelectorComponent } from '@dato-pages/credential-selector/credential-selector.component';\r\nimport { PaymentResultComponent } from '@dato-pages/payment-result/payment-result.component';\r\nimport { ContactUsInjectableComponent } from '@dato-pages/contact-us-injectable/contact-us-injectable.component';\r\nimport { ContactUsDialogComponent } from '@dato-dialogs/contact-us-dialog/contact-us-dialog.component';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass DatoAppConfig extends AppConfig {\r\n override ModuleName = 'Dato';\r\n\r\n override Components = [\r\n GoFromDocumentCodeComponent,\r\n PdfPageComponent,\r\n MyDetailsComponent,\r\n ContactPersonGridComponent,\r\n ContactPersonComponent,\r\n CustomerAddressGridComponent,\r\n CustomerAddressComponent,\r\n ChangeCreditCardDialogComponent,\r\n FormatPriceWithCurrencyPipe,\r\n ReportsComponent,\r\n AgingReportGridComponent,\r\n DeliveryGridComponent,\r\n InvoiceGridComponent,\r\n LedgerGridComponent,\r\n BankDetailsComponent,\r\n FileListDialogComponent,\r\n OptionsComponent,\r\n PaymentRequestReportComponent,\r\n PaymentRequestGridComponent,\r\n PaymentRequestStepGridComponent,\r\n PaymentRequestLineDocumentComponent,\r\n FormatPriceWithCurrencyDirective,\r\n TestOptionsDialogComponent,\r\n DocumentLineGridComponent,\r\n PaymentDialogComponent,\r\n ReportsMobileComponent,\r\n TotalBalanceComponent,\r\n LedgerListComponent,\r\n InvoiceListComponent,\r\n DeliveryListComponent,\r\n DocumentLineListComponent,\r\n ContactPersonListComponent,\r\n CustomerAddressListComponent,\r\n CredentialSelectorComponent,\r\n PaymentResultComponent,\r\n ContactUsDialogComponent,\r\n ContactUsInjectableComponent\r\n ];\r\n\r\n override Endpoints = [\r\n LedgerEndpoint,\r\n InvoiceEndpoint,\r\n PaymentRequestEndpoint,\r\n LoginRequestEndpoint,\r\n AgingTransDocumentEndpoint,\r\n PdfEndpoint,\r\n CustomerEndpoint,\r\n ContactPersonEndpoint,\r\n CustomerAddressEndpoint,\r\n DeliveryEndpoint,\r\n SystemOptionEndpoint,\r\n FileEndpoint,\r\n UserEndpoint,\r\n CompanyEndpoint,\r\n DocumentEndpoint\r\n ];\r\n\r\n override RoutesProtected: Routes = [\r\n { path: 'my-details', component: MyDetailsComponent, data: { Menu: 'my-details' }, canActivate: [LoginGuard] },\r\n { path: 'pdf_view/:EntryID', component: PdfPageComponent, canActivate: [LoginGuard] },\r\n { path: 'pdf_view/:EntryID', component: PdfPageComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n { path: 'reports', component: ReportsComponent, data: { Menu: 'reports' }, canActivate: [LoginGuard] },\r\n { path: 'accounting', component: ReportsMobileComponent, data: { Menu: 'accounting' }, canActivate: [LoginGuard] },\r\n { path: 'contact-person/:EntryID', component: ContactPersonComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n { path: 'customer-address/:EntryID', component: CustomerAddressComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n { path: 'bank-details', component: BankDetailsComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n { path: 'impersonate', component: CredentialSelectorComponent, data: { Menu: 'impersonate' }, canActivate: [LoginGuard], outlet: 'window' },\r\n\r\n { path: 'options', component: OptionsComponent, canActivate: [LoginGuard], data: { Menu: 'options', Hello: 'world' } },\r\n { path: 'payments-report', component: PaymentRequestReportComponent, canActivate: [LoginGuard] },\r\n { path: 'payment-result', component: PaymentResultComponent, canActivate: [LoginGuard] }\r\n ];\r\n override RoutesWithEmptyLayout: Routes = [\r\n { path: 'go_from_document_code', component: GoFromDocumentCodeComponent },\r\n { path: 'pdf_view_np/:EntryID', component: PdfPageComponent, canActivate: [LoginGuard] },\r\n ];\r\n override Enums = Enums;\r\n\r\n override OnGetMenu = () => {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n return of([\r\n new MainMenuElement('reports', '/pages/reports', 'mdi mdi-bank', undefined, () => Globals.IsAllowAccounting(), undefined, false),\r\n new MainMenuElement('accounting', '/pages/accounting', 'mdi mdi-bank', undefined, () => Globals.IsAllowAccounting() && screen.IsMobile()),\r\n new MainMenuElement('my-details', '/pages/my-details', 'mdi mdi-cog-outline', undefined, () => Globals.SystemOption?.IsAllowMyDetails),\r\n new MainMenuElement('impersonate', '/pages/impersonate', 'mdi mdi-account-multiple', undefined, (userInfo?: any) => userInfo.UserType === EnumUserTypes.Admin),\r\n \r\n new MainMenuElement('admin_settings', undefined, 'mdi mdi-cogs', undefined, (userInfo?: any) => userInfo.UserType === EnumUserTypes.Admin, undefined, false, [\r\n new MainMenuElement('options', '/pages/options', 'mdi mdi-wrench'),\r\n new MainMenuElement('system_options', '/pages/general/system-options', 'mdi mdi-hammer-wrench'),\r\n new MainMenuElement('notification_servers', '/pages/general/notification-servers', 'mdi mdi-email-send'),\r\n new MainMenuElement('notification_templates', '/pages/general/notification-templates', 'mdi mdi-email-multiple'),\r\n new MainMenuElement('credentials_creation', '/pages/general/credentials-creation', 'mdi mdi-account-circle')\r\n ]),\r\n new MainMenuElement('system_reports', undefined, 'mdi mdi-folder', undefined, (userInfo?: any) => userInfo.UserType === EnumUserTypes.Admin, undefined, false, [\r\n new MainMenuElement('payments_report', '/pages/payments-report', 'mdi mdi-cash-multiple'),\r\n new MainMenuElement('credentials_report', '/pages/general/credentials-report', 'mdi mdi-account-circle'),\r\n new MainMenuElement('credentials_activity_status', '/pages/general/credentials-activity-status', 'mdi mdi-account-circle'),\r\n new MainMenuElement('credential_login_history', '/pages/general/credential-login-history', 'mdi mdi-account-circle'),\r\n new MainMenuElement('request_history', '/pages/general/requests-history', 'mdi mdi-access-point'),\r\n new MainMenuElement('data_views', '/pages/general/data-views', 'mdi mdi-account-circle'),\r\n new MainMenuElement('notificationshistory', '/pages/general/notificationshistory', 'dx-icon dx-icon-message'),\r\n ]),\r\n\r\n ]);\r\n };\r\n\r\n override OnGetDefaultRouteParams = (userInfo?: any) => {\r\n if (Globals.SystemOption) return of(this.GetDefaultRouteParams());\r\n\r\n return this.OnInitApplicationAsync().pipe(\r\n map(() => this.GetDefaultRouteParams())\r\n );\r\n };\r\n\r\n private GetDefaultRouteParams() {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n const defaultRouteParams = new DefaultRouteParams();\r\n defaultRouteParams.Route = Globals.IsAllowAccounting() \r\n ? screen.IsMobile()\r\n ? '/pages/accounting'\r\n : '/pages/reports'\r\n : Globals.SystemOption.IsAllowMyDetails \r\n ? '/pages/my-details'\r\n : '/pages/options';\r\n \r\n return defaultRouteParams;\r\n }\r\n\r\n override OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => {\r\n // Static datasources\r\n const staticDataSources = {};\r\n\r\n (Object as any).values(staticDataSources).forEach(x => x.Data.load());\r\n\r\n // Live datasources\r\n const liveDataSources = {};\r\n\r\n return of({ ...staticDataSources, ...liveDataSources });\r\n };\r\n\r\n override OnInitApplicationAsync = (): Observable => {\r\n const systemOptionEndpoint = AppInjector.get(SystemOptionEndpoint);\r\n const userEndpoint = AppInjector.get(UserEndpoint);\r\n\r\n return zip(systemOptionEndpoint.GetCurrent(), userEndpoint.IsActiveUser()).pipe(\r\n tap((x) => {\r\n Globals.SystemOption = x[0].Entity;\r\n Globals.IsActiveUser = x[1].Data;\r\n }),\r\n map(() => true)\r\n );\r\n };\r\n\r\n override GetInjectableComponentOptions = (): Observable[]> => {\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n \r\n const options = new InjectableComponentOptions();\r\n options.TargetModuleName = this.ModuleName;\r\n options.ButtonText = resourcesService.RC('lblContactUs', this.ModuleName);\r\n options.ButtonIcon = 'mdi mdi-chat-processing-outline';\r\n options.ComponentType = ContactUsInjectableComponent;\r\n options.ShowInToolbarOnMobile = true;\r\n options.IsVisibleButton = (page: BasePageComponent) => {\r\n return Globals.SystemOption.ContactUsEnabled && page.DisplayMode === EnumPageDisplayModes.FullScreen;\r\n };\r\n return of([options]);\r\n };\r\n\r\n override GetLists = () => [Lists_EN, Lists_HE,Lists_ES];\r\n}\r\n\r\nexport const appConfig: AppConfig = new DatoAppConfig();\r\n","\r\n\r\n\r\n\r\n\r\nexport enum EnumSystemOptionsZ\r\n{ \r\n\tSystemOptionID = \"SystemOptionID\",\r\n\tPaymentSuccessURL = \"PaymentSuccessURL\",\r\n\tPaymentBackURL = \"PaymentBackURL\",\r\n\tMaxUploadFileSize = \"MaxUploadFileSize\"\r\n\r\n\r\n}\r\nexport enum EnumSummaryTypes\r\n{ \r\n\tCount = \"Count\",\r\n\tSum = \"Sum\",\r\n\tSumCurrency = \"SumCurrency\"\r\n\r\n\r\n}\r\nexport enum EnumPriceInfoDisplayTypes\r\n{ \r\n\tNone = \"None\",\r\n\tComments = \"Comments\",\r\n\tCommentsAndDescription = \"CommentsAndDescription\"\r\n\r\n\r\n}\r\nexport enum EnumSpecificItemContainerTypes\r\n{ \r\n\tKitItems = \"KitItems\",\r\n\tSingleVariation = \"SingleVariation\",\r\n\tRelatedItem = \"RelatedItem\",\r\n\tWishlist = \"Wishlist\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentDraftOptions\r\n{ \r\n\tNotAllowed = \"NotAllowed\",\r\n\tAllowed = \"Allowed\",\r\n\tAllowedAndDefault = \"AllowedAndDefault\",\r\n\tAlwaysDraft = \"AlwaysDraft\"\r\n\r\n\r\n}\r\nexport enum EnumKitTypes\r\n{ \r\n\tNone = \"None\",\r\n\tTemplate = \"Template\",\r\n\tSales = \"Sales\"\r\n\r\n\r\n}\r\nexport enum EnumCasualContactPersonNotificationReceivers\r\n{ \r\n\tCurrentContactPerson = \"CurrentContactPerson\",\r\n\tCasualContactInformation = \"CasualContactInformation\"\r\n\r\n\r\n}\r\nexport enum EnumTreeTypes\r\n{ \r\n\tNone = \"None\",\r\n\tInventory = \"Inventory\",\r\n\tTemplate = \"Template\",\r\n\tSales = \"Sales\"\r\n\r\n\r\n}\r\nexport enum EnumGiftCardStatuses\r\n{ \r\n\tUsed = \"Used\",\r\n\tNotUsed = \"NotUsed\"\r\n\r\n\r\n}\r\nexport enum EnumStockDisplayOptions\r\n{ \r\n\tNone = \"None\",\r\n\tShowStockLevel = \"ShowStockLevel\",\r\n\tShowInStock = \"ShowInStock\",\r\n\tShowOutOfStock = \"ShowOutOfStock\",\r\n\tShowInOutOfStock = \"ShowInOutOfStock\",\r\n\tCustom = \"Custom\"\r\n\r\n\r\n}\r\nexport enum EnumValidationStatus\r\n{ \r\n\tValid = \"Valid\",\r\n\tError = \"Error\",\r\n\tWarning = \"Warning\",\r\n\tInfo = \"Info\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingCartItemType\r\n{ \r\n\tRegular = \"Regular\",\r\n\tVirtual = \"Virtual\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionSuggestionType\r\n{ \r\n\tEffectItemExistsWithPartialQuantity = \"EffectItemExistsWithPartialQuantity\",\r\n\tEffectItemIsMissing = \"EffectItemIsMissing\",\r\n\tFeaturedPromotion = \"FeaturedPromotion\"\r\n\r\n\r\n}\r\nexport enum EnumOrderingItemsOutOfStockAction\r\n{ \r\n\tBlock = \"Block\",\r\n\tWarning = \"Warning\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumAvailableItemsCalculationOptions\r\n{ \r\n\tInStock = \"InStock\",\r\n\tAvailableImmediately = \"AvailableImmediately\",\r\n\tAvailable = \"Available\"\r\n\r\n\r\n}\r\nexport enum EnumAddressEntryModes\r\n{ \r\n\tNone = \"None\",\r\n\tCustomerAddress = \"CustomerAddress\",\r\n\tCasual = \"Casual\",\r\n\tBoth = \"Both\"\r\n\r\n\r\n}\r\nexport enum EnumContactPersonEntryModes\r\n{ \r\n\tNone = \"None\",\r\n\tCustomerContactPerson = \"CustomerContactPerson\",\r\n\tCasual = \"Casual\",\r\n\tBoth = \"Both\"\r\n\r\n\r\n}\r\nexport enum EnumPriceDisplayOptions\r\n{ \r\n\tNone = \"None\",\r\n\tAfterDiscount = \"AfterDiscount\",\r\n\tBeforeDiscountAndDiscountPercent = \"BeforeDiscountAndDiscountPercent\",\r\n\tBeforeDiscountAndAfterDiscount = \"BeforeDiscountAndAfterDiscount\",\r\n\tBeforeDiscountDiscountPercentAndFinal = \"BeforeDiscountDiscountPercentAndFinal\"\r\n\r\n\r\n}\r\nexport enum EnumPriceCurrencyDisplayOptions\r\n{ \r\n\tDisplayInCustomerCurrency = \"DisplayInCustomerCurrency\",\r\n\tDisplayInLocalCurrency = \"DisplayInLocalCurrency\",\r\n\tDisplayInOriginalCurrency = \"DisplayInOriginalCurrency\",\r\n\tDisplayInSpecificCurrency = \"DisplayInSpecificCurrency\"\r\n\r\n\r\n}\r\nexport enum EnumAttributeDisplayOptions\r\n{ \r\n\tText = \"Text\",\r\n\tNumber = \"Number\",\r\n\tDate = \"Date\",\r\n\tColorCircles = \"ColorCircles\",\r\n\tTag = \"Tag\",\r\n\tLink = \"Link\"\r\n\r\n\r\n}\r\nexport enum EnumFilterDisplayOptions\r\n{ \r\n\tList = \"List\",\r\n\tColorCircles = \"ColorCircles\",\r\n\tText = \"Text\",\r\n\tNumberRange = \"NumberRange\",\r\n\tDateRange = \"DateRange\"\r\n\r\n\r\n}\r\nexport enum EnumImpersonateTargets\r\n{ \r\n\tCustomer = \"Customer\",\r\n\tSalesPerson = \"SalesPerson\"\r\n\r\n\r\n}\r\nexport enum EnumItemSaleMethods\r\n{ \r\n\tUnits = \"Units\",\r\n\tPackages = \"Packages\",\r\n\tKilograms = \"Kilograms\",\r\n\tGrams = \"Grams\",\r\n\tLiters = \"Liters\"\r\n\r\n\r\n}\r\nexport enum EnumItemBadgeTypes\r\n{ \r\n\tNone = \"None\",\r\n\tText = \"Text\",\r\n\tCssClass = \"CssClass\"\r\n\r\n\r\n}\r\nexport enum EnumVariationRelations\r\n{ \r\n\tNone = \"None\",\r\n\tParent = \"Parent\",\r\n\tChild = \"Child\"\r\n\r\n\r\n}\r\nexport enum EnumRelatedItemRelationTypes\r\n{ \r\n\tAdditional = \"Additional\",\r\n\tAlternative = \"Alternative\",\r\n\tAlsoBought = \"AlsoBought\"\r\n\r\n\r\n}\r\nexport enum EnumDisplayGroupingOptions\r\n{ \r\n\tNone = \"None\",\r\n\tCategories = \"Categories\",\r\n\tBrands = \"Brands\",\r\n\tManufacturers = \"Manufacturers\",\r\n\tVendors = \"Vendors\"\r\n\r\n\r\n}\r\nexport enum EnumCatalogueViewOptions\r\n{ \r\n\tGrid = \"Grid\",\r\n\tList = \"List\",\r\n\tCompact = \"Compact\"\r\n\r\n\r\n}\r\nexport enum EnumEntityTypes\r\n{ \r\n\tItem = \"Item\",\r\n\tOrder = \"Order\",\r\n\tInvoice = \"Invoice\",\r\n\tDelivery = \"Delivery\",\r\n\tReturnRequest = \"ReturnRequest\"\r\n\r\n\r\n}\r\nexport enum ImageTypeEnums\r\n{ \r\n\tCategory = \"Category\",\r\n\tBrand = \"Brand\",\r\n\tManufacturer = \"Manufacturer\",\r\n\tVendor = \"Vendor\",\r\n\tItem = \"Item\",\r\n\tHomeDesktop = \"HomeDesktop\",\r\n\tHomeMobile = \"HomeMobile\",\r\n\tEmpty = \"Empty\"\r\n\r\n\r\n}\r\nexport enum ImageSizeEnums\r\n{ \r\n\tSmall = \"Small\",\r\n\tMedium = \"Medium\",\r\n\tLarge = \"Large\",\r\n\tOriginal = \"Original\"\r\n\r\n\r\n}\r\nexport enum ShoppingCartStatusEnums\r\n{ \r\n\tNew = \"New\",\r\n\tUpdate = \"Update\",\r\n\tCompleted = \"Completed\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tApproved = \"Approved\",\r\n\tProcessed = \"Processed\",\r\n\tDelivered = \"Delivered\",\r\n\tCanceled = \"Canceled\",\r\n\tPartialDelivered = \"PartialDelivered\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentMeans\r\n{ \r\n\tNone = \"None\",\r\n\tLater = \"Later\",\r\n\tCreditCard = \"CreditCard\",\r\n\tCash = \"Cash\",\r\n\tCheque = \"Cheque\",\r\n\tWireTransfer = \"WireTransfer\"\r\n\r\n\r\n}\r\nexport enum EnumGoCreditCardTypes\r\n{ \r\n\tExisting = \"Existing\",\r\n\tNew = \"New\"\r\n\r\n\r\n}\r\nexport enum EnumGoCreditTransactionModes\r\n{ \r\n\tJ4 = \"J4\",\r\n\tJ5 = \"J5\",\r\n\tJ2 = \"J2\"\r\n\r\n\r\n}\r\nexport enum EnumDatabaseObjects\r\n{ \r\n\tDelivery = \"Delivery\",\r\n\tInvoice = \"Invoice\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumDeliveryStatuses\r\n{ \r\n\tOpen = \"Open\",\r\n\tClosed = \"Closed\",\r\n\tCanceled = \"Canceled\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumReturnRequestStatuses\r\n{ \r\n\tOpen = \"Open\",\r\n\tClosed = \"Closed\",\r\n\tCanceled = \"Canceled\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentSpecialItemType\r\n{ \r\n\tShipment = \"Shipment\",\r\n\tDeposit = \"Deposit\",\r\n\tGiftCard = \"GiftCard\"\r\n\r\n\r\n}\r\nexport enum EnumDisplaySortingOptions\r\n{ \r\n\tNone = \"None\",\r\n\tItemName = \"ItemName\",\r\n\tItemCode = \"ItemCode\",\r\n\tBarCode = \"BarCode\",\r\n\tBrand = \"Brand\",\r\n\tManufacturer = \"Manufacturer\",\r\n\tVendor = \"Vendor\",\r\n\tCustom = \"Custom\"\r\n\r\n\r\n}\r\nexport enum EnumExternalQueryFieldFormats\r\n{ \r\n\tText = \"Text\",\r\n\tDate = \"Date\",\r\n\tNumber = \"Number\",\r\n\tMoney = \"Money\",\r\n\tBoolean = \"Boolean\"\r\n\r\n\r\n}\r\nexport enum EnumItemImagesFallbackTypes\r\n{ \r\n\tNone = \"None\",\r\n\tCategories = \"Categories\",\r\n\tBrands = \"Brands\",\r\n\tVendor = \"Vendor\",\r\n\tManufacturers = \"Manufacturers\"\r\n\r\n\r\n}\r\nexport enum EnumAttributesDisplayTabs\r\n{ \r\n\tAttributes = \"Attributes\",\r\n\tMain = \"Main\"\r\n\r\n\r\n}\r\nexport enum EnumTitlePositions\r\n{ \r\n\tLeft = \"Left\",\r\n\tCenter = \"Center\",\r\n\tRight = \"Right\"\r\n\r\n\r\n}\r\nexport enum EnumQuantityActiveErrorPlace\r\n{ \r\n\tCatalogue = \"Catalogue\",\r\n\tWindow = \"Window\",\r\n\tCompact = \"Compact\",\r\n\tCheckout = \"Checkout\",\r\n\tItemPopUp = \"ItemPopUp\"\r\n\r\n\r\n}\r\nexport enum EnumCredentialTypes\r\n{ \r\n\tAdmin = \"Admin\",\r\n\tUser = \"User\",\r\n\tSalePerson = \"SalePerson\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentProcessingSteps\r\n{ \r\n\tSendToPaymentService = \"SendToPaymentService\",\r\n\tConfirmInPaymentService = \"ConfirmInPaymentService\",\r\n\tExecuteInPaymentService = \"ExecuteInPaymentService\",\r\n\tSaveDocument = \"SaveDocument\",\r\n\tSaveInvoice = \"SaveInvoice\",\r\n\tSaveReceipt = \"SaveReceipt\",\r\n\tUpdateTransactionRefDataInPaymentService = \"UpdateTransactionRefDataInPaymentService\",\r\n\tSendNotification = \"SendNotification\",\r\n\tRollbackPayment = \"RollbackPayment\",\r\n\tCancelDocument = \"CancelDocument\",\r\n\tCancelPayment = \"CancelPayment\",\r\n\tCustomAfterSaveOrder = \"CustomAfterSaveOrder\",\r\n\tCompleted = \"Completed\",\r\n\tChangeCreditCard = \"ChangeCreditCard\",\r\n\tResolved = \"Resolved\",\r\n\tErrorNotificationSent = \"ErrorNotificationSent\",\r\n\tCloseDocument = \"CloseDocument\",\r\n\tSaveShoppingPayment = \"SaveShoppingPayment\",\r\n\tSaveCashPayment = \"SaveCashPayment\",\r\n\tSaveChequePayment = \"SaveChequePayment\",\r\n\tSaveWirePayment = \"SaveWirePayment\",\r\n\tSaveLaterPayment = \"SaveLaterPayment\",\r\n\tDeletePayment = \"DeletePayment\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentProcessingStatus\r\n{ \r\n\tNoData = \"NoData\",\r\n\tInProcess = \"InProcess\",\r\n\tSuccess = \"Success\",\r\n\tSuccessNoNotification = \"SuccessNoNotification\",\r\n\tError = \"Error\",\r\n\tResolved = \"Resolved\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentRequestTypes\r\n{ \r\n\tPayment = \"Payment\",\r\n\tChangeCard = \"ChangeCard\"\r\n\r\n\r\n}\r\nexport enum EnumInvoiceOneDocumentTypes\r\n{ \r\n\tReceipt = \"Receipt\",\r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tOrder = \"Order\",\r\n\tQuote = \"Quote\",\r\n\tDeliveryNote = \"DeliveryNote\",\r\n\tReturn = \"Return\",\r\n\tReturnRequest = \"ReturnRequest\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionCustomerFilterTypes\r\n{ \r\n\tAll = \"All\",\r\n\tCustomerGroups = \"CustomerGroups\",\r\n\tCustomers = \"Customers\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionItemFilterTypes\r\n{ \r\n\tAll = \"All\",\r\n\tCategories = \"Categories\",\r\n\tItems = \"Items\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionEffectItemFilterTypes\r\n{ \r\n\tAllItems = \"AllItems\",\r\n\tCategories = \"Categories\",\r\n\tItems = \"Items\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionDiscountApplicationRule\r\n{ \r\n\tAfterBaseDiscount = \"AfterBaseDiscount\",\r\n\tBeforeBaseDiscount = \"BeforeBaseDiscount\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionAggregationLevelTypes\r\n{ \r\n\tAll = \"All\",\r\n\tCategory = \"Category\",\r\n\tItem = \"Item\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionRequiredTypes\r\n{ \r\n\tQuantity = \"Quantity\",\r\n\tSum = \"Sum\"\r\n\r\n\r\n}\r\nexport enum EnumEffectTargetSelector\r\n{ \r\n\tLowestPrice = \"LowestPrice\",\r\n\tHighestPrice = \"HighestPrice\",\r\n\tLowestTotal = \"LowestTotal\",\r\n\tHighestTotal = \"HighestTotal\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionEffectTargetTypes\r\n{ \r\n\tSameItem = \"SameItem\",\r\n\tSpecificItem = \"SpecificItem\",\r\n\tItemList = \"ItemList\"\r\n\r\n\r\n}\r\nexport enum EnumPromotionResultTypes\r\n{ \r\n\tFreeItem = \"FreeItem\",\r\n\tFixedPrice = \"FixedPrice\",\r\n\tDiscount = \"Discount\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentTypes\r\n{ \r\n\tNone = \"None\",\r\n\tQuote = \"Quote\",\r\n\tOrder = \"Order\",\r\n\tDeliveryNote = \"DeliveryNote\",\r\n\tRefund = \"Refund\",\r\n\tReturnRequest = \"ReturnRequest\",\r\n\tInvoice = \"Invoice\",\r\n\tReturn = \"Return\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentProcessingTypes\r\n{ \r\n\tNone = \"None\",\r\n\tQuote = \"Quote\",\r\n\tOrder = \"Order\",\r\n\tDeliveryNote = \"DeliveryNote\",\r\n\tRefund = \"Refund\",\r\n\tReturnRequest = \"ReturnRequest\",\r\n\tInvoice = \"Invoice\",\r\n\tReturn = \"Return\",\r\n\tReceipt = \"Receipt\"\r\n\r\n\r\n}\r\nexport enum EnumFormFieldOptions\r\n{ \r\n\tVisible = \"Visible\",\r\n\tHidden = \"Hidden\",\r\n\tMandatory = \"Mandatory\",\r\n\tDisabled = \"Disabled\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingCartItemViewOptions\r\n{ \r\n\tList = \"List\",\r\n\tCompact = \"Compact\",\r\n\tLine = \"Line\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingCartModeOptions\r\n{ \r\n\tFloating = \"Floating\",\r\n\tFixed = \"Fixed\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentFilterBySubjects\r\n{ \r\n\tMine = \"Mine\",\r\n\tCustomer = \"Customer\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumItemStockManagementTypes\r\n{ \r\n\tDefault = \"Default\",\r\n\tSerial = \"Serial\",\r\n\tBatch = \"Batch\"\r\n\r\n\r\n}\r\nexport enum EnumEUVatStatuses\r\n{ \r\n\tLiable = \"Liable\",\r\n\tExcempt = \"Excempt\",\r\n\tEU = \"EU\"\r\n\r\n\r\n}\r\nexport enum EnumCreditCardPaymentStatus\r\n{ \r\n\tPending = \"Pending\",\r\n\tPaid = \"Paid\",\r\n\tCanceled = \"Canceled\"\r\n\r\n\r\n}\r\nexport enum EnumInvoiceOneNotificationTypes\r\n{ \r\n\tNone = \"None\",\r\n\tDefault = \"Default\",\r\n\tEmail = \"Email\",\r\n\tSMS = \"SMS\",\r\n\tWhatsapp = \"Whatsapp\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentCreationNotificationTypes\r\n{ \r\n\tEmail = \"Email\",\r\n\tPhone = \"Phone\",\r\n\tCellular = \"Cellular\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingPaymentStatus\r\n{ \r\n\tNew = \"New\",\r\n\tCompleted = \"Completed\",\r\n\tChangeCreditCard = \"ChangeCreditCard\"\r\n\r\n\r\n}\r\nexport enum EnumDiscountPermissionCheckTypes\r\n{ \r\n\tHigherPrevails = \"HigherPrevails\",\r\n\tLowerPrevails = \"LowerPrevails\"\r\n\r\n\r\n}\r\nexport enum EnumCityInputMethods\r\n{ \r\n\tTextual = \"Textual\",\r\n\tChooseNoValidate = \"ChooseNoValidate\",\r\n\tChooseValidate = \"ChooseValidate\"\r\n\r\n\r\n}\r\nexport enum EnumSalesDocumentLayers\r\n{ \r\n\tOrder = \"Order\",\r\n\tDelivery = \"Delivery\",\r\n\tInvoice = \"Invoice\"\r\n\r\n\r\n}\r\nexport enum EnumSaleTargetDimensions\r\n{ \r\n\tAll = \"All\",\r\n\tCustomerGroup = \"CustomerGroup\",\r\n\tCustomer = \"Customer\",\r\n\tCategory = \"Category\",\r\n\tItem = \"Item\"\r\n\r\n\r\n}\r\nexport enum EnumSaleTargetMeasures\r\n{ \r\n\tQuantity = \"Quantity\",\r\n\tSum = \"Sum\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentSource\r\n{ \r\n\tSBO = \"SBO\",\r\n\tCustomer = \"Customer\",\r\n\tSales = \"Sales\"\r\n\r\n\r\n}\r\nexport enum EnumBarcodeScannerTypes\r\n{ \r\n\tNone = \"None\",\r\n\tDefault = \"Default\",\r\n\tExternal = \"External\"\r\n\r\n\r\n}\r\nexport enum EnumExternalQueryType\r\n{ \r\n\tCustomer = \"Customer\",\r\n\tSalesPerson = \"SalesPerson\",\r\n\tAdmin = \"Admin\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingCartValidateOptions\r\n{ \r\n\tNone = \"None\",\r\n\tItems = \"Items\",\r\n\tBalance = \"Balance\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumCustomFieldLocations\r\n{ \r\n\tCustomer = \"Customer\",\r\n\tHeader = \"Header\",\r\n\tItem = \"Item\"\r\n\r\n\r\n}\r\nexport enum EnumCustomFieldTypes\r\n{ \r\n\tString = \"String\",\r\n\tNumber = \"Number\",\r\n\tDate = \"Date\",\r\n\tList = \"List\",\r\n\tPrice = \"Price\",\r\n\tMemo = \"Memo\"\r\n\r\n\r\n}\r\nexport enum EnumCreditTypes\r\n{ \r\n\tRegular = \"Regular\",\r\n\tPayments = \"Payments\",\r\n\tCredit = \"Credit\",\r\n\tSpecial_Credit_2 = \"Special_Credit_2\",\r\n\tSpecial_Immidiate_3 = \"Special_Immidiate_3\",\r\n\tSpecial_ClubDeal_4 = \"Special_ClubDeal_4\",\r\n\tSpecial_SuperCredit_5 = \"Special_SuperCredit_5\",\r\n\tSpecial_ClubPayments_9 = \"Special_ClubPayments_9\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumCategoryPaneBehaviour\r\n{ \r\n\tHidden = \"Hidden\",\r\n\tOptional = \"Optional\",\r\n\tHideOnClick = \"HideOnClick\",\r\n\tPermanent = \"Permanent\"\r\n\r\n\r\n}\r\nexport enum EnumDashboardFilterAdditionalPeriod\r\n{ \r\n\tLastMonth = \"LastMonth\",\r\n\tLast3Months = \"Last3Months\",\r\n\tLast6Months = \"Last6Months\",\r\n\tLastYear = \"LastYear\",\r\n\tLast3Years = \"Last3Years\"\r\n\r\n\r\n}\r\nexport enum EnumAddressFieldOptions\r\n{ \r\n\tVisible = \"Visible\",\r\n\tHidden = \"Hidden\",\r\n\tMandatory = \"Mandatory\"\r\n\r\n\r\n}\r\nexport enum EnumGiftCardValueTypes\r\n{ \r\n\tSum = \"Sum\",\r\n\tPercent = \"Percent\"\r\n\r\n\r\n}\r\nexport enum EnumShowTotalOnTopOptions\r\n{ \r\n\tNone = \"None\",\r\n\tBeforeVat = \"BeforeVat\",\r\n\tAfterVat = \"AfterVat\"\r\n\r\n\r\n}\r\nexport enum EnumAssortmentVisibilityModes\r\n{ \r\n\tHidden = \"Hidden\",\r\n\tVisible = \"Visible\",\r\n\tShownByDefault = \"ShownByDefault\"\r\n\r\n\r\n}\r\nexport enum EnumShowDocumentFilesModes\r\n{ \r\n\tNone = \"None\",\r\n\tSBOAttachments = \"SBOAttachments\",\r\n\tDocumentOne = \"DocumentOne\",\r\n\tVito = \"Vito\"\r\n\r\n\r\n}\r\nexport enum EnumItemDisplayTypes\r\n{ \r\n\tGrid = \"Grid\",\r\n\tKitItemsList = \"KitItemsList\",\r\n\tKitItemsCompact = \"KitItemsCompact\",\r\n\tKitItemsLine = \"KitItemsLine\",\r\n\tSingleVariationList = \"SingleVariationList\",\r\n\tSingleVariationCompact = \"SingleVariationCompact\",\r\n\tSingleVariationLine = \"SingleVariationLine\",\r\n\tShoppingCartList = \"ShoppingCartList\",\r\n\tFinalizedOrderList = \"FinalizedOrderList\",\r\n\tFinalizedOrderCompact = \"FinalizedOrderCompact\",\r\n\tFinalizedOrderLine = \"FinalizedOrderLine\",\r\n\tPopup = \"Popup\",\r\n\tRelatedItemList = \"RelatedItemList\",\r\n\tRelatedItemCompact = \"RelatedItemCompact\",\r\n\tRelatedItemLine = \"RelatedItemLine\",\r\n\tWishlistList = \"WishlistList\",\r\n\tWishlistCompact = \"WishlistCompact\",\r\n\tWishlistLine = \"WishlistLine\",\r\n\tReturnRequest = \"ReturnRequest\",\r\n\tCompact = \"Compact\",\r\n\tCatalogueList = \"CatalogueList\",\r\n\tCatalogueCompact = \"CatalogueCompact\",\r\n\tShoppingCartCompact = \"ShoppingCartCompact\",\r\n\tShoppingCartLine = \"ShoppingCartLine\",\r\n\tCheckoutList = \"CheckoutList\",\r\n\tCheckoutCompact = \"CheckoutCompact\",\r\n\tCheckoutLine = \"CheckoutLine\"\r\n\r\n\r\n}\r\n \r\n\r\nexport const Enums = {\r\n \tEnumSystemOptionsZ: EnumSystemOptionsZ,\r\n\tEnumSummaryTypes: EnumSummaryTypes,\r\n\tEnumPriceInfoDisplayTypes: EnumPriceInfoDisplayTypes,\r\n\tEnumSpecificItemContainerTypes: EnumSpecificItemContainerTypes,\r\n\tEnumDocumentDraftOptions: EnumDocumentDraftOptions,\r\n\tEnumKitTypes: EnumKitTypes,\r\n\tEnumCasualContactPersonNotificationReceivers: EnumCasualContactPersonNotificationReceivers,\r\n\tEnumTreeTypes: EnumTreeTypes,\r\n\tEnumGiftCardStatuses: EnumGiftCardStatuses,\r\n\tEnumStockDisplayOptions: EnumStockDisplayOptions,\r\n\tEnumValidationStatus: EnumValidationStatus,\r\n\tEnumShoppingCartItemType: EnumShoppingCartItemType,\r\n\tEnumPromotionSuggestionType: EnumPromotionSuggestionType,\r\n\tEnumOrderingItemsOutOfStockAction: EnumOrderingItemsOutOfStockAction,\r\n\tEnumAvailableItemsCalculationOptions: EnumAvailableItemsCalculationOptions,\r\n\tEnumAddressEntryModes: EnumAddressEntryModes,\r\n\tEnumContactPersonEntryModes: EnumContactPersonEntryModes,\r\n\tEnumPriceDisplayOptions: EnumPriceDisplayOptions,\r\n\tEnumPriceCurrencyDisplayOptions: EnumPriceCurrencyDisplayOptions,\r\n\tEnumAttributeDisplayOptions: EnumAttributeDisplayOptions,\r\n\tEnumFilterDisplayOptions: EnumFilterDisplayOptions,\r\n\tEnumImpersonateTargets: EnumImpersonateTargets,\r\n\tEnumItemSaleMethods: EnumItemSaleMethods,\r\n\tEnumItemBadgeTypes: EnumItemBadgeTypes,\r\n\tEnumVariationRelations: EnumVariationRelations,\r\n\tEnumRelatedItemRelationTypes: EnumRelatedItemRelationTypes,\r\n\tEnumDisplayGroupingOptions: EnumDisplayGroupingOptions,\r\n\tEnumCatalogueViewOptions: EnumCatalogueViewOptions,\r\n\tEnumEntityTypes: EnumEntityTypes,\r\n\tImageTypeEnums: ImageTypeEnums,\r\n\tImageSizeEnums: ImageSizeEnums,\r\n\tShoppingCartStatusEnums: ShoppingCartStatusEnums,\r\n\tEnumDocumentStatuses: EnumDocumentStatuses,\r\n\tEnumPaymentMeans: EnumPaymentMeans,\r\n\tEnumGoCreditCardTypes: EnumGoCreditCardTypes,\r\n\tEnumGoCreditTransactionModes: EnumGoCreditTransactionModes,\r\n\tEnumDatabaseObjects: EnumDatabaseObjects,\r\n\tEnumDeliveryStatuses: EnumDeliveryStatuses,\r\n\tEnumReturnRequestStatuses: EnumReturnRequestStatuses,\r\n\tEnumDocumentSpecialItemType: EnumDocumentSpecialItemType,\r\n\tEnumDisplaySortingOptions: EnumDisplaySortingOptions,\r\n\tEnumExternalQueryFieldFormats: EnumExternalQueryFieldFormats,\r\n\tEnumItemImagesFallbackTypes: EnumItemImagesFallbackTypes,\r\n\tEnumAttributesDisplayTabs: EnumAttributesDisplayTabs,\r\n\tEnumTitlePositions: EnumTitlePositions,\r\n\tEnumQuantityActiveErrorPlace: EnumQuantityActiveErrorPlace,\r\n\tEnumCredentialTypes: EnumCredentialTypes,\r\n\tEnumDocumentProcessingSteps: EnumDocumentProcessingSteps,\r\n\tEnumDocumentProcessingStatus: EnumDocumentProcessingStatus,\r\n\tEnumPaymentRequestTypes: EnumPaymentRequestTypes,\r\n\tEnumInvoiceOneDocumentTypes: EnumInvoiceOneDocumentTypes,\r\n\tEnumPromotionCustomerFilterTypes: EnumPromotionCustomerFilterTypes,\r\n\tEnumPromotionItemFilterTypes: EnumPromotionItemFilterTypes,\r\n\tEnumPromotionEffectItemFilterTypes: EnumPromotionEffectItemFilterTypes,\r\n\tEnumPromotionDiscountApplicationRule: EnumPromotionDiscountApplicationRule,\r\n\tEnumPromotionAggregationLevelTypes: EnumPromotionAggregationLevelTypes,\r\n\tEnumPromotionRequiredTypes: EnumPromotionRequiredTypes,\r\n\tEnumEffectTargetSelector: EnumEffectTargetSelector,\r\n\tEnumPromotionEffectTargetTypes: EnumPromotionEffectTargetTypes,\r\n\tEnumPromotionResultTypes: EnumPromotionResultTypes,\r\n\tEnumDocumentTypes: EnumDocumentTypes,\r\n\tEnumDocumentProcessingTypes: EnumDocumentProcessingTypes,\r\n\tEnumFormFieldOptions: EnumFormFieldOptions,\r\n\tEnumShoppingCartItemViewOptions: EnumShoppingCartItemViewOptions,\r\n\tEnumShoppingCartModeOptions: EnumShoppingCartModeOptions,\r\n\tEnumDocumentFilterBySubjects: EnumDocumentFilterBySubjects,\r\n\tEnumItemStockManagementTypes: EnumItemStockManagementTypes,\r\n\tEnumEUVatStatuses: EnumEUVatStatuses,\r\n\tEnumCreditCardPaymentStatus: EnumCreditCardPaymentStatus,\r\n\tEnumInvoiceOneNotificationTypes: EnumInvoiceOneNotificationTypes,\r\n\tEnumDocumentCreationNotificationTypes: EnumDocumentCreationNotificationTypes,\r\n\tEnumShoppingPaymentStatus: EnumShoppingPaymentStatus,\r\n\tEnumDiscountPermissionCheckTypes: EnumDiscountPermissionCheckTypes,\r\n\tEnumCityInputMethods: EnumCityInputMethods,\r\n\tEnumSalesDocumentLayers: EnumSalesDocumentLayers,\r\n\tEnumSaleTargetDimensions: EnumSaleTargetDimensions,\r\n\tEnumSaleTargetMeasures: EnumSaleTargetMeasures,\r\n\tEnumDocumentSource: EnumDocumentSource,\r\n\tEnumBarcodeScannerTypes: EnumBarcodeScannerTypes,\r\n\tEnumExternalQueryType: EnumExternalQueryType,\r\n\tEnumShoppingCartValidateOptions: EnumShoppingCartValidateOptions,\r\n\tEnumCustomFieldLocations: EnumCustomFieldLocations,\r\n\tEnumCustomFieldTypes: EnumCustomFieldTypes,\r\n\tEnumCreditTypes: EnumCreditTypes,\r\n\tEnumCategoryPaneBehaviour: EnumCategoryPaneBehaviour,\r\n\tEnumDashboardFilterAdditionalPeriod: EnumDashboardFilterAdditionalPeriod,\r\n\tEnumAddressFieldOptions: EnumAddressFieldOptions,\r\n\tEnumGiftCardValueTypes: EnumGiftCardValueTypes,\r\n\tEnumShowTotalOnTopOptions: EnumShowTotalOnTopOptions,\r\n\tEnumAssortmentVisibilityModes: EnumAssortmentVisibilityModes,\r\n\tEnumShowDocumentFilesModes: EnumShowDocumentFilesModes,\r\n\tEnumItemDisplayTypes: EnumItemDisplayTypes,\r\n};\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BrandView } from './../views/brand.view';\r\n@Injectable()\r\nexport class BrandEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Brand\", api);}\r\n\t\r\n\r\n public List(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', options?.GetLoadOptions() );\r\n }\r\n\r\n public ListLite(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListLite', options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactPerson } from './../entities/contactperson.entity';\r\nimport { ContactPersonInfoValidResult } from './../entities/contactpersoninfovalidresult.entity';\r\n@Injectable()\r\nexport class ContactPersonEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ContactPerson\", api);}\r\n\t\r\n\r\n public CheckContactPersonInfoValid(ContactPersonID: number, Name: string, Email: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'CheckContactPersonInfoValid', {ContactPersonID: ContactPersonID, Name: Name, Email: Email} );\r\n }\r\n\r\n public GetListByCustomer(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetListByCustomer', {customerID: customerID} );\r\n }\r\n\r\n public override Save(Entity: ContactPerson) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public SaveFromShoppingCart(Entity: ContactPerson) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveFromShoppingCart', Entity, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Country } from './../entities/country.entity';\r\n@Injectable()\r\nexport class CountryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Country\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerAddress } from './../entities/customeraddress.entity';\r\n@Injectable()\r\nexport class CustomerAddressEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomerAddress\", api);}\r\n\t\r\n\r\n public override Save(Entity: CustomerAddress) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public SaveFromShoppingCart(Entity: CustomerAddress) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveFromShoppingCart', Entity, undefined );\r\n }\r\n\r\n public GetListByCustomer(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetListByCustomer', {customerID: customerID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ExternalLink } from './../entities/externallink.entity';\r\n@Injectable()\r\nexport class ExternalLinkEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ExternalLink\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FilterAttributeGroupView } from './../views/filterattributegroup.view';\r\n@Injectable()\r\nexport class FilterAttributeEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"FilterAttribute\", api);}\r\n\t\r\n\r\n public GetFilterAttributeGroups() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFilterAttributeGroups', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemView } from './../views/item.view';\r\nimport { ItemsResult } from './../entities/itemsresult.entity';\r\nimport { Currency } from './../entities/currency.entity';\r\nimport { Promotion } from './../entities/promotion.entity';\r\nimport { ItemViewLite } from './../entities/itemviewlite.entity';\r\nimport { HiddenItem } from './../entities/hiddenitem.entity';\r\nimport { ItemPurchaseOrder } from './../entities/itempurchaseorder.entity';\r\nimport { ItemAvailability } from './../entities/itemavailability.entity';\r\nimport { ItemShipment } from './../entities/itemshipment.entity';\r\nimport { Batch } from './../entities/batch.entity';\r\nimport { SerialNumber } from './../entities/serialnumber.entity';\r\nimport { EnumRelatedItemRelationTypes } from './../enums';\r\nimport { ItemListParams } from './../params/itemlist.param';\r\nimport { GetFileParams } from './../params/getfile.param';\r\n@Injectable()\r\nexport class ItemsEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Items\", api);}\r\n\t\r\n\r\n public GetItem(EntryID: number, UniqueItemID: number, WarehouseID: number, customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItem', {EntryID: EntryID, UniqueItemID: UniqueItemID, WarehouseID: WarehouseID, customerID: customerID} );\r\n }\r\n\r\n public GetItemAdditionalItems(EntryID: number, RelationType: EnumRelatedItemRelationTypes, UniqueItemID: number, customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemAdditionalItems', {EntryID: EntryID, RelationType: RelationType, UniqueItemID: UniqueItemID, customerID: customerID} );\r\n }\r\n\r\n public GetItems(Params: ItemListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetItems', Params, undefined );\r\n }\r\n\r\n public GetFeaturedItems() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFeaturedItems', undefined );\r\n }\r\n\r\n public GetItemFile(Params: GetFileParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetItemFile', Params, undefined );\r\n }\r\n\r\n public GetCurrencies() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrencies', undefined );\r\n }\r\n\r\n public GetPromotionsForItem(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPromotionsForItem', {itemID: itemID} );\r\n }\r\n\r\n public GetItemByID(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemByID', {itemID: itemID} );\r\n }\r\n\r\n public GetItemLiteByID(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemLiteByID', {itemID: itemID} );\r\n }\r\n\r\n public GetHiddenItems(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetHiddenItems', options?.GetLoadOptions() );\r\n }\r\n\r\n public GetItemsLite(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemsLite', options?.GetLoadOptions() );\r\n }\r\n\r\n public GetItemPurchaseOrders(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemPurchaseOrders', {itemID: itemID} );\r\n }\r\n\r\n public GetItemKitItems(itemID: number, customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemKitItems', {itemID: itemID, customerID: customerID} );\r\n }\r\n\r\n public GetItemAvailabilities(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemAvailabilities', {itemID: itemID} );\r\n }\r\n\r\n public GetItemShipments() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemShipments', undefined );\r\n }\r\n\r\n public ValidateSerialNumberOrBatch(itemID: number, number: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ValidateSerialNumberOrBatch', {itemID: itemID, number: number} );\r\n }\r\n\r\n public GetBatches(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBatches', {itemID: itemID} );\r\n }\r\n\r\n public GetSerialNumbers(itemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSerialNumbers', {itemID: itemID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ManufacturerView } from './../views/manufacturer.view';\r\n@Injectable()\r\nexport class ManufacturerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Manufacturer\", api);}\r\n\t\r\n\r\n public List(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', options?.GetLoadOptions() );\r\n }\r\n\r\n public ListLite(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListLite', options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { State } from './../entities/state.entity';\r\n@Injectable()\r\nexport class StateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"State\", api);}\r\n\t\r\n\r\n public ListByCountry(CountryCode: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListByCountry', {CountryCode: CountryCode} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { VendorView } from './../views/vendor.view';\r\n@Injectable()\r\nexport class VendorEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Vendor\", api);}\r\n\t\r\n\r\n public List(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'List', options?.GetLoadOptions() );\r\n }\r\n\r\n public ListLite(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListLite', options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ValidationResultItem } from \"@dino-proxy/entities/validationresultitem.entity\";\r\nimport { EnumQuantityActiveErrorPlace } from \"@dino-proxy/enums\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { NavigatorService } from \"@m4u-angular/core/framework/navigator.service\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\nexport class UiComponentEvent {\r\n EventName: string = null;\r\n Payload?: any;\r\n}\r\n\r\nexport const UI_EVENTS = {\r\n OPEN_BASE_DOCUMENT_DIALOG: 'open-base-document-dialog',\r\n SHARE_DOCUMENT: 'share-document',\r\n DOCUMENT_FILTER_CHANGE: 'document-filter-change',\r\n GIFT_CARD_REACTIVATED: 'gift-card-reactivation',\r\n KIT_CHILDREN_VISIBILITY_TOGGLE: 'kit-children-visibility-toggle',\r\n DOCUMENT_FILTER_ACTION: 'document_filter_action',\r\n LEDGER_FILTER_ACTION: 'ledger_filter_action',\r\n AGING_FILTER_ACTION: 'aging_filter_action',\r\n RECEIPT_FILTER_ACTION: 'receipt_filter_action',\r\n CUSTOMER_FILTER_ACTION: 'customer_filter_action',\r\n CASUAL_ADDRESS_CHANGED: 'casual_address_changed',\r\n CASUAL_CONTACT_CHANGED: 'casual_contact_changed',\r\n ITEM_OPTION_ENTITY_LOADED: 'item_option_entity_loaded',\r\n WISHLIST_VIEW_MODE_CHANGED: 'wishlist_view_mode_changed',\r\n SINGLE_VARIATION_VIEW_MODE_CHANGED: 'single_variation_view_mode_changed',\r\n KIT_ITEMS_VIEW_MODE_CHANGED: 'kit_items_view_mode_changed',\r\n RELATED_ITEM_VIEW_MODE_CHANGED: 'related_item_view_mode_changed',\r\n SALES_SUMMARY_FILTER_ACTION: 'sales_summary_filter_action',\r\n TARGET_PERFORMANCE_SUMMARY_FILTER_ACTION: 'target-performance_summary_filter_action',\r\n};\r\n\r\nenum AlertMessageStatuses {\r\n Valid = 0,\r\n Error = 1,\r\n Warning = 2,\r\n Info = 3\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UiComponentService extends BaseService {\r\n private options = {\r\n alertDuration: 5000\r\n };\r\n\r\n private menus = [];\r\n\r\n private uiEventSubject: Subject = new Subject();\r\n readonly onUiEventFired$ = this.uiEventSubject.asObservable();\r\n\r\n constructor(public Navigator: NavigatorService) {\r\n super();\r\n }\r\n\r\n public IsShowQuantityError(currentQuantityPlace: EnumQuantityActiveErrorPlace, currentRoute: string, compactOpened: boolean = false) {\r\n if (currentRoute.includes('dino_itemn')) {\r\n return currentQuantityPlace === EnumQuantityActiveErrorPlace.ItemPopUp;\r\n } else if (currentRoute.includes('dino_checkout-desktop') || currentRoute.includes('dino_checkout-mobile')) {\r\n return currentQuantityPlace === EnumQuantityActiveErrorPlace.Checkout;\r\n } else if (currentRoute.includes('dino_shoppingcartn')) {\r\n return currentQuantityPlace === EnumQuantityActiveErrorPlace.Window;\r\n } else if (currentRoute.includes('dino_cataloguen') && currentQuantityPlace === EnumQuantityActiveErrorPlace.Catalogue) {\r\n return true;\r\n } else if (currentRoute.includes('dino_cataloguen') && currentQuantityPlace === EnumQuantityActiveErrorPlace.Compact) {\r\n return compactOpened;\r\n }\r\n \r\n return false;\r\n }\r\n\r\n TriggerUiEvent(eventName: string, payload?: any): void {\r\n this.uiEventSubject.next({ EventName: eventName, Payload: payload } as UiComponentEvent);\r\n }\r\n\r\n ProcessAlerts(messagePayload?, alertDuration = null) {\r\n if (!messagePayload) return;\r\n\r\n var finalAlertDuration = alertDuration || this.options.alertDuration;\r\n\r\n try {\r\n const validationResultItems: ValidationResultItem[] = JSON.parse(messagePayload);\r\n validationResultItems.forEach(alert => {\r\n const alertMessage = alert.Message;\r\n if (this.IsAlertBeingShown(alertMessage.trim())) return;\r\n\r\n switch (alert.Status as unknown as AlertMessageStatuses) {\r\n case AlertMessageStatuses.Error: {\r\n this.UI.StopMessage(alertMessage, undefined, finalAlertDuration, true);\r\n break;\r\n }\r\n case AlertMessageStatuses.Warning: {\r\n this.UI.WarningMessage(alertMessage, undefined, finalAlertDuration, true);\r\n break;\r\n }\r\n case AlertMessageStatuses.Info: {\r\n this.UI.InfoMessage(alertMessage, undefined, finalAlertDuration, true);\r\n }\r\n }\r\n });\r\n } catch {\r\n this.UI.StopMessage(messagePayload, undefined, finalAlertDuration, true);\r\n }\r\n }\r\n\r\n private IsAlertBeingShown(alertContent) {\r\n const toasts = document.querySelectorAll('.dx-toast-content');\r\n const alertMessages = Array.from(toasts, toast => toast['innerText'].trim());\r\n const isShown = alertMessages.includes(alertContent);\r\n return isShown;\r\n }\r\n\r\n ShowItemActionContextMenu(event, contextMenu) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.menus.forEach(x => (x.hide && x.hide()));\r\n this.menus = [];\r\n\r\n contextMenu.show(event);\r\n this.menus.push(contextMenu);\r\n }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CategoryView } from './../views/category.view';\r\nimport { ItemListParams } from './../params/itemlist.param';\r\n@Injectable()\r\nexport class CategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Category\", api);}\r\n\t\r\n\r\n public GetCategories(Params: ItemListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetCategories', Params, undefined );\r\n }\r\n\r\n public GetAllCategories(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAllCategories', options?.GetLoadOptions() );\r\n }\r\n\r\n public GetCategoryByID(categoryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCategoryByID', {categoryID: categoryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Category extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Category';\r\n }\r\n \r\n public SortOrder: number; \r\n public ParentCategoryID: number; \r\n public Name: string; \r\n public ImageName: string; \r\n public IsShowInTopMenu: boolean; \r\n public IsFeatured: boolean; \r\n\t\r\n}\r\n\r\nexport class CategoryItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CategoryItem';\r\n }\r\n \r\n public ItemID: number; \r\n public SortOrder: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Category } from './../entities/category.entity';\r\nexport class CategoryView extends Category {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CategoryView';\r\n }\r\n \r\n public ImageVersion: number; \r\n public IsAllowOrder: boolean; \r\n public ItemCount: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SalesPerson } from './../entities/salesperson.entity';\r\nimport { SetSalesPersonCustomerResult } from './../entities/setsalespersoncustomerresult.entity';\r\nimport { SetSalesPersonCustomerParams } from './../params/setsalespersoncustomer.param';\r\n@Injectable()\r\nexport class SalesPersonEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SalesPerson\", api);}\r\n\t\r\n\r\n public SetSalesPersonCustomer(Params: SetSalesPersonCustomerParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SetSalesPersonCustomer', Params, undefined );\r\n }\r\n\r\n public GetListShallow() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetListShallow', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerOption } from './../entities/customeroption.entity';\r\n@Injectable()\r\nexport class CustomerOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomerOption\", api);}\r\n\t\r\n\r\n public GetCustomerOption() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCustomerOption', undefined );\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { CustomerOptionEndpoint } from \"@dino-proxy/endpoints/customeroption.endpoint\";\r\nimport { CustomerOption } from \"@dino-proxy/entities/customeroption.entity\";\r\nimport { of, ReplaySubject, Subject } from \"rxjs\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CustomerOptionService extends BaseService {\r\n private loaded = false;\r\n private customerOption: CustomerOption;\r\n private changedSubject = new ReplaySubject(1);\r\n readonly changed$ = this.changedSubject.asObservable();\r\n\r\n constructor(\r\n public customerOptionEndpoint: CustomerOptionEndpoint) {\r\n super();\r\n }\r\n\r\n Initialize() {\r\n const readySubject = new ReplaySubject(1);\r\n if (!this.loaded) {\r\n this.customerOptionEndpoint.GetCustomerOption()\r\n .subscribe(option => {\r\n this.customerOption = option.Entity;\r\n this.loaded = true;\r\n this.changedSubject.next(this.customerOption);\r\n readySubject.next(this.customerOption);\r\n });\r\n } else {\r\n this.changedSubject.next(this.customerOption);\r\n readySubject.next(this.customerOption);\r\n }\r\n return readySubject.asObservable();\r\n }\r\n\r\n Clear() {\r\n this.loaded = false;\r\n this.clearCustomerOption();\r\n return of(true);\r\n }\r\n\r\n GetCustomerOption() {\r\n return this.customerOption;\r\n }\r\n\r\n protected clearCustomerOption() {\r\n if (!this.customerOption) {\r\n this.changedSubject.next(null);\r\n return;\r\n }\r\n // reimplement to getters -> cleanup objects inside\r\n Object.getOwnPropertyNames(this.customerOption).forEach(name => { this.customerOption[name] = null; });\r\n // \r\n this.customerOption.CatalogueOption = null;\r\n this.customerOption.BusinessOption = null;\r\n this.customerOption.FilterOption = null;\r\n this.customerOption.OrderOption = null;\r\n this.customerOption.PaymentOption = null;\r\n this.customerOption.ShipmentOption = null;\r\n this.customerOption.HomePageOption = null;\r\n this.customerOption.CustomerDetailOption = null;\r\n this.customerOption.NotificationOption = null;\r\n this.customerOption.FeatureOption = null;\r\n this.customerOption.ContactUsOption = null;\r\n this.customerOption.TermsOfUseOption = null;\r\n this.customerOption = null;\r\n\r\n this.changedSubject.next(null);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject, Observable, ReplaySubject } from \"rxjs\";\r\nimport { ItemsFilter } from \"@dino-classes/items-filter\";\r\nimport { CustomerOptionService } from \"./customer-option.service\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { CustomerService } from \"./customer.service\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { EnumCatalogueViewOptions } from \"@dino-proxy/enums\";\r\nimport { LocalStorageService } from \"@m4u-angular/core/framework/local-storage.service\";\r\n\r\nexport enum ItemsFilterApplyTypes {\r\n Extend,\r\n Overwrite\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemsFilterService extends BaseService {\r\n private itemsFilter: ItemsFilter;\r\n private filterSubject: ReplaySubject = new ReplaySubject(1);\r\n readonly filter$: Observable = this.filterSubject.asObservable();\r\n\r\n constructor(private customerOptionService: CustomerOptionService,\r\n customerService: CustomerService,\r\n private screenService: ScreenService,\r\n private localStorageService: LocalStorageService) {\r\n super();\r\n\r\n customerService.customerChanged$\r\n .subscribe(r => {\r\n if (r.customerID !== r.previousCustomerID) {\r\n const currentCustomer = customerService.GetCurrentCustomer();\r\n if (!currentCustomer) return;\r\n\r\n this.InitDefaultItemsFilter();\r\n\r\n // apply extension info to default filter here\r\n if (currentCustomer.CustomerDataExtension?.DefaultAssortmentID) {\r\n this.itemsFilter.AssortmentID = currentCustomer.CustomerDataExtension.DefaultAssortmentID;\r\n }\r\n\r\n //\r\n console.log('FILTER: customer changed apply', this.itemsFilter);\r\n //\r\n\r\n this.filterSubject.next(this.itemsFilter);\r\n }\r\n });\r\n\r\n customerOptionService.changed$\r\n .subscribe(options => {\r\n if (options) {\r\n\r\n this.InitDefaultItemsFilter();\r\n \r\n //\r\n console.log('FILTER: initial apply', this.itemsFilter);\r\n //\r\n\r\n this.filterSubject.next(this.itemsFilter);\r\n } else {\r\n this.clear();\r\n }\r\n });\r\n // during initialization proccess we can grab the filter from anywhere (storage, web-api, etc.)\r\n }\r\n\r\n private InitDefaultItemsFilter() {\r\n const catalogueOption = this.customerOptionService.GetCustomerOption()?.CatalogueOption;\r\n if (!catalogueOption) {\r\n throw new Error('ItemsFilterService -> CatalogueOption is NULL. Restart app');\r\n }\r\n\r\n this.itemsFilter = new ItemsFilter(0, catalogueOption.DesktopItemListPageSize, false);\r\n this.itemsFilter.GroupBy = catalogueOption.DefaultDisplayGroupingOption;\r\n this.itemsFilter.SortBy = catalogueOption.DefaultDisplaySortingOption;\r\n this.DefineCatalogueViewOption();\r\n }\r\n\r\n private DefineCatalogueViewOption() {\r\n const isMobile = this.screenService.IsMobile();\r\n const catalogueItemDisplayTypeStorageKey = `CatalogueItemDisplayType_${isMobile ? 'mobile' : 'desktop'}`;\r\n\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n const defaultItemOption = customerOption?.DefaultItemOption;\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(catalogueItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.itemsFilter.CatalogueView = itemDisplayType as EnumCatalogueViewOptions;\r\n } else {\r\n this.itemsFilter.CatalogueView = isMobile\r\n ? defaultItemOption.DefaultCatalogueMobileViewOption\r\n : defaultItemOption.DefaultCatalogueDesktopViewOption;\r\n }\r\n }\r\n }\r\n\r\n apply(filter: ItemsFilter, applyType: ItemsFilterApplyTypes) {\r\n if (!filter) return;\r\n\r\n let newFilter = (applyType === ItemsFilterApplyTypes.Extend) ? Object.assign(this.itemsFilter, filter) : filter;\r\n this.applyDisplayOptions(newFilter);\r\n this.itemsFilter = newFilter;\r\n //\r\n console.log('FILTER: apply', this.itemsFilter);\r\n //\r\n this.filterSubject.next({ ...this.itemsFilter });\r\n }\r\n\r\n clear() {\r\n //\r\n console.log('FILTER: clear', this.itemsFilter);\r\n //\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n if (customerOption) {\r\n let newFilter = new ItemsFilter(0, customerOption.CatalogueOption?.DesktopItemListPageSize, true);\r\n this.applyDisplayOptions(newFilter);\r\n this.itemsFilter = newFilter;\r\n this.filterSubject.next({ ...this.itemsFilter });\r\n } else {\r\n this.itemsFilter = new ItemsFilter(0, 10, true);\r\n this.filterSubject.next({ ...this.itemsFilter });\r\n }\r\n }\r\n\r\n utf8_to_b64(str: string) {\r\n return window.btoa(unescape(encodeURIComponent(str)));\r\n }\r\n\r\n b64_to_utf8(str: string) {\r\n return decodeURIComponent(escape(window.atob(str)));\r\n }\r\n\r\n protected applyDisplayOptions(newFilter: ItemsFilter) {\r\n newFilter.Skip = newFilter.Skip || this.itemsFilter.Skip;\r\n newFilter.Take = newFilter.Take || this.itemsFilter.Take;\r\n newFilter.GroupBy = newFilter.GroupBy || this.itemsFilter.GroupBy;\r\n newFilter.SortBy = newFilter.SortBy || this.itemsFilter.SortBy;\r\n newFilter.CatalogueView = newFilter.CatalogueView || this.itemsFilter.CatalogueView;\r\n }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Customer } from './../entities/customer.entity';\r\nimport { CurrentCreditCardResult } from './../entities/currentcreditcardresult.entity';\r\nimport { BalanceView } from './../views/balance.view';\r\nimport { TopQuantityItem } from './../entities/topquantityitem.entity';\r\nimport { TopFrequestItem } from './../entities/topfrequestitem.entity';\r\nimport { CustomerView } from './../views/customer.view';\r\nimport { HomeInfoResult } from './../entities/homeinforesult.entity';\r\nimport { CredentialResult } from './../entities/credentialresult.entity';\r\nimport { CreatePaymentRequestResult } from './../entities/createpaymentrequestresult.entity';\r\nimport { CustomerGroup } from './../entities/customergroup.entity';\r\nimport { CustomerAttribute } from './../entities/customerattribute.entity';\r\nimport { PaymentTerm } from './../entities/paymentterm.entity';\r\nimport { CustomerLiteView } from './../views/customerlite.view';\r\nimport { SalesPerson } from './../entities/salesperson.entity';\r\nimport { CustomerListParams } from './../params/customerlist.param';\r\nimport { SendContactUsParams } from './../params/sendcontactus.param';\r\nimport { CustomerSaveParams } from './../params/customersave.param';\r\n@Injectable()\r\nexport class CustomerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Customer\", api);}\r\n\t\r\n\r\n public ListByParams(Params: CustomerListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetCurrentCreditCard(customerEntityID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrentCreditCard', {customerEntityID: customerEntityID} );\r\n }\r\n\r\n public GetBalance(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBalance', {customerID: customerID} );\r\n }\r\n\r\n public SaveBankDetails(customer: Customer) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveBankDetails', customer, undefined );\r\n }\r\n\r\n public GetTopQuantityItems(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetTopQuantityItems', {customerID: customerID} );\r\n }\r\n\r\n public GetTopFrequestItems(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetTopFrequestItems', {customerID: customerID} );\r\n }\r\n\r\n public GetCurrentCustomerWithDetails() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrentCustomerWithDetails', undefined );\r\n }\r\n\r\n public GetCurrentCustomer() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrentCustomer', undefined );\r\n }\r\n\r\n public GetHomeInfo() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetHomeInfo', undefined );\r\n }\r\n\r\n public SendContactUsRequest(Params: SendContactUsParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SendContactUsRequest', Params, undefined );\r\n }\r\n\r\n public GetUpdatedTermsOfUse() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetUpdatedTermsOfUse', undefined );\r\n }\r\n\r\n public GetTermsOfUseContent() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetTermsOfUseContent', undefined );\r\n }\r\n\r\n public GetCredentials() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCredentials', undefined );\r\n }\r\n\r\n public ChangeCreditCardRequest(customerEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ChangeCreditCardRequest', {customerEntryID: customerEntryID} );\r\n }\r\n\r\n public ConfirmChangeCreditCardRequest(privateRequestID: string) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ConfirmChangeCreditCardRequest', {privateRequestID: privateRequestID} );\r\n }\r\n\r\n public GetCustomerGroups() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCustomerGroups', undefined );\r\n }\r\n\r\n public GetCustomerAttributes() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCustomerAttributes', undefined );\r\n }\r\n\r\n public GetPaymentTerms() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPaymentTerms', undefined );\r\n }\r\n\r\n public override Save(Entity: Customer) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public SaveFull(Params: CustomerSaveParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveFull', Params, undefined );\r\n }\r\n\r\n public GetCustomersLite(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCustomersLite', options?.GetLoadOptions() );\r\n }\r\n\r\n public GetAvailableForSalesPerson(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAvailableForSalesPerson', options?.GetLoadOptions() );\r\n }\r\n\r\n public GetSalesPersonsCredentials() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSalesPersonsCredentials', undefined );\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ICustomerInjectedComponent } from \"@dino-classes/customer-injected.component\";\r\nimport { SalesPersonEndpoint } from \"@dino-proxy/endpoints/salesperson.endpoint\";\r\nimport { UserInfo } from \"@dino-proxy/entities/userinfo.entity\";\r\nimport { SetSalesPersonCustomerParams } from \"@dino-proxy/params/setsalespersoncustomer.param\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { SessionService } from \"@m4u-angular/core/framework/session.service\";\r\nimport { Subject, mergeMap, BehaviorSubject, ReplaySubject, of } from 'rxjs';\r\nimport { CustomerOptionService } from \"./customer-option.service\";\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumDocumentTypes, EnumValidationStatus } from \"@dino-proxy/enums\";\r\nimport { UiComponentService } from \"./ui-component.service\";\r\nimport { Customer } from \"@dino-proxy/entities/customer.entity\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { SetSalesPersonCustomerResult } from \"@dino-proxy/entities/setsalespersoncustomerresult.entity\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\n\r\nexport class CustomerEvent {\r\n customerID: number = null;\r\n previousCustomerID: number = null;\r\n customerActualCurrency: string = null;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CustomerService extends BaseService {\r\n private customerID: number;\r\n private currentCustomer: Customer = null;\r\n private customerChangedSubject = new ReplaySubject(null);\r\n\r\n readonly customerChanged$ = this.customerChangedSubject.asObservable();\r\n\r\n constructor(public customerOptionService: CustomerOptionService,\r\n public sessionService: SessionService,\r\n public salesPersonEndpoint: SalesPersonEndpoint,\r\n public uiComponentService: UiComponentService,\r\n public customerEndpoint: CustomerEndpoint) {\r\n super();\r\n }\r\n\r\n public SetCustomer(customerID: number) {\r\n const result$ = new Subject();\r\n\r\n const _customerID = (!customerID || customerID <= 0) ? null : customerID;\r\n if (_customerID === this.customerID) {\r\n return of(this.customerID);\r\n };\r\n\r\n const previousCustomerID = this.customerID;\r\n\r\n const resolve = (customer?: Customer) => {\r\n this.customerChangedSubject.next({\r\n customerID: this.customerID,\r\n previousCustomerID: previousCustomerID,\r\n customerActualCurrency: customer?.CurrencyActual\r\n } as CustomerEvent);\r\n\r\n result$.next(this.customerID);\r\n result$.complete();\r\n };\r\n\r\n const fetchCustomerAndResolve = () => {\r\n this.customerEndpoint.GetCurrentCustomer()\r\n .subscribe({\r\n next: response => {\r\n this.currentCustomer = response.Entity;\r\n resolve(Utils.CloneObject(this.currentCustomer));\r\n },\r\n error: () => { }\r\n });\r\n };\r\n\r\n const processCustomerActions = (result?: SetSalesPersonCustomerResult) => {\r\n // ??\r\n this.uiComponentService.ProcessAlerts(result?.CustomerAlerts?.ValidationMessage);\r\n \r\n fetchCustomerAndResolve();\r\n };\r\n\r\n if (this.IsCurrentUserSalesPerson()) {\r\n this.salesPersonEndpoint.SetSalesPersonCustomer({ CustomerID: _customerID } as SetSalesPersonCustomerParams)\r\n .subscribe((response) => {\r\n if (response.IsSuccess) {\r\n this.customerID = _customerID;\r\n if (!this.customerID) {\r\n this.currentCustomer = null;\r\n resolve();\r\n } else {\r\n processCustomerActions(response.Entity);\r\n }\r\n\r\n // if (processCustomerOption) {\r\n // if (!this.customerID) {\r\n // this.customerOptionService.Clear()\r\n // .pipe(mergeMap(() => this.customerOptionService.Initialize()))\r\n // .subscribe(() => resolve());\r\n // } else {\r\n // this.customerOptionService.Initialize()\r\n // .subscribe(() => processCustomerActions(response.Entity));\r\n // }\r\n // } else {\r\n // processCustomerActions(response.Entity);\r\n // }\r\n }\r\n });\r\n } else {\r\n this.customerID = _customerID;\r\n setTimeout(() => processCustomerActions(), 0);\r\n }\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n // todo -> separate SalesPerson service \r\n public IsCurrentUserSalesPerson() {\r\n if (!this.sessionService.IsLoggedIn) return false;\r\n const userInfo = this.sessionService.UserInfoDict['Dino'] as UserInfo;\r\n return userInfo.IsSalesPerson;\r\n }\r\n\r\n public GetSalesPersonOption() {\r\n if (!this.sessionService.IsLoggedIn) return null;\r\n const userInfo = this.sessionService.UserInfoDict['Dino'] as UserInfo;\r\n return userInfo.SalesPersonOption;\r\n }\r\n //\r\n\r\n public static InjectHandler(component: BaseComponent & ICustomerInjectedComponent, customerService: CustomerService) {\r\n component.RegisterInitComponentHandler(() => {\r\n const customerChanged$Subscription = customerService.customerChanged$\r\n .subscribe(res => {\r\n let currentCustomerID = component.CustomerID;\r\n if (res.customerID !== currentCustomerID) {\r\n component.CustomerID = res.customerID;\r\n\r\n // support legacy CustomerOption \r\n const state = (component.State as any) as BaseOptionState;\r\n state && (state.CustomerOption = customerService.customerOptionService.GetCustomerOption());\r\n //\r\n //console.log(component.CustomerID);\r\n //\r\n component.OnCustomerChanged(currentCustomerID, component.CustomerID);\r\n }\r\n });\r\n\r\n component.RegisterSubscription(customerChanged$Subscription);\r\n\r\n if (customerService.sessionService.IsLoggedIn) {\r\n component.IsSalesPerson = customerService.IsCurrentUserSalesPerson();\r\n component.SalesPersonOption = customerService.GetSalesPersonOption();\r\n } else {\r\n component.IsSalesPerson = false;\r\n component.CustomerID = null;\r\n }\r\n });\r\n }\r\n\r\n public GetCurrentSalesPersonId() {\r\n if (!this.IsCurrentUserSalesPerson()) return -999;\r\n const userInfo = this.sessionService.UserInfoDict['Dino'] as UserInfo;\r\n return userInfo.SalesPersonID;\r\n }\r\n\r\n public GetCustomerID() {\r\n return this.customerID;\r\n }\r\n\r\n public get HasCustomer() {\r\n return this.customerID > 0;\r\n }\r\n\r\n public IsCurrentUserAdmin() {\r\n if (!this.sessionService.IsLoggedIn) return false;\r\n const userInfo = this.sessionService.UserInfoDict['Dino'] as UserInfo;\r\n return userInfo.IsAdmin;\r\n }\r\n\r\n public GetIsAllowedBaseDocument(targetDocumentType: EnumDocumentTypes): boolean {\r\n let customerOptions = this.customerOptionService.GetCustomerOption();\r\n let result = false;\r\n switch (targetDocumentType) {\r\n case EnumDocumentTypes.Quote:\r\n result = customerOptions.QuoteOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.Order:\r\n result = customerOptions.OrderOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.Invoice:\r\n result = customerOptions.InvoiceOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.DeliveryNote:\r\n result = customerOptions.DeliveryNoteOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.Refund:\r\n result = customerOptions.RefundOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.Return:\r\n result = customerOptions.ReturnOption?.IsAllowBaseDocument;\r\n break;\r\n case EnumDocumentTypes.ReturnRequest:\r\n result = customerOptions.ReturnRequestOption?.IsAllowBaseDocument;\r\n break;\r\n default:\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public GetCurrentCustomer() {\r\n return this.currentCustomer;\r\n }\r\n}","import { EnumCatalogueViewOptions, EnumDisplayGroupingOptions, EnumDisplaySortingOptions } from \"../_proxy/enums\";\r\nimport { ItemListParams } from \"../_proxy/params/itemlist.param\";\r\n\r\n// then grab it from user configurations/options\r\n// test/debug value\r\n//export const DEFAULT_PAGE_SIZE = 30;\r\n//export const DEFAULT_PAGE_SIZE_MOBILE = 15;\r\n\r\nexport class ItemsFilter {\r\n CategoryID?: number;\r\n VendorIDs?: number[];\r\n BrandIDs?: number[];\r\n ManufacturerIDs?: number[];\r\n Attributes?: {};\r\n SearchText?: string;\r\n AssortmentID?: number;\r\n // display options\r\n GroupBy?: EnumDisplayGroupingOptions;\r\n SortBy?: EnumDisplaySortingOptions;\r\n Skip?: number;\r\n Take?: number;\r\n CatalogueView?: EnumCatalogueViewOptions;\r\n Empty?: boolean;\r\n\r\n constructor(skip: number, take: number, empty: boolean) {\r\n this.Skip = skip;\r\n this.Take = take;\r\n this.Empty = empty;\r\n }\r\n\r\n static GetRawFilter(itemsFilter: ItemsFilter) {\r\n return Object.assign({}, itemsFilter, {\r\n Skip: undefined,\r\n Take: undefined,\r\n GroupBy: undefined,\r\n CatalogueView: undefined\r\n } as ItemsFilter);\r\n }\r\n\r\n static GetItemListParams(itemsFilter: ItemsFilter, defaultPageSize: number) {\r\n return {\r\n CategoryID: itemsFilter.CategoryID,\r\n VendorIDs: itemsFilter.VendorIDs,\r\n BrandIDs: itemsFilter.BrandIDs,\r\n ManufacturerIDs: itemsFilter.ManufacturerIDs,\r\n AssortmentID: itemsFilter.AssortmentID,\r\n Attributes: itemsFilter.Attributes,\r\n SearchText: itemsFilter.SearchText,\r\n GroupBy: itemsFilter.GroupBy || EnumDisplayGroupingOptions.None,\r\n SortBy: itemsFilter.SortBy || EnumDisplaySortingOptions.ItemName,\r\n Skip: (itemsFilter.Skip === undefined || itemsFilter.Skip === null) ? 0 : itemsFilter.Skip,\r\n Take: (itemsFilter.Take === undefined || itemsFilter.Take === null) ? defaultPageSize : itemsFilter.Take,\r\n } as ItemListParams;\r\n }\r\n\r\n static GetUniqueFilterObject(itemsFilter: ItemsFilter) {\r\n const uniqueFilter = {\r\n CategoryID: itemsFilter.CategoryID,\r\n VendorIDs: itemsFilter.VendorIDs,\r\n BrandIDs: itemsFilter.BrandIDs,\r\n ManufacturerIDs: itemsFilter.ManufacturerIDs,\r\n Attributes: itemsFilter.Attributes,\r\n SearchText: itemsFilter.SearchText,\r\n AssortmentID: itemsFilter.AssortmentID,\r\n };\r\n\r\n Object.keys(uniqueFilter).forEach(key => {\r\n const value = uniqueFilter[key];\r\n if (value === null || value === undefined) delete uniqueFilter[key];\r\n });\r\n\r\n return uniqueFilter;\r\n }\r\n\r\n static GetUniqueFilterString(itemsFilter: ItemsFilter) {\r\n if (!itemsFilter || itemsFilter.Empty) return '';\r\n\r\n return JSON.stringify(ItemsFilter.GetUniqueFilterObject(itemsFilter));\r\n }\r\n\r\n static GetUniqueNoCategoryFilterString(itemsFilter: ItemsFilter) {\r\n if (!itemsFilter || itemsFilter.Empty) return '';\r\n\r\n const uniqueFilter = ItemsFilter.GetUniqueFilterObject(itemsFilter);\r\n delete uniqueFilter['CategoryID'];\r\n\r\n return JSON.stringify(uniqueFilter);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { ItemOption } from '@dino-proxy/entities/itemoption.entity';\r\nimport { of, ReplaySubject } from 'rxjs';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\n\r\nexport enum DisplayType {\r\n Grid, // 'Cards' catalogue item view\r\n KitItemsList, // 'List' item view (outside of the catalogue)\r\n KitItemsCompact, // 'Minimal' item view (outside of the catalogue)\r\n KitItemsLine, // 'Line' item view (outside of the catalogue)\r\n SingleVariationList, // 'List' item view (single variation)\r\n SingleVariationCompact,// 'Minimal' item view (single variation)\r\n SingleVariationLine, // 'Line' item view (single variation)\r\n ShoppingCartList, // 'List' item view (in the shopping cart)\r\n FinalizedOrderList, // 'List' item view (in documents)\r\n FinalizedOrderCompact, // 'Minimal' item view (in documents)\r\n FinalizedOrderLine, // 'Line' item view (in documents)\r\n Popup,\r\n RelatedItemList, // 'List' item view (related items)\r\n RelatedItemCompact, // 'Minimal' item view (related items)\r\n RelatedItemLine, // 'Line' item view (related items)\r\n WishlistList, // 'List' item view (in the wishlist)\r\n WishlistCompact, // 'Minimal' item view (in the wishlist)\r\n WishlistLine, // 'Line' item view (in the wishlist)\r\n ReturnRequest,\r\n Compact,\r\n CatalogueList, // 'List' item view (in the catalogue)\r\n CatalogueCompact, // 'Minimal' item view (in the catalogue)\r\n ShoppingCartCompact, // 'Minimal' item view (in the shopping cart)\r\n ShoppingCartLine, // 'Line' item view (in the shopping cart)\r\n CheckoutList, // 'List' item view (in the checkout)\r\n CheckoutCompact, // 'Minimal' item view (in the checkout)\r\n CheckoutLine // 'Line' item view (in the checkout)\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemOptionService extends BaseService {\r\n\r\n private loaded = false;\r\n private itemOptions: ItemOption[] = [];\r\n private readySubject = new ReplaySubject(1);\r\n\r\n constructor(private screenService: ScreenService,\r\n private itemOptionEndpoint: ItemOptionEndpoint) {\r\n super();\r\n }\r\n\r\n Initialize() {\r\n if (!this.loaded) {\r\n this.itemOptionEndpoint.GetList()\r\n .subscribe(result => {\r\n this.itemOptions = result.Entities;\r\n this.loaded = true;\r\n this.readySubject.next();\r\n });\r\n }\r\n return this.readySubject.asObservable();\r\n }\r\n\r\n Clear() {\r\n this.loaded = false;\r\n this.itemOptions && (this.itemOptions.length = 0);\r\n return of(true);\r\n }\r\n\r\n GetItemOption(itemOptionID: number, displayType: DisplayType) {\r\n const isDesktop = !this.screenService.IsMobile();\r\n\r\n const itemOption = this.itemOptions.find(x => x.EntryID === itemOptionID);\r\n if (!itemOption) return {} as any;\r\n\r\n switch (displayType) {\r\n case DisplayType.Grid:\r\n return isDesktop ? itemOption.GridViewDesktopOption : itemOption.GridViewMobileOption;\r\n case DisplayType.CatalogueList: \r\n return isDesktop ? itemOption.CatalogueListItemDesktopOption : itemOption.CatalogueListItemMobileOption;\r\n case DisplayType.CatalogueCompact:\r\n return isDesktop ? itemOption.CatalogueCompactItemDesktopOption : itemOption.CatalogueCompactItemMobileOption;\r\n case DisplayType.KitItemsList: \r\n return isDesktop ? itemOption.KitItemsItemListDesktopOption : itemOption.KitItemsItemListMobileOption;\r\n case DisplayType.KitItemsCompact: \r\n return isDesktop ? itemOption.KitItemsItemCompactDesktopOption : itemOption.KitItemsItemCompactMobileOption;\r\n case DisplayType.KitItemsLine: \r\n return isDesktop ? itemOption.KitItemsItemLineDesktopOption : itemOption.KitItemsItemLineMobileOption;\r\n case DisplayType.SingleVariationList:\r\n return isDesktop ? itemOption.SingleVariationListDesktopOption : itemOption.SingleVariationListMobileOption;\r\n case DisplayType.SingleVariationCompact:\r\n return isDesktop ? itemOption.SingleVariationCompactDesktopOption : itemOption.SingleVariationCompactMobileOption;\r\n case DisplayType.SingleVariationLine:\r\n return isDesktop ? itemOption.SingleVariationLineDesktopOption : itemOption.SingleVariationLineMobileOption;\r\n case DisplayType.ShoppingCartList:\r\n return isDesktop ? itemOption.ShoppingCartListDesktopOption : itemOption.ShoppingCartListMobileOption;\r\n case DisplayType.ShoppingCartCompact: \r\n return isDesktop ? itemOption.ShoppingCartCompactDesktopOption : itemOption.ShoppingCartCompactMobileOption;\r\n case DisplayType.ShoppingCartLine: \r\n return isDesktop ? itemOption.ShoppingCartLineDesktopOption : itemOption.ShoppingCartLineMobileOption;\r\n case DisplayType.FinalizedOrderList: \r\n return isDesktop ? itemOption.FinalizedDocumentListDesktopOption : itemOption.FinalizedDocumentListMobileOption;\r\n case DisplayType.FinalizedOrderCompact: \r\n return isDesktop ? itemOption.FinalizedDocumentCompactDesktopOption : itemOption.FinalizedDocumentCompactMobileOption;\r\n case DisplayType.FinalizedOrderLine: \r\n return isDesktop ? itemOption.FinalizedDocumentLineDesktopOption : itemOption.FinalizedDocumentLineMobileOption;\r\n case DisplayType.Popup:\r\n return isDesktop ? itemOption.PopupDesktopOption : itemOption.PopupMobileOption;\r\n case DisplayType.RelatedItemList:\r\n return isDesktop ? itemOption.RelatedItemListDesktopOption : itemOption.RelatedItemListMobileOption;\r\n case DisplayType.RelatedItemCompact:\r\n return isDesktop ? itemOption.RelatedItemCompactDesktopOption : itemOption.RelatedItemCompactMobileOption;\r\n case DisplayType.RelatedItemLine:\r\n return isDesktop ? itemOption.RelatedItemLineDesktopOption : itemOption.RelatedItemLineMobileOption;\r\n case DisplayType.WishlistList:\r\n return isDesktop ? itemOption.WishlistListDesktopOption : itemOption.WishlistListMobileOption;\r\n case DisplayType.WishlistCompact:\r\n return isDesktop ? itemOption.WishlistCompactDesktopOption : itemOption.WishlistCompactMobileOption;\r\n case DisplayType.WishlistLine:\r\n return isDesktop ? itemOption.WishlistLineDesktopOption : itemOption.WishlistLineMobileOption;\r\n case DisplayType.CheckoutList:\r\n return isDesktop ? itemOption.CheckoutListDesktopOption : itemOption.CheckoutListMobileOption;\r\n case DisplayType.CheckoutCompact:\r\n return isDesktop ? itemOption.CheckoutCompactDesktopOption : itemOption.CheckoutCompactMobileOption;\r\n case DisplayType.CheckoutLine:\r\n return isDesktop ? itemOption.CheckoutLineDesktopOption : itemOption.CheckoutLineMobileOption;\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ResourcesService } from \"@m4u-angular/core/framework/resources.service\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { CategoryEndpoint } from \"@dino-proxy/endpoints/category.endpoint\";\r\nimport { CategoryView } from \"@dino-proxy/views/category.view\";\r\nimport { of, ReplaySubject, Subject } from \"rxjs\";\r\nimport { mergeMap, shareReplay } from \"rxjs/operators\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { CustomerService } from \"./customer.service\";\r\nimport { ItemsFilter } from \"@dino-classes/items-filter\";\r\nimport { ItemListParams } from \"@dino-proxy/params/itemlist.param\";\r\nimport { ItemsFilterService } from \"./items-filter.service\";\r\nimport { DxiVizScaleBreak } from \"devextreme-angular/ui/nested/base/viz-scale-break-dxi\";\r\n\r\nexport class CategoryTreeNode extends CategoryView {\r\n items: CategoryTreeNode[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CategoriesService extends BaseService {\r\n private categoriesList: CategoryView[] = null;\r\n private categoriesTree: CategoryTreeNode[] = null;\r\n private featuredCategories: CategoryView[] = null;\r\n private categoriesListUnfiltered: CategoryView[] = null;\r\n\r\n private categoriesListSubject = new ReplaySubject(1); \r\n private categoriesTreeSubject = new ReplaySubject(1);\r\n private featuredCategoriesSubject = new ReplaySubject(1);\r\n private categoriesListUnfilteredSubject = new ReplaySubject(1);\r\n private readySubject = new ReplaySubject(1);\r\n private readonly $categoriesList = this.categoriesListSubject.asObservable();\r\n private readonly $categoriesTree = this.categoriesTreeSubject.asObservable();\r\n private readonly $featuredCategories = this.featuredCategoriesSubject.asObservable();\r\n private readonly $categoriesListUnfiltered = this.categoriesListUnfilteredSubject.asObservable();\r\n private readonly $readySubject = this.readySubject.asObservable();\r\n private loading = false;\r\n private serializedFilter = '';\r\n\r\n constructor(public categoryEndpoint: CategoryEndpoint,\r\n public resourcesService: ResourcesService,\r\n public itemsFilterService: ItemsFilterService,\r\n public customerService: CustomerService) {\r\n super();\r\n\r\n customerService.customerChanged$\r\n .subscribe((event) => {\r\n if (!!event.customerID) {\r\n this.loadCategories();\r\n }\r\n });\r\n\r\n this.itemsFilterService.filter$\r\n .subscribe(r => {\r\n this.processItemsFilter(r);\r\n });\r\n }\r\n\r\n getCategoriesTree() {\r\n if (this.categoriesTree !== null || this.loading) return this.$categoriesTree;\r\n this.loadCategories();\r\n return this.$categoriesTree;\r\n }\r\n\r\n getCategoriesList() {\r\n if (this.categoriesList !== null || this.loading) return this.$categoriesList;\r\n this.loadCategories();\r\n return this.$categoriesList;\r\n }\r\n\r\n getFeaturedCategories() {\r\n if (this.featuredCategories !== null || this.loading) return this.$featuredCategories;\r\n this.loadCategories();\r\n return this.$featuredCategories;\r\n }\r\n\r\n getCategoriesListUnfiltered() {\r\n if (this.categoriesListUnfiltered !== null || this.loading) return this.$categoriesListUnfiltered;\r\n this.loadCategories();\r\n return this.$categoriesListUnfiltered;\r\n }\r\n\r\n findNodeByCategoryID(categoryID: number) {\r\n // if (!categoryID) return this.$categoriesTree;\r\n if (!categoryID) return of(this.getRootCategoryNode());\r\n\r\n return this.getCategoriesTree()\r\n .pipe(mergeMap(categories => {\r\n const node = this.findNodeByCategoryIDFrom(categoryID, categories);\r\n return of(node);\r\n }));\r\n }\r\n\r\n findRawNodeByCategoryID(categoryID: number) {\r\n return this.getCategoriesList()\r\n .pipe(mergeMap(categories => {\r\n const c = categories.find(x => x.EntryID === categoryID);\r\n return of(c);\r\n }));\r\n }\r\n\r\n hasChildCategories(categoryID: number) {\r\n if (!categoryID || categoryID === -1) return of(true);\r\n\r\n return this.getCategoriesTree()\r\n .pipe(mergeMap(categories => {\r\n const node = this.findNodeByCategoryIDFrom(categoryID, categories);\r\n return of(node?.items?.length > 0);\r\n }));\r\n }\r\n\r\n getRootCategoryNode() {\r\n return {\r\n EntryID: -1,\r\n Name: this.resourcesService.RC('titleAllCategories', this.ModuleName),\r\n SortOrder: 0,\r\n ParentCategoryID: undefined,\r\n ImageName: undefined,\r\n IsShowInTopMenu: false,\r\n ImageVersion: undefined,\r\n items: []\r\n } as CategoryTreeNode;\r\n }\r\n\r\n ready() {\r\n if (this.categoriesList !== null || this.loading) return this.$readySubject;\r\n this.loadCategories();\r\n return this.$readySubject;\r\n }\r\n\r\n clear() {\r\n this.categoriesList = this.categoriesTree = this.featuredCategories = null;\r\n }\r\n\r\n protected findNodeByCategoryIDFrom(categoryID: number, categories: CategoryTreeNode[]): CategoryTreeNode {\r\n for (const category of categories) {\r\n if (category.EntryID === categoryID) {\r\n return category;\r\n }\r\n\r\n if (category.items && category.items.length) {\r\n const node = this.findNodeByCategoryIDFrom(categoryID, category.items);\r\n if (node) return node;\r\n }\r\n }\r\n\r\n return (null as CategoryTreeNode);\r\n }\r\n\r\n public loadCategories(itemsFilter?: ItemsFilter) {\r\n this.loading = true;\r\n //\r\n //console.log('loadCategories', itemsFilter);\r\n //\r\n const params = itemsFilter ? ItemsFilter.GetItemListParams(itemsFilter, 0) : { IgnoreFilter: true } as ItemListParams;\r\n\r\n this.categoryEndpoint.GetCategories(params)\r\n .pipe(shareReplay({ bufferSize: 1, refCount: true }))\r\n .subscribe(x => {\r\n const hasSortOrder = x.Entities.filter(x => x.SortOrder !== null && x.SortOrder !== undefined);\r\n const nullSortOrder = x.Entities.filter(x => x.SortOrder === null || x.SortOrder === undefined);\r\n\r\n hasSortOrder.sort((a, b) => {\r\n if (a.SortOrder === b.SortOrder) {\r\n return a.Name.localeCompare(b.Name);\r\n }\r\n return a.SortOrder - b.SortOrder;\r\n });\r\n nullSortOrder.sort((a, b) => a.Name.localeCompare(b.Name));\r\n\r\n this.categoriesList = [...hasSortOrder, ...nullSortOrder];\r\n\r\n if (!itemsFilter) {\r\n this.categoriesListUnfiltered = [...hasSortOrder, ...nullSortOrder];\r\n }\r\n\r\n const allCategoryNode = this.getRootCategoryNode();\r\n const items = this.buildTreeBranch(this.categoriesList, undefined);;\r\n this.categoriesTree = [...[allCategoryNode], ...items];\r\n this.featuredCategories = this.categoriesList.filter(c => c.IsFeatured);\r\n // Cut to 30 items. UI/UX limitation.\r\n if (this.featuredCategories.length > 30) {\r\n this.featuredCategories.length = 30;\r\n }\r\n\r\n this.readySubject.next(true);\r\n this.categoriesListSubject.next(this.categoriesList);\r\n this.categoriesTreeSubject.next(this.categoriesTree);\r\n this.featuredCategoriesSubject.next(this.featuredCategories);\r\n this.categoriesListUnfilteredSubject.next(this.categoriesListUnfiltered);\r\n\r\n this.loading = false;\r\n });\r\n }\r\n\r\n protected buildTreeBranch(categories: CategoryView[], parentID: number | undefined): CategoryTreeNode[] {\r\n const nodes = categories\r\n .filter(n => n.ParentCategoryID === parentID)\r\n .map(n => Utils.CloneObject(n));\r\n\r\n nodes.forEach(n => {\r\n n.items = this.buildTreeBranch(categories, n.EntryID);\r\n });\r\n\r\n return nodes;\r\n }\r\n\r\n protected processItemsFilter(filter: ItemsFilter) {\r\n const newSerializedFilter = ItemsFilter.GetUniqueNoCategoryFilterString(filter);\r\n if (!this.serializedFilter) {\r\n this.serializedFilter = newSerializedFilter;\r\n return;\r\n }\r\n\r\n if (newSerializedFilter !== this.serializedFilter) {\r\n if (filter.Empty) {\r\n this.serializedFilter = newSerializedFilter;\r\n this.clear();\r\n } else {\r\n this.serializedFilter = newSerializedFilter;\r\n this.loadCategories(filter);\r\n }\r\n }\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemOption } from './../entities/itemoption.entity';\r\n@Injectable()\r\nexport class ItemOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemOption\", api);}\r\n\t\r\n}\r\n\r\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { ShareDocumentConfig } from '@dino-proxy/entities/sharedocumentconfig.entity';\r\nimport { EnumDocumentTypes, EnumInvoiceOneDocumentTypes, EnumInvoiceOneNotificationTypes } from '@dino-proxy/enums';\r\nimport { ShareDocumentParams } from '@dino-proxy/params/sharedocument.param';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataResponse, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PrintBoxDialogComponent } from '@m4u-angular/ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular/ui/validation-group';\r\nimport { filter } from 'rxjs';\r\n\r\nclass State extends BaseOptionState {\r\n ShareDocumentConfig: ShareDocumentConfig;\r\n AvailableShareTypes: GenericListEntity[] = [];\r\n SelectedShareType: number;\r\n InvoiceOneTemplateID: number;\r\n PrintingDocCode: string;\r\n Email: string;\r\n Phone: string;\r\n IsInProccessing = false;\r\n}\r\n\r\nexport class ShareButtonData {\r\n SelectedShareType: EnumShareDocumentTypes;\r\n CanComplete: boolean;\r\n}\r\n\r\nexport enum EnumShareDocumentTypes {\r\n Print = 1,\r\n Email,\r\n SMS,\r\n Whatsapp,\r\n ShareToApplication\r\n}\r\n\r\n@Component({\r\n selector: 'app-share-document',\r\n templateUrl: './share-document.component.html',\r\n styleUrls: ['./share-document.component.scss']\r\n})\r\nexport class ShareDocumentComponent extends BaseComponent {\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild(PrintBoxDialogComponent) printDialog: PrintBoxDialogComponent;\r\n @Input() DocumentID: number;\r\n @Input() DocumentType: EnumDocumentTypes;\r\n @Input() IsReceipt: boolean = false;\r\n @Input() IsShareButtonVisible: boolean = true;\r\n @Output() shareFormChange = new EventEmitter();\r\n @Output() ShareCompleted = new EventEmitter();\r\n EnumShareDocumentTypes = EnumShareDocumentTypes;\r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint,\r\n private receiptEndpoint: ReceiptEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ShareDocumentComponent', State);\r\n }\r\n\r\n get IsEnabled() {\r\n return this.DocumentID && this.DocumentType && (this.CanPrinting || this.CanSharing);\r\n }\r\n\r\n get CanPrinting() {\r\n return this.State?.ShareDocumentConfig?.IsAllowPrinting && !!this.State?.ShareDocumentConfig?.PrintingTemplates?.length;\r\n }\r\n\r\n get CanSharing() {\r\n return (this.State?.ShareDocumentConfig?.IsAllowSharingByEmail\r\n || this.State?.ShareDocumentConfig?.IsAllowSharingBySMS\r\n || this.State?.ShareDocumentConfig?.IsAllowSharingByWhatsapp)\r\n && !!this.State?.ShareDocumentConfig?.InvoiceOneTemplates?.length;\r\n }\r\n\r\n get CanComplete() {\r\n return ((this.State.SelectedShareType === EnumShareDocumentTypes.Print || this.State.SelectedShareType === EnumShareDocumentTypes.ShareToApplication) && !!this.State.PrintingDocCode)\r\n || ((this.IsEmailSelected\r\n || this.IsSMSSelected\r\n || this.IsWhatsappSelected)\r\n && (!this.State?.ShareDocumentConfig?.IsAllowTemplateSelection\r\n || (!!this.State.InvoiceOneTemplateID\r\n && !!this.State.PrintingDocCode)));\r\n }\r\n\r\n get IsPrintingSelected() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.Print;\r\n }\r\n\r\n get IsShareToApplicationSelected() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.ShareToApplication;\r\n }\r\n\r\n get IsEmailSelected() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.Email\r\n && Utils.IsEmail(this.State.Email);\r\n }\r\n\r\n get IsSMSSelected() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.SMS\r\n && !!this.State.Phone;\r\n }\r\n\r\n get IsWhatsappSelected() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.Whatsapp\r\n && !!this.State.Phone;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.DocumentID || !this.DocumentType) return;\r\n\r\n this.InitEvents();\r\n\r\n const shareDocumentTypes = this.LIST('ShareDocumentTypes');\r\n const updateAvailableList = (flag: boolean, add: EnumShareDocumentTypes) => {\r\n if (flag) {\r\n this.State.AvailableShareTypes = [\r\n ...this.State.AvailableShareTypes,\r\n ...shareDocumentTypes.filter(c => +c.Value === add)];\r\n }\r\n };\r\n\r\n const action = this.IsReceipt\r\n ? this.receiptEndpoint.GetShareDocumentConfig(this.DocumentID)\r\n : this.documentEndpoint.GetShareDocumentConfig(this.DocumentID, this.DocumentType);\r\n\r\n this.Do(action, false, config => {\r\n this.State.ShareDocumentConfig = config.Entity;\r\n\r\n if (!this.IsEnabled) return;\r\n\r\n if ((this.A.Screen.IsMobile() || this.A.Screen.IsTablet()) && this.CanPrinting && navigator.share && (navigator as any).canShare) {\r\n updateAvailableList(true, EnumShareDocumentTypes.ShareToApplication);\r\n }\r\n\r\n updateAvailableList(this.CanPrinting, EnumShareDocumentTypes.Print);\r\n\r\n if (this.State.ShareDocumentConfig.DefaultPrintingDocCode) {\r\n const template = this.State.ShareDocumentConfig\r\n .PrintingTemplates?.find(x => x.TemplateCode === this.State.ShareDocumentConfig.DefaultPrintingDocCode);\r\n if (template) {\r\n template.TemplateName = template.TemplateName + this.RC('lblDefaultPrintingTemplateSuffix');\r\n }\r\n }\r\n\r\n if (this.CanSharing) {\r\n updateAvailableList(this.State.ShareDocumentConfig.IsAllowSharingByEmail, EnumShareDocumentTypes.Email);\r\n updateAvailableList(this.State.ShareDocumentConfig.IsAllowSharingBySMS, EnumShareDocumentTypes.SMS);\r\n updateAvailableList(this.State.ShareDocumentConfig.IsAllowSharingByWhatsapp, EnumShareDocumentTypes.Whatsapp);\r\n }\r\n\r\n this.State.SelectedShareType = +this.State.AvailableShareTypes[0].Value;\r\n this.State.Email = this.State.ShareDocumentConfig.DefaultEmail;\r\n this.State.Phone = this.State.ShareDocumentConfig.DefaultCellular;\r\n this.State.InvoiceOneTemplateID = this.State.ShareDocumentConfig.DefaultInvoiceOneTemplateID;\r\n this.State.PrintingDocCode = this.State.ShareDocumentConfig.DefaultPrintingDocCode;\r\n\r\n this.SendShareButtonEvents();\r\n });\r\n }\r\n\r\n private InitEvents() {\r\n const shareEventFired$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.SHARE_DOCUMENT)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.OnShare();\r\n });\r\n\r\n this.RegisterSubscription(shareEventFired$Subscription);\r\n }\r\n\r\n SendShareButtonEvents() {\r\n this.shareFormChange.emit({\r\n SelectedShareType: this.State.SelectedShareType,\r\n CanComplete: this.CanComplete\r\n } as ShareButtonData);\r\n }\r\n\r\n get IsShowEmailField() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.Email;\r\n }\r\n\r\n get IsShowPhoneField() {\r\n return this.State.SelectedShareType === EnumShareDocumentTypes.SMS\r\n || this.State.SelectedShareType === EnumShareDocumentTypes.Whatsapp;\r\n }\r\n\r\n OnShareTypeChanged(e) {\r\n if (!e || !e.event) return;\r\n this.SendShareButtonEvents();\r\n }\r\n\r\n OnShare() {\r\n if (!this.CanComplete) return;\r\n\r\n const shareType = this.State.SelectedShareType;\r\n if (shareType === EnumShareDocumentTypes.Print || shareType === EnumShareDocumentTypes.ShareToApplication) {\r\n\r\n const documentTypeName = this.IsReceipt\r\n ? `${this.LIST('EnumInvoiceOneDocumentTypes').find(x => x.Value === EnumInvoiceOneDocumentTypes.Receipt).Text}`\r\n : `${this.LIST('EnumDocumentTypes').find(x => x.Value === this.DocumentType).Text}`;\r\n const docName = `${documentTypeName} ${this.State.ShareDocumentConfig?.DocumentNumber}`;\r\n\r\n if (shareType === EnumShareDocumentTypes.Print) {\r\n this.printDialog.FileName = docName;\r\n this.printDialog.Title = documentTypeName;\r\n this.printDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n const request = this.IsReceipt\r\n ? this.receiptEndpoint.GetPdfByPrintingDocCode(this.DocumentID, this.State.PrintingDocCode)\r\n : this.documentEndpoint.GetPdfByPrintingDocCode(this.DocumentID, this.DocumentType, this.State.PrintingDocCode);\r\n\r\n request.subscribe((response: BaseDataResponse) => {\r\n if (response.IsSuccess) {\r\n\r\n if (shareType === EnumShareDocumentTypes.Print) {\r\n this.printDialog.PDFData = (response.Data as unknown) as string;\r\n } else if (shareType === EnumShareDocumentTypes.ShareToApplication) {\r\n try {\r\n let data = response.Data;\r\n let blob;\r\n debugger;\r\n\r\n const fileName = `${documentTypeName}_${this.State.ShareDocumentConfig?.DocumentNumber}.pdf`;\r\n if (typeof data === 'string') blob = Utils.ConvertToBlob(data, 'application/pdf') as any;\r\n const file = new File([blob], fileName, { type: \"application/pdf\" });\r\n\r\n navigator.share({\r\n title: this.RC('lblShareToApplication'),\r\n files: [file],\r\n } as ShareData);\r\n }\r\n catch (err) {\r\n this.UI.StopMessage(err);\r\n }\r\n }\r\n\r\n } else {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n this.printDialog.CloseDialogWithCancel();\r\n this.ShareCompleted.emit();\r\n }\r\n });\r\n\r\n return;\r\n\r\n // if (this.IsReceipt) {\r\n // this.printDialog.FileName = `${this.DocumentID}`;\r\n // this.printDialog.Title = `${this.LIST('EnumInvoiceOneDocumentTypes').find(x => x.Value === EnumInvoiceOneDocumentTypes.Receipt).Text}`;\r\n // this.printDialog.ShowDialogShort(undefined);\r\n\r\n // this.receiptEndpoint.GetPdfByPrintingDocCode(this.DocumentID, this.State.PrintingDocCode)\r\n // .subscribe((response: BaseDataResponse) => {\r\n // if (response.IsSuccess) {\r\n // this.printDialog.PDFData = (response.Data as unknown) as string;\r\n // } else {\r\n // this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n // this.printDialog.CloseDialogWithCancel();\r\n // }\r\n // });\r\n // return;\r\n // } else {\r\n // this.printDialog.FileName = `${this.DocumentID}`;\r\n // this.printDialog.Title = `${this.LIST('EnumDocumentTypes').find(x => x.Value === this.DocumentType).Text}`;\r\n // this.printDialog.ShowDialogShort(undefined);\r\n\r\n // this.documentEndpoint.GetPdfByPrintingDocCode(this.DocumentID, this.DocumentType, this.State.PrintingDocCode)\r\n // .subscribe((response: BaseDataResponse) => {\r\n\r\n // // DEBUG\r\n // // if (!navigator.share || !(navigator as any).canShare) {\r\n // // return;\r\n // // }\r\n\r\n // // let x = response.Data;\r\n // // let blob;\r\n\r\n // // if (typeof x === 'string') blob = Utils.ConvertToBlob(x, 'application/pdf') as any;\r\n\r\n // // const file = new File([blob], \"foo.pdf\", { type: \"application/pdf\" });\r\n\r\n // // navigator.share({\r\n // // title: \"My shared file\",\r\n // // files: [file],\r\n // // } as ShareData);\r\n\r\n // // DEBUG\r\n // if (response.IsSuccess) {\r\n // this.printDialog.PDFData = (response.Data as unknown) as string;\r\n // } else {\r\n // this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n // this.printDialog.CloseDialogWithCancel();\r\n // }\r\n // });\r\n // return;\r\n // }\r\n }\r\n\r\n const params = {\r\n DocumentID: this.DocumentID,\r\n DocumentType: this.DocumentType,\r\n PrintingDocCode: this.State.PrintingDocCode,\r\n InvoiceOneTemplateID: this.State.InvoiceOneTemplateID,\r\n NotificationTypes: this.GetInvoiceOneNotificationTypesBy(shareType),\r\n Address: shareType === EnumShareDocumentTypes.Email\r\n ? this.State.Email\r\n : (shareType === EnumShareDocumentTypes.SMS || shareType === EnumShareDocumentTypes.Whatsapp) ? this.State.Phone : ''\r\n } as ShareDocumentParams;\r\n\r\n this.State.IsInProccessing = true;\r\n\r\n const action = this.IsReceipt\r\n ? this.receiptEndpoint.ShareReceipt(params)\r\n : this.documentEndpoint.ShareDocument(params);\r\n\r\n this.Do(action, false, r => { \r\n this.UI.InfoMessage(this.RC('lblSharingSuccessfulSent'));\r\n this.State.IsInProccessing = false;\r\n this.ShareCompleted.emit();\r\n }, () => { this.State.IsInProccessing = false; });\r\n }\r\n\r\n GetInvoiceOneNotificationTypesBy(shareDocumentType: EnumShareDocumentTypes) {\r\n switch (shareDocumentType) {\r\n case EnumShareDocumentTypes.Email: return EnumInvoiceOneNotificationTypes.Email;\r\n case EnumShareDocumentTypes.SMS: return EnumInvoiceOneNotificationTypes.SMS;\r\n case EnumShareDocumentTypes.Whatsapp: return EnumInvoiceOneNotificationTypes.Whatsapp;\r\n }\r\n return EnumInvoiceOneNotificationTypes.None;\r\n }\r\n\r\n GetActionButtonText() {\r\n return (this.State.SelectedShareType === EnumShareDocumentTypes.Print)\r\n ? 'lblSharePrint'\r\n : (this.State.SelectedShareType === EnumShareDocumentTypes.ShareToApplication) ? 'lblShareToApplication' : 'lblShareSend'\r\n }\r\n}\r\n","import { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { AppInjector } from \"@m4u-angular/core/injector/injector.module\";\r\nimport { CustomerOption } from \"@dino-proxy/entities/customeroption.entity\";\r\nimport { CustomerOptionService } from \"@dino-services/customer-option.service\";\r\n\r\nexport class BaseOptionState extends BaseState {\r\n public CustomerOption: CustomerOption;\r\n\r\n constructor() {\r\n super();\r\n //\r\n let customerOptionService = AppInjector.get(CustomerOptionService);\r\n this.CustomerOption = customerOptionService.GetCustomerOption();\r\n }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentView } from './../views/document.view';\r\nimport { BaseDocumentView } from './../views/basedocument.view';\r\nimport { DocumentSummaryResult } from './../entities/documentsummaryresult.entity';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { ShareDocumentConfig } from './../entities/sharedocumentconfig.entity';\r\nimport { DocumentFile } from './../entities/document.entity';\r\nimport { CalculatePaymentTermsDateParams } from './../params/calculatepaymenttermsdate.param';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { DocumentListParams } from './../params/documentlist.param';\r\nimport { DocumentSummaryParams } from './../params/documentsummary.param';\r\nimport { EmptyParams } from './../params/empty.param';\r\nimport { CancelDocumentParams } from './../params/canceldocument.param';\r\nimport { CloseDocumentParams } from './../params/closedocument.param';\r\nimport { RepeatDocumentParams } from './../params/repeatdocument.param';\r\nimport { UpdateDocumentParams } from './../params/updatedocument.param';\r\nimport { ShareDocumentParams } from './../params/sharedocument.param';\r\n@Injectable()\r\nexport class DocumentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Document\", api);}\r\n\t\r\n\r\n public GetCalculatedPaymentTermsDate(Params: CalculatePaymentTermsDateParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetCalculatedPaymentTermsDate', Params, undefined );\r\n }\r\n\r\n public GetAvailableBaseDocuments(documentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAvailableBaseDocuments', {documentType: documentType} );\r\n }\r\n\r\n public GetRelatedDocuments(documentID: number, documentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelatedDocuments', {documentID: documentID, documentType: documentType} );\r\n }\r\n\r\n public GetListByParams(Params: DocumentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetColumnSummaryByParams(summaryParams: DocumentSummaryParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetColumnSummaryByParams', summaryParams, undefined );\r\n }\r\n\r\n public GetDocument(DocumentID: number, DocumentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDocument', {DocumentID: DocumentID, DocumentType: DocumentType} );\r\n }\r\n\r\n public SaveDocument(Params: EmptyParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveDocument', Params, undefined );\r\n }\r\n\r\n public CancelDocument(Params: CancelDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CancelDocument', Params, undefined );\r\n }\r\n\r\n public CloseDocument(Params: CloseDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CloseDocument', Params, undefined );\r\n }\r\n\r\n public RepeatDocument(Params: RepeatDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RepeatDocument', Params, undefined );\r\n }\r\n\r\n public UpdateDocument(Params: UpdateDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateDocument', Params, undefined );\r\n }\r\n\r\n public GetPdfByCurrentUrl(EntryID: number, DocumentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPdfByCurrentUrl', {EntryID: EntryID, DocumentType: DocumentType} );\r\n }\r\n\r\n public GetPdfByPrintingDocCode(EntryID: number, DocumentType: EnumDocumentTypes, PrintingDocCode: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPdfByPrintingDocCode', {EntryID: EntryID, DocumentType: DocumentType, PrintingDocCode: PrintingDocCode} );\r\n }\r\n\r\n public GetRecentDocuments(DocumentType: EnumDocumentTypes, customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRecentDocuments', {DocumentType: DocumentType, customerID: customerID} );\r\n }\r\n\r\n public GetShareDocumentConfig(documentID: number, documentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetShareDocumentConfig', {documentID: documentID, documentType: documentType} );\r\n }\r\n\r\n public ShareDocument(Params: ShareDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ShareDocument', Params, undefined );\r\n }\r\n\r\n public GetDocumentFiles(DocumentID: number, DocumentType: EnumDocumentTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDocumentFiles', {DocumentID: DocumentID, DocumentType: DocumentType} );\r\n }\r\n\r\n public GetDocumentFile(DocumentID: number, DocumentType: EnumDocumentTypes, AttachmentEntryID: number, FileID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDocumentFile', {DocumentID: DocumentID, DocumentType: DocumentType, AttachmentEntryID: AttachmentEntryID, FileID: FileID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Receipt } from './../entities/receipt.entity';\r\nimport { ReceiptView } from './../views/receipt.view';\r\nimport { LedgerView } from './../views/ledger.view';\r\nimport { ShoppingPaymentView } from './../views/shoppingpayment.view';\r\nimport { ShareDocumentConfig } from './../entities/sharedocumentconfig.entity';\r\nimport { ReceiptListParams } from './../params/receiptlist.param';\r\nimport { CreateReceiptParams } from './../params/createreceipt.param';\r\nimport { ShareDocumentParams } from './../params/sharedocument.param';\r\n@Injectable()\r\nexport class ReceiptEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Receipt\", api);}\r\n\t\r\n\r\n public GetListByParams(Params: ReceiptListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetFullReceipt(entryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFullReceipt', {entryID: entryID} );\r\n }\r\n\r\n public GetLedgersForPayment() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLedgersForPayment', undefined );\r\n }\r\n\r\n public UpdateDraftShoppingPayment(Params: CreateReceiptParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateDraftShoppingPayment', Params, undefined );\r\n }\r\n\r\n public SaveReceipt(Params: CreateReceiptParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveReceipt', Params, undefined );\r\n }\r\n\r\n public GetShareDocumentConfig(receiptID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetShareDocumentConfig', {receiptID: receiptID} );\r\n }\r\n\r\n public GetPdfByPrintingDocCode(entryID: number, printingDocCode: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPdfByPrintingDocCode', {entryID: entryID, printingDocCode: printingDocCode} );\r\n }\r\n\r\n public ShareReceipt(Params: ShareDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ShareReceipt', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ItemClickEvent } from 'devextreme/ui/drop_down_button';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\n\r\nexport enum CopyToDocumentActions {\r\n CopyAndGoToCatalogue,\r\n CopyAndGoToCheckout\r\n}\r\n\r\nclass State extends BaseOptionState {\r\n DocumentTypes: GenericListEntity[] = [];\r\n SelectedDocumentType: EnumDocumentTypes = null;\r\n ShoppingCartItemsExists: boolean = false;\r\n ActionsMenu: GenericListEntity[] = [];\r\n PreferableAction: CopyToDocumentActions;\r\n PreferableActionText: string;\r\n}\r\n\r\n// export class ActionsMenu {\r\n// constructor(public value: CopyToDocumentActions, public text: string, public disabled: boolean = false) {\r\n// this.value = value;\r\n// this.text = text;\r\n// this.disabled = disabled;\r\n// }\r\n// }\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-copy-to-dialog',\r\n templateUrl: './copy-to-dialog.component.html',\r\n styleUrls: ['./copy-to-dialog.component.scss']\r\n})\r\nexport class CopyToDialogComponent extends BasePageComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService,\r\n private shoppingCartService: ShoppingCartService,\r\n private customerOptionService: CustomerOptionService) {\r\n super(A, 'CopyToDialogComponent', DocumentView, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.RC('titleCopyToDialog');\r\n }\r\n\r\n public SetupComponent(availableTypes: EnumDocumentTypes[], shoppingCartItemsExists: boolean) {\r\n this.InitActionsMenu();\r\n\r\n this.State.ShoppingCartItemsExists = shoppingCartItemsExists;\r\n let allTypes = this.LIST('EnumDocumentTypes');\r\n this.State.DocumentTypes = allTypes.filter(ldt => availableTypes.includes(ldt.Value as EnumDocumentTypes));\r\n if (this.State.DocumentTypes.length === 1) {\r\n this.State.SelectedDocumentType = this.State.DocumentTypes[0].Value as EnumDocumentTypes;\r\n }\r\n }\r\n\r\n OnSuccessClick(toCatalogue: boolean = false) {\r\n let path = ROUTE_PATHS.CATALOGUE;\r\n if (!toCatalogue) {\r\n path = ROUTE_PATHS.CHECKOUT;\r\n }\r\n\r\n if (this.State.ShoppingCartItemsExists) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('titleReplace');\r\n this.messageDialog.Prompt = this.RC('promptReplaceShoppingCartItems');\r\n this.messageDialog.ShowDialogShort(() => { this.CopyTo(path); });\r\n } else {\r\n this.CopyTo(path);\r\n };\r\n }\r\n\r\n CopyTo(path: string) {\r\n if (this.Entity.CustomerID != this.customerService.GetCustomerID()) {\r\n this.customerService.SetCustomer(this.Entity.CustomerID)\r\n .subscribe(() => {\r\n this.UpdateShoppingCartAndGo(path);\r\n });\r\n } else {\r\n this.UpdateShoppingCartAndGo(path);\r\n }\r\n }\r\n\r\n UpdateShoppingCartAndGo(path: string) {\r\n this.shoppingCartService.useBaseDocuments([this.Entity.EntryID], this.Entity.DocumentType, this.State.SelectedDocumentType)\r\n .subscribe(() => this.CloseDialogWithSuccess(path));\r\n }\r\n\r\n OnActionsItemClick(e: ItemClickEvent) {\r\n this.State.PreferableAction = +e.itemData?.Value;\r\n this.State.PreferableActionText = this.State.ActionsMenu\r\n .find(a => a.Value === (this.State.PreferableAction as any))\r\n .Text;\r\n this.OnSuccessClick(e.itemData?.Value === 0);\r\n }\r\n\r\n OnActionButtonClick(e) {\r\n this.OnSuccessClick(this.State.PreferableAction === CopyToDocumentActions.CopyAndGoToCatalogue);\r\n }\r\n\r\n HandleDocTypeChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n const selectedDocumentType = this.State.SelectedDocumentType;\r\n if (!customerOption || !selectedDocumentType) return;\r\n\r\n const documentOption = customerOption[selectedDocumentType + 'Option'] as DocumentOption;\r\n if (!documentOption) return;\r\n\r\n if (documentOption.IsBlockEditingItemsWhenBasedOn) {\r\n this.State.ActionsMenu = this.LIST('CopyToDocumentActions').filter(x => x.Value === (CopyToDocumentActions.CopyAndGoToCheckout as any));\r\n this.State.PreferableAction = CopyToDocumentActions.CopyAndGoToCheckout;\r\n this.State.PreferableActionText = this.State.ActionsMenu.find(a => a.Value === (CopyToDocumentActions.CopyAndGoToCheckout as any)).Text;\r\n if (!customerOption.FeatureOption.IsEnableCheckout) {\r\n this.State.ActionsMenu = [];\r\n this.State.PreferableAction = null;\r\n this.State.PreferableActionText = null;\r\n }\r\n } else {\r\n this.InitActionsMenu();\r\n }\r\n }\r\n\r\n InitActionsMenu() {\r\n const customerOption = this.customerOptionService.GetCustomerOption()?.FeatureOption;\r\n this.State.ActionsMenu = this.LIST('CopyToDocumentActions');\r\n\r\n if (!customerOption?.IsEnableCheckout) {\r\n this.State.ActionsMenu = this.State.ActionsMenu.filter(a =>\r\n a.Value !== (CopyToDocumentActions.CopyAndGoToCheckout as any)\r\n );\r\n }\r\n\r\n if (!customerOption?.IsEnableCatalogue) {\r\n this.State.ActionsMenu = this.State.ActionsMenu.filter(a =>\r\n a.Value !== (CopyToDocumentActions.CopyAndGoToCatalogue as any)\r\n );\r\n }\r\n\r\n this.State.PreferableAction = this.State.ActionsMenu.length >= 2\r\n ? CopyToDocumentActions.CopyAndGoToCatalogue\r\n : (this.State.ActionsMenu[0].Value as any);\r\n\r\n this.State.PreferableActionText = this.State.ActionsMenu.length >= 2\r\n ? this.State.ActionsMenu.find(a => a.Value === (CopyToDocumentActions.CopyAndGoToCatalogue as any)).Text\r\n : this.State.ActionsMenu[0].Text;\r\n\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \";","\r\nclass GlobalValues {\r\n get Today(): Date { return new Date() };\r\n get SixMonthsAgoDate(): Date { const date = this.Today; date.setMonth(date.getMonth() - 6); return date; }\r\n get OneMonthAgoDate(): Date { const date = this.Today; date.setMonth(date.getMonth() - 1); return date; }\r\n get ThreeMonthsAgoDate(): Date { const date = this.Today; date.setMonth(date.getMonth() - 3); return date; }\r\n get OneYearAgoDate(): Date { const today = this.Today; return new Date(today.getFullYear() - 1, today.getMonth(), today.getDate()); }\r\n get ThreeYearsAgoDate(): Date { const today = this.Today; return new Date(today.getFullYear() - 3, today.getMonth(), today.getDate()); }\r\n}\r\n\r\nexport var Globals = new GlobalValues();\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ContactPerson extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ContactPerson';\r\n }\r\n \r\n public CustomerID: number; \r\n public Name: string; \r\n public Position: string; \r\n public Phone: string; \r\n public Cellular: string; \r\n public Email: string; \r\n public IsDefault: boolean; \r\n public IsActive: boolean; \r\n public CustomerOptionID: number; \r\n public IsCasual: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class CustomerAddress extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerAddress';\r\n }\r\n \r\n public CustomerID: number; \r\n public AddressName: string; \r\n public AddressDisplayName: string; \r\n public City: string; \r\n public Street: string; \r\n public Country: string; \r\n public CountryName: string; \r\n public State: string; \r\n public StateName: string; \r\n public ZipCode: string; \r\n public County: string; \r\n public StreetNo: string; \r\n public Building: string; \r\n public Block: string; \r\n public IsDefault: boolean; \r\n public IsCasual: boolean; \r\n public FullAddress: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ItemShipment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemShipment';\r\n }\r\n \r\n public ItemCode: string; \r\n public ItemName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class VatInfo extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'VatInfo';\r\n }\r\n \r\n public VatPercent: number; \r\n public VatGroupCode: string; \r\n public IsVatLiable: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { VatInfo } from './../entities/vatinfo.entity';\r\nexport class ShipmentMethodPrice extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShipmentMethodPrice';\r\n }\r\n \r\n public Price: number; \r\n public Currency: string; \r\n public PriceVat: number; \r\n public VatInfo: VatInfo = new VatInfo; \r\n public OriginalPrice: number; \r\n public OriginalCurrency: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemShipment } from './../entities/itemshipment.entity';\r\nimport { ShipmentMethodPrice } from './../entities/shipmentmethodprice.entity';\r\nexport class ShipmentMethod extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShipmentMethod';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public ItemShipmentID: number; \r\n public ItemShipment: ItemShipment = new ItemShipment; \r\n public TransportCode: number; \r\n public IsNoShipment: boolean; \r\n public Price: ShipmentMethodPrice = new ShipmentMethodPrice; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SalesPerson extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesPerson';\r\n }\r\n \r\n public Name: string; \r\n public IsAllowAllCustomers: boolean; \r\n public SlpCode: number; \r\n public Email: string; \r\n public CashAccount: string; \r\n public ChequeAccount: string; \r\n public WireAccount: string; \r\n public Phone: string; \r\n public SalesPersonOptionID: number; \r\n\t\r\n}\r\n\r\nexport class SalesPersonCustomerPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesPersonCustomerPermission';\r\n }\r\n \r\n public CustomerID: number; \r\n public IsAllowDocumentView: boolean; \r\n public IsAllowDocumentEdit: boolean; \r\n public IsAllowView: boolean; \r\n public IsAllowEdit: boolean; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class PaymentTerm extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentTerm';\r\n }\r\n \r\n public Name: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Warehouse extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Warehouse';\r\n }\r\n \r\n public WarehouseCode: string; \r\n public Name: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumItemBadgeTypes } from './../enums';\r\nimport { EnumVariationRelations } from './../enums';\r\nimport { EnumItemSaleMethods } from './../enums';\r\nimport { EnumItemStockManagementTypes } from './../enums';\r\nimport { EnumKitTypes } from './../enums';\r\nimport { EnumRelatedItemRelationTypes } from './../enums';\r\nexport class Item extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Item';\r\n }\r\n \r\n public ItemCode: string; \r\n public ItemName: string; \r\n public ItemDescription: string; \r\n public BarCode: string; \r\n public Badge1Data: string; \r\n public Badge2Data: string; \r\n public Badge3Data: string; \r\n public Badge1Type: EnumItemBadgeTypes; \r\n public Badge2Type: EnumItemBadgeTypes; \r\n public Badge3Type: EnumItemBadgeTypes; \r\n public ItemOptionID: number; \r\n public SalesPersonItemOptionID: number; \r\n public VariationRelation: EnumVariationRelations; \r\n public DimensionConfigurationID: number; \r\n public IsVatLiable: boolean; \r\n public CustomAlert: string; \r\n public SaleMethod: EnumItemSaleMethods; \r\n public StockUnitName: string; \r\n public SalePackageName: string; \r\n public StockUnitsInPackage: number; \r\n public SaleMultipleOf: number; \r\n public SalePackageWeight: number; \r\n public BrandID: number; \r\n public ManufacturerID: number; \r\n public VendorID: number; \r\n public MainCategoryID: number; \r\n public IsFeatured: string; \r\n public BrandName: string; \r\n public ManufacturerName: string; \r\n public VendorName: string; \r\n public DepositGroupID: number; \r\n public IsVisibleForNewSale: boolean; \r\n public SearchKeywords: string; \r\n public StockCustomStatus: string; \r\n public StockCustomStatusStyle: string; \r\n public ItemGroupCode: number; \r\n public MainCategorySortOrder: number; \r\n public MainCategoryName: string; \r\n public SuppCatNum: string; \r\n public QuantityIncrement: number; \r\n public MinQuantity: number; \r\n public VatGroupCode: string; \r\n public ItemStockManagementType: EnumItemStockManagementTypes; \r\n public IsShippable: boolean; \r\n public MaxQuantity: number; \r\n public KitType: EnumKitTypes; \r\n public IsKitCustomizable: boolean; \r\n public IsKitSeparate: boolean; \r\n public IsKitCollapsable: boolean; \r\n public DefaultWarehouseID: number; \r\n public CustomSortOrder: number; \r\n public ItemFieldsetID: number; \r\n public IsSeparate: boolean; \r\n public DistributionCategoryID: number; \r\n public ItemTextAttributes: ItemTextAttribute[] = []; \r\n public ItemSpecificationAttributes: ItemSpecificationAttribute[] = []; \r\n public ItemRelatedItems: ItemRelatedItem[] = []; \r\n public ItemVideos: ItemVideo[] = []; \r\n public ItemImages: ItemImage[] = []; \r\n public ItemFiles: ItemFile[] = []; \r\n public ItemKitItems: ItemKitItem[] = []; \r\n\t\r\n}\r\n\r\nexport class ItemFile extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemFile';\r\n }\r\n \r\n public SortOrder: number; \r\n public FileName: string; \r\n public LineID: number;\r\n}\r\nexport class ItemImage extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemImage';\r\n }\r\n \r\n public SortOrder: number; \r\n public ImageName: string; \r\n public LineID: number;\r\n}\r\nexport class ItemVideo extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemVideo';\r\n }\r\n \r\n public SortOrder: number; \r\n public VideoLink: string; \r\n public LineID: number;\r\n}\r\nexport class ItemRelatedItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemRelatedItem';\r\n }\r\n \r\n public SortOrder: number; \r\n public RelatedItemID: number; \r\n public RelationType: EnumRelatedItemRelationTypes; \r\n public BrandID: number; \r\n public ManufacturerID: number; \r\n public VendorID: number; \r\n public MainCategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class ItemSpecificationAttribute extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemSpecificationAttribute';\r\n }\r\n \r\n public SpecificationAttributeID: number; \r\n public SpecificationAttributeValueID: number; \r\n public Value: string; \r\n public LineID: number;\r\n}\r\nexport class ItemTextAttribute extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemTextAttribute';\r\n }\r\n \r\n public SortOrder: number; \r\n public Name: string; \r\n public Value: string; \r\n public AttributeGroupID: number; \r\n public IsCombineByName: boolean; \r\n public LineID: number;\r\n}\r\nexport class ItemKitItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemKitItem';\r\n }\r\n \r\n public ItemID: number; \r\n public Quantity: number; \r\n public LineID: number;\r\n}\r\nexport class QuantityInStockDescriptor extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'QuantityInStockDescriptor';\r\n }\r\n \r\n public ItemID: number; \r\n public Quantity: number; \r\n public WarehouseID: number; \r\n \r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentStatuses } from './../enums';\r\nimport { EnumDocumentSource } from './../enums';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { ShoppingCartCustomField } from './../entities/shoppingcartcustomfield.entity';\r\nimport { ContactPerson } from './../entities/contactperson.entity';\r\nimport { CustomerAddress } from './../entities/customeraddress.entity';\r\nimport { ShipmentMethod } from './../entities/shipmentmethod.entity';\r\nimport { SalesPerson } from './../entities/salesperson.entity';\r\nimport { PaymentTerm } from './../entities/paymentterm.entity';\r\nimport { ShoppingCartAttachment } from './../entities/shoppingcart.entity';\r\nimport { Warehouse } from './../entities/warehouse.entity';\r\nimport { EnumKitTypes } from './../enums';\r\nimport { EnumTreeTypes } from './../enums';\r\nimport { ShoppingCartItemBatch } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartItemSerialNumber } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartItemCustomField } from './../entities/shoppingcartitemcustomfield.entity';\r\nimport { Item } from './../entities/item.entity';\r\nimport { EnumDocumentSpecialItemType } from './../enums';\r\nexport class Document extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Document';\r\n }\r\n \r\n public CustomerID: number; \r\n public ContactPersonID: number; \r\n public CustomerAddressID: number; \r\n public IsDraft: boolean; \r\n public DocumentNumber: number; \r\n public DocDate: Date; \r\n public CreateDate: Date; \r\n public DocumentRemarks: string; \r\n public ShipmentNotes: string; \r\n public VatPercent: number; \r\n public TotalBeforeVat: number; \r\n public TotalVat: number; \r\n public TotalAfterVat: number; \r\n public TotalBeforeDiscount: number; \r\n public Currency: string; \r\n public Status: EnumDocumentStatuses; \r\n public ShipmentMethodID: number; \r\n public DocDueDate: Date; \r\n public PickAndPackRemarks: string; \r\n public DocumentDate: Date; \r\n public AdditionalStatus: string; \r\n public AdditionalStatusStyle: string; \r\n public Series: number; \r\n public TotalDiscount: number; \r\n public DocStatus: string; \r\n public NumAtCard: string; \r\n public PDFURL: string; \r\n public DocEntry: number; \r\n public SalesPersonID: number; \r\n public PaymentDueDate: Date; \r\n public PaymentTermID: number; \r\n public CustomerCode: string; \r\n public CustomerName: string; \r\n public Confirmed: boolean; \r\n public ShipToCountry: string; \r\n public ShipToCity: string; \r\n public ShipToState: string; \r\n public ShipToStreet: string; \r\n public ShipToZipCode: string; \r\n public ShipToStreetNo: string; \r\n public ShipToBuilding: string; \r\n public ShipToBlock: string; \r\n public ShipToCounty: string; \r\n public ShipToFullAddress: string; \r\n public ContactPersonPosition: string; \r\n public ContactPersonEmail: string; \r\n public ContactPersonCellular: string; \r\n public ContactPersonPhone: string; \r\n public Source: EnumDocumentSource; \r\n public DistributionCycleID: number; \r\n public AttachmentEntryID: number; \r\n public SignatureBase64: string; \r\n public DocumentType: EnumDocumentTypes; \r\n public IsUseCasualAddress: boolean; \r\n public IsUseCasualContactPerson: boolean; \r\n public CustomFields: ShoppingCartCustomField[] = []; \r\n public ContactPerson: ContactPerson = new ContactPerson; \r\n public CustomerAddress: CustomerAddress = new CustomerAddress; \r\n public ShipmentMethod: ShipmentMethod = new ShipmentMethod; \r\n public SalesPerson: SalesPerson = new SalesPerson; \r\n public PaymentTerm: PaymentTerm = new PaymentTerm; \r\n public Attachments: ShoppingCartAttachment[] = []; \r\n\t\r\n}\r\n\r\nexport class DocumentLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentLine';\r\n }\r\n \r\n public ItemID: number; \r\n public Quantity: number; \r\n public Price: number; \r\n public PriceBeforeDiscount: number; \r\n public Currency: string; \r\n public DiscountPercent: number; \r\n public Status: string; \r\n public OpenQuantity: number; \r\n public BaseEntryID: number; \r\n public BaseLineID: number; \r\n public BaseDocumentType: number; \r\n public FreeText: string; \r\n public WarehouseID: number; \r\n public Warehouse: Warehouse = new Warehouse; \r\n public PromotionID: number; \r\n public EffectPromotionID: number; \r\n public OriginalPrice: number; \r\n public OriginalCurrency: string; \r\n public VatGroupCode: string; \r\n public ParentItemKitType: EnumKitTypes; \r\n public TreeType: EnumTreeTypes; \r\n public OriginalLineID: number; \r\n public Batches: ShoppingCartItemBatch[] = []; \r\n public SerialNumbers: ShoppingCartItemSerialNumber[] = []; \r\n public ItemCustomFields: ShoppingCartItemCustomField[] = []; \r\n public Item: Item = new Item; \r\n \r\n}\r\nexport class DocumentBatchLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentBatchLine';\r\n }\r\n \r\n public ItemCode: string; \r\n public Quantity: number; \r\n public BatchNumber: string; \r\n public AppliedLineID: number; \r\n \r\n}\r\nexport class DocumentSerialNumberLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentSerialNumberLine';\r\n }\r\n \r\n public ItemCode: string; \r\n public Quantity: number; \r\n public SerialNumber: string; \r\n public AppliedLineID: number; \r\n \r\n}\r\nexport class DocumentSpecialItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentSpecialItem';\r\n }\r\n \r\n public HiddenItemID: number; \r\n public Quantity: number; \r\n public Price: number; \r\n public Type: EnumDocumentSpecialItemType; \r\n public Currency: string; \r\n public DiscountPercent: number; \r\n public VatGroupCode: string; \r\n \r\n}\r\nexport class AttachmentFile extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AttachmentFile';\r\n }\r\n \r\n public AttachmentEntryID: number; \r\n public FileID: number; \r\n public SortOrder: number; \r\n public FileName: string; \r\n public FileExt: string; \r\n public FileDate: Date; \r\n public FilePath: string; \r\n \r\n}\r\nexport class DocumentOneFile extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentOneFile';\r\n }\r\n \r\n public SortOrder: number; \r\n public FileName: string; \r\n public FileExt: string; \r\n public FileDate: Date; \r\n public FileSize: number; \r\n public IsEncrypted: boolean; \r\n public TableName: string; \r\n public DocEntry: number; \r\n public CardCode: string; \r\n public CustomerID: number; \r\n public FilePath: string; \r\n \r\n}\r\nexport class DocumentFile extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentFile';\r\n }\r\n \r\n public FileName: string; \r\n public FileExt: string; \r\n public FileDate: Date; \r\n public FilePath: string; \r\n public SortOrder: number; \r\n public AttachmentEntryID: number; \r\n public FileID: number; \r\n \r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ValidationResultItem } from './../entities/validationresultitem.entity';\r\nimport { EnumValidationStatus } from './../enums';\r\nexport class ValidationResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ValidationResult';\r\n }\r\n \r\n public ValidationResultItems: ValidationResultItem[] = []; \r\n public Status: EnumValidationStatus; \r\n public ValidationMessage: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Document } from './../entities/document.entity';\r\nimport { ItemView } from './../views/item.view';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { DocumentBatchLine } from './../entities/document.entity';\r\nimport { DocumentSerialNumberLine } from './../entities/document.entity';\r\nexport class DocumentView extends Document {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentView';\r\n }\r\n \r\n public DocumentItemViews: ItemView[] = []; \r\n public Deposit: number; \r\n public DepositCurrency: string; \r\n public ShippingCost: number; \r\n public ShippingCostCurrency: string; \r\n public GiftCard: number; \r\n public GiftCardCurrency: string; \r\n public CheckoutNotes: string; \r\n public ValidationResult: ValidationResult = new ValidationResult; \r\n public ShoppingCartLength: number; \r\n public MinPlannedDeliveryDate: Date; \r\n public HasDocumentPDF: boolean; \r\n public IsAllowShare: boolean; \r\n public DocumentBatches: DocumentBatchLine[] = []; \r\n public DocumentSerialNumbers: DocumentSerialNumberLine[] = []; \r\n public HeaderFieldValues: string[]; \r\n public HeaderFieldsetID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ShoppingCart } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartView } from './../views/shoppingcart.view';\r\nimport { ShoppingCartDescriptionResult } from './../entities/shoppingcartdescriptionresult.entity';\r\nimport { ShoppingCartItemView } from './../views/shoppingcartitem.view';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { CreateShoppingCartByDocumentTypeParams } from './../params/createshoppingcartbydocumenttype.param';\r\nimport { RemoveShoppingCartItemParams } from './../params/removeshoppingcartitem.param';\r\nimport { ShoppingCartItemsVisibilityParams } from './../params/shoppingcartitemsvisibility.param';\r\nimport { UpdateShoppingCartItemQuantityBatchParams } from './../params/updateshoppingcartitemquantitybatch.param';\r\nimport { UpdateShipmentMethodParams } from './../params/updateshipmentmethod.param';\r\nimport { UpdateShoppingCartCasualAddressParams } from './../params/updateshoppingcartcasualaddress.param';\r\nimport { PreSaveCheckoutShoppingCartParams } from './../params/presavecheckoutshoppingcart.param';\r\nimport { UpdateShoppingCartCasualContactParams } from './../params/updateshoppingcartcasualcontact.param';\r\nimport { UpdateTotalsParams } from './../params/updatetotals.param';\r\nimport { UpdateItemParams } from './../params/updateitem.param';\r\nimport { UseBaseDocumentsParams } from './../params/usebasedocuments.param';\r\nimport { UploadAttachmentsParams } from './../params/uploadattachments.param';\r\nimport { DeleteAttachmentParams } from './../params/deleteattachment.param';\r\n@Injectable()\r\nexport class ShoppingCartEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ShoppingCart\", api);}\r\n\t\r\n\r\n public GetForCurrentUser() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetForCurrentUser', undefined );\r\n }\r\n\r\n public GetDescriptionByCustomerID(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDescriptionByCustomerID', {customerID: customerID} );\r\n }\r\n\r\n public CreateShoppingCartByDocumentType(Params: CreateShoppingCartByDocumentTypeParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CreateShoppingCartByDocumentType', Params, undefined );\r\n }\r\n\r\n public GetOrCreateForCurrentUser(distributionCycleID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetOrCreateForCurrentUser', {distributionCycleID: distributionCycleID} );\r\n }\r\n\r\n public GetShoppingCartDescriptionForCurrentUser() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetShoppingCartDescriptionForCurrentUser', undefined );\r\n }\r\n\r\n public RemoveShoppingCartItem(Params: RemoveShoppingCartItemParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RemoveShoppingCartItem', Params, undefined );\r\n }\r\n\r\n public RemoveAllItemsFromShoppingCart() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'RemoveAllItemsFromShoppingCart', undefined );\r\n }\r\n\r\n public RemoveCurrentShoppingCart() : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteDeleteAction(this.ControllerName, 'RemoveCurrentShoppingCart', undefined );\r\n }\r\n\r\n public ReorderShoppingCartItems(reorderedUniqueItemIDs: number[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ReorderShoppingCartItems', {reorderedUniqueItemIDs: reorderedUniqueItemIDs} );\r\n }\r\n\r\n public UpdateShoppingCartItemsVisibility(Params: ShoppingCartItemsVisibilityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateShoppingCartItemsVisibility', Params, undefined );\r\n }\r\n\r\n public UpdateShoppingCartItemQuantity3(Params: UpdateShoppingCartItemQuantityBatchParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateShoppingCartItemQuantity3', Params, undefined );\r\n }\r\n\r\n public AddItemFromBarcodeScanner(empty: any, barcode: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'AddItemFromBarcodeScanner', empty, {barcode: barcode} );\r\n }\r\n\r\n public GetShoppingCartCount() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetShoppingCartCount', undefined );\r\n }\r\n\r\n public ApplyCoupon(secretText: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ApplyCoupon', {secretText: secretText} );\r\n }\r\n\r\n public RemoveCoupon(secretText: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'RemoveCoupon', {secretText: secretText} );\r\n }\r\n\r\n public UpdateShipmentMethod(Params: UpdateShipmentMethodParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateShipmentMethod', Params, undefined );\r\n }\r\n\r\n public UpdateCasualAddress(Params: UpdateShoppingCartCasualAddressParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateCasualAddress', Params, undefined );\r\n }\r\n\r\n public PreSaveCheckoutShoppingCartDetails(Params: PreSaveCheckoutShoppingCartParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'PreSaveCheckoutShoppingCartDetails', Params, undefined );\r\n }\r\n\r\n public UpdateCasualContactPerson(Params: UpdateShoppingCartCasualContactParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateCasualContactPerson', Params, undefined );\r\n }\r\n\r\n public UpdateTotals(Params: UpdateTotalsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateTotals', Params, undefined );\r\n }\r\n\r\n public UpdateItem(Params: UpdateItemParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateItem', Params, undefined );\r\n }\r\n\r\n public ValidateShoppingCart() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ValidateShoppingCart', undefined );\r\n }\r\n\r\n public GetSingleItemWithTotals(ItemID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSingleItemWithTotals', {ItemID: ItemID} );\r\n }\r\n\r\n public DisablePromotionForShoppingCart(promotionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DisablePromotionForShoppingCart', {promotionID: promotionID} );\r\n }\r\n\r\n public EnableAllPromotionItems() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'EnableAllPromotionItems', undefined );\r\n }\r\n\r\n public UseBaseDocuments(Params: UseBaseDocumentsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UseBaseDocuments', Params, undefined );\r\n }\r\n\r\n public UploadAttachments(Params: UploadAttachmentsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UploadAttachments', Params, undefined );\r\n }\r\n\r\n public DeleteAttachment(Params: DeleteAttachmentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'DeleteAttachment', Params, undefined );\r\n }\r\n\r\n public GetAttachment(FileID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAttachment', {FileID: FileID} );\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { DocumentEndpoint } from \"@dino-proxy/endpoints/document.endpoint\";\r\nimport { DocumentOption } from \"@dino-proxy/entities/documentoption.entity\";\r\nimport { EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { AppInjector } from \"@m4u-angular/core/injector/injector.module\";\r\nimport { Subject } from \"rxjs\";\r\nimport { CustomerOptionService } from \"./customer-option.service\";\r\nimport { CustomerService } from \"./customer.service\";\r\n\r\nexport type DocumentTypePermissions = {\r\n IsAllowEdit: boolean;\r\n IsAllowNew: boolean;\r\n IsAllowView: boolean;\r\n}\r\n\r\nexport type DocumentEvent = {\r\n Type: EnumDocumentTypes;\r\n Document: Document;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentService extends BaseService {\r\n private updatedSubject = new Subject();\r\n readonly updated$ = this.updatedSubject.asObservable();\r\n\r\n constructor(public customerOptionService: CustomerOptionService,\r\n public customerService: CustomerService) {\r\n super();\r\n }\r\n\r\n public IsDocumentTypeAvailable(documentType: EnumDocumentTypes): DocumentTypePermissions {\r\n const documentOption = this.GetDocumentOptionByType(documentType);\r\n if (!documentOption) return { IsAllowEdit: false, IsAllowView: false, IsAllowNew: false };\r\n\r\n return { IsAllowNew: documentOption.IsAllowNew, IsAllowEdit: documentOption.IsAllowEdit, IsAllowView: documentOption.IsAllowView };\r\n }\r\n\r\n public GetDocumentOptionByType(documentType: EnumDocumentTypes) {\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n if (!customerOption) return null;\r\n\r\n\r\n const documentOption = customerOption[documentType + 'Option'];\r\n return documentOption ? documentOption as DocumentOption : null;\r\n }\r\n\r\n NotifyDocumentUpdated(type: EnumDocumentTypes, document: Document) {\r\n this.updatedSubject.next({ Type: type, Document: document });\r\n }\r\n\r\n public IsNegative(documentType: EnumDocumentTypes): boolean {\r\n return documentType === EnumDocumentTypes.Refund || documentType === EnumDocumentTypes.Return;\r\n }\r\n\r\n public IsFinancial(documentType: EnumDocumentTypes): boolean {\r\n return documentType === EnumDocumentTypes.Refund || documentType === EnumDocumentTypes.Invoice; // || documentType === EnumDocumentTypes.ReserveInvoice;\r\n }\r\n\r\n public IsInventory(documentType: EnumDocumentTypes): boolean {\r\n return documentType === EnumDocumentTypes.Refund || documentType === EnumDocumentTypes.Return \r\n || documentType === EnumDocumentTypes.Invoice || documentType === EnumDocumentTypes.DeliveryNote;\r\n }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DistributionCycle } from './../entities/distributioncycle.entity';\r\nimport { DistributionCycleSelectView } from './../views/distributioncycleselect.view';\r\nimport { DistributionCycleDate } from './../entities/distributioncycle.entity';\r\nimport { DistributionCycleGenerateParams } from './../params/distributioncyclegenerate.param';\r\n@Injectable()\r\nexport class DistributionCycleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DistributionCycle\", api);}\r\n\t\r\n\r\n public GetCurrentDistributionCycleList() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrentDistributionCycleList', undefined );\r\n }\r\n\r\n public GenerateDistributionCycleDates(Params: DistributionCycleGenerateParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GenerateDistributionCycleDates', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DistributionCycleEndpoint } from '@dino-proxy/endpoints/distributioncycle.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DistributionCycleSelectView } from '@dino-proxy/views/distributioncycleselect.view';\r\n\r\nclass State extends BaseState {\r\n SelectedDistributionID: number;\r\n IsMobile: boolean = false;\r\n MobileAllDistributionCycles: DistributionCycleSelectView[] = [];\r\n DateAndTimeFormat: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-cycle-select-dialog',\r\n templateUrl: './distribution-cycle-select-dialog.component.html',\r\n styleUrls: ['./distribution-cycle-select-dialog.component.scss']\r\n})\r\nexport class DistributionCycleSelectDialogComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, \r\n public ref: DynamicDialogRef,\r\n private distributionCycleEndpoint: DistributionCycleEndpoint) {\r\n super(A, 'DistributionCycleSelectDialogComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.DateAndTimeFormat = `${this.Framework.CompanyInfo.DateFormatLong} | ${this.Framework.CompanyInfo.TimeFormatShort}`;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.State.IsMobile) {\r\n this.DataSources['DistributionCycles'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.distributionCycleEndpoint.GetCurrentDistributionCycleList());\r\n } else {\r\n this.distributionCycleEndpoint.GetCurrentDistributionCycleList().subscribe(result => {\r\n this.State.MobileAllDistributionCycles = result.Entities;\r\n })\r\n }\r\n }\r\n\r\n onSelectionChanged(e) {\r\n if (e?.selectedRowKeys?.length > 0) {\r\n this.State.SelectedDistributionID = e.selectedRowKeys[0];\r\n }\r\n }\r\n\r\n\r\n MobileSelectCycle(entryID: number) {\r\n this.State.SelectedDistributionID = entryID;\r\n }\r\n\r\n OnOk() {\r\n this.ref.close(this.State.SelectedDistributionID);\r\n }\r\n\r\n OnCancel() {\r\n this.ref.close();\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { UpdateItemBatch } from '@dino-proxy/entities/updateitembatch.entity';\r\nimport { EnumDocumentTypes, EnumShoppingCartItemType } from '@dino-proxy/enums';\r\nimport { CreateShoppingCartByDocumentTypeParams } from '@dino-proxy/params/createshoppingcartbydocumenttype.param';\r\nimport { RemoveShoppingCartItemParams } from '@dino-proxy/params/removeshoppingcartitem.param';\r\nimport { UpdateItemParams } from '@dino-proxy/params/updateitem.param';\r\nimport { UpdateShipmentMethodParams } from '@dino-proxy/params/updateshipmentmethod.param';\r\nimport { UpdateShoppingCartItemQuantityParams } from '@dino-proxy/params/updateshoppingcartitemquantity.param';\r\nimport { UpdateShoppingCartItemQuantityBatchParams } from '@dino-proxy/params/updateshoppingcartitemquantitybatch.param';\r\nimport { UpdateTotalsParams } from '@dino-proxy/params/updatetotals.param';\r\nimport { UseBaseDocumentsParams } from '@dino-proxy/params/usebasedocuments.param';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ReplaySubject, Subject, Observable, of, map, catchError, switchMap } from 'rxjs';\r\nimport { CustomerEvent, CustomerService } from './customer.service';\r\nimport { DocumentService } from './document.service';\r\nimport { UiComponentService } from './ui-component.service';\r\nimport { ShoppingCartItemsVisibilityParams } from '@dino-proxy/params/shoppingcartitemsvisibility.param';\r\nimport { CustomerAddress } from '@dino-proxy/entities/customeraddress.entity';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { UpdateShoppingCartCasualAddressParams } from '@dino-proxy/params/updateshoppingcartcasualaddress.param';\r\nimport { UpdateShoppingCartCasualContactParams } from '@dino-proxy/params/updateshoppingcartcasualcontact.param';\r\nimport { PreSaveCheckoutShoppingCartParams } from '@dino-proxy/params/presavecheckoutshoppingcart.param';\r\nimport { DeleteAttachmentParams } from '@dino-proxy/params/deleteattachment.param';\r\nimport { UploadAttachmentsParams } from '@dino-proxy/params/uploadattachments.param';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { CustomerOptionService } from './customer-option.service';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DistributionCycleSelectDialogComponent } from '@dino-pages/checkout2/components/distribution-cycle-select-dialog/distribution-cycle-select-dialog.component';\r\n\r\nexport class ShoppingCartEvent2 {\r\n shoppingCart?: ShoppingCartView;\r\n}\r\n\r\nexport class ShoppingCartItemUpdate {\r\n IsValid: boolean;\r\n UniqueItemID: number;\r\n ItemID: number;\r\n Quantity: number;\r\n Currency: string;\r\n Price: number;\r\n PriceAfterVat: number;\r\n Discount: number;\r\n PriceAfterDiscount: number;\r\n PriceAfterDiscountAndVat: number;\r\n Total: number;\r\n TotalAfterVat: number;\r\n Notes: string;\r\n Warehouse: string;\r\n WarehouseID: number;\r\n PlaceAfterUniqueID: number;\r\n Batches: UpdateItemBatch[];\r\n SerialNumbers: string[];\r\n CustomFieldValues: any;\r\n}\r\n\r\nexport class ActionResultEvent {\r\n success: boolean;\r\n error: string;\r\n cancelled: boolean;\r\n}\r\n\r\nexport class ItemQuantityUpdate {\r\n ItemID: number;\r\n WarehouseID: number;\r\n UniqueItemID: number;\r\n Quantity: number;\r\n Notes: string;\r\n IsUpdateAdditionalDataOnly: boolean;\r\n IsAddItemAsKitMode: boolean;\r\n AdditionalData: string;\r\n Result$: Subject;\r\n}\r\n\r\nexport class EditShoppingCartWarning {\r\n IsEditMode: boolean;\r\n DocumentNumber: number;\r\n DocumentType: EnumDocumentTypes;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ShoppingCartService extends BaseService {\r\n private changedSubject = new ReplaySubject(1);\r\n private descriptionSubject = new ReplaySubject(1);\r\n private loadingSubject = new ReplaySubject(1);\r\n private pickoutSubject = new Subject();\r\n\r\n readonly changed$ = this.changedSubject.asObservable();\r\n readonly description$ = this.descriptionSubject.asObservable();\r\n readonly loading$ = this.loadingSubject.asObservable();\r\n readonly pickout$ = this.pickoutSubject.asObservable();\r\n\r\n private customerID: number = null;\r\n private shoppingCart: ShoppingCartView = null;\r\n //\r\n private itemQuantityUpdateQueue: ItemQuantityUpdate[] = [];\r\n private itemQuantityUpdateInproccess = false;\r\n private proccessActionHandler = null;\r\n\r\n constructor(private shoppingCartEndpoint: ShoppingCartEndpoint,\r\n private customerService: CustomerService,\r\n private uiComponentService: UiComponentService,\r\n private documentService: DocumentService,\r\n private customerOptionService: CustomerOptionService) {\r\n super();\r\n\r\n customerService.customerChanged$\r\n .subscribe((e: CustomerEvent) => {\r\n if (this.customerID !== e.customerID) {\r\n this.customerID = e.customerID;\r\n this.storeAndSendEvents(null);\r\n }\r\n });\r\n }\r\n\r\n public load(create: boolean, preventCreateOnSalesCustomerChange: boolean = false) {\r\n const result$ = new Subject();\r\n\r\n const action = (distributionCycleID: number = -1) => {\r\n this.loadingSubject.next(true);\r\n\r\n const obs$ = create\r\n ? this.shoppingCartEndpoint.GetOrCreateForCurrentUser(distributionCycleID)\r\n : this.shoppingCartEndpoint.GetForCurrentUser();\r\n\r\n obs$.subscribe({\r\n next: data => {\r\n this.loadingSubject.next(false);\r\n\r\n this.handleSuccessfulShoppingCartResponse(data, result$, false);\r\n //const newShoppingCart = data.Entity ? Utils.CloneObject(data.Entity) : null;\r\n // this.storeAndSendEvents(newShoppingCart);\r\n // if (!data.IsSuccess) {\r\n // this.UI.StopMessage(data.ResponseMessage);\r\n // }\r\n },\r\n error: () => {\r\n this.loadingSubject.next(false);\r\n result$.complete();\r\n }\r\n });\r\n }\r\n\r\n const closeAction = () => {\r\n this.loadingSubject.next(false);\r\n result$.complete();\r\n }\r\n\r\n const isSales = this.customerService.IsCurrentUserSalesPerson();\r\n this.showDistributionDialog(action, closeAction, create && (!isSales || isSales && !preventCreateOnSalesCustomerChange));\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public showDistributionDialog(action: (value: number) => void, closeAction: () => void, canShow: boolean = true) {\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n if (customerOption?.ShipmentOption?.IsEnableDistributionCycles\r\n && canShow\r\n && customerOption?.BusinessOption?.DefaultDocumentType !== EnumDocumentTypes.None\r\n && customerOption?.BusinessOption?.DefaultDocumentType !== EnumDocumentTypes.Invoice\r\n && customerOption?.BusinessOption?.DefaultDocumentType !== EnumDocumentTypes.Refund) {\r\n const dialogService = AppInjector.get(DialogService);\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n const screenService = AppInjector.get(ScreenService);\r\n screenService.options = { showRefreshMessage: { size: true, orientation: true } };\r\n const ref = dialogService.open(DistributionCycleSelectDialogComponent, {\r\n header: resourcesService.RC('titleDistributionSelect', this.ModuleName),\r\n width: screenService.IsMobile() ? '90%' : screenService.IsWideScreen() ? '40%' : '70%',\r\n styleClass: screenService.IsRTL() ? 'dialog-rtl ref-dialog' : 'ref-dialog ',\r\n contentStyle: { 'max-height': '2000px', 'overflow': 'auto' },\r\n baseZIndex: 10000\r\n });\r\n\r\n const refSubscription = ref.onClose.subscribe(result => {\r\n\r\n refSubscription && refSubscription.unsubscribe();\r\n ref && ref.close();\r\n\r\n if (result) {\r\n action(result);\r\n } else {\r\n closeAction();\r\n }\r\n });\r\n } else {\r\n action(-1);\r\n }\r\n }\r\n\r\n public loadShoppingCartDescription() {\r\n this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser()\r\n .subscribe(data => {\r\n this.descriptionSubject.next(data.Entity);\r\n });\r\n }\r\n\r\n public checkIsEditMode(): Observable {\r\n return this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser().pipe(map(data => {\r\n const result = {\r\n IsEditMode: data.Entity?.DocumentNumber > 0,\r\n DocumentType: data.Entity?.DocumentType,\r\n DocumentNumber: data.Entity?.DocumentNumber\r\n } as EditShoppingCartWarning\r\n return result;\r\n }));\r\n }\r\n\r\n public createShoppingCartByDocumentType(documentType: EnumDocumentTypes) {\r\n const action = (distributionCycleID: number) => {\r\n this.shoppingCartEndpoint.CreateShoppingCartByDocumentType({ DocumentType: documentType, DistributionCycleID: distributionCycleID } as CreateShoppingCartByDocumentTypeParams)\r\n .subscribe({\r\n next: result => {\r\n const shoppingCart = result.Entity;\r\n this.uiComponentService.ProcessAlerts(shoppingCart?.ValidationResult?.ValidationMessage);\r\n this.storeAndSendEvents(shoppingCart);\r\n },\r\n error: () => { }\r\n });\r\n }\r\n\r\n this.showDistributionDialog(action, () => { },\r\n documentType !== EnumDocumentTypes.None\r\n && documentType !== EnumDocumentTypes.Invoice\r\n && documentType !== EnumDocumentTypes.Refund);\r\n }\r\n\r\n public removeCurrentShoppingCart() {\r\n const result$ = new Subject();\r\n this.shoppingCartEndpoint.RemoveCurrentShoppingCart()\r\n .subscribe({\r\n next: () => {\r\n this.storeAndSendEvents(null);\r\n result$.next({ success: true } as ActionResultEvent);\r\n result$.complete();\r\n },\r\n error: (err) => {\r\n result$.next({ success: false, error: err.message } as ActionResultEvent);\r\n result$.complete();\r\n }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n public updateShipmentMethod(shipmentMethodID: number) {\r\n this.shoppingCartEndpoint.UpdateShipmentMethod({ ShipmentMethodID: shipmentMethodID } as UpdateShipmentMethodParams)\r\n .subscribe({\r\n next: result => {\r\n if (result.IsSuccess) {\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n } else {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n },\r\n error: () => { }\r\n });\r\n }\r\n\r\n public updateShoppingCartCasualAddress(casualAddress: CustomerAddress): Observable {\r\n return this.shoppingCartEndpoint.UpdateCasualAddress({\r\n CountryCode: casualAddress.Country,\r\n StateCode: casualAddress.State,\r\n Street: casualAddress.Street,\r\n City: casualAddress.City,\r\n ZipCode: casualAddress.ZipCode,\r\n StreetNo: casualAddress.StreetNo,\r\n Building: casualAddress.Building,\r\n Block: casualAddress.Block,\r\n County: casualAddress.County\r\n } as UpdateShoppingCartCasualAddressParams).pipe(\r\n map(result => {\r\n if (!result.IsSuccess) {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n return false;\r\n }\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n return true;\r\n }),\r\n catchError(error => {\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n public updateShoppingCartCasualContactPerson(casualContactPerson: ContactPerson): Observable {\r\n return this.shoppingCartEndpoint.UpdateCasualContactPerson(\r\n {\r\n Cellular: casualContactPerson.Cellular,\r\n Phone: casualContactPerson.Phone,\r\n Email: casualContactPerson.Email,\r\n Position: casualContactPerson.Position\r\n } as UpdateShoppingCartCasualContactParams).pipe(\r\n map(result => {\r\n if (!result.IsSuccess) {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n return false;\r\n }\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n return true;\r\n }),\r\n catchError(error => {\r\n return of(false);\r\n }));\r\n }\r\n\r\n public updateTotals(discountPercent: number, discountSum: number, totalAfterVat: number) {\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.UpdateTotals({\r\n DiscountPercent: discountPercent,\r\n DiscountSum: discountSum,\r\n TotalAfterVat: totalAfterVat\r\n } as UpdateTotalsParams).subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public updateItem(update: ShoppingCartItemUpdate, isNew: boolean) {\r\n const result$ = new Subject();\r\n\r\n const params = {\r\n ...update, ...{ IsNew: isNew }\r\n } as any as UpdateItemParams;\r\n\r\n this.shoppingCartEndpoint.UpdateItem(params)\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public removeItem(uniqueItemID: number) {\r\n if (!uniqueItemID) return;\r\n const result$ = new Subject();\r\n\r\n this.itemQuantityUpdateQueue = this.itemQuantityUpdateQueue.filter(x => x.UniqueItemID !== uniqueItemID);\r\n\r\n const params = { UniqueItemID: uniqueItemID } as RemoveShoppingCartItemParams;\r\n this.shoppingCartEndpoint.RemoveShoppingCartItem(params)\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => { }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n public addKit(parentItemID: number, warehouseID: number) {\r\n const update = {\r\n ItemID: parentItemID,\r\n WarehouseID: warehouseID,\r\n UniqueItemID: null,\r\n Quantity: 1,\r\n Notes: null,\r\n IsAddItemAsKitMode: true,\r\n IsUpdateAdditionalDataOnly: false,\r\n } as ItemQuantityUpdate;\r\n return this.addToItemQuantityUpdateQueue(update);\r\n }\r\n\r\n public changeItemQuantity3(itemID: number, uniqueItemID: number, quantity: number, notes: string, warehouseID: number) {\r\n const update = {\r\n ItemID: itemID,\r\n WarehouseID: warehouseID,\r\n UniqueItemID: uniqueItemID,\r\n Quantity: quantity,\r\n Notes: notes,\r\n IsUpdateAdditionalDataOnly: false\r\n } as ItemQuantityUpdate;\r\n return this.addToItemQuantityUpdateQueue(update);\r\n }\r\n\r\n public changeItemAddonData3(itemID: number, uniqueItemID: number, addonName: string, data: string) {\r\n const update = {\r\n ItemID: itemID,\r\n UniqueItemID: uniqueItemID,\r\n IsUpdateAdditionalDataOnly: true,\r\n AdditionalData: data\r\n } as ItemQuantityUpdate;\r\n return this.addToItemQuantityUpdateQueue(update);\r\n }\r\n\r\n public getTotalItemQuantity(itemCode: string, ignoreNegative: boolean) {\r\n if (!itemCode || !this.shoppingCart?.ShoppingCartItemViews?.length) return 0;\r\n\r\n let shoppingCartItemViews = this.shoppingCart?.ShoppingCartItemViews.filter(x =>\r\n !x.IsFree && x.ItemView?.ItemCode === itemCode\r\n && x.ItemType !== EnumShoppingCartItemType.Virtual && !x.ItemView.IsKitItem);\r\n if (ignoreNegative) {\r\n shoppingCartItemViews = shoppingCartItemViews.filter(x => x.Quantity > 0);\r\n }\r\n\r\n const total = shoppingCartItemViews\r\n .reduce((acc, current) => {\r\n return acc + current.Quantity;\r\n }, 0);\r\n return total;\r\n }\r\n\r\n public getIsNeedToCheckBatchesSerials(isNumberSelectionEnabledByBaseDocType: boolean): boolean {\r\n return this.shoppingCart && this.documentService.IsInventory(this.shoppingCart.DocumentType) && isNumberSelectionEnabledByBaseDocType;\r\n }\r\n\r\n public getItemBatchesQuantity(uniqueItemID: number): number {\r\n let batches = this.shoppingCart.BatchesView?.filter(b => b.UniqueItemID === uniqueItemID);\r\n return batches && batches.length > 0 ? batches.reduce((a, b) => {\r\n return a + b.Quantity;\r\n }, 0) : 0;\r\n }\r\n\r\n public getItemSerialNumbersQuantity(uniqueItemID: number): number {\r\n return this.shoppingCart.SerialNumbersView?.filter(s => s.UniqueItemID === uniqueItemID).length || 0;\r\n }\r\n\r\n public cleanShoppingCart() {\r\n this.itemQuantityUpdateQueue = [];\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.RemoveAllItemsFromShoppingCart()\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => { }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n public disablePromotionInShoppingCart(promotionID: number) {\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.DisablePromotionForShoppingCart(promotionID)\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => { }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n public enableAllPromotionItems() {\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.EnableAllPromotionItems()\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => { }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n public reorderShoppingCartItems(reorderedUniqueIDs) {\r\n this.shoppingCartEndpoint.ReorderShoppingCartItems(reorderedUniqueIDs)\r\n .subscribe({\r\n next: result => {\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n },\r\n error: () => { }\r\n });\r\n }\r\n\r\n public updateShoppingCartItemsVisibility(itemVisibilityEntries) {\r\n const params = { VisibilityEntries: itemVisibilityEntries } as ShoppingCartItemsVisibilityParams;\r\n\r\n this.shoppingCartEndpoint.UpdateShoppingCartItemsVisibility(params)\r\n .subscribe({\r\n next: result => { },\r\n error: () => { }\r\n });\r\n }\r\n\r\n public useBaseDocuments(documentIDs: number[], documentType: EnumDocumentTypes, targetDocumentType: EnumDocumentTypes = null) {\r\n const result$ = new Subject();\r\n\r\n const params = {\r\n BaseDocumentsEntryIDs: documentIDs,\r\n DocumentType: documentType,\r\n TargetDocumentType: targetDocumentType\r\n } as UseBaseDocumentsParams;\r\n\r\n const action = (cycleID: number) => {\r\n params.DistributionCycleID = cycleID;\r\n this.shoppingCartEndpoint.UseBaseDocuments(params)\r\n .subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n }\r\n\r\n this.showDistributionDialog(action, () => { result$.complete(); },\r\n !!targetDocumentType\r\n ? (targetDocumentType !== EnumDocumentTypes.None\r\n && targetDocumentType !== EnumDocumentTypes.Invoice\r\n && targetDocumentType !== EnumDocumentTypes.Refund)\r\n : (this.shoppingCart\r\n && this.shoppingCart.DocumentType !== EnumDocumentTypes.None\r\n && this.shoppingCart.DocumentType !== EnumDocumentTypes.Invoice\r\n && this.shoppingCart.DocumentType !== EnumDocumentTypes.Refund));\r\n\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public preSaveCheckoutShoppingCartDetails(shoppingCartView: ShoppingCartView, shouldSendEvents: boolean = true, customFieldValues: any): Observable {\r\n\r\n const params = {\r\n ContactPersonID: shoppingCartView?.ContactPersonID,\r\n CustomerAddressID: shoppingCartView?.CustomerAddressID,\r\n DocumentRemarks: shoppingCartView?.DocumentRemarks,\r\n ShipmentNotes: shoppingCartView?.ShipmentNotes,\r\n DocDueDate: shoppingCartView?.DocDueDate,\r\n ShipmentMethodID: shoppingCartView?.ShipmentMethodID,\r\n PostingDate: shoppingCartView?.PostingDate,\r\n PaymentDueDate: shoppingCartView?.PaymentDueDate,\r\n NumAtCard: shoppingCartView?.NumAtCard,\r\n PaymentTermID: shoppingCartView?.PaymentTermID,\r\n IsDraft: shoppingCartView?.IsDraft,\r\n SignatureBase64: shoppingCartView?.SignatureBase64,\r\n IsUseCasualAddress: shoppingCartView?.IsUseCasualAddress,\r\n IsUseCasualContactPerson: shoppingCartView?.IsUseCasualContactPerson,\r\n CustomFieldValues: customFieldValues,\r\n DistributionCycleID: shoppingCartView?.DistributionCycleID\r\n } as PreSaveCheckoutShoppingCartParams;\r\n\r\n return this.shoppingCartEndpoint.PreSaveCheckoutShoppingCartDetails(params).pipe(\r\n map(result => {\r\n if (!result.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(result.ResponseMessage);\r\n return false;\r\n }\r\n if (shouldSendEvents) {\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n }\r\n return true;\r\n }),\r\n catchError(error => {\r\n this.uiComponentService.ProcessAlerts(error);\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n public applyCoupon(couponText: string) {\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.ApplyCoupon(couponText)\r\n .subscribe({\r\n next: response => {\r\n response.Data && this.load(false);\r\n result$.next({ success: response.Data, error: response.ResponseMessage } as ActionResultEvent);\r\n result$.complete();\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public removeCoupon(value: string) {\r\n const result$ = new Subject();\r\n this.shoppingCartEndpoint.RemoveCoupon(value)\r\n .subscribe({\r\n next: response => {\r\n response.Data && this.load(false);\r\n result$.next({ success: response.Data, error: response.ResponseMessage } as ActionResultEvent);\r\n result$.complete();\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public pickoutItem(itemID: number) {\r\n this.pickoutSubject.next(itemID);\r\n }\r\n\r\n public uploadAttachments(files) {\r\n const result$ = new Subject();\r\n\r\n const params = { Files: files } as UploadAttachmentsParams;\r\n this.shoppingCartEndpoint.UploadAttachments(params).subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public deleteAttachment(fileID: number) {\r\n const result$ = new Subject();\r\n\r\n const params = { FileID: fileID } as DeleteAttachmentParams;\r\n this.shoppingCartEndpoint.DeleteAttachment(params).subscribe({\r\n next: response => {\r\n this.handleSuccessfulShoppingCartResponse(response, result$, true);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n\r\n return result$.asObservable();\r\n }\r\n\r\n public getAttachment(fileID: number, fileName: string) {\r\n this.shoppingCartEndpoint.GetAttachment(fileID)\r\n .subscribe({\r\n next: response => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n } else {\r\n Utils.DoFileDownload(fileName, response.Entity.FileBlob, response.Entity.ContentType);\r\n }\r\n },\r\n error: (e) => {\r\n this.UI.StopMessage(e);\r\n }\r\n });\r\n }\r\n\r\n private storeAndSendEvents(shoppingCart: ShoppingCartView) {\r\n this.shoppingCart = Utils.CloneObject(shoppingCart);\r\n this.changedSubject.next({ shoppingCart: shoppingCart } as ShoppingCartEvent2);\r\n this.descriptionSubject.next(shoppingCart\r\n ? {\r\n DocumentType: shoppingCart?.DocumentType,\r\n IsDraft: shoppingCart?.IsDraft,\r\n Length: shoppingCart?.ShoppingCartItemViews?.length || 0,\r\n DisableShoppingCartChange: shoppingCart?.ShoppingPayment?.AnyPaymentDone,\r\n Currency: shoppingCart?.Currency,\r\n TotalAfterVat: shoppingCart?.TotalAfterVat,\r\n TotalBeforeVat: shoppingCart?.TotalBeforeVat,\r\n DocumentNumber: shoppingCart?.OriginalDocumentNumber\r\n } as ShoppingCartDescriptionResult\r\n : null);\r\n }\r\n\r\n protected handleSuccessfulShoppingCartResponse(response: BaseEntityResponse,\r\n subject: Subject,\r\n showAlerts: boolean) {\r\n\r\n if (showAlerts) this.uiComponentService.ProcessAlerts(response?.Entity?.ValidationResult?.ValidationMessage || response?.ResponseMessage);\r\n\r\n if (!response.IsSuccess) {\r\n subject.next({ success: false, error: response.ResponseMessage } as ActionResultEvent);\r\n subject.complete();\r\n return;\r\n }\r\n\r\n const shoppingCart = response.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n subject.next({ success: true } as ActionResultEvent);\r\n subject.complete();\r\n }\r\n\r\n public restoreQuantity(itemID: number, uniqueItemID: number, warehouseID: number): { quantity: number, multiply?: boolean } {\r\n if (!this.shoppingCart?.ShoppingCartItemViews?.length || !itemID) return { quantity: 0 };\r\n\r\n const items = this.shoppingCart?.ShoppingCartItemViews.filter(x => x.ItemID === itemID);\r\n if (!items.length) return { quantity: 0 };\r\n\r\n if (uniqueItemID) {\r\n const uItems = items.filter(x => x.UniqueItemID === uniqueItemID);\r\n if (uItems.length === 1) {\r\n return { quantity: uItems[0].Quantity, multiply: false };\r\n }\r\n }\r\n\r\n if (warehouseID) {\r\n const wItems = items.filter(x => x.WarehouseID === warehouseID);\r\n if (wItems.length === 1) {\r\n return { quantity: wItems[0].Quantity, multiply: false };\r\n } else if (wItems.length > 1) {\r\n return { quantity: 1, multiply: true };\r\n }\r\n }\r\n\r\n if (items.length === 1) {\r\n return { quantity: items[0].Quantity, multiply: false };\r\n } else if (items.length > 1) {\r\n return { quantity: 1, multiply: true };\r\n }\r\n\r\n return { quantity: 0 };\r\n }\r\n\r\n public addItemFromBarcode(barcode: string) {\r\n const result$ = new Subject();\r\n\r\n this.shoppingCartEndpoint.AddItemFromBarcodeScanner(null, barcode).pipe(switchMap(result => {\r\n if (result.IsSuccess) {\r\n return this.load(false).pipe(map(x => result.Entity));\r\n } else {\r\n this.uiComponentService.ProcessAlerts(result.ResponseMessage);\r\n return of(null);\r\n }\r\n })).subscribe({\r\n next: response => {\r\n result$.next(response);\r\n },\r\n error: () => {\r\n result$.complete();\r\n }\r\n });\r\n return result$.asObservable();\r\n }\r\n\r\n protected addToItemQuantityUpdateQueue(update: ItemQuantityUpdate): Observable {\r\n let currentUpdate = this.itemQuantityUpdateQueue\r\n .find(x => x.ItemID === update.ItemID\r\n && x.UniqueItemID === update.UniqueItemID\r\n && x.IsUpdateAdditionalDataOnly === update.IsUpdateAdditionalDataOnly);\r\n\r\n if (currentUpdate) {\r\n currentUpdate.Quantity = update.Quantity;\r\n currentUpdate.Notes = update.Notes;\r\n currentUpdate.AdditionalData = update.AdditionalData;\r\n currentUpdate.Result$.next({ cancelled: true } as ActionResultEvent);\r\n currentUpdate.Result$.complete();\r\n } else {\r\n currentUpdate = update;\r\n this.itemQuantityUpdateQueue.push(currentUpdate);\r\n }\r\n currentUpdate.Result$ = new Subject();\r\n\r\n this.proccessItemQuantityUpdateQueue();\r\n\r\n return currentUpdate.Result$.asObservable();\r\n }\r\n\r\n protected proccessItemQuantityUpdateQueue() {\r\n const proccessAction = () => {\r\n if (this.itemQuantityUpdateInproccess || !this.itemQuantityUpdateQueue.length) return;\r\n\r\n this.itemQuantityUpdateInproccess = true;\r\n\r\n const currentQueue = this.itemQuantityUpdateQueue;\r\n this.itemQuantityUpdateQueue = [];\r\n\r\n const updates = currentQueue.map(x => {\r\n const params = {\r\n ItemID: x.ItemID,\r\n WarehouseID: x.WarehouseID,\r\n UniqueItemID: x.UniqueItemID,\r\n Quantity: x.Quantity,\r\n Notes: x.Notes,\r\n IsUpdateAdditionalDataOnly: x.IsUpdateAdditionalDataOnly,\r\n IsAddItemAsKitMode: x.IsAddItemAsKitMode,\r\n AdditionalData: x.AdditionalData\r\n } as UpdateShoppingCartItemQuantityParams;\r\n return params;\r\n });\r\n const update = { Updates: updates } as UpdateShoppingCartItemQuantityBatchParams;\r\n\r\n this.shoppingCartEndpoint.UpdateShoppingCartItemQuantity3(update)\r\n .subscribe({\r\n next: response => {\r\n this.itemQuantityUpdateInproccess = false;\r\n this.handleSuccessfulShoppingCartBatchResponse(response, currentQueue);\r\n //\r\n this.proccessItemQuantityUpdateQueue();\r\n },\r\n error: (err: Error) => {\r\n this.itemQuantityUpdateInproccess = false;\r\n currentQueue.forEach(x => {\r\n x.Result$.next({ success: false, error: err?.message } as ActionResultEvent);\r\n x.Result$.complete();\r\n });\r\n }\r\n });\r\n };\r\n\r\n if (this.proccessActionHandler) {\r\n clearTimeout(this.proccessActionHandler);\r\n }\r\n this.proccessActionHandler = setTimeout(() => proccessAction(), 500);\r\n }\r\n\r\n protected handleSuccessfulShoppingCartBatchResponse(response: BaseEntityResponse,\r\n queue: ItemQuantityUpdate[],\r\n func?: (shoppingCart: ShoppingCartView) => void) {\r\n if (!response.IsSuccess) {\r\n queue.forEach(x => {\r\n x.Result$.next({ success: false, error: response.ResponseMessage } as ActionResultEvent);\r\n x.Result$.complete();\r\n });\r\n return;\r\n }\r\n\r\n this.uiComponentService.ProcessAlerts(response?.Entity?.ValidationResult?.ValidationMessage);\r\n\r\n const shoppingCart = response.Entity;\r\n if (func) func(shoppingCart);\r\n this.storeAndSendEvents(shoppingCart);\r\n\r\n queue.forEach(x => {\r\n x.Result$.next({ success: true } as ActionResultEvent);\r\n x.Result$.complete();\r\n });\r\n }\r\n}\r\n","export const ROUTE_PATHS = {\r\n // ADMIN_DASHBOARD: 'pages/admin-dashboard',\r\n ADMINS: 'pages/admins',\r\n ADMIN: 'pages/admin',\r\n TERMS_OF_USE: 'pages/termsofuse',\r\n IMPERSONATE: 'pages/impersonate',\r\n DOCUMENT_PROCESSING: 'pages/document-processing',\r\n DOCUMENT_PROCESSINGS: 'pages/document-processings',\r\n\r\n HOME: 'pages/home',\r\n CATALOGUE: 'pages/catalogueN',\r\n SHOPPING_CART: 'pages/shoppingcartN',\r\n CHECKOUT: 'checkout',\r\n CHECKOUT_DESKTOP: 'pages/checkout-desktop',\r\n CHECKOUT_MOBILE: 'pages/checkout-mobile',\r\n EDIT_SHOPPING_CART_ITEM: 'pages/edit-shopping-cart-item',\r\n ITEM: 'itemN',\r\n ITEM_DESKTOP: 'pages/desktop-itemN',\r\n ITEM_MOBILE: 'pages/mobile-itemN',\r\n\r\n CUSTOMERS: 'pages/customers',\r\n WISHLIST: 'pages/wishlist',\r\n\r\n MY_DETAILSN: 'pages/mydetailsN',\r\n CUSTOMER_DETAILS_FULL: 'pages/customer-details-full',\r\n CUSTOMER_DETAILS_WINDOW: 'pages/customer-details-window',\r\n BANK_DETAILS: 'pages/customer-bank-details',\r\n LEDGERS_FULL: 'pages/ledgers-full',\r\n LEDGERS_WINDOW: 'pages/ledgers-window',\r\n DASHBOARD_FULL: 'pages/dashboard-full',\r\n DASHBOARD_FULL_CUSTOMER: 'pages/dashboard-full-customer',\r\n DASHBOARD_WINDOW: 'pages/dashboard-window',\r\n AGING_FULL: 'pages/aging-full',\r\n AGING_WINDOW: 'pages/aging-window',\r\n AGING_CUSTOMERS_LIST: 'pages/aging-customers',\r\n\r\n DOCUMENT: 'pages/document',\r\n QUOTES: 'pages/quotes',\r\n ORDERS: 'pages/orders',\r\n DELIVERY_NOTES: 'pages/deliverynotes',\r\n INVOICES: 'pages/invoices',\r\n RETURNS: 'pages/returns',\r\n RETURN_REQUESTS: 'pages/returnrequests',\r\n REFUNDS: 'pages/refunds',\r\n\r\n RECEIPTS: 'pages/receipts',\r\n RECEIPT: 'pages/receipt',\r\n CREATE_RECEIPT: 'create-receipt',\r\n CREATE_RECEIPT_DESKTOP: 'pages/create-receipt-desktop',\r\n CREATE_RECEIPT_MOBILE: 'pages/create-receipt-mobile',\r\n\r\n PROMOTIONS: 'pages/promotions',\r\n PROMOTION: 'pages/promotion',\r\n SUGGESTED_PROMOTIONS: 'pages/suggestedpromotions',\r\n GIFT_CARDS: 'pages/gift-cards',\r\n GIFT_CARD: 'pages/gift-card',\r\n\r\n SALES_SUMMARY: 'pages/sales-summary',\r\n SALE_TARGET_PERFORMANCE: 'pages/sale-target-performance',\r\n}\r\n\r\nexport const GetConfigPath = (fullPath: string, idSpesific: boolean = false): string => {\r\n let editedPaths = fullPath.replace('pages/','');\r\n return idSpesific ? `${editedPaths}/:EntryID` : editedPaths;\r\n}\r\n\r\nexport const GetMenuPath = (fullPath: string): string => {\r\n return `/${fullPath}`;\r\n}\r\n\r\nexport const GetNewObjectPath = (fullPath: string): string => {\r\n return `/${fullPath}/new`;\r\n}","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n SafeHTML: SafeHtml;\r\n}\r\n\r\nexport enum EnumBadgeKind {\r\n TopLeft,\r\n TopRight,\r\n BottomRight,\r\n Custom\r\n};\r\n\r\nexport enum EnumBadgeSize {\r\n Small,\r\n Medium,\r\n Large\r\n}\r\n\r\n@Component({\r\n selector: 'app-image-badge',\r\n templateUrl: './image-badge.component.html',\r\n styleUrls: ['./image-badge.component.scss']\r\n})\r\nexport class ImageBadgeComponent extends BaseComponent {\r\n EnumBadgeKind = EnumBadgeKind;\r\n EnumBadgeSize = EnumBadgeSize;\r\n\r\n @Input() BadgeKind: EnumBadgeKind;\r\n @Input() BadgeData: string;\r\n @Input() BadgeSize: EnumBadgeSize = EnumBadgeSize.Large;\r\n\r\n @ViewChild('customBadge') customBadge: ElementRef;\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'ImageComponent', State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (this.BadgeKind == EnumBadgeKind.Custom) {\r\n this.State.SafeHTML = this.sanitizer.bypassSecurityTrustHtml(this.BadgeData);\r\n }\r\n }\r\n\r\n GetSizeClass() {\r\n switch (this.BadgeSize) {\r\n case EnumBadgeSize.Small: return 'badge-small';\r\n case EnumBadgeSize.Medium: return 'badge-medium';\r\n case EnumBadgeSize.Large: return 'badge-large';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \";","import { EnumShareDocumentTypes } from '@dino-components/share-document/share-document.component';\r\nimport { EnumPriceInfoDisplayTypes, EnumDocumentDraftOptions, EnumCasualContactPersonNotificationReceivers, EnumContactPersonEntryModes, EnumImpersonateTargets, EnumEffectTargetSelector, EnumAddressEntryModes, EnumGiftCardStatuses, EnumPromotionDiscountApplicationRule, EnumPromotionResultTypes, EnumOrderingItemsOutOfStockAction, EnumAvailableItemsCalculationOptions, EnumAttributeDisplayOptions, EnumAttributesDisplayTabs, EnumCatalogueViewOptions, EnumDatabaseObjects, EnumDisplayGroupingOptions, EnumDisplaySortingOptions, EnumDocumentTypes, EnumExternalQueryFieldFormats, EnumFilterDisplayOptions, EnumFormFieldOptions, EnumGoCreditCardTypes, EnumGoCreditTransactionModes, EnumInvoiceOneDocumentTypes, EnumItemImagesFallbackTypes, EnumDocumentProcessingSteps, EnumDocumentStatuses, EnumPriceCurrencyDisplayOptions, EnumPriceDisplayOptions, EnumPromotionAggregationLevelTypes, EnumPromotionCustomerFilterTypes, EnumPromotionEffectItemFilterTypes, EnumPromotionEffectTargetTypes, EnumPromotionItemFilterTypes, EnumPromotionRequiredTypes, EnumReturnRequestStatuses, EnumShoppingCartItemViewOptions, EnumShoppingCartModeOptions, EnumStockDisplayOptions, EnumTitlePositions, EnumDocumentProcessingStatus, EnumDocumentFilterBySubjects, EnumEUVatStatuses, EnumInvoiceOneNotificationTypes, EnumPaymentMeans, EnumDiscountPermissionCheckTypes, EnumCityInputMethods, EnumDocumentProcessingTypes, EnumDocumentSource, EnumCustomFieldLocations, EnumCustomFieldTypes, EnumSalesDocumentLayers, EnumSaleTargetDimensions, EnumSaleTargetMeasures, EnumExternalQueryType, EnumBarcodeScannerTypes, EnumDashboardFilterAdditionalPeriod, EnumShowTotalOnTopOptions, EnumGiftCardValueTypes, EnumCategoryPaneBehaviour, EnumShowDocumentFilesModes, EnumAssortmentVisibilityModes, EnumAddressFieldOptions } from '@dino-proxy/enums';\r\nimport { Globals } from '../_globals';\r\nimport { CopyToDocumentActions } from '@dino-pages/documents/components/copy-to-dialog/copy-to-dialog.component';\r\n\r\nexport const Lists_EN = {\r\n Properties: {\r\n Language: \"EN\",\r\n },\r\n GoCreditCardTypes: [\r\n {\r\n Text: 'Use credit card ****',\r\n Value: EnumGoCreditCardTypes.Existing\r\n },\r\n {\r\n Text: 'Enter a new credit card',\r\n Value: EnumGoCreditCardTypes.New\r\n }\r\n ],\r\n EnumOrderStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Processed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n DocumentDraftOptions: [\r\n {\r\n Text: 'Not Allowed',\r\n Value: EnumDocumentDraftOptions.NotAllowed\r\n },\r\n {\r\n Text: 'Allowed',\r\n Value: EnumDocumentDraftOptions.Allowed\r\n },\r\n {\r\n Text: 'Allowed & Used By Default',\r\n Value: EnumDocumentDraftOptions.AllowedAndDefault\r\n },\r\n {\r\n Text: 'Always Draft',\r\n Value: EnumDocumentDraftOptions.AlwaysDraft\r\n }\r\n ],\r\n PriceCommentsDisplayTypes: [\r\n {\r\n Text: 'None',\r\n Value: EnumPriceInfoDisplayTypes.None,\r\n },\r\n {\r\n Text: 'Only Comments',\r\n Value: EnumPriceInfoDisplayTypes.Comments,\r\n },\r\n {\r\n Text: 'Comments And Description',\r\n Value: EnumPriceInfoDisplayTypes.CommentsAndDescription,\r\n }\r\n ],\r\n EnumInvoiceStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumQuoteStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Processed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumDeliveryNoteStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Processed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumReturnRequestStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Processed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumReturnStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Processed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumRefundStatuses: [\r\n {\r\n Text: 'Pending',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'Delivered',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'Canceled',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'Approved',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'Partial Delivered',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n ReturnRequestStatuses: [\r\n {\r\n Text: 'Canceled',\r\n Value: EnumReturnRequestStatuses.Canceled\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: EnumReturnRequestStatuses.Closed\r\n },\r\n {\r\n Text: 'Open',\r\n Value: EnumReturnRequestStatuses.Open\r\n }\r\n ],\r\n EnumDatabaseObjects: [\r\n {\r\n Text: 'Delivery',\r\n Value: EnumDatabaseObjects.Delivery\r\n },\r\n {\r\n Text: 'Invoice',\r\n Value: EnumDatabaseObjects.Invoice\r\n }\r\n ],\r\n EnumGiftCardStatuses: [\r\n {\r\n Text: 'Used',\r\n Value: EnumGiftCardStatuses.Used\r\n },\r\n {\r\n Text: 'Not used',\r\n Value: EnumGiftCardStatuses.NotUsed\r\n }\r\n ],\r\n EnumDisplayGroupingOptions: [\r\n {\r\n Text: 'No grouping',\r\n Value: EnumDisplayGroupingOptions.None\r\n },\r\n {\r\n Text: 'Grouping by categories',\r\n Value: EnumDisplayGroupingOptions.Categories\r\n },\r\n {\r\n Text: 'Grouping by manufacturers',\r\n Value: EnumDisplayGroupingOptions.Manufacturers\r\n },\r\n {\r\n Text: 'Grouping by brands',\r\n Value: EnumDisplayGroupingOptions.Brands\r\n },\r\n {\r\n Text: 'Grouping by vendors',\r\n Value: EnumDisplayGroupingOptions.Vendors\r\n },\r\n ],\r\n EnumPaymentMeans: [\r\n {\r\n Text: 'None',\r\n Value: EnumPaymentMeans.None\r\n },\r\n {\r\n Text: 'According to payment terms',\r\n Value: EnumPaymentMeans.Later\r\n },\r\n {\r\n Text: 'Credit Card',\r\n Value: EnumPaymentMeans.CreditCard\r\n },\r\n {\r\n Text: 'Cash',\r\n Value: EnumPaymentMeans.Cash\r\n },\r\n {\r\n Text: 'Cheque',\r\n Value: EnumPaymentMeans.Cheque\r\n },\r\n {\r\n Text: 'Wire Transfer',\r\n Value: EnumPaymentMeans.WireTransfer\r\n },\r\n ],\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'Open',\r\n Value: true\r\n },\r\n {\r\n Text: 'Closed',\r\n Value: false\r\n }\r\n ],\r\n EnumDisplaySortingOptions: [\r\n {\r\n Text: 'Item Name',\r\n Value: EnumDisplaySortingOptions.ItemName\r\n },\r\n {\r\n Text: 'Item Code',\r\n Value: EnumDisplaySortingOptions.ItemCode\r\n },\r\n {\r\n Text: 'Bar Code',\r\n Value: EnumDisplaySortingOptions.BarCode\r\n },\r\n {\r\n Text: 'Brand',\r\n Value: EnumDisplaySortingOptions.Brand\r\n },\r\n {\r\n Text: 'Manufacturer',\r\n Value: EnumDisplaySortingOptions.Manufacturer\r\n },\r\n {\r\n Text: 'Vendor',\r\n Value: EnumDisplaySortingOptions.Vendor\r\n }, {\r\n Text: 'Custom',\r\n Value: EnumDisplaySortingOptions.Custom\r\n }\r\n ],\r\n ReceiptTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'General',\r\n Name: \"GeneralTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Paid Documents',\r\n Name: \"PaidDocuments\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Payment Information',\r\n Name: \"PaymentInfo\"\r\n }\r\n ],\r\n ItemDetailsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'General',\r\n Name: \"GeneralTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Kit Items',\r\n Name: \"KitItemsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Attributes',\r\n Name: \"AttributesTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Variations',\r\n Name: \"VariationsTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'Additional Items',\r\n Name: \"AdditionalItemsTab\"\r\n },\r\n {\r\n index: 5,\r\n text: 'Alternative Items',\r\n Name: \"AlternativeItemsTab\"\r\n },\r\n {\r\n index: 6,\r\n text: 'Also Bought Items',\r\n Name: \"AlsoBoughtItemsTab\"\r\n },\r\n {\r\n index: 7,\r\n text: 'Promotions',\r\n Name: \"PromotionsTab\"\r\n },\r\n {\r\n index: 8,\r\n text: 'Last Sales',\r\n Name: \"LastSalesTab\"\r\n },\r\n {\r\n index: 9,\r\n text: 'Availability',\r\n Name: \"AvailabilityTab\"\r\n },\r\n {\r\n index: 10,\r\n text: 'Planned Purchases',\r\n Name: \"PlannedPurchasesTab\"\r\n }\r\n ],\r\n CategoriesFilterTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Categories',\r\n Name: \"CategoriesTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Filter',\r\n Name: \"FilterTab\"\r\n }\r\n ],\r\n ImpersonateTargets: [\r\n {\r\n Text: 'Customer',\r\n Value: EnumImpersonateTargets.Customer\r\n },\r\n {\r\n Text: 'Sales Person',\r\n Value: EnumImpersonateTargets.SalesPerson\r\n }\r\n ],\r\n EnumAttributesDisplayTabs: [\r\n {\r\n Text: 'Attributes',\r\n Value: EnumAttributesDisplayTabs.Attributes\r\n },\r\n {\r\n Text: 'Main',\r\n Value: EnumAttributesDisplayTabs.Main\r\n }\r\n ],\r\n AddressEntryModes: [\r\n {\r\n Text: 'None',\r\n Value: EnumAddressEntryModes.None\r\n },\r\n {\r\n Text: 'Customer Address',\r\n Value: EnumAddressEntryModes.CustomerAddress\r\n },\r\n {\r\n Text: 'Casual',\r\n Value: EnumAddressEntryModes.Casual\r\n },\r\n {\r\n Text: 'Both',\r\n Value: EnumAddressEntryModes.Both\r\n }\r\n ],\r\n CasualContactPersonNotificationReceivers: [\r\n {\r\n Text: 'Current User Contact Information',\r\n Value: EnumCasualContactPersonNotificationReceivers.CurrentContactPerson\r\n },\r\n {\r\n Text: 'Casual Contact Information',\r\n Value: EnumCasualContactPersonNotificationReceivers.CasualContactInformation\r\n }\r\n ],\r\n ContactPersonEntryModes: [\r\n {\r\n Text: 'None',\r\n Value: EnumContactPersonEntryModes.None\r\n },\r\n {\r\n Text: 'Customer Contact Person',\r\n Value: EnumContactPersonEntryModes.CustomerContactPerson\r\n },\r\n {\r\n Text: 'Casual',\r\n Value: EnumContactPersonEntryModes.Casual\r\n },\r\n {\r\n Text: 'Both',\r\n Value: EnumContactPersonEntryModes.Both\r\n }\r\n ],\r\n EnumStockDisplayOptions: [\r\n {\r\n Text: 'None',\r\n Value: EnumStockDisplayOptions.None\r\n },\r\n {\r\n Text: 'Custom',\r\n Value: EnumStockDisplayOptions.Custom\r\n },\r\n {\r\n Text: 'Show In Out Of Stock',\r\n Value: EnumStockDisplayOptions.ShowInOutOfStock\r\n },\r\n {\r\n Text: 'Show In Stock',\r\n Value: EnumStockDisplayOptions.ShowInStock\r\n },\r\n {\r\n Text: 'Show Out Of Stock',\r\n Value: EnumStockDisplayOptions.ShowOutOfStock\r\n },\r\n {\r\n Text: 'Show Stock Level',\r\n Value: EnumStockDisplayOptions.ShowStockLevel\r\n }\r\n ],\r\n EnumPriceCurrencyDisplayOptions: [\r\n {\r\n Text: 'Display In Customer Currency',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInCustomerCurrency\r\n },\r\n {\r\n Text: 'Display In Local Currency',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInLocalCurrency\r\n },\r\n {\r\n Text: 'Display In Original Currency',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInOriginalCurrency\r\n },\r\n {\r\n Text: 'Display In Specific Currency',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInSpecificCurrency\r\n },\r\n ],\r\n\r\n EnumOrderingItemsOutOfStockAction: [\r\n {\r\n Text: 'Block',\r\n Value: EnumOrderingItemsOutOfStockAction.Block\r\n },\r\n {\r\n Text: 'Warning',\r\n Value: EnumOrderingItemsOutOfStockAction.Warning\r\n },\r\n {\r\n Text: 'None',\r\n Value: EnumOrderingItemsOutOfStockAction.None\r\n }\r\n ],\r\n\r\n EnumAvailableItemsCalculationOptions: [\r\n {\r\n Text: 'In Stock',\r\n Value: EnumAvailableItemsCalculationOptions.InStock\r\n },\r\n {\r\n Text: 'Available',\r\n Value: EnumAvailableItemsCalculationOptions.Available\r\n },\r\n {\r\n Text: 'Available Immediately',\r\n Value: EnumAvailableItemsCalculationOptions.AvailableImmediately\r\n }\r\n ],\r\n\r\n EnumCatalogueViewOptions: [\r\n {\r\n Text: 'Grid',\r\n Value: EnumCatalogueViewOptions.Grid\r\n },\r\n {\r\n Text: 'List',\r\n Value: EnumCatalogueViewOptions.List\r\n },\r\n {\r\n Text: 'Minimal',\r\n Value: EnumCatalogueViewOptions.Compact\r\n }\r\n ],\r\n EnumPriceDisplayOptions: [\r\n {\r\n Text: 'After Discount',\r\n Value: EnumPriceDisplayOptions.AfterDiscount\r\n },\r\n {\r\n Text: 'Before Discount And After Discount',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountAndAfterDiscount\r\n },\r\n {\r\n Text: 'Before Discount And Discount Percent',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountAndDiscountPercent\r\n },\r\n {\r\n Text: 'Before Discount Discount Percent And Final',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountDiscountPercentAndFinal\r\n },\r\n {\r\n Text: 'None',\r\n Value: EnumPriceDisplayOptions.None\r\n }\r\n ],\r\n EnumGoCreditTransactionModes: [\r\n {\r\n Text: 'Immediate settlement (J4)',\r\n Value: EnumGoCreditTransactionModes.J4\r\n },\r\n {\r\n Text: 'Authorization only (J5)',\r\n Value: EnumGoCreditTransactionModes.J5\r\n },\r\n {\r\n Text: 'Validation only (J2)',\r\n Value: EnumGoCreditTransactionModes.J2\r\n }\r\n ],\r\n EnumTitlePositions: [\r\n {\r\n Text: 'Center',\r\n Value: EnumTitlePositions.Center\r\n },\r\n {\r\n Text: 'Left',\r\n Value: EnumTitlePositions.Left\r\n },\r\n {\r\n Text: 'Right',\r\n Value: EnumTitlePositions.Right\r\n }\r\n ],\r\n EnumItemImagesFallbackTypes: [\r\n {\r\n Text: 'Brands',\r\n Value: EnumItemImagesFallbackTypes.Brands\r\n },\r\n {\r\n Text: 'Categories',\r\n Value: EnumItemImagesFallbackTypes.Categories\r\n },\r\n {\r\n Text: 'Manufacturers',\r\n Value: EnumItemImagesFallbackTypes.Manufacturers\r\n },\r\n {\r\n Text: 'None',\r\n Value: EnumItemImagesFallbackTypes.None\r\n },\r\n {\r\n Text: 'Vendor',\r\n Value: EnumItemImagesFallbackTypes.Vendor\r\n }\r\n ],\r\n EnumAttributeDisplayOptions: [\r\n {\r\n Text: 'Color Circles',\r\n Value: EnumAttributeDisplayOptions.ColorCircles\r\n },\r\n {\r\n Text: 'Date',\r\n Value: EnumAttributeDisplayOptions.Date\r\n },\r\n {\r\n Text: 'Link',\r\n Value: EnumAttributeDisplayOptions.Link\r\n },\r\n {\r\n Text: 'Number',\r\n Value: EnumAttributeDisplayOptions.Number\r\n },\r\n {\r\n Text: 'Tag',\r\n Value: EnumAttributeDisplayOptions.Tag\r\n },\r\n {\r\n Text: 'Text',\r\n Value: EnumAttributeDisplayOptions.Text\r\n }\r\n ],\r\n EnumFilterDisplayOptions: [\r\n {\r\n Text: 'Color Circles',\r\n Value: EnumFilterDisplayOptions.ColorCircles\r\n },\r\n {\r\n Text: 'Date Range',\r\n Value: EnumFilterDisplayOptions.DateRange\r\n },\r\n {\r\n Text: 'List',\r\n Value: EnumFilterDisplayOptions.List\r\n },\r\n {\r\n Text: 'Number Range',\r\n Value: EnumFilterDisplayOptions.NumberRange\r\n },\r\n {\r\n Text: 'Text',\r\n Value: EnumFilterDisplayOptions.Text\r\n }\r\n ],\r\n EnumExternalQueryFieldFormats: [\r\n {\r\n Text: 'Boolean',\r\n Value: EnumExternalQueryFieldFormats.Boolean\r\n },\r\n {\r\n Text: 'Date',\r\n Value: EnumExternalQueryFieldFormats.Date\r\n },\r\n {\r\n Text: 'Money',\r\n Value: EnumExternalQueryFieldFormats.Money\r\n },\r\n {\r\n Text: 'Number',\r\n Value: EnumExternalQueryFieldFormats.Number\r\n },\r\n {\r\n Text: 'Text',\r\n Value: EnumExternalQueryFieldFormats.Text\r\n }\r\n ],\r\n YesNo: [\r\n {\r\n Text: 'Yes',\r\n Value: true\r\n },\r\n {\r\n Text: 'No',\r\n Value: false\r\n }\r\n ],\r\n EnumDocumentProcessingStatus: [\r\n {\r\n Text: 'No Data',\r\n Value: EnumDocumentProcessingStatus.NoData\r\n },\r\n {\r\n Text: 'In Process',\r\n Value: EnumDocumentProcessingStatus.InProcess\r\n },\r\n {\r\n Text: 'Success',\r\n Value: EnumDocumentProcessingStatus.Success\r\n },\r\n {\r\n Text: 'Success*',\r\n Value: EnumDocumentProcessingStatus.SuccessNoNotification\r\n },\r\n {\r\n Text: 'Error',\r\n Value: EnumDocumentProcessingStatus.Error\r\n },\r\n {\r\n Text: 'Resolved',\r\n Value: EnumDocumentProcessingStatus.Resolved\r\n }\r\n ],\r\n EnumDocumentProcessingSteps: [\r\n {\r\n Text: 'Cancel Document',\r\n Value: EnumDocumentProcessingSteps.CancelDocument\r\n },\r\n {\r\n Text: 'Cancel Payment',\r\n Value: EnumDocumentProcessingSteps.CancelPayment\r\n },\r\n {\r\n Text: 'Completed',\r\n Value: EnumDocumentProcessingSteps.Completed\r\n },\r\n {\r\n Text: 'Confirm In Payment Service',\r\n Value: EnumDocumentProcessingSteps.ConfirmInPaymentService\r\n },\r\n {\r\n Text: 'Custom After Save Order',\r\n Value: EnumDocumentProcessingSteps.CustomAfterSaveOrder\r\n },\r\n {\r\n Text: 'Execute In Payment Service',\r\n Value: EnumDocumentProcessingSteps.ExecuteInPaymentService\r\n },\r\n {\r\n Text: 'Rollback Payment',\r\n Value: EnumDocumentProcessingSteps.RollbackPayment\r\n },\r\n {\r\n Text: 'Save Invoice',\r\n Value: EnumDocumentProcessingSteps.SaveInvoice\r\n },\r\n {\r\n Text: 'Save Document',\r\n Value: EnumDocumentProcessingSteps.SaveDocument\r\n },\r\n {\r\n Text: 'Save Receipt',\r\n Value: EnumDocumentProcessingSteps.SaveReceipt\r\n },\r\n {\r\n Text: 'Send Notification',\r\n Value: EnumDocumentProcessingSteps.SendNotification\r\n },\r\n {\r\n Text: 'Send To Payment Service',\r\n Value: EnumDocumentProcessingSteps.SendToPaymentService\r\n },\r\n {\r\n Text: 'Update TransactionRef Data In Payment Service',\r\n Value: EnumDocumentProcessingSteps.UpdateTransactionRefDataInPaymentService\r\n },\r\n {\r\n Text: 'Change Credit Card',\r\n Value: EnumDocumentProcessingSteps.ChangeCreditCard\r\n },\r\n {\r\n Text: 'Resolved',\r\n Value: EnumDocumentProcessingSteps.Resolved\r\n },\r\n {\r\n Text: 'ErrorNotificationSent',\r\n Value: EnumDocumentProcessingSteps.ErrorNotificationSent\r\n }\r\n ],\r\n DocumentDetailsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Items',\r\n Name: \"ItemsTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Details',\r\n Name: \"DetailsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Batches',\r\n Name: \"BatchesTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Serial Numbers',\r\n Name: \"SerialNumbersTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'Attachments',\r\n Name: \"FilesTab\"\r\n }\r\n ],\r\n AdminDashboardItemsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Items ordered',\r\n Name: \"ItemsOrderedTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Frequency',\r\n Name: \"FrequencyTab\"\r\n }\r\n ],\r\n AdminDashboardReportsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Items',\r\n Name: \"ItemsOrderedTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Customers',\r\n Name: \"CustomersTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Keywords',\r\n Name: \"KeywordsTab\"\r\n }\r\n ],\r\n ReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.OneMonthAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'Last month',\r\n Order: 0\r\n },\r\n {\r\n DateFrom: Globals.ThreeMonthsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'Last 3 months',\r\n Order: 1\r\n },\r\n {\r\n DateFrom: Globals.SixMonthsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'Last 6 months',\r\n Order: 2\r\n },\r\n {\r\n DateFrom: Globals.OneYearAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'Last year',\r\n Order: 3\r\n },\r\n {\r\n DateFrom: Globals.ThreeYearsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'Last 3 years',\r\n Order: 4\r\n }\r\n ],\r\n EnumInvoiceOneDocumentTypes:\r\n [\r\n {\r\n Text: 'Receipt',\r\n Value: EnumInvoiceOneDocumentTypes.Receipt\r\n },\r\n {\r\n Text: 'Quote',\r\n Value: EnumInvoiceOneDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'Order',\r\n Value: EnumInvoiceOneDocumentTypes.Order\r\n },\r\n {\r\n Text: 'Delivery Note',\r\n Value: EnumInvoiceOneDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'Return',\r\n Value: EnumInvoiceOneDocumentTypes.Return\r\n },\r\n {\r\n Text: 'Invoice',\r\n Value: EnumInvoiceOneDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'Credit Note',\r\n Value: EnumInvoiceOneDocumentTypes.Refund\r\n },\r\n {\r\n Text: 'Return Request',\r\n Value: EnumInvoiceOneDocumentTypes.ReturnRequest\r\n }\r\n ],\r\n EnumPromotionCustomerFilterTypes:\r\n [\r\n {\r\n Text: 'All',\r\n Value: EnumPromotionCustomerFilterTypes.All\r\n },\r\n {\r\n Text: 'Customer Groups',\r\n Value: EnumPromotionCustomerFilterTypes.CustomerGroups\r\n },\r\n {\r\n Text: 'Customers',\r\n Value: EnumPromotionCustomerFilterTypes.Customers\r\n }\r\n ],\r\n EnumPromotionItemFilterTypes:\r\n [\r\n {\r\n Text: 'All',\r\n Value: EnumPromotionItemFilterTypes.All\r\n },\r\n {\r\n Text: 'Categories',\r\n Value: EnumPromotionItemFilterTypes.Categories\r\n },\r\n {\r\n Text: 'Items',\r\n Value: EnumPromotionItemFilterTypes.Items\r\n }\r\n ],\r\n EnumPromotionAggregationLevelTypes:\r\n [\r\n {\r\n Text: 'All',\r\n Value: EnumPromotionAggregationLevelTypes.All\r\n },\r\n {\r\n Text: 'Category',\r\n Value: EnumPromotionAggregationLevelTypes.Category\r\n },\r\n {\r\n Text: 'Item',\r\n Value: EnumPromotionAggregationLevelTypes.Item\r\n }\r\n ],\r\n EnumPromotionEffectTargetTypes:\r\n [\r\n {\r\n Text: 'Same Item',\r\n Value: EnumPromotionEffectTargetTypes.SameItem\r\n },\r\n {\r\n Text: 'Specific Item',\r\n Value: EnumPromotionEffectTargetTypes.SpecificItem\r\n },\r\n {\r\n Text: 'Item List',\r\n Value: EnumPromotionEffectTargetTypes.ItemList\r\n }\r\n ],\r\n\r\n EnumEffectTargetSelectorForMultipleEffectItems:\r\n [\r\n {\r\n Value: EnumEffectTargetSelector.LowestPrice,\r\n Text: 'Lowest Price'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.HighestPrice,\r\n Text: 'Highest Price'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.LowestTotal,\r\n Text: 'Lowest Total'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.HighestTotal,\r\n Text: 'Highest Total'\r\n }\r\n ],\r\n\r\n EnumPromotionDiscountApplicationRule:\r\n [\r\n {\r\n Value: EnumPromotionDiscountApplicationRule.BeforeBaseDiscount,\r\n Text: 'Before Base Discount'\r\n },\r\n {\r\n Value: EnumPromotionDiscountApplicationRule.AfterBaseDiscount,\r\n Text: 'After Base Discount'\r\n }\r\n ],\r\n\r\n EnumPromotionEffectItemFilterTypes:\r\n [\r\n {\r\n Text: 'All Items',\r\n Value: EnumPromotionEffectItemFilterTypes.AllItems\r\n },\r\n {\r\n Text: 'Categories',\r\n Value: EnumPromotionEffectItemFilterTypes.Categories\r\n },\r\n {\r\n Text: 'Items',\r\n Value: EnumPromotionEffectItemFilterTypes.Items\r\n }\r\n ],\r\n EnumPromotionRequiredTypes:\r\n [\r\n {\r\n Text: 'Quantity',\r\n Value: EnumPromotionRequiredTypes.Quantity\r\n },\r\n {\r\n Text: 'Sum',\r\n Value: EnumPromotionRequiredTypes.Sum\r\n }\r\n ],\r\n EnumPromotionResultTypes:\r\n [\r\n {\r\n Text: 'Free Item',\r\n Value: EnumPromotionResultTypes.FreeItem\r\n },\r\n {\r\n Text: 'Discount',\r\n Value: EnumPromotionResultTypes.Discount\r\n },\r\n {\r\n Text: 'Fixed Price',\r\n Value: EnumPromotionResultTypes.FixedPrice\r\n }\r\n ],\r\n EnumDocumentTypes:\r\n [\r\n {\r\n Text: 'Quote',\r\n Value: EnumDocumentTypes.Quote,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'Order',\r\n Value: EnumDocumentTypes.Order,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'Delivery Note',\r\n Value: EnumDocumentTypes.DeliveryNote,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'Invoice',\r\n Value: EnumDocumentTypes.Invoice,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: 'Return Request',\r\n Value: EnumDocumentTypes.ReturnRequest,\r\n SortOrder: 5\r\n },\r\n {\r\n Text: 'Return',\r\n Value: EnumDocumentTypes.Return,\r\n SortOrder: 6\r\n },\r\n {\r\n Text: 'Credit Note',\r\n Value: EnumDocumentTypes.Refund,\r\n SortOrder: 7\r\n },\r\n ],\r\n EnumDocumentProcessingTypes:\r\n [\r\n {\r\n Text: 'Quote',\r\n Value: EnumDocumentProcessingTypes.Quote,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'Order',\r\n Value: EnumDocumentProcessingTypes.Order,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'Delivery Note',\r\n Value: EnumDocumentProcessingTypes.DeliveryNote,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'Invoice',\r\n Value: EnumDocumentProcessingTypes.Invoice,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: 'Return Request',\r\n Value: EnumDocumentProcessingTypes.ReturnRequest,\r\n SortOrder: 5\r\n },\r\n {\r\n Text: 'Return',\r\n Value: EnumDocumentProcessingTypes.Return,\r\n SortOrder: 6\r\n },\r\n {\r\n Text: 'Credit Note',\r\n Value: EnumDocumentProcessingTypes.Refund,\r\n SortOrder: 7\r\n },\r\n {\r\n Text: 'Receipt',\r\n Value: EnumDocumentProcessingTypes.Receipt,\r\n SortOrder: 8\r\n },\r\n ],\r\n EnumFormFieldOptions:\r\n [\r\n {\r\n Text: 'Disabled',\r\n Value: EnumFormFieldOptions.Disabled,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'Hidden',\r\n Value: EnumFormFieldOptions.Hidden,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'Mandatory',\r\n Value: EnumFormFieldOptions.Mandatory,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'Visible',\r\n Value: EnumFormFieldOptions.Visible,\r\n SortOrder: 4\r\n }\r\n ],\r\n ItemSalesTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Current Customer',\r\n Name: \"CurrentCustomerTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'All Customers',\r\n Name: \"AllCustomersTab\"\r\n }\r\n ],\r\n EnumShoppingCartItemViewOptions: [\r\n {\r\n Text: 'List',\r\n Value: EnumShoppingCartItemViewOptions.List\r\n },\r\n {\r\n Text: 'Minimal',\r\n Value: EnumShoppingCartItemViewOptions.Compact\r\n },\r\n {\r\n Text: 'Line',\r\n Value: EnumShoppingCartItemViewOptions.Line\r\n }\r\n ],\r\n EnumShoppingCartModeOptions: [\r\n {\r\n Text: 'Floating',\r\n Value: EnumShoppingCartModeOptions.Floating\r\n },\r\n {\r\n Text: 'Fixed',\r\n Value: EnumShoppingCartModeOptions.Fixed\r\n }\r\n ],\r\n EnumDocumentFilterBySubjects: [\r\n {\r\n Text: 'Show mine',\r\n Value: EnumDocumentFilterBySubjects.Mine\r\n },\r\n {\r\n Text: 'Show current customer',\r\n Value: EnumDocumentFilterBySubjects.Customer\r\n }\r\n ,\r\n {\r\n Text: 'Show all',\r\n Value: EnumDocumentFilterBySubjects.All\r\n }\r\n ],\r\n EnumEUVatStatuses: [\r\n {\r\n Text: 'Liable',\r\n Value: EnumEUVatStatuses.Liable\r\n },\r\n {\r\n Text: 'Excempt',\r\n Value: EnumEUVatStatuses.Excempt\r\n },\r\n {\r\n Text: 'EU',\r\n Value: EnumEUVatStatuses.EU\r\n }\r\n ],\r\n EnumInvoiceOneNotificationTypes: [\r\n {\r\n Text: 'None',\r\n Value: EnumInvoiceOneNotificationTypes.None\r\n },\r\n {\r\n Text: 'Default',\r\n Value: EnumInvoiceOneNotificationTypes.Default\r\n },\r\n {\r\n Text: 'Email',\r\n Value: EnumInvoiceOneNotificationTypes.Email\r\n },\r\n {\r\n Text: 'SMS',\r\n Value: EnumInvoiceOneNotificationTypes.SMS\r\n },\r\n {\r\n Text: 'Whatsapp',\r\n Value: EnumInvoiceOneNotificationTypes.Whatsapp\r\n }\r\n ],\r\n ShareDocumentTypes: [\r\n {\r\n Text: 'Print',\r\n Value: EnumShareDocumentTypes.Print\r\n },\r\n {\r\n Text: 'Email',\r\n Value: EnumShareDocumentTypes.Email\r\n },\r\n {\r\n Text: 'SMS',\r\n Value: EnumShareDocumentTypes.SMS\r\n },\r\n {\r\n Text: 'Whatsapp',\r\n Value: EnumShareDocumentTypes.Whatsapp\r\n },\r\n {\r\n Text: 'Share to...',\r\n Value: EnumShareDocumentTypes.ShareToApplication\r\n }\r\n ],\r\n CopyToDocumentActions: [\r\n {\r\n Text: 'Copy and Go Catalogue',\r\n Value: CopyToDocumentActions.CopyAndGoToCatalogue\r\n },\r\n {\r\n Text: 'Copy and Go Checkout',\r\n Value: CopyToDocumentActions.CopyAndGoToCheckout\r\n },\r\n ],\r\n EnumNewDocumentTitles:\r\n [\r\n {\r\n Text: 'New Quote',\r\n Value: EnumDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'New Order',\r\n Value: EnumDocumentTypes.Order\r\n },\r\n {\r\n Text: 'New Delivery Note',\r\n Value: EnumDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'New Invoice',\r\n Value: EnumDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'New Return Request',\r\n Value: EnumDocumentTypes.ReturnRequest\r\n },\r\n {\r\n Text: 'New Return',\r\n Value: EnumDocumentTypes.Return\r\n },\r\n {\r\n Text: 'New Credit Note',\r\n Value: EnumDocumentTypes.Refund\r\n },\r\n ],\r\n EnumEditDocumentTitles:\r\n [\r\n {\r\n Text: 'Edit Quote',\r\n Value: EnumDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'Edit Order',\r\n Value: EnumDocumentTypes.Order\r\n },\r\n {\r\n Text: 'Edit Delivery Note',\r\n Value: EnumDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'Edit Invoice',\r\n Value: EnumDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'Edit Return Request',\r\n Value: EnumDocumentTypes.ReturnRequest\r\n },\r\n {\r\n Text: 'Edit Return',\r\n Value: EnumDocumentTypes.Return\r\n },\r\n {\r\n Text: 'Edit Credit Note',\r\n Value: EnumDocumentTypes.Refund\r\n },\r\n ],\r\n DiscountPermissionCheckTypes:\r\n [\r\n {\r\n Text: 'Higher Prevails',\r\n Value: EnumDiscountPermissionCheckTypes.HigherPrevails\r\n },\r\n {\r\n Text: 'Lower Prevails',\r\n Value: EnumDiscountPermissionCheckTypes.LowerPrevails\r\n }\r\n ],\r\n DiscountPermissionTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Categories',\r\n Name: \"CategoriesTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Vendors',\r\n Name: \"VendorsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Brands',\r\n Name: \"BrandsTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Manufacturers',\r\n Name: \"ManufacturersTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'Items',\r\n Name: \"ItemsTab\"\r\n }\r\n ],\r\n CityInputMethods: [\r\n {\r\n Text: 'Textual Input',\r\n Value: EnumCityInputMethods.Textual\r\n },\r\n {\r\n Text: 'Choose from list',\r\n Value: EnumCityInputMethods.ChooseNoValidate\r\n },\r\n {\r\n Text: 'Select from list and validate',\r\n Value: EnumCityInputMethods.ChooseValidate\r\n }\r\n ],\r\n SalesDocumentLayers: [\r\n {\r\n Text: 'Orders',\r\n Value: EnumSalesDocumentLayers.Order\r\n },\r\n {\r\n Text: 'Deliveries',\r\n Value: EnumSalesDocumentLayers.Delivery\r\n },\r\n {\r\n Text: 'Invoices',\r\n Value: EnumSalesDocumentLayers.Invoice\r\n }\r\n ],\r\n SaleTargetDimensions: [\r\n {\r\n Text: 'All',\r\n Value: EnumSaleTargetDimensions.All\r\n },\r\n {\r\n Text: 'Customer Group',\r\n Value: EnumSaleTargetDimensions.CustomerGroup\r\n },\r\n {\r\n Text: 'Customer',\r\n Value: EnumSaleTargetDimensions.Customer\r\n },\r\n {\r\n Text: 'Category',\r\n Value: EnumSaleTargetDimensions.Category\r\n },\r\n {\r\n Text: 'Item',\r\n Value: EnumSaleTargetDimensions.Item\r\n }\r\n ],\r\n SaleTargetMeasures: [\r\n {\r\n Text: 'Quantity',\r\n Value: EnumSaleTargetMeasures.Quantity\r\n },\r\n {\r\n Text: 'Sum',\r\n Value: EnumSaleTargetMeasures.Sum\r\n }\r\n ],\r\n EnumDocumentSource: [\r\n {\r\n Text: 'SBO',\r\n Value: EnumDocumentSource.SBO\r\n },\r\n {\r\n Text: 'Customer',\r\n Value: EnumDocumentSource.Customer\r\n },\r\n {\r\n Text: 'Sales',\r\n Value: EnumDocumentSource.Sales\r\n }\r\n ],\r\n EnumCustomFieldTypes: [\r\n {\r\n Text: 'String',\r\n Value: EnumCustomFieldTypes.String\r\n },\r\n {\r\n Text: 'Number',\r\n Value: EnumCustomFieldTypes.Number\r\n },\r\n {\r\n Text: 'Date',\r\n Value: EnumCustomFieldTypes.Date\r\n },\r\n {\r\n Text: 'List',\r\n Value: EnumCustomFieldTypes.List\r\n },\r\n {\r\n Text: 'Price',\r\n Value: EnumCustomFieldTypes.Price\r\n },\r\n {\r\n Text: 'Memo',\r\n Value: EnumCustomFieldTypes.Memo\r\n }\r\n ],\r\n EnumCustomFieldLocation: [\r\n {\r\n Text: 'Customer',\r\n Value: EnumCustomFieldLocations.Customer\r\n },\r\n {\r\n Text: 'Header',\r\n Value: EnumCustomFieldLocations.Header\r\n },\r\n {\r\n Text: 'Item',\r\n Value: EnumCustomFieldLocations.Item\r\n }\r\n ],\r\n EnumBarcodeScannerTypes: [\r\n {\r\n Text: 'None',\r\n Value: EnumBarcodeScannerTypes.None\r\n },\r\n {\r\n Text: 'Default scanner',\r\n Value: EnumBarcodeScannerTypes.Default\r\n },\r\n {\r\n Text: 'External scanner',\r\n Value: EnumBarcodeScannerTypes.External\r\n }\r\n ],\r\n EnumExternalQueryTypes: [\r\n {\r\n Text: 'Customer',\r\n Value: EnumExternalQueryType.Customer\r\n },\r\n {\r\n Text: 'Sales Person',\r\n Value: EnumExternalQueryType.SalesPerson\r\n },\r\n {\r\n Text: 'Admin',\r\n Value: EnumExternalQueryType.Admin\r\n }\r\n ],\r\n EnumCategoryPaneBehaviours: [\r\n {\r\n Text: 'Hidden',\r\n Value: EnumCategoryPaneBehaviour.Hidden\r\n },\r\n {\r\n Text: 'Optional',\r\n Value: EnumCategoryPaneBehaviour.Optional\r\n },\r\n {\r\n Text: 'Hide On Click',\r\n Value: EnumCategoryPaneBehaviour.HideOnClick\r\n },\r\n {\r\n Text: 'Permanent',\r\n Value: EnumCategoryPaneBehaviour.Permanent\r\n }\r\n ],\r\n DashboardFilterAdditionalPeriods: [\r\n {\r\n Text: 'Last Month',\r\n Value: EnumDashboardFilterAdditionalPeriod.LastMonth,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'Last 3 Months',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last3Months,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'Last 6 Months',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last6Months,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'Last Year',\r\n Value: EnumDashboardFilterAdditionalPeriod.LastYear,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: 'Last 3 Years',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last3Years,\r\n SortOrder: 5\r\n },\r\n ],\r\n AddressFieldOptions: [\r\n {\r\n Text: 'Visible',\r\n Value: EnumAddressFieldOptions.Visible\r\n },\r\n {\r\n Text: 'Hidden',\r\n Value: EnumAddressFieldOptions.Hidden\r\n },\r\n {\r\n Text: 'Mandatory',\r\n Value: EnumAddressFieldOptions.Mandatory\r\n },\r\n ],\r\n GiftCardValueTypes: [\r\n {\r\n Text: 'Sum',\r\n Value: EnumGiftCardValueTypes.Sum\r\n },\r\n {\r\n Text: 'Percent',\r\n Value: EnumGiftCardValueTypes.Percent\r\n },\r\n ],\r\n ShowTotalOnTopOptions: [\r\n {\r\n Text: 'None',\r\n Value: EnumShowTotalOnTopOptions.None\r\n },\r\n {\r\n Text: 'After Vat',\r\n Value: EnumShowTotalOnTopOptions.AfterVat\r\n },\r\n {\r\n Text: 'Before Vat',\r\n Value: EnumShowTotalOnTopOptions.BeforeVat\r\n },\r\n ],\r\n ShowDocumentFilesModes: [\r\n {\r\n Text: 'None',\r\n Value: EnumShowDocumentFilesModes.None\r\n },\r\n {\r\n Text: 'SBO Attachments',\r\n Value: EnumShowDocumentFilesModes.SBOAttachments\r\n },\r\n {\r\n Text: 'Document One',\r\n Value: EnumShowDocumentFilesModes.DocumentOne\r\n },\r\n {\r\n Text: 'Vito',\r\n Value: EnumShowDocumentFilesModes.Vito\r\n },\r\n ],\r\n AssortmentVisibilityModes: [\r\n {\r\n Text: 'Hidden',\r\n Value: EnumAssortmentVisibilityModes.Hidden\r\n },\r\n {\r\n Text: 'Visible',\r\n Value: EnumAssortmentVisibilityModes.Visible\r\n },\r\n {\r\n Text: 'ShownByDefault',\r\n Value: EnumAssortmentVisibilityModes.ShownByDefault\r\n },\r\n ]\r\n};\r\n","import { EnumShareDocumentTypes } from \"@dino-components/share-document/share-document.component\";\r\nimport { EnumDocumentDraftOptions, EnumPriceInfoDisplayTypes, EnumCasualContactPersonNotificationReceivers, EnumAddressEntryModes, EnumImpersonateTargets, EnumContactPersonEntryModes, EnumEffectTargetSelector, EnumGiftCardStatuses, EnumPromotionDiscountApplicationRule, EnumPromotionResultTypes, EnumOrderingItemsOutOfStockAction, EnumAvailableItemsCalculationOptions, EnumAttributeDisplayOptions, EnumAttributesDisplayTabs, EnumCatalogueViewOptions, EnumDatabaseObjects, EnumDisplayGroupingOptions, EnumDisplaySortingOptions, EnumDocumentTypes, EnumExternalQueryFieldFormats, EnumFilterDisplayOptions, EnumFormFieldOptions, EnumGoCreditCardTypes, EnumGoCreditTransactionModes, EnumInvoiceOneDocumentTypes, EnumItemImagesFallbackTypes, EnumDocumentProcessingStatus, EnumDocumentProcessingSteps, EnumDocumentStatuses, EnumPriceCurrencyDisplayOptions, EnumPriceDisplayOptions, EnumPromotionAggregationLevelTypes, EnumPromotionCustomerFilterTypes, EnumPromotionEffectItemFilterTypes, EnumPromotionEffectTargetTypes, EnumPromotionItemFilterTypes, EnumPromotionRequiredTypes, EnumReturnRequestStatuses, EnumShoppingCartItemViewOptions, EnumShoppingCartModeOptions, EnumStockDisplayOptions, EnumTitlePositions, EnumDocumentFilterBySubjects, EnumEUVatStatuses, EnumInvoiceOneNotificationTypes, EnumPaymentMeans, EnumDiscountPermissionCheckTypes, EnumCityInputMethods, EnumDocumentProcessingTypes, EnumDocumentSource, EnumCustomFieldTypes, EnumCustomFieldLocations, EnumSalesDocumentLayers, EnumSaleTargetDimensions, EnumSaleTargetMeasures, EnumExternalQueryType, EnumBarcodeScannerTypes, EnumDashboardFilterAdditionalPeriod, EnumShowTotalOnTopOptions, EnumGiftCardValueTypes, EnumCategoryPaneBehaviour, EnumShowDocumentFilesModes, EnumAssortmentVisibilityModes, EnumAddressFieldOptions } from \"@dino-proxy/enums\";\r\nimport { Globals } from \"../_globals\";\r\nimport { CopyToDocumentActions } from \"@dino-pages/documents/components/copy-to-dialog/copy-to-dialog.component\";\r\n\r\nexport const Lists_HE = {\r\n Properties: {\r\n Language: \"HE\",\r\n },\r\n GoCreditCardTypes: [\r\n {\r\n Text: 'חיוב כרטיס ****',\r\n Value: EnumGoCreditCardTypes.Existing\r\n },\r\n {\r\n Text: 'הזנת כרטיס אשראי חדש',\r\n Value: EnumGoCreditCardTypes.New\r\n }\r\n ],\r\n EnumOrderStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'עבר להמשך טיפול',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n DocumentDraftOptions: [\r\n {\r\n Text: 'חסום',\r\n Value: EnumDocumentDraftOptions.NotAllowed\r\n },\r\n {\r\n Text: 'אפשר',\r\n Value: EnumDocumentDraftOptions.Allowed\r\n },\r\n {\r\n Text: 'אפשר והגדר ברירת מחדל',\r\n Value: EnumDocumentDraftOptions.AllowedAndDefault\r\n },\r\n {\r\n Text: 'תמיד טיוטא',\r\n Value: EnumDocumentDraftOptions.AlwaysDraft\r\n }\r\n ],\r\n PriceCommentsDisplayTypes: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumPriceInfoDisplayTypes.None,\r\n },\r\n {\r\n Text: 'הערה בלבד',\r\n Value: EnumPriceInfoDisplayTypes.Comments,\r\n },\r\n {\r\n Text: 'הערה ותיאור',\r\n Value: EnumPriceInfoDisplayTypes.CommentsAndDescription,\r\n }\r\n ],\r\n EnumInvoiceStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumQuoteStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'עבר להמשך טיפול',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumDeliveryNoteStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'עבר להמשך טיפול',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumReturnRequestStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'עבר להמשך טיפול',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumReturnStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'עבר להמשך טיפול',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n EnumRefundStatuses: [\r\n {\r\n Text: 'ממתין',\r\n Value: EnumDocumentStatuses.Pending\r\n },\r\n {\r\n Text: 'נשלח',\r\n Value: EnumDocumentStatuses.Delivered\r\n },\r\n {\r\n Text: 'בוטל',\r\n Value: EnumDocumentStatuses.Canceled\r\n },\r\n {\r\n Text: 'מאושר',\r\n Value: EnumDocumentStatuses.Approved\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: EnumDocumentStatuses.Processed\r\n },\r\n {\r\n Text: 'נשלח חלקית',\r\n Value: EnumDocumentStatuses.PartialDelivered\r\n }\r\n ],\r\n ReturnRequestStatuses: [\r\n {\r\n Text: 'מבוטל',\r\n Value: EnumReturnRequestStatuses.Canceled\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: EnumReturnRequestStatuses.Closed\r\n },\r\n {\r\n Text: 'פתוח',\r\n Value: EnumReturnRequestStatuses.Open\r\n }\r\n ],\r\n EnumDatabaseObjects: [\r\n {\r\n Text: 'משלוח',\r\n Value: EnumDatabaseObjects.Delivery\r\n },\r\n {\r\n Text: 'חשבונית',\r\n Value: EnumDatabaseObjects.Invoice\r\n }\r\n ],\r\n EnumGiftCardStatuses: [\r\n {\r\n Text: 'נוצל',\r\n Value: EnumGiftCardStatuses.Used\r\n },\r\n {\r\n Text: 'לא נוצל',\r\n Value: EnumGiftCardStatuses.NotUsed\r\n }\r\n ],\r\n EnumDisplayGroupingOptions: [\r\n {\r\n Text: 'ללא קיבוץ',\r\n Value: EnumDisplayGroupingOptions.None\r\n },\r\n {\r\n Text: 'קיבוץ לפי קטגוריות',\r\n Value: EnumDisplayGroupingOptions.Categories\r\n },\r\n {\r\n Text: 'קיבוץ לפי יצרנים',\r\n Value: EnumDisplayGroupingOptions.Manufacturers\r\n },\r\n {\r\n Text: 'קיבוץ לפי מותגים',\r\n Value: EnumDisplayGroupingOptions.Brands\r\n },\r\n {\r\n Text: 'קיבוץ לפי ספקים',\r\n Value: EnumDisplayGroupingOptions.Vendors\r\n },\r\n ],\r\n EnumPaymentMeans: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumPaymentMeans.None\r\n },\r\n {\r\n Text: 'על פי תנאי תשלום',\r\n Value: EnumPaymentMeans.Later\r\n },\r\n {\r\n Text: 'כרטיס אשראי',\r\n Value: EnumPaymentMeans.CreditCard\r\n },\r\n {\r\n Text: 'מזומן',\r\n Value: EnumPaymentMeans.Cash\r\n },\r\n {\r\n Text: 'שיק',\r\n Value: EnumPaymentMeans.Cheque\r\n },\r\n {\r\n Text: 'העברה בנקאית',\r\n Value: EnumPaymentMeans.WireTransfer\r\n },\r\n ],\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'פתוח',\r\n Value: true\r\n },\r\n {\r\n Text: 'סגור',\r\n Value: false\r\n }\r\n ],\r\n EnumDisplaySortingOptions: [\r\n {\r\n Text: 'מיון לפי שם פריט',\r\n Value: EnumDisplaySortingOptions.ItemName\r\n },\r\n {\r\n Text: 'מיון לפי קוד פריט',\r\n Value: EnumDisplaySortingOptions.ItemCode\r\n },\r\n {\r\n Text: 'מיון לפי ברקוד',\r\n Value: EnumDisplaySortingOptions.BarCode\r\n },\r\n {\r\n Text: 'מיון לפי מותג',\r\n Value: EnumDisplaySortingOptions.Brand\r\n },\r\n {\r\n Text: 'מיון לפי יצרן',\r\n Value: EnumDisplaySortingOptions.Manufacturer\r\n },\r\n {\r\n Text: 'מיון לפי ספק',\r\n Value: EnumDisplaySortingOptions.Vendor\r\n }, {\r\n Text: 'מיון מותאם אישית',\r\n Value: EnumDisplaySortingOptions.Custom\r\n }\r\n ],\r\n ItemDetailsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'כללי',\r\n Name: \"GeneralTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'פריטי מארז',\r\n Name: \"KitItemsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'תכונות פריט',\r\n Name: \"AttributesTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'וריאציות',\r\n Name: \"VariationsTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'פריטים קשורים',\r\n Name: \"AdditionalItemsTab\"\r\n },\r\n {\r\n index: 5,\r\n text: 'פריטים חלופיים',\r\n Name: \"AlternativeItemsTab\"\r\n },\r\n {\r\n index: 6,\r\n text: 'פריטים נוספים שנקנו',\r\n Name: \"AlsoBoughtItemsTab\"\r\n },\r\n {\r\n index: 7,\r\n text: 'מבצעים',\r\n Name: \"PromotionsTab\"\r\n },\r\n {\r\n index: 8,\r\n text: 'מכירות אחרונות',\r\n Name: \"LastSalesTab\"\r\n },\r\n {\r\n index: 9,\r\n text: 'נתוני מלאי',\r\n Name: \"AvailabilityTab\"\r\n },\r\n {\r\n index: 10,\r\n text: 'הזמנות רכש',\r\n Name: \"PlannedPurchasesTab\"\r\n }\r\n ],\r\n ReceiptTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'כללי',\r\n Name: \"GeneralTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'מסמכים ששולמו',\r\n Name: \"PaidDocuments\"\r\n },\r\n {\r\n index: 2,\r\n text: 'פרטי תשלום',\r\n Name: \"PaymentInfo\"\r\n }\r\n ],\r\n CategoriesFilterTabs:\r\n [\r\n {\r\n index: 0,\r\n text: \"קטגוריות\",\r\n Name: \"CategoriesTab\"\r\n },\r\n {\r\n index: 1,\r\n text: \"סינון\",\r\n Name: \"FilterTab\"\r\n }\r\n ],\r\n\r\n ImpersonateTargets: [\r\n {\r\n Text: 'לקוח',\r\n Value: EnumImpersonateTargets.Customer\r\n },\r\n {\r\n Text: 'איש מכירות',\r\n Value: EnumImpersonateTargets.SalesPerson\r\n }\r\n ],\r\n\r\n EnumAttributesDisplayTabs: [\r\n {\r\n Text: 'מאפיינים',\r\n Value: EnumAttributesDisplayTabs.Attributes\r\n },\r\n {\r\n Text: 'ראשי',\r\n Value: EnumAttributesDisplayTabs.Main\r\n }\r\n ],\r\n AddressEntryModes: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumAddressEntryModes.None\r\n },\r\n {\r\n Text: 'כתובת לקוח',\r\n Value: EnumAddressEntryModes.CustomerAddress\r\n },\r\n {\r\n Text: 'כתובת משתנה',\r\n Value: EnumAddressEntryModes.Casual\r\n },\r\n {\r\n Text: 'גם וגם',\r\n Value: EnumAddressEntryModes.Both\r\n }\r\n ],\r\n CasualContactPersonNotificationReceivers: [\r\n {\r\n Text: 'פרטי המשתמש שיצר את המסמך',\r\n Value: EnumCasualContactPersonNotificationReceivers.CurrentContactPerson\r\n },\r\n {\r\n Text: 'פרטים משתנים',\r\n Value: EnumCasualContactPersonNotificationReceivers.CasualContactInformation\r\n }\r\n ],\r\n ContactPersonEntryModes: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumContactPersonEntryModes.None\r\n },\r\n {\r\n Text: 'איש קשר מכרטיס לקוח',\r\n Value: EnumContactPersonEntryModes.CustomerContactPerson\r\n },\r\n {\r\n Text: 'איש קשר משתנה',\r\n Value: EnumContactPersonEntryModes.Casual\r\n },\r\n {\r\n Text: 'גם וגם',\r\n Value: EnumContactPersonEntryModes.Both\r\n }\r\n ],\r\n EnumStockDisplayOptions: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumStockDisplayOptions.None\r\n },\r\n {\r\n Text: 'מותאם אישית',\r\n Value: EnumStockDisplayOptions.Custom\r\n },\r\n {\r\n Text: 'הצג קיים במלאי/חסר במלאי',\r\n Value: EnumStockDisplayOptions.ShowInOutOfStock\r\n },\r\n {\r\n Text: 'הצג קיים במלאי',\r\n Value: EnumStockDisplayOptions.ShowInStock\r\n },\r\n {\r\n Text: 'הצג חסר במלאי',\r\n Value: EnumStockDisplayOptions.ShowOutOfStock\r\n },\r\n {\r\n Text: 'הצג כמות במלאי',\r\n Value: EnumStockDisplayOptions.ShowStockLevel\r\n }\r\n ],\r\n EnumPriceCurrencyDisplayOptions: [\r\n {\r\n Text: 'הצג מטבע לקוח',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInCustomerCurrency\r\n },\r\n {\r\n Text: 'הצג מטבע מקומי',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInLocalCurrency\r\n },\r\n {\r\n Text: 'הצג מטבע ממחירון הלקוח',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInOriginalCurrency\r\n },\r\n {\r\n Text: 'הצג מטבע ספציפי',\r\n Value: EnumPriceCurrencyDisplayOptions.DisplayInSpecificCurrency\r\n },\r\n ],\r\n\r\n EnumOrderingItemsOutOfStockAction: [\r\n {\r\n Text: 'חסום',\r\n Value: EnumOrderingItemsOutOfStockAction.Block\r\n },\r\n {\r\n Text: 'התראה',\r\n Value: EnumOrderingItemsOutOfStockAction.Warning\r\n },\r\n {\r\n Text: 'ללא',\r\n Value: EnumOrderingItemsOutOfStockAction.None\r\n }\r\n ],\r\n\r\n EnumAvailableItemsCalculationOptions: [\r\n {\r\n Text: 'במלאי',\r\n Value: EnumAvailableItemsCalculationOptions.InStock\r\n },\r\n {\r\n Text: 'זמין',\r\n Value: EnumAvailableItemsCalculationOptions.Available\r\n },\r\n {\r\n Text: 'זמין באופן מיידי',\r\n Value: EnumAvailableItemsCalculationOptions.AvailableImmediately\r\n }\r\n ],\r\n\r\n EnumCatalogueViewOptions: [\r\n {\r\n Text: 'ריבועים',\r\n Value: EnumCatalogueViewOptions.Grid\r\n },\r\n {\r\n Text: 'רשימה',\r\n Value: EnumCatalogueViewOptions.List\r\n },\r\n {\r\n Text: 'רשימה מצומצמת',\r\n Value: EnumCatalogueViewOptions.Compact\r\n }\r\n ],\r\n EnumPriceDisplayOptions: [\r\n {\r\n Text: 'אחרי הנחה',\r\n Value: EnumPriceDisplayOptions.AfterDiscount\r\n },\r\n {\r\n Text: 'לפני הנחה ואחרי הנחה',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountAndAfterDiscount\r\n },\r\n {\r\n Text: 'לפני הנחה ואחוז הנחה',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountAndDiscountPercent\r\n },\r\n {\r\n Text: 'לפני הנחה,אחוז הנחה ואחרי הנחה',\r\n Value: EnumPriceDisplayOptions.BeforeDiscountDiscountPercentAndFinal\r\n },\r\n {\r\n Text: 'ללא',\r\n Value: EnumPriceDisplayOptions.None\r\n }\r\n ],\r\n EnumGoCreditTransactionModes: [\r\n {\r\n Text: '(J4) חיוב מיידי',\r\n Value: EnumGoCreditTransactionModes.J4\r\n },\r\n {\r\n Text: '(J5) תפיסת מסגרת',\r\n Value: EnumGoCreditTransactionModes.J5\r\n },\r\n {\r\n Text: '(J2) בדיקת תקינות נתונים',\r\n Value: EnumGoCreditTransactionModes.J2\r\n }\r\n ],\r\n EnumTitlePositions: [\r\n {\r\n Text: 'מרכז',\r\n Value: EnumTitlePositions.Center\r\n },\r\n {\r\n Text: 'שמאל',\r\n Value: EnumTitlePositions.Left\r\n },\r\n {\r\n Text: 'ימין',\r\n Value: EnumTitlePositions.Right\r\n }\r\n ],\r\n EnumItemImagesFallbackTypes: [\r\n {\r\n Text: 'מותגים',\r\n Value: EnumItemImagesFallbackTypes.Brands\r\n },\r\n {\r\n Text: 'קטגוריות',\r\n Value: EnumItemImagesFallbackTypes.Categories\r\n },\r\n {\r\n Text: 'יצרנים',\r\n Value: EnumItemImagesFallbackTypes.Manufacturers\r\n },\r\n {\r\n Text: 'ללא',\r\n Value: EnumItemImagesFallbackTypes.None\r\n },\r\n {\r\n Text: 'ספק',\r\n Value: EnumItemImagesFallbackTypes.Vendor\r\n }\r\n ],\r\n EnumAttributeDisplayOptions: [\r\n {\r\n Text: 'צבע',\r\n Value: EnumAttributeDisplayOptions.ColorCircles\r\n },\r\n {\r\n Text: 'תאריך',\r\n Value: EnumAttributeDisplayOptions.Date\r\n },\r\n {\r\n Text: 'קישור',\r\n Value: EnumAttributeDisplayOptions.Link\r\n },\r\n {\r\n Text: 'מספר',\r\n Value: EnumAttributeDisplayOptions.Number\r\n },\r\n {\r\n Text: 'תגית',\r\n Value: EnumAttributeDisplayOptions.Tag\r\n },\r\n {\r\n Text: 'טקסט',\r\n Value: EnumAttributeDisplayOptions.Text\r\n }\r\n ],\r\n EnumFilterDisplayOptions: [\r\n {\r\n Text: 'צבע',\r\n Value: EnumFilterDisplayOptions.ColorCircles\r\n },\r\n {\r\n Text: 'טווח תאריכים',\r\n Value: EnumFilterDisplayOptions.DateRange\r\n },\r\n {\r\n Text: 'רשימה',\r\n Value: EnumFilterDisplayOptions.List\r\n },\r\n {\r\n Text: 'טווח מספרים',\r\n Value: EnumFilterDisplayOptions.NumberRange\r\n },\r\n {\r\n Text: 'טקסט',\r\n Value: EnumFilterDisplayOptions.Text\r\n }\r\n ],\r\n EnumExternalQueryFieldFormats: [\r\n {\r\n Text: 'בוליאני',\r\n Value: EnumExternalQueryFieldFormats.Boolean\r\n },\r\n {\r\n Text: 'תאריך',\r\n Value: EnumExternalQueryFieldFormats.Date\r\n },\r\n {\r\n Text: 'כסף',\r\n Value: EnumExternalQueryFieldFormats.Money\r\n },\r\n {\r\n Text: 'מספר',\r\n Value: EnumExternalQueryFieldFormats.Number\r\n },\r\n {\r\n Text: 'טקסט',\r\n Value: EnumExternalQueryFieldFormats.Text\r\n }\r\n ],\r\n YesNo: [\r\n {\r\n Text: 'כן',\r\n Value: true\r\n },\r\n {\r\n Text: 'לא',\r\n Value: false\r\n }\r\n ],\r\n EnumDocumentProcessingStatus: [\r\n {\r\n Text: 'אין נתונים',\r\n Value: EnumDocumentProcessingStatus.NoData\r\n },\r\n {\r\n Text: 'בתהליך',\r\n Value: EnumDocumentProcessingStatus.InProcess\r\n },\r\n {\r\n Text: 'הצליח',\r\n Value: EnumDocumentProcessingStatus.Success\r\n },\r\n {\r\n Text: 'הצליח*',\r\n Value: EnumDocumentProcessingStatus.SuccessNoNotification\r\n },\r\n {\r\n Text: 'שגיאה',\r\n Value: EnumDocumentProcessingStatus.Error\r\n },\r\n {\r\n Text: 'טופל',\r\n Value: EnumDocumentProcessingStatus.Resolved\r\n }\r\n ],\r\n EnumDocumentProcessingSteps: [\r\n {\r\n Text: 'בטל מסמך',\r\n Value: EnumDocumentProcessingSteps.CancelDocument\r\n },\r\n {\r\n Text: 'בטל תשלום',\r\n Value: EnumDocumentProcessingSteps.CancelPayment\r\n },\r\n {\r\n Text: 'הושלם',\r\n Value: EnumDocumentProcessingSteps.Completed\r\n },\r\n {\r\n Text: 'אשר תשלום במספר תשלומים',\r\n Value: EnumDocumentProcessingSteps.ConfirmInPaymentService\r\n },\r\n {\r\n Text: 'מותאם אישית לאחר הוספת ההזמנה',\r\n Value: EnumDocumentProcessingSteps.CustomAfterSaveOrder\r\n },\r\n {\r\n Text: 'בצע תשלום במספר תשלומים',\r\n Value: EnumDocumentProcessingSteps.ExecuteInPaymentService\r\n },\r\n {\r\n Text: 'זיכוי תשלום',\r\n Value: EnumDocumentProcessingSteps.RollbackPayment\r\n },\r\n {\r\n Text: 'שמור חשבונית',\r\n Value: EnumDocumentProcessingSteps.SaveInvoice\r\n },\r\n {\r\n Text: 'שמור מסמך',\r\n Value: EnumDocumentProcessingSteps.SaveDocument\r\n },\r\n {\r\n Text: 'שמור קבלה',\r\n Value: EnumDocumentProcessingSteps.SaveReceipt\r\n },\r\n {\r\n Text: 'שלח התראה',\r\n Value: EnumDocumentProcessingSteps.SendNotification\r\n },\r\n {\r\n Text: 'שלח לתשלום',\r\n Value: EnumDocumentProcessingSteps.SendToPaymentService\r\n },\r\n {\r\n Text: 'עדכן נתוני עסקה בתשלומים',\r\n Value: EnumDocumentProcessingSteps.UpdateTransactionRefDataInPaymentService\r\n },\r\n {\r\n Text: 'שנה פרטי כרטיס',\r\n Value: EnumDocumentProcessingSteps.ChangeCreditCard\r\n },\r\n {\r\n Text: 'טופל',\r\n Value: EnumDocumentProcessingSteps.Resolved\r\n },\r\n {\r\n Text: 'נשלחה הודעת שגיאה',\r\n Value: EnumDocumentProcessingSteps.ErrorNotificationSent\r\n }\r\n ],\r\n DocumentDetailsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'פריטים',\r\n Name: \"ItemsTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'פרטים',\r\n Name: \"DetailsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'אצוות',\r\n Name: \"BatchesTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'מספרים סידוריים',\r\n Name: \"SerialNumbersTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'מסמכים מצורפים',\r\n Name: \"FilesTab\"\r\n }\r\n ],\r\n AdminDashboardItemsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'פריטים הוזמנו',\r\n Name: \"ItemsOrderedTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'תדירות',\r\n Name: \"FrequencyTab\"\r\n }\r\n ],\r\n AdminDashboardReportsTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'פריטים',\r\n Name: \"ItemsOrderedTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'לקוחות',\r\n Name: \"CustomersTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'מילות חיפוש',\r\n Name: \"KeywordsTab\"\r\n }\r\n ],\r\n ReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.OneMonthAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'חודש אחרון',\r\n Order: 0\r\n },\r\n {\r\n DateFrom: Globals.ThreeMonthsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: '3 חודשים אחרונים',\r\n Order: 1\r\n },\r\n {\r\n DateFrom: Globals.SixMonthsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: '6 חודשים אחרונים',\r\n Order: 2\r\n },\r\n {\r\n DateFrom: Globals.OneYearAgoDate,\r\n DateTo: Globals.Today,\r\n Text: 'שנה אחרונה',\r\n Order: 3\r\n },\r\n {\r\n DateFrom: Globals.ThreeYearsAgoDate,\r\n DateTo: Globals.Today,\r\n Text: '3 שנים אחרונות',\r\n Order: 4\r\n }\r\n ],\r\n EnumInvoiceOneDocumentTypes:\r\n [ \r\n {\r\n Text: 'קבלה',\r\n Value: EnumInvoiceOneDocumentTypes.Receipt\r\n },\r\n {\r\n Text: 'הצעת מחיר',\r\n Value: EnumInvoiceOneDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'הזמנה',\r\n Value: EnumInvoiceOneDocumentTypes.Order\r\n },\r\n {\r\n Text: 'תעודת משלוח',\r\n Value: EnumInvoiceOneDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'החזרה',\r\n Value: EnumInvoiceOneDocumentTypes.Return\r\n },\r\n {\r\n Text: 'חשבונית מס',\r\n Value: EnumInvoiceOneDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'חשבונית זיכוי',\r\n Value: EnumInvoiceOneDocumentTypes.Refund\r\n },\r\n {\r\n Text: 'בקשת החזרה',\r\n Value: EnumInvoiceOneDocumentTypes.ReturnRequest\r\n }\r\n ],\r\n EnumPromotionCustomerFilterTypes:\r\n [\r\n {\r\n Text: 'הכל',\r\n Value: EnumPromotionCustomerFilterTypes.All\r\n },\r\n {\r\n Text: 'קבוצות השתייכות',\r\n Value: EnumPromotionCustomerFilterTypes.CustomerGroups\r\n },\r\n {\r\n Text: 'לקוחות',\r\n Value: EnumPromotionCustomerFilterTypes.Customers\r\n }\r\n ],\r\n EnumPromotionItemFilterTypes:\r\n [\r\n {\r\n Text: 'הכל',\r\n Value: EnumPromotionItemFilterTypes.All\r\n },\r\n {\r\n Text: 'קטגוריות',\r\n Value: EnumPromotionItemFilterTypes.Categories\r\n },\r\n {\r\n Text: 'פריטים',\r\n Value: EnumPromotionItemFilterTypes.Items\r\n }\r\n ],\r\n EnumPromotionAggregationLevelTypes:\r\n [\r\n {\r\n Text: 'הכל',\r\n Value: EnumPromotionAggregationLevelTypes.All\r\n },\r\n {\r\n Text: 'קטגוריה',\r\n Value: EnumPromotionAggregationLevelTypes.Category\r\n },\r\n {\r\n Text: 'פריט',\r\n Value: EnumPromotionAggregationLevelTypes.Item\r\n }\r\n ],\r\n EnumPromotionEffectTargetTypes:\r\n [\r\n {\r\n Text: 'אותו פריט',\r\n Value: EnumPromotionEffectTargetTypes.SameItem\r\n },\r\n {\r\n Text: 'פריט ספציפי',\r\n Value: EnumPromotionEffectTargetTypes.SpecificItem\r\n },\r\n {\r\n Text: 'רשימת פריטים',\r\n Value: EnumPromotionEffectTargetTypes.ItemList\r\n }\r\n ],\r\n\r\n EnumEffectTargetSelectorForMultipleEffectItems:\r\n [\r\n {\r\n Value: EnumEffectTargetSelector.LowestPrice,\r\n Text: 'המחיר הנמוך ביותר'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.HighestPrice,\r\n Text: 'המחיר הגבוהה ביותר'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.LowestTotal,\r\n Text: 'סה\\\"כ הנמוך ביותר'\r\n },\r\n {\r\n Value: EnumEffectTargetSelector.HighestTotal,\r\n Text: 'סה\\\"כ גבוה ביותר'\r\n }\r\n ],\r\n\r\n EnumPromotionDiscountApplicationRule:\r\n [\r\n {\r\n Value: EnumPromotionDiscountApplicationRule.BeforeBaseDiscount,\r\n Text: 'לפני הנחת בסיס'\r\n },\r\n {\r\n Value: EnumPromotionDiscountApplicationRule.AfterBaseDiscount,\r\n Text: 'אחרי הנחת בסיס'\r\n }\r\n ],\r\n\r\n EnumPromotionEffectItemFilterTypes:\r\n [\r\n {\r\n Text: 'כל הפריטים',\r\n Value: EnumPromotionEffectItemFilterTypes.AllItems\r\n },\r\n {\r\n Text: 'קטגוריות',\r\n Value: EnumPromotionEffectItemFilterTypes.Categories\r\n },\r\n {\r\n Text: 'פריטים',\r\n Value: EnumPromotionEffectItemFilterTypes.Items\r\n }\r\n ],\r\n EnumPromotionRequiredTypes:\r\n [\r\n {\r\n Text: 'כמות',\r\n Value: EnumPromotionRequiredTypes.Quantity\r\n },\r\n {\r\n Text: 'סכום',\r\n Value: EnumPromotionRequiredTypes.Sum\r\n }\r\n ],\r\n EnumPromotionResultTypes:\r\n [\r\n {\r\n Text: 'פריט חינם',\r\n Value: EnumPromotionResultTypes.FreeItem\r\n },\r\n {\r\n Text: 'הנחה',\r\n Value: EnumPromotionResultTypes.Discount\r\n },\r\n {\r\n Text: 'מחיר קבוע',\r\n Value: EnumPromotionResultTypes.FixedPrice\r\n }\r\n ],\r\n EnumDocumentTypes:\r\n [\r\n {\r\n Text: 'הצעת מחיר',\r\n Value: EnumDocumentTypes.Quote,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'הזמנה',\r\n Value: EnumDocumentTypes.Order,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'תעודת משלוח',\r\n Value: EnumDocumentTypes.DeliveryNote,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'חשבונית מס',\r\n Value: EnumDocumentTypes.Invoice,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: 'בקשת החזרה',\r\n Value: EnumDocumentTypes.ReturnRequest,\r\n SortOrder: 5\r\n }, \r\n {\r\n Text: 'החזרה',\r\n Value: EnumDocumentTypes.Return,\r\n SortOrder: 6\r\n },\r\n {\r\n Text: 'חשבונית זיכוי',\r\n Value: EnumDocumentTypes.Refund,\r\n SortOrder: 7\r\n },\r\n ],\r\n EnumDocumentProcessingTypes:\r\n [\r\n {\r\n Text: 'הצעת מחיר',\r\n Value: EnumDocumentProcessingTypes.Quote,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'הזמנה',\r\n Value: EnumDocumentProcessingTypes.Order,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'תעודת משלוח',\r\n Value: EnumDocumentProcessingTypes.DeliveryNote,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'חשבונית מס',\r\n Value: EnumDocumentProcessingTypes.Invoice,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: 'בקשת החזרה',\r\n Value: EnumDocumentProcessingTypes.ReturnRequest,\r\n SortOrder: 5\r\n }, \r\n {\r\n Text: 'החזרה',\r\n Value: EnumDocumentProcessingTypes.Return,\r\n SortOrder: 6\r\n },\r\n {\r\n Text: 'חשבונית זיכוי',\r\n Value: EnumDocumentProcessingTypes.Refund,\r\n SortOrder: 7\r\n },\r\n {\r\n Text: 'קבלה',\r\n Value: EnumDocumentProcessingTypes.Receipt,\r\n SortOrder: 8\r\n },\r\n ],\r\n EnumFormFieldOptions:\r\n [\r\n {\r\n Text: 'מוצג ללא עריכה',\r\n Value: EnumFormFieldOptions.Disabled,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: 'מוסתר',\r\n Value: EnumFormFieldOptions.Hidden,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: 'שדה חובה',\r\n Value: EnumFormFieldOptions.Mandatory,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'מוצג וניתן לעריכה',\r\n Value: EnumFormFieldOptions.Visible,\r\n SortOrder: 4\r\n }\r\n ],\r\n ItemSalesTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'לקוח נוכחי',\r\n Name: \"CurrentCustomerTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'כל הלקוחות',\r\n Name: \"AllCustomersTab\"\r\n }\r\n ],\r\n EnumShoppingCartItemViewOptions: [\r\n {\r\n Text: 'רשימה',\r\n Value: EnumShoppingCartItemViewOptions.List\r\n },\r\n {\r\n Text: 'קומפקטי',\r\n Value: EnumShoppingCartItemViewOptions.Compact\r\n },\r\n {\r\n Text: 'שורה',\r\n Value: EnumShoppingCartItemViewOptions.Line\r\n }\r\n ],\r\n EnumShoppingCartModeOptions: [\r\n {\r\n Text: 'בכפתור נפרד',\r\n Value: EnumShoppingCartModeOptions.Floating\r\n },\r\n {\r\n Text: 'בצמוד לקטלוג',\r\n Value: EnumShoppingCartModeOptions.Fixed\r\n }\r\n ],\r\n EnumDocumentFilterBySubjects: [\r\n {\r\n Text: 'הצג מסמכים המשוייכים אלי',\r\n Value: EnumDocumentFilterBySubjects.Mine\r\n },\r\n {\r\n Text: 'הצג לקוח נוכחי',\r\n Value: EnumDocumentFilterBySubjects.Customer\r\n }\r\n ,\r\n {\r\n Text: 'הצג הכל',\r\n Value: EnumDocumentFilterBySubjects.All\r\n }\r\n ],\r\n EnumEUVatStatuses: [\r\n {\r\n Text: 'חייב במע\\\"מ',\r\n Value: EnumEUVatStatuses.Liable\r\n },\r\n {\r\n Text: 'פטור ממע\\\"מ',\r\n Value: EnumEUVatStatuses.Excempt\r\n },\r\n {\r\n Text: 'EU',\r\n Value: EnumEUVatStatuses.EU\r\n }\r\n ],\r\n EnumInvoiceOneNotificationTypes: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumInvoiceOneNotificationTypes.None\r\n },\r\n {\r\n Text: 'ברירת מחדל',\r\n Value: EnumInvoiceOneNotificationTypes.Default\r\n },\r\n {\r\n Text: 'אימייל',\r\n Value: EnumInvoiceOneNotificationTypes.Email\r\n },\r\n {\r\n Text: 'SMS',\r\n Value: EnumInvoiceOneNotificationTypes.SMS\r\n },\r\n {\r\n Text: 'וואטסאפ',\r\n Value: EnumInvoiceOneNotificationTypes.Whatsapp\r\n }\r\n ],\r\n ShareDocumentTypes: [\r\n {\r\n Text: 'הדפסה',\r\n Value: EnumShareDocumentTypes.Print\r\n },\r\n {\r\n Text: 'אימייל',\r\n Value: EnumShareDocumentTypes.Email\r\n },\r\n {\r\n Text: 'SMS',\r\n Value: EnumShareDocumentTypes.SMS\r\n },\r\n {\r\n Text: 'Whatsapp',\r\n Value: EnumShareDocumentTypes.Whatsapp\r\n },\r\n {\r\n Text: 'שתף ל...',\r\n Value: EnumShareDocumentTypes.ShareToApplication\r\n }\r\n ],\r\n CopyToDocumentActions: [\r\n {\r\n Text: 'העתק והמשך לקטלוג',\r\n Value: CopyToDocumentActions.CopyAndGoToCatalogue\r\n },\r\n {\r\n Text: 'העתק והמשך לביצוע ההזמנה',\r\n Value: CopyToDocumentActions.CopyAndGoToCheckout\r\n },\r\n ],\r\n EnumNewDocumentTitles:\r\n [\r\n {\r\n Text: 'הצעת מחיר חדשה',\r\n Value: EnumDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'הזמנה חדשה',\r\n Value: EnumDocumentTypes.Order\r\n },\r\n {\r\n Text: 'תעודת משלוח חדשה',\r\n Value: EnumDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'חשבונית חדשה',\r\n Value: EnumDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'בקשת החזרה חדשה',\r\n Value: EnumDocumentTypes.ReturnRequest\r\n },\r\n {\r\n Text: 'החזרה חדשה',\r\n Value: EnumDocumentTypes.Return\r\n },\r\n {\r\n Text: 'חשבונית זיכוי חדשה',\r\n Value: EnumDocumentTypes.Refund\r\n },\r\n ],\r\n EnumEditDocumentTitles:\r\n [\r\n {\r\n Text: 'עריכת הצעת מחיר',\r\n Value: EnumDocumentTypes.Quote\r\n },\r\n {\r\n Text: 'עריכת הזמנה',\r\n Value: EnumDocumentTypes.Order\r\n },\r\n {\r\n Text: 'עריכת תעודת משלוח',\r\n Value: EnumDocumentTypes.DeliveryNote\r\n },\r\n {\r\n Text: 'עריכת חשבונית',\r\n Value: EnumDocumentTypes.Invoice\r\n },\r\n {\r\n Text: 'עריכת בקשת החזרה',\r\n Value: EnumDocumentTypes.ReturnRequest\r\n },\r\n {\r\n Text: 'עריכת החזרה',\r\n Value: EnumDocumentTypes.Return\r\n },\r\n {\r\n Text: 'עריכת חשבונית זיכוי',\r\n Value: EnumDocumentTypes.Refund\r\n },\r\n ],\r\n DiscountPermissionCheckTypes:\r\n [\r\n {\r\n Text: 'לפי האחוז הגבוה ביותר',\r\n Value: EnumDiscountPermissionCheckTypes.HigherPrevails\r\n },\r\n {\r\n Text: 'לפי האחוז הנמוך ביותר',\r\n Value: EnumDiscountPermissionCheckTypes.LowerPrevails\r\n }\r\n ],\r\n DiscountPermissionTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'קטגוריות',\r\n Name: \"CategoriesTab\"\r\n },\r\n {\r\n index: 1,\r\n text: 'ספקים',\r\n Name: \"VendorsTab\"\r\n },\r\n {\r\n index: 2,\r\n text: 'מותגים',\r\n Name: \"BrandsTab\"\r\n },\r\n {\r\n index: 3,\r\n text: 'יצרנים',\r\n Name: \"ManufacturersTab\"\r\n },\r\n {\r\n index: 4,\r\n text: 'פריטים',\r\n Name: \"ItemsTab\"\r\n }\r\n ],\r\n CityInputMethods: [\r\n {\r\n Text: 'הקלדה',\r\n Value: EnumCityInputMethods.Textual\r\n },\r\n {\r\n Text: 'בחירה מרשימה',\r\n Value: EnumCityInputMethods.ChooseNoValidate\r\n },\r\n {\r\n Text: 'בחירה מרשימה סגורה',\r\n Value: EnumCityInputMethods.ChooseValidate\r\n }\r\n ],\r\n SalesDocumentLayers: [\r\n {\r\n Text: 'הזמנות',\r\n Value: EnumSalesDocumentLayers.Order\r\n },\r\n {\r\n Text: 'תעודות משלוח',\r\n Value: EnumSalesDocumentLayers.Delivery\r\n },\r\n {\r\n Text: 'חשבוניות',\r\n Value: EnumSalesDocumentLayers.Invoice\r\n }\r\n ],\r\n SaleTargetDimensions: [\r\n {\r\n Text: 'כללי',\r\n Value: EnumSaleTargetDimensions.All\r\n },\r\n {\r\n Text: 'קבוצת לקוחות',\r\n Value: EnumSaleTargetDimensions.CustomerGroup\r\n },\r\n {\r\n Text: 'לקוח',\r\n Value: EnumSaleTargetDimensions.Customer\r\n },\r\n {\r\n Text: 'קטגוריה',\r\n Value: EnumSaleTargetDimensions.Category\r\n },\r\n {\r\n Text: 'פריט',\r\n Value: EnumSaleTargetDimensions.Item\r\n }\r\n ], \r\n SaleTargetMeasures: [\r\n {\r\n Text: 'כמות',\r\n Value: EnumSaleTargetMeasures.Quantity\r\n },\r\n {\r\n Text: 'סכום',\r\n Value: EnumSaleTargetMeasures.Sum\r\n }\r\n ], \r\n EnumDocumentSource: [\r\n {\r\n Text: 'SBO',\r\n Value: EnumDocumentSource.SBO\r\n },\r\n {\r\n Text: 'לקוח קצה',\r\n Value: EnumDocumentSource.Customer\r\n },\r\n {\r\n Text: 'סוכן',\r\n Value: EnumDocumentSource.Sales\r\n }\r\n ],\r\n EnumCustomFieldTypes: [\r\n {\r\n Text: 'טקסט',\r\n Value: EnumCustomFieldTypes.String\r\n },\r\n {\r\n Text: 'מספר',\r\n Value: EnumCustomFieldTypes.Number\r\n },\r\n {\r\n Text: 'תאריך',\r\n Value: EnumCustomFieldTypes.Date\r\n },\r\n {\r\n Text: 'רשימת ערכים מוגרת מראש',\r\n Value: EnumCustomFieldTypes.List\r\n },\r\n {\r\n Text: 'מחיר',\r\n Value: EnumCustomFieldTypes.Price\r\n },\r\n {\r\n Text: 'הערות',\r\n Value: EnumCustomFieldTypes.Memo\r\n }\r\n ],\r\n EnumCustomFieldLocation: [\r\n {\r\n Text: 'לקוח',\r\n Value: EnumCustomFieldLocations.Customer\r\n },\r\n {\r\n Text: 'מסמך',\r\n Value: EnumCustomFieldLocations.Header\r\n },\r\n {\r\n Text: 'פריט',\r\n Value: EnumCustomFieldLocations.Item\r\n\t\t}\r\n\t],\r\n EnumBarcodeScannerTypes: [\r\n {\r\n Text: 'None',\r\n Value: EnumBarcodeScannerTypes.None\r\n },\r\n {\r\n Text: 'Default scanner',\r\n Value: EnumBarcodeScannerTypes.Default\r\n },\r\n {\r\n Text: 'External scanner',\r\n Value: EnumBarcodeScannerTypes.External\r\n\t\t}\r\n\t],\r\n EnumExternalQueryTypes: [\r\n {\r\n Text: 'Customer',\r\n Value: EnumExternalQueryType.Customer\r\n },\r\n {\r\n Text: 'Sales Person',\r\n Value: EnumExternalQueryType.SalesPerson\r\n },\r\n {\r\n Text: 'Admin',\r\n Value: EnumExternalQueryType.Admin\r\n }\r\n ],\r\n EnumCategoryPaneBehaviours: [\r\n {\r\n Text: 'Hidden',\r\n Value: EnumCategoryPaneBehaviour.Hidden\r\n },\r\n {\r\n Text: 'Optional',\r\n Value: EnumCategoryPaneBehaviour.Optional\r\n },\r\n {\r\n Text: 'Hide On Click',\r\n Value: EnumCategoryPaneBehaviour.HideOnClick\r\n },\r\n {\r\n Text: 'Permanent',\r\n Value: EnumCategoryPaneBehaviour.Permanent\r\n }\r\n\t],\r\n DashboardFilterAdditionalPeriods: [\r\n {\r\n Text: 'חודש אחרון',\r\n Value: EnumDashboardFilterAdditionalPeriod.LastMonth,\r\n SortOrder: 1\r\n },\r\n {\r\n Text: '3 חודשים אחרונים',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last3Months,\r\n SortOrder: 2\r\n },\r\n {\r\n Text: '6 חודשים אחרונים',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last6Months,\r\n SortOrder: 3\r\n },\r\n {\r\n Text: 'שנה אחרונה',\r\n Value: EnumDashboardFilterAdditionalPeriod.LastYear,\r\n SortOrder: 4\r\n },\r\n {\r\n Text: '3 שנים אחרונות',\r\n Value: EnumDashboardFilterAdditionalPeriod.Last3Years,\r\n SortOrder: 5\r\n },\r\n ],\r\n AddressFieldOptions: [\r\n {\r\n Text: 'מוצג',\r\n Value: EnumAddressFieldOptions.Visible\r\n },\r\n {\r\n Text: 'מוסתר',\r\n Value: EnumAddressFieldOptions.Hidden\r\n },\r\n {\r\n Text: 'שדה חובה',\r\n Value: EnumAddressFieldOptions.Mandatory\r\n }, \r\n ],\r\n GiftCardValueTypes: [\r\n {\r\n Text: 'סכום',\r\n Value: EnumGiftCardValueTypes.Sum\r\n },\r\n {\r\n Text: 'אחוז',\r\n Value: EnumGiftCardValueTypes.Percent\r\n },\r\n ],\r\n ShowTotalOnTopOptions: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumShowTotalOnTopOptions.None\r\n },\r\n {\r\n Text: 'אחרי מע\\\"מ',\r\n Value: EnumShowTotalOnTopOptions.AfterVat\r\n },\r\n {\r\n Text: 'לפני מע\\\"מ',\r\n Value: EnumShowTotalOnTopOptions.BeforeVat\r\n },\r\n ],\r\n ShowDocumentFilesModes: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumShowDocumentFilesModes.None\r\n },\r\n {\r\n Text: 'מסמכים מצורפים בSAP',\r\n Value: EnumShowDocumentFilesModes.SBOAttachments\r\n },\r\n {\r\n Text: 'מסמכים מצורפים בDO',\r\n Value: EnumShowDocumentFilesModes.DocumentOne\r\n },\r\n {\r\n Text: 'מסמכים מצורפים בBBDOC',\r\n Value: EnumShowDocumentFilesModes.Vito\r\n },\r\n ],\r\n AssortmentVisibilityModes: [\r\n {\r\n Text: 'מוסתר',\r\n Value: EnumAssortmentVisibilityModes.Hidden\r\n },\r\n {\r\n Text: 'מוצג',\r\n Value: EnumAssortmentVisibilityModes.Visible\r\n },\r\n {\r\n Text: 'מוצג כברירת מחדל',\r\n Value: EnumAssortmentVisibilityModes.ShownByDefault\r\n }, \r\n ]\r\n};","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseEntity, BaseState, LoginParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { SessionService, SessionStates } from '@m4u-angular/core/framework/session.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n Message: string;\r\n Index: number = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-guest-access',\r\n templateUrl: './guest-access.component.html',\r\n styleUrls: ['./guest-access.component.scss']\r\n})\r\nexport class GuestAccessComponent extends BasePageComponent {\r\n private sessionStateChanged$: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private sessionService: SessionService) {\r\n super(A, 'GuestAccessComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.ExecUIAnimation();\r\n\r\n this.sessionStateChanged$ = this.sessionService.sessionStateChanged$\r\n .subscribe(r => {\r\n if (r === SessionStates.Ended) this.Navigate(['/system/login']);\r\n });\r\n\r\n const guestAccessLoginParams: LoginParams = {\r\n UserName: '$$$$$$$',\r\n SecureKey: '$$$$$$$',\r\n } as unknown as LoginParams;\r\n\r\n setTimeout(() => {\r\n this.loginService.DoLogin(guestAccessLoginParams, false, true, () => {\r\n this.A.Framework.NavigateDefault();\r\n }, () => {\r\n this.Navigate(['/system/login']);\r\n }).subscribe(() => {\r\n \r\n });\r\n }, 1000);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.sessionStateChanged$ && this.sessionStateChanged$.unsubscribe();\r\n }\r\n\r\n ExecUIAnimation() {\r\n setInterval(() => {\r\n const rc = this.RC('msgGuestAccessPerforming');\r\n const dots = \".\".repeat(this.State.Index % 6);\r\n this.State.Message = `${dots} ${rc} ${dots}`;\r\n this.State.Index++;\r\n }, 200);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.Message}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DimensionValue } from './../entities/dimensionvalue.entity';\r\n@Injectable()\r\nexport class DimensionValueEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DimensionValue\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ExternalQuery } from './../entities/externalquery.entity';\r\nimport { ExternalQueryResult } from './../entities/externalqueryresult.entity';\r\n@Injectable()\r\nexport class ExternalQueryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ExternalQuery\", api);}\r\n\t\r\n\r\n public GetExternalQueryData(entryID: number, forSelectedCustomer: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetExternalQueryData', {entryID: entryID, forSelectedCustomer: forSelectedCustomer} );\r\n }\r\n}\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { PageButtonsComponent } from \"@m4u-angular/ui/layouts/componentlayouts/page-buttons/pagebuttons.component\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DynamicDialogConfig } from 'primeng/dynamicdialog';\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\n\r\n\r\nclass State extends BaseOptionState {\r\n TermsOfUseContent: SafeHtml;\r\n IsAcceptTermsOfUse: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-terms-of-use-dialog',\r\n templateUrl: './terms-of-use-dialog.component.html',\r\n styleUrls: ['./terms-of-use-dialog.component.scss']\r\n})\r\nexport class TermsOfUseDialogComponent extends BaseComponent {\r\n @ViewChild(PageButtonsComponent) pagebuttons: PageButtonsComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private domSanitizer: DomSanitizer,\r\n public ref: DynamicDialogRef,\r\n public config: DynamicDialogConfig) {\r\n super(A, \"TermsOfUseDialogComponent\", State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.customerEndpoint.GetTermsOfUseContent()\r\n .subscribe(r => {\r\n this.State.TermsOfUseContent = this.domSanitizer.bypassSecurityTrustHtml(r.Data);\r\n });\r\n }\r\n\r\n Send = () => {\r\n this.customerEndpoint.GetUpdatedTermsOfUse()\r\n .subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n }, error: () => {\r\n this.ref.close(false);\r\n }\r\n })\r\n }\r\n\r\n CloseUnaccepted = () => {\r\n this.ref.close(false);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Bank } from './../entities/bank.entity';\r\n@Injectable()\r\nexport class BankEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Bank\", api);}\r\n\t\r\n}\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n selector: 'm4u-accordion',\r\n templateUrl: './accordion.component.html',\r\n styleUrls: ['./accordion.component.scss']\r\n})\r\nexport class AccordionComponent extends BaseComponent {\r\n @Input() Title: string;\r\n @Input() Opened: boolean;\r\n @Input() Disabled: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AccordionComponent', BaseState);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{Title}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import {BaseComponent} from '@m4u-angular/base/component/BaseComponent';\r\nimport {BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagService, ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {Component, ViewChild} from '@angular/core';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\n\r\nclass State extends BaseState {\r\n IsAdmin: boolean;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-impersonate-dropdown',\r\n templateUrl: './app-impersonate-dropdown.component.html',\r\n styleUrls: ['./app-impersonate-dropdown.component.scss']\r\n})\r\nexport class ImpersonateDropdownComponent extends BaseComponent {\r\n @ViewChild('impersonateSelectorContainer') impersonateSelectorContainer;\r\n ImpersonateSelectionDropdownVisible = false;\r\n\r\n constructor(A: ServiceBagService, private customerService: CustomerService, \r\n public loginService: LoginService,\r\n public customerEndpoint: CustomerEndpoint,) {\r\n super(A, 'ImpersonateDropdownComponent', State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.State.IsAdmin = this.customerService.IsCurrentUserAdmin();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n OnSelectorClick() {\r\n this.impersonateSelectorContainer.nativeElement.classList.toggle('selector-opened');\r\n this.ImpersonateSelectionDropdownVisible = !this.ImpersonateSelectionDropdownVisible;\r\n }\r\n}\r\n","export default \"
\\r\\n {{'lblImpersonate' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BarcodeExternalDialogComponent } from '@dino-components/barcode-external/barcode-external-dialog.component';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { EnumBarcodeScannerTypes } from '@dino-proxy/enums';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BarcodeBoxDialogComponent } from '@m4u-angular/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\n\r\nclass State extends BaseOptionState {\r\n UpdateInProgress: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-barcode',\r\n templateUrl: './barcode.component.html',\r\n styleUrls: ['./barcode.component.scss']\r\n})\r\nexport class BarcodeComponent extends BaseComponent {\r\n @Input() CatalogueSearch: boolean = false;\r\n @ViewChild('barcode') barcodeBoxDialog: BarcodeBoxDialogComponent;\r\n @ViewChild('barcodeExternal') barcodeExternalDialog: BarcodeExternalDialogComponent;\r\n @Output() OnBarcodeValueChanged: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, \r\n private shoppingCartService: ShoppingCartService,\r\n private shoppingCartEndpoint: ShoppingCartEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'BarcodeComponent', State);\r\n }\r\n\r\n OnOpenBarcodeDialog() {\r\n if (this.State.CustomerOption?.CatalogueOption?.BarcodeScannerType === EnumBarcodeScannerTypes.External && this.CatalogueSearch) {\r\n this.barcodeExternalDialog.ShowDialogShort((result) => {});\r\n } else {\r\n this.barcodeBoxDialog.ShowDialogShort((result) => { });\r\n }\r\n }\r\n\r\n OnTextDecoded(value) {\r\n if (this.State.UpdateInProgress) {\r\n return;\r\n }\r\n\r\n this.shoppingCartService.addItemFromBarcode(value).subscribe(result => {\r\n this.State.UpdateInProgress = false;\r\n\r\n if (result) {\r\n this.barcodeBoxDialog.CloseDialog(true); \r\n this.OnBarcodeValueChanged.emit(value); \r\n } \r\n })\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { UserInfo } from '@dino-proxy/entities/userinfo.entity';\r\nimport { EnumCityInputMethods } from '@dino-proxy/enums';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { M4UCities } from '@m4u-angular/common/Cities';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxSelectBoxTypes } from 'devextreme-angular/ui/select-box';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\nclass State extends BaseOptionState {\r\n CityInputMethod: EnumCityInputMethods;\r\n citiesDataSource: DataSource;\r\n cities: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-city-selector',\r\n templateUrl: './city-selector.component.html',\r\n styleUrls: ['./city-selector.component.scss']\r\n})\r\nexport class CitySelectorComponent extends BaseComponent {\r\n @Input() city: string;\r\n @Input() disabled: boolean;\r\n @Input() required: boolean;\r\n @Input() Country: string;\r\n\r\n @Output() cityChange = new EventEmitter();\r\n @Output() onChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n sessionService: SessionService) {\r\n super(A, 'CitySelectorComponent', State);\r\n this.State.CityInputMethod = (sessionService.UserInfoDict['Dino'] as UserInfo)?.CityInputMethod || EnumCityInputMethods.Textual;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.cities = Utils.CloneObject(M4UCities).map(c => new GenericListEntity(c, c));\r\n const citiesStore = new ArrayStore({\r\n data: this.State.cities,\r\n key: 'Value'\r\n });\r\n\r\n this.State.citiesDataSource = new DataSource({\r\n store: citiesStore,\r\n sort: 'Value'\r\n });\r\n }\r\n\r\n onTextChanged() {\r\n this.cityChange.emit(this.city);\r\n this.onChange.emit();\r\n }\r\n\r\n onSelectChanged() {\r\n if (this.State.CityInputMethod === EnumCityInputMethods.ChooseValidate) {\r\n const value = this.validateCity();\r\n if (!value) return;\r\n }\r\n this.cityChange.emit(this.city);\r\n this.onChange.emit();\r\n }\r\n\r\n addCustomCity(data: DxSelectBoxTypes.CustomItemCreatingEvent) {\r\n if (!data.text) {\r\n data.customItem = null;\r\n return;\r\n }\r\n\r\n const newCity = {\r\n Text: data.text,\r\n Value: data.text\r\n } as GenericListEntity;\r\n\r\n data.customItem = this.State.citiesDataSource.store().insert(newCity)\r\n .then(() => this.State.citiesDataSource.load())\r\n .then(() => newCity)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n }\r\n\r\n validateCity = () => {\r\n return !!this.State.cities.find(c => c.Value.toLowerCase() === this.city?.toLowerCase());\r\n };\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-code-name-display',\r\n templateUrl: './code-name-display.component.html',\r\n styleUrls: ['./code-name-display.component.scss']\r\n})\r\nexport class CodeNameDisplayComponent extends BaseComponent {\r\n @Input() Component: any;\r\n @Input() Entity: any;\r\n @Input() ValueFieldName: any;\r\n @Input() M4UFieldName: string;\r\n @Input() M4UFieldLabel: string;\r\n @Input() DataSource: DataSource;\r\n @Input() TextField: string;\r\n @Input() SearchExpr: string[];\r\n @Input() CodeFieldTitle: string;\r\n @Input() NameFieldTitle: string;\r\n @Input() ShowClearButton: boolean;\r\n @Input() Placeholder: string;\r\n @Input() IsRequired: boolean = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService) {\r\n super(A, 'CodeNameDisplayComponent', State);\r\n }\r\n\r\n validateField = () => {\r\n return !this.IsRequired || !!this.Entity[this.ValueFieldName];\r\n };\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n
{{data[CodeFieldTitle]}}
\\r\\n
{{data[NameFieldTitle]}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { ContactPersonInfoValidResult } from '@dino-proxy/entities/contactpersoninfovalidresult.entity';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contactdialog',\r\n templateUrl: './contact-dialog.component.html',\r\n styleUrls: ['./contact-dialog.component.scss']\r\n})\r\nexport class ContactDialogComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService,\r\n private contactPersonEndpoint: ContactPersonEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ContactDialogComponent', ContactPerson, BaseState, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n public FromShoppingCart: boolean = false;\r\n\r\n override OnInitTitle() {\r\n return this.RC(this.Entity.EntryID && this.Entity.EntryID > 0 ? 'titleEditContact' : 'titleNewContact');\r\n }\r\n\r\n OnContactPersonInfoChanged(e, postAction?: () => void) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (!this.Entity.Name) return;\r\n\r\n this.Do(this.contactPersonEndpoint.CheckContactPersonInfoValid(this.Entity.EntryID,\r\n this.Entity.Name,\r\n this.Entity.Email), false, data => {\r\n const result = (data as BaseEntityResponse).Entity;\r\n if (!result.IsNameValid) {\r\n this.uiComponentService.ProcessAlerts(this.RC('msgContactNameInvalid'));\r\n } else if (!result.IsEmailValid) {\r\n this.uiComponentService.ProcessAlerts(this.RC('msgContactEmailInvalid'));\r\n } else if (postAction) {\r\n postAction();\r\n }\r\n });\r\n }\r\n\r\n IsContactDetailsFilled = () => {\r\n const result = !!this.Entity.Phone || !!this.Entity.Cellular || !!this.Entity.Email;\r\n // console.log(Date.now(), r);\r\n return result;\r\n };\r\n\r\n CloseBySave() {\r\n this.OnContactPersonInfoChanged(true, () => {\r\n if (this.FromShoppingCart) {\r\n this.Do(this.contactPersonEndpoint.SaveFromShoppingCart(this.Entity), true, (data: BaseEntityResponse) => {\r\n if (data.IsSuccess) {\r\n this.CloseDialogWithSuccess(data.Entity);\r\n }\r\n });\r\n } else {\r\n this.CloseDialogWithSuccess(this.Entity);\r\n } \r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { ContactDialogComponent } from '@dino-components/contact-person/contact-dialog/contact-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { EnumContactPersonEntryModes } from '@dino-proxy/enums';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseOptionState {\r\n ContactPerson: ContactPerson;\r\n ContactPersons: ContactPerson[];\r\n IsUseContactPerson: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-contactperson',\r\n templateUrl: './contact-person.component.html',\r\n styleUrls: ['./contact-person.component.scss']\r\n})\r\nexport class ContactPersonComponent extends BaseComponent {\r\n\r\n @Input() ContactPersonID;\r\n @Input() DocumentContactPerson;\r\n @Input() ReadOnly = false;\r\n @Input() IsShowContactDetails = true;\r\n @Input() DocumentOption: DocumentOption;\r\n @Input() CasualContactInfo;\r\n @Input() CustomerID: number;\r\n @Output() OnContactPersonChanged = new EventEmitter();\r\n @ViewChild(ContactDialogComponent) contactDialog: ContactDialogComponent;\r\n IsCasualContactMode: boolean = false;\r\n CasualContact: ContactPerson;\r\n\r\n constructor(A: ServiceBagService,\r\n private contactPersonEndpoint: ContactPersonEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ContactPersonComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsUseContactPerson = this.A.Framework.SystemOptionFlag('IsUseContactPerson');\r\n this.Load(() => {\r\n this.ContactPersonChanged();\r\n this.ProcessCasualContact(this.DocumentOption, this.CasualContactInfo);\r\n });\r\n }\r\n\r\n IsContactPersonFieldVisible() {\r\n return (this.DocumentOption?.ContactPersonEntryMode !== EnumContactPersonEntryModes.Casual);\r\n }\r\n\r\n IsContactPersonFieldReadonly() {\r\n return (!this.DocumentOption?.IsAllowSelectingContact \r\n && (this.DocumentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.CustomerContactPerson \r\n || this.DocumentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Both)) \r\n || this.DocumentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual;\r\n }\r\n\r\n IsAllowEditingContactPerson() {\r\n return this.DocumentOption?.IsAllowEditingContact \r\n && !this.IsContactPersonFieldReadonly() && !this.IsCasualContactMode;\r\n }\r\n\r\n IsContactDetailsFilled = () => {\r\n const result = !!this.State.ContactPerson.Phone || !!this.State.ContactPerson.Cellular || !!this.State.ContactPerson.Email;\r\n return result;\r\n };\r\n\r\n UpdateCasualContactPersonInShoppingCart() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CASUAL_CONTACT_CHANGED, this.State.ContactPerson);\r\n }\r\n\r\n IgnoreCasualContactChange: boolean = false;\r\n ContactPersonChanged() {\r\n if (this.IgnoreCasualContactChange) {\r\n this.IgnoreCasualContactChange = false;\r\n return;\r\n }\r\n\r\n const contactPerson = this.State.ContactPersons\r\n ? this.State.ContactPersons.find(x => x.EntryID === this.ContactPersonID)\r\n : null;\r\n if (contactPerson) {\r\n this.State.ContactPerson = (contactPerson as ContactPerson);\r\n this.IsCasualContactMode = this.State.ContactPerson.EntryID === this.CasualContact?.EntryID;\r\n this.OnContactPersonChanged.emit(this.State.ContactPerson);\r\n }\r\n\r\n // Casual contact person does not have an ID (backend returns ContactPersonID = null) \r\n // So we need to manually set ContactPersonID to static EntryID of Casual placeholder dropdown item\r\n // We should also prevent system from looping between ContactPersonChanged and OnContactPersonChanged (That is why IgnoreCasualContactChange is used)\r\n if (!this.ContactPersonID && this.IsCasualContactMode) {\r\n this.ContactPersonID = this.CasualContact.EntryID;\r\n this.IgnoreCasualContactChange = true;\r\n }\r\n }\r\n\r\n OnEditContact(mode: 'new' | 'edit') {\r\n this.contactDialog.FromShoppingCart = true;\r\n this.contactDialog.ShowDialogShort((contactPerson: ContactPerson) => {\r\n this.Load(() => {\r\n this.State.ContactPerson = contactPerson;\r\n this.ContactPersonID = contactPerson.EntryID;\r\n });\r\n this.OnContactPersonChanged.emit(contactPerson);\r\n }, null, false,\r\n mode === 'new' ? \r\n ({ IsDefault: false, CustomerID: this.CustomerID } as ContactPerson) : Utils.CloneObject(this.State.ContactPerson));\r\n }\r\n\r\n protected Load(onLoaded?: () => void) {\r\n this.contactPersonEndpoint.GetListByCustomer(this.DocumentContactPerson?.DocumentCustomerID)\r\n .subscribe(response => {\r\n this.State.ContactPersons = response.Entities;\r\n onLoaded && onLoaded();\r\n });\r\n }\r\n\r\n\r\n ProcessCasualContact(documentOption: DocumentOption, casualContact: any = null) {\r\n const defaultEntryIdForUIOnly = 1;\r\n\r\n let maxEntryID: number;\r\n\r\n if (this.State.ContactPersons) {\r\n maxEntryID = Math.max(...this.State.ContactPersons.map(contact => contact.EntryID));\r\n } else {\r\n this.State.ContactPersons = [];\r\n maxEntryID = defaultEntryIdForUIOnly;\r\n }\r\n \r\n\r\n const casualEntryID = casualContact && casualContact?.EntryID \r\n ? casualContact.EntryID \r\n : maxEntryID * 2; // Unique ID within collection\r\n\r\n const isCasualModeAllowed = documentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual \r\n || documentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Both;\r\n\r\n if (isCasualModeAllowed) {\r\n \r\n const casualCustomerContact = {\r\n EntryID: casualEntryID,\r\n Name: this.RC('lblCasualContactPersonName'),\r\n Email: casualContact?.Email || '',\r\n Phone: casualContact?.Phone || '',\r\n Cellular: casualContact?.Cellular || '',\r\n Position: casualContact?.Position || '',\r\n IsCasual: true\r\n } as ContactPerson;\r\n\r\n this.State.ContactPersons.push(casualCustomerContact);\r\n this.CasualContact = casualCustomerContact;\r\n }\r\n \r\n if (documentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual \r\n && !this.DocumentContactPerson) {\r\n this.ContactPersonID = casualEntryID;\r\n this.IsCasualContactMode = true;\r\n }\r\n\r\n if (documentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual\r\n && !this.IsContactPersonFieldVisible()) {\r\n // Initialize casual value \r\n this.ContactPersonChanged();\r\n }\r\n\r\n if (casualContact?.IsCasualContactPersonSelected && isCasualModeAllowed) {\r\n this.ContactPersonID = casualEntryID;\r\n this.State.ContactPerson = this.CasualContact;\r\n this.IsCasualContactMode = true;\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ShoppingCartCoupon } from '@dino-proxy/entities/shoppingcart.entity';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nclass State extends BaseOptionState {\r\n Coupons: ShoppingCartCoupon[];\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-coupons',\r\n templateUrl: './coupons.component.html',\r\n styleUrls: ['./coupons.component.scss']\r\n})\r\nexport class CouponsComponent extends BaseComponent {\r\n @Input() ExistingCoupons: ShoppingCartCoupon[];\r\n @Output() OnCouponsChanged = new EventEmitter();\r\n\r\n couponText: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService) {\r\n super(A, 'CouponsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected OnInputPropertiesChanged(): void {\r\n this.State.Coupons = this.ExistingCoupons;\r\n }\r\n\r\n onCouponsChange(e) {\r\n this.OnCouponsChanged.emit(this.State.Coupons);\r\n }\r\n\r\n applyCoupon() {\r\n if (!this.couponText\r\n || this.State.Coupons.find(val => val.SecretText.trim().toLowerCase() === this.couponText.trim().toLowerCase())) return;\r\n\r\n this.shoppingCartService.applyCoupon(this.couponText)\r\n .subscribe(r => {\r\n if (r.success) {\r\n this.UI.InfoMessage(this.RC(\"msgCouponApplied\"));\r\n } else {\r\n this.UI.WarningMessage(r.error);\r\n }\r\n });\r\n this.couponText = '';\r\n }\r\n\r\n removeCoupon(value) {\r\n this.shoppingCartService.removeCoupon(value)\r\n .subscribe(r => {\r\n if (r.success) {\r\n this.UI.InfoMessage(this.RC(\"msgCouponRemoved\"));\r\n }\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{'lblCouponText' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
{{coupon.SecretText}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { CustomerAddressEndpoint } from \"@dino-proxy/endpoints/customeraddress.endpoint\";\r\nimport { CustomerAddress } from \"@dino-proxy/entities/customeraddress.entity\";\r\nimport { StateEndpoint } from \"@dino-proxy/endpoints/state.endpoint\";\r\nimport { BaseEntityResponse, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { State } from \"@dino-proxy/entities/state.entity\";\r\nimport { DxValidationGroupComponent } from \"devextreme-angular\";\r\nimport { AddressOption } from \"@dino-proxy/entities/addressoption.entity\";\r\nimport { EnumAddressFieldOptions } from \"@dino-proxy/enums\";\r\n\r\nclass ComponentState extends BaseState {\r\n IsStatesNotEmpty: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-addressdialog',\r\n templateUrl: './address-dialog.component.html',\r\n styleUrls: ['./address-dialog.component.scss']\r\n})\r\nexport class AddressDialogComponent extends BasePageComponent {\r\n @ViewChild(DxValidationGroupComponent) validationGroup: DxValidationGroupComponent;\r\n\r\n @Input() Address: CustomerAddress;\r\n @Input() AddressOption: AddressOption;\r\n public FromShoppingCart: boolean = false; \r\n \r\n constructor(A: ServiceBagService,\r\n private customerAddressEndpoint: CustomerAddressEndpoint,\r\n private stateEndpoint: StateEndpoint) {\r\n super(A, 'AddressDialogComponent', CustomerAddress, ComponentState, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumAddressFieldOptions.Hidden;\r\n IsFieldMandatory = (name: string) => this.GetFieldOption(name) === EnumAddressFieldOptions.Mandatory;\r\n GetFieldOption = (name: string) => this.AddressOption ? this.AddressOption[name + 'FieldOption'] as EnumAddressFieldOptions : null;\r\n \r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this.LoadStates();\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC(this.Address.EntryID && this.Address.EntryID > 0 ? 'titleEditAddress' : 'titleNewAddress');\r\n }\r\n\r\n protected override DoValidatorReset(): boolean {\r\n return false;\r\n }\r\n\r\n CloseBySave() {\r\n if (this.FromShoppingCart) {\r\n this.Do(this.customerAddressEndpoint.SaveFromShoppingCart(this.Address), true, (data: BaseEntityResponse) => {\r\n if (data.IsSuccess) {\r\n this.CloseDialogWithSuccess(data.Entity);\r\n }\r\n });\r\n } else {\r\n this.CloseDialogWithSuccess(this.Address);\r\n }\r\n }\r\n\r\n OnCountryChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.Address.State = null;\r\n this.LoadStates();\r\n }\r\n\r\n protected LoadStates() {\r\n this.DataSources[\"States\"] = new DataSourceCustomAction(() => this.stateEndpoint.ListByCountry(this.Address.Country), null, (data: State[]) => {\r\n this.State.IsStatesNotEmpty = data.length !== 0;\r\n });\r\n this.DataSources['States'].Reload();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data['Code']}}
\\r\\n
{{data['Name']}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { CustomerAddressEndpoint } from '@dino-proxy/endpoints/customeraddress.endpoint';\r\nimport { CustomerAddress } from '@dino-proxy/entities/customeraddress.entity';\r\nimport { AddressDialogComponent } from '@dino-components/customer-address/address-dialog/address-dialog.component';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { EnumAddressEntryModes, EnumAddressFieldOptions } from '@dino-proxy/enums';\r\nimport { StateEndpoint } from '@dino-proxy/endpoints/state.endpoint';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\n\r\nclass State extends BaseOptionState {\r\n CustomerAddress: CustomerAddress;\r\n CustomerAddresses: CustomerAddress[];\r\n States: any[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-customeraddress',\r\n templateUrl: './customer-address.component.html',\r\n styleUrls: ['./customer-address.component.scss']\r\n})\r\nexport class CustomerAddressComponent extends BaseComponent {\r\n @Input() CustomerAddressID;\r\n @Input() DocumentAddress;\r\n @Input() ReadOnly = false;\r\n @Input() IsShowAddressDetails = true;\r\n @Input() IsShowFullCasualAddress = false;\r\n @Input() CasualAddressInfo;\r\n @Input() DocumentOption;\r\n @Input() CustomerID: number;\r\n @Output() OnCustomerAddressChanged = new EventEmitter();\r\n @ViewChild(AddressDialogComponent) addressDialog: AddressDialogComponent;\r\n IsCasualAddressMode: boolean = false;\r\n CasualAddress: CustomerAddress;\r\n IsCasualAddressStateVisible: boolean = false;\r\n InitialFullAddress: string;\r\n IgnoreCasualAddressChange: boolean = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerAddressEndpoint: CustomerAddressEndpoint,\r\n private uiComponentService: UiComponentService,\r\n private customerService: CustomerService,\r\n private stateEndpoint: StateEndpoint) {\r\n super(A, 'CustomerAddressComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Load(() => {\r\n this.CustomerAddressChanged();\r\n this.ProcessCasualAddress(this.DocumentOption, this.CasualAddressInfo);\r\n });\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumAddressFieldOptions.Hidden;\r\n IsFieldMandatory = (name: string) => this.GetFieldOption(name) === EnumAddressFieldOptions.Mandatory;\r\n GetFieldOption = (name: string) => (this.DocumentOption?.AddressOption) ? this.DocumentOption.AddressOption[name + 'FieldOption'] as EnumAddressFieldOptions : null;\r\n\r\n CustomerAddressChanged() {\r\n if (this.IgnoreCasualAddressChange) {\r\n this.IgnoreCasualAddressChange = false;\r\n return;\r\n }\r\n\r\n const customerAddress = this.State.CustomerAddresses\r\n ? this.State.CustomerAddresses.find(x => x.EntryID === this.CustomerAddressID)\r\n : null;\r\n\r\n if (customerAddress) {\r\n this.State.CustomerAddress = (customerAddress as CustomerAddress);\r\n this.IsCasualAddressMode = this.State.CustomerAddress.EntryID === this.CasualAddress?.EntryID;\r\n if (!this.IsCasualAddressMode) {\r\n this.IsShowFullCasualAddress = false;\r\n }\r\n else if (this.IsCasualAddressMode && this.CasualAddress?.State) {\r\n this.LoadStates(false);\r\n }\r\n\r\n if (this.IsCasualAddressMode && this.CasualAddress?.FullAddress) {\r\n this.IsShowFullCasualAddress = true;\r\n }\r\n\r\n this.OnCustomerAddressChanged.emit(this.State.CustomerAddress);\r\n }\r\n\r\n // Casual address does not have an ID (backend returns CustomerAddressPersonID = null) \r\n // So we need to manually set CustomerAddressPersonID to static EntryID of Casual placeholder dropdown item\r\n // We should also prevent system from looping between CustomerAddressChanged and OnCustomerAddressChanged (That is why IgnoreCasualAddressChange is used)\r\n if (!this.CustomerAddressID && this.IsCasualAddressMode) {\r\n this.CustomerAddressID = this.CasualAddress.EntryID;\r\n this.IgnoreCasualAddressChange = true;\r\n }\r\n }\r\n\r\n OnEditAddress(mode: 'new' | 'edit') {\r\n this.addressDialog.FromShoppingCart = true;\r\n this.addressDialog.AddressOption = this.DocumentOption?.AddressOption;\r\n this.addressDialog.Address = mode === 'new'\r\n ? ({ Country: 'IL', IsDefault: false, CustomerID: this.CustomerID } as CustomerAddress)\r\n : Utils.CloneObject(this.State.CustomerAddress);\r\n this.addressDialog.ShowDialogShort((customerAddress: CustomerAddress) => {\r\n this.Load(() => {\r\n this.State.CustomerAddress = customerAddress;\r\n this.CustomerAddressID = customerAddress.EntryID;\r\n });\r\n this.OnCustomerAddressChanged.emit(customerAddress);\r\n });\r\n }\r\n\r\n IsCustomerAddressesFieldReadonly() {\r\n return (!this.DocumentOption?.IsAllowSelectingAddress\r\n && (this.DocumentOption?.AddressEntryMode === EnumAddressEntryModes.CustomerAddress\r\n || this.DocumentOption?.AddressEntryMode === EnumAddressEntryModes.Both))\r\n || this.DocumentOption?.AddressEntryMode === EnumAddressEntryModes.Casual;\r\n }\r\n\r\n IsCustomerAddressesFieldVisible() {\r\n return (this.DocumentOption?.AddressEntryMode !== EnumAddressEntryModes.Casual);\r\n }\r\n\r\n IsAllowEditingAddress() {\r\n return this.DocumentOption?.IsAllowEditingAddress\r\n && !this.IsCustomerAddressesFieldReadonly() && !this.IsCasualAddressMode;\r\n }\r\n\r\n protected Load(onLoaded?: () => void) {\r\n this.customerAddressEndpoint.GetListByCustomer(this.DocumentAddress?.DocumentCustomerID || this.customerService.GetCustomerID())\r\n .subscribe(response => {\r\n this.State.CustomerAddresses = response.Entities;\r\n onLoaded && onLoaded();\r\n });\r\n }\r\n\r\n UpdateCasualAddressInShoppingCart() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CASUAL_ADDRESS_CHANGED, this.State.CustomerAddress);\r\n }\r\n\r\n OnCountryChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (!this.State.CustomerAddress.Country) {\r\n this.State.CustomerAddress.State = null;\r\n this.IsCasualAddressStateVisible = false;\r\n }\r\n\r\n this.UpdateCasualAddressInShoppingCart();\r\n\r\n (!!this.State.CustomerAddress.Country) && this.LoadStates(true);\r\n }\r\n\r\n protected LoadStates(isClearState: boolean) {\r\n this.stateEndpoint.ListByCountry(this.State.CustomerAddress.Country)\r\n .subscribe(response => {\r\n if (response.IsSuccess) {\r\n this.State.States = response.Entities;\r\n this.IsCasualAddressStateVisible = response.Entities.length > 0;\r\n if (isClearState) {\r\n this.State.CustomerAddress.State = null;\r\n this.UpdateCasualAddressInShoppingCart();\r\n }\r\n }\r\n });\r\n }\r\n\r\n IsFullAddressFieldVisible() {\r\n return (!this.CustomerAddressID && (!!this.DocumentAddress)) || this.IsShowFullCasualAddress;\r\n }\r\n\r\n IsFullAddressUnchanged() {\r\n return this.InitialFullAddress === this.DocumentAddress?.FullAddress;\r\n }\r\n\r\n IsFullAddressFieldDisabled() {\r\n return this.IsFullAddressFieldVisible()\r\n && (this.State.CustomerAddress.ZipCode || this.State.CustomerAddress.City || this.State.CustomerAddress.State\r\n || this.State.CustomerAddress.Country || this.State.CustomerAddress.Street);\r\n }\r\n\r\n ProcessCasualAddress(documentOption: DocumentOption, casualAddress: any = null) {\r\n const defaultEntryIdForUIOnly = 1;\r\n\r\n let maxEntryID: number;\r\n\r\n if (this.State.CustomerAddresses) {\r\n maxEntryID = Math.max(...this.State.CustomerAddresses.map(address => address.EntryID));\r\n } else {\r\n this.State.CustomerAddresses = [];\r\n maxEntryID = defaultEntryIdForUIOnly;\r\n }\r\n\r\n const casualEntryID = casualAddress && casualAddress?.EntryID\r\n ? casualAddress.EntryID\r\n : maxEntryID * 2; // Unique ID within collection\r\n\r\n const isCasualAddressAllowed = documentOption?.AddressEntryMode === EnumAddressEntryModes.Casual\r\n || documentOption?.AddressEntryMode === EnumAddressEntryModes.Both;\r\n\r\n if (isCasualAddressAllowed) {\r\n const casualCustomerAddress = {\r\n EntryID: casualEntryID,\r\n AddressName: this.RC('lblCasualCustomerAddressName'),\r\n Street: casualAddress?.Street || '',\r\n ZipCode: casualAddress?.ZipCode || '',\r\n City: casualAddress?.City || '',\r\n Country: casualAddress?.Country || 'IL',\r\n State: casualAddress?.State || '',\r\n FullAddress: casualAddress?.FullAddress,\r\n IsCasual: true\r\n } as CustomerAddress;\r\n\r\n this.State.CustomerAddresses.push(casualCustomerAddress);\r\n this.CasualAddress = casualCustomerAddress;\r\n }\r\n\r\n if (documentOption?.AddressEntryMode === EnumAddressEntryModes.Casual\r\n && !this.DocumentAddress) {\r\n this.CustomerAddressID = casualEntryID;\r\n this.IsCasualAddressMode = true;\r\n }\r\n\r\n if (documentOption?.AddressEntryMode === EnumAddressEntryModes.Casual\r\n && !this.IsCustomerAddressesFieldVisible()) {\r\n // Initialize casual value \r\n this.CustomerAddressChanged();\r\n }\r\n\r\n if (casualAddress?.IsCasualAddressSelected && isCasualAddressAllowed) {\r\n this.CustomerAddressID = casualEntryID;\r\n\r\n this.State.CustomerAddress = this.CasualAddress;\r\n (casualAddress?.State) && this.LoadStates(false);\r\n this.IsCasualAddressMode = true;\r\n if (casualAddress.State) this.IsCasualAddressStateVisible = true;\r\n }\r\n\r\n if (casualAddress?.FullAddress && isCasualAddressAllowed) {\r\n this.IsShowFullCasualAddress = true;\r\n this.DocumentAddress = { FullAddress: casualAddress.FullAddress };\r\n this.InitialFullAddress = casualAddress.FullAddress;\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data['Code']}}
\\r\\n
{{data['Name']}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-edit-buttons',\r\n templateUrl: './edit-buttons.component.html',\r\n styleUrls: ['./edit-buttons.component.scss']\r\n})\r\nexport class EditButtonsComponent extends BaseComponent {\r\n\r\n @Input() Entity: any;\r\n @Input() Field: string;\r\n @Input() Page: string;\r\n @Input() IsNew: boolean = false;\r\n @Input() TargetEntryID: number = null;\r\n @Input() TargetFieldRelation: string = 'EntryID';\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'EditButtonsComponent', State);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n let addedEntity = this.A.EntityService.GetLastSavedEntity(this.Field)?.Entity;\r\n if (addedEntity) {\r\n setTimeout(() => { this.Entity[this.Field] = addedEntity[this.TargetFieldRelation]; }, 500)\r\n }\r\n }\r\n\r\n OnAddItem() {\r\n this.A.EntityService.Activate(this.Field);\r\n this.Navigate([`${this.Page}/new`]);\r\n }\r\n\r\n OnEditItem() {\r\n //this.Navigate(['pages/general/notification-template/1014']);\r\n this.Navigate([`${this.Page}/${this.GetEntityID()}`]);\r\n }\r\n\r\n GetEntityID() {\r\n return this.TargetEntryID || (this.Entity && this.Field ? this.Entity[this.Field] : null);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { DxDrawerComponent } from \"devextreme-angular\";\r\n\r\nclass State extends BaseState\r\n{\r\n FiltersPanelSliderVisible: boolean = true;\r\n}\r\n\r\n@Component({\r\n selector: 'app-filters-panel-slider',\r\n templateUrl: './filters-panel-slider.component.html',\r\n styleUrls: ['./filters-panel-slider.component.scss']\r\n})\r\nexport class FiltersPanelSliderComponent extends BaseComponent {\r\n @Input() Visible: boolean = true;\r\n @ViewChild(DxDrawerComponent) mainDrawer: DxDrawerComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n public screen: ScreenService) {\r\n super(A, 'FiltersPanelSliderComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FiltersPanelSliderVisible = true;\r\n }\r\n\r\n OnToggleFiltersSliderPanel() {\r\n this.State.FiltersPanelSliderVisible = !this.State.FiltersPanelSliderVisible;\r\n }\r\n\r\n GetIsFiltersPanelSliderVisible() {\r\n return this.State.FiltersPanelSliderVisible;\r\n }\r\n\r\n GetSliderIcon() {\r\n return !this.screen.IsRTL() && this.State.FiltersPanelSliderVisible || this.screen.IsRTL() && !this.State.FiltersPanelSliderVisible\r\n ? 'chevronnext' \r\n : 'chevronprev';\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\";","import { Injectable } from \"@angular/core\";\r\nimport { BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ItemsEndpoint } from \"@dino-proxy/endpoints/items.endpoint\";\r\nimport { ShoppingCartEndpoint } from \"@dino-proxy/endpoints/shoppingcart.endpoint\";\r\nimport { RemoveShoppingCartItemParams } from \"@dino-proxy/params/removeshoppingcartitem.param\";\r\nimport { UpdateShoppingCartItemQuantityParams } from \"@dino-proxy/params/updateshoppingcartitemquantity.param\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { ItemPriceDetailsView } from \"@dino-proxy/views/itempricedetails.view\";\r\nimport { ShoppingCartView } from \"@dino-proxy/views/shoppingcart.view\";\r\nimport { ShoppingCartItemView } from \"@dino-proxy/views/shoppingcartitem.view\";\r\nimport { ReplaySubject, Subject, switchMap, takeUntil, timer } from \"rxjs\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { WishlistEndpoint } from \"@dino-proxy/endpoints/wishlist.endpoint\";\r\nimport { ItemListParams } from \"@dino-proxy/params/itemlist.param\";\r\nimport { FilterEndpoint } from \"@dino-proxy/endpoints/filter.endpoint\";\r\nimport { AddonEndpoint } from \"@dino-proxy/endpoints/addon.endpoint\";\r\nimport { ShoppingCartService } from \"./shopping-cart.service\";\r\n\r\nexport enum ShoppingCartEventTypes {\r\n ItemQuantityChanged = 0,\r\n ItemRemovedFromShoppingCart,\r\n ShoppingCartCleaned,\r\n ShoppingCartUpdated,\r\n ShoppingCartLoaded,\r\n ItemQuantityPriceDetailUpdated,\r\n WishlistItemUpdated,\r\n WishlistLoaded,\r\n WishlistCleaned,\r\n ReloadShoppingCart,\r\n AddonDataChanged\r\n}\r\n\r\nexport class PriceDetailAndQuantity {\r\n PriceDetails?: ItemPriceDetailsView;\r\n Quantity?: number;\r\n}\r\n\r\nexport class ShoppingCartEvent {\r\n // left for back support\r\n eventType: ShoppingCartEventTypes;\r\n itemID?: number;\r\n data?: ItemView | ShoppingCartItemView | PriceDetailAndQuantity | number | boolean | any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemsService extends BaseService {\r\n private wishlistItemUpdatedSubject = new Subject();\r\n private wishlistLoadedSubject = new ReplaySubject(1);\r\n private wishlistCleanedSubject = new Subject();\r\n //\r\n readonly wishlistItemUpdated$ = this.wishlistItemUpdatedSubject.asObservable();\r\n readonly wishlistLoaded$ = this.wishlistLoadedSubject.asObservable();\r\n readonly wishlistCleaned$ = this.wishlistCleanedSubject.asObservable();\r\n\r\n private filterClarificationReloadSubject = new Subject();\r\n\r\n constructor(private itemsEndpoint: ItemsEndpoint,\r\n private filterEndpoint: FilterEndpoint,\r\n private wishlistEndpoint: WishlistEndpoint) {\r\n super();\r\n }\r\n\r\n notifyWishlistItemUpdated(itemID: number, state: boolean) {\r\n this.wishlistItemUpdatedSubject.next({\r\n eventType: ShoppingCartEventTypes.WishlistItemUpdated,\r\n itemID: itemID,\r\n data: state\r\n });\r\n }\r\n\r\n notifyWishlistRemoveAll() {\r\n this.wishlistEndpoint.RemoveAllItems()\r\n .subscribe(response => {\r\n if (response.IsSuccess) {\r\n this.wishlistCleanedSubject.next({\r\n eventType: ShoppingCartEventTypes.WishlistCleaned,\r\n itemID: null,\r\n data: null\r\n });\r\n this.notifyWishlistLoaded(0);\r\n }\r\n });\r\n }\r\n\r\n notifyWishlistLoaded(quantity: number) {\r\n this.wishlistLoadedSubject.next({\r\n eventType: ShoppingCartEventTypes.WishlistLoaded,\r\n itemID: null,\r\n data: quantity\r\n });\r\n }\r\n\r\n getWishlistQuantity() {\r\n this.wishlistEndpoint.GetWishlistCount()\r\n .subscribe(r => {\r\n this.notifyWishlistLoaded(r.Data);\r\n });\r\n }\r\n\r\n // notifyShoppingCartItemAddonDataUpdate(itemID: number, addonName: string, data: string) {\r\n\r\n // if (addonName === QuantityAddonName) {\r\n\r\n // const params = {\r\n // ItemID: itemID,\r\n // IsUpdateAdditionalDataOnly: true,\r\n // AdditionalData: data\r\n // } as UpdateShoppingCartItemQuantityParams;\r\n\r\n // this.shoppingCartEndpoint.UpdateShoppingCartItemQuantity2(params)\r\n // .subscribe(response => {\r\n // if (response.IsSuccess) {\r\n // // NOT optimal solution!! do direct to addons by EntryID\r\n // this.shoppingCartUpdatedSubject.next({\r\n // eventType: ShoppingCartEventTypes.ShoppingCartUpdated,\r\n // itemID: itemID,\r\n // data: response.Entity\r\n // });\r\n // this.shoppingCartService.load(false);\r\n // } else {\r\n // this.UI.StopMessage(response.ResponseMessage, null, 5000);\r\n // }\r\n\r\n // // this.eventSubject.next({\r\n // // eventType: ShoppingCartEventTypes.AddonDataChanged,\r\n // // itemID: itemID,\r\n // // data: data\r\n // // });\r\n\r\n // // this.eventSubject.next({\r\n // // eventType: ShoppingCartEventTypes.ShoppingCartUpdated,\r\n // // itemID: itemID,\r\n // // data: response.Entity\r\n // // });\r\n // });\r\n // }\r\n // }\r\n\r\n getItems(params: ItemListParams) {\r\n return this.itemsEndpoint.GetItems(params);\r\n }\r\n\r\n getFilterClarification(params: ItemListParams) {\r\n this.filterClarificationReloadSubject.next();\r\n\r\n return timer(100)\r\n .pipe(\r\n switchMap(() => this.filterEndpoint.GetFilterClarification(params)),\r\n takeUntil(this.filterClarificationReloadSubject)\r\n );\r\n }\r\n}","export default \"
\\r\\n
\\r\\n
{{BadgeData}}
\\r\\n
\\r\\n
\\r\\n
{{BadgeData}}
\\r\\n
\\r\\n
\\r\\n
{{BadgeData}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-image-button',\r\n templateUrl: './image-button.component.html',\r\n styleUrls: ['./image-button.component.scss']\r\n})\r\nexport class ImageButtonComponent extends BaseComponent {\r\n @Input() Title: string;\r\n @Input() SymbolName: string;\r\n @Input() SymbolNameRTL: string;\r\n @Input() ImageUrl: string;\r\n @Input() Disabled: boolean;\r\n @Input() Style: 'normal' | 'warn' | 'dark' | 'gray' = 'normal';\r\n @Input() Size: 'normal' | 'small' = 'normal';\r\n @Output() OnClick = new EventEmitter<{}>(); \r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ImageButtonComponent', State);\r\n }\r\n\r\n ClickHandler(event) {\r\n if (!this.Disabled) {\r\n this.OnClick.emit(event);\r\n }\r\n } \r\n}\r\n","export default \"
\\r\\n
{{Title}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\\"\\\"\\r\\n
\\r\\n
\";","import { Injectable } from \"@angular/core\";\r\nimport { ImageRequest } from \"@dino-components/image/image.component\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { SessionService } from \"@m4u-angular/core/framework/session.service\";\r\nimport { APIGatewayService } from \"@m4u-angular/core/gateway/APIGateway.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ImageService extends BaseService {\r\n constructor(private api: APIGatewayService,\r\n private sessionService: SessionService) { \r\n super();\r\n }\r\n\r\n getImageURL(imageRequest: ImageRequest) {\r\n return `${this.api.GetAPIURL()}/${this.ModuleName}/Image/GetImage2?EntryID=${imageRequest.EntryID}&ImageType=${imageRequest.ImageType}`\r\n + `&ImageSize=${imageRequest.ImageSize}&Version=${imageRequest.Version}&Index=${imageRequest.Index}`\r\n + `&m4u-session=${this.sessionService.SessionID}`;\r\n }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ImageSizeEnums, ImageTypeEnums } from '@dino-proxy/enums';\r\nimport { ImageService } from '@dino-services/image.service';\r\n\r\nexport class ImageRequest {\r\n EntryID: number;\r\n ImageType: ImageTypeEnums;\r\n ImageSize: ImageSizeEnums;\r\n Index: number;\r\n Version: number;\r\n}\r\n\r\nclass State extends BaseState {}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-image',\r\n templateUrl: './image.component.html',\r\n styleUrls: ['./image.component.scss'],\r\n})\r\nexport class ImageComponent extends BaseComponent {\r\n @Input() set Image(value: ImageRequest) {\r\n this.ImageRequest = value;\r\n if (value && (value.Index === undefined || value.Index === null || value.Index < 0)) this.ImageRequest.Index = 0;\r\n\r\n this.Reload();\r\n };\r\n @Input() StopPropagationClick = false;\r\n @Input() NoImageURL: string = 'assets/projects/dino/app_icons/no-image2.jpg';\r\n @Input() BackgroundColor: string;\r\n @Input() ShowNoImage = true;\r\n @Input() ImageHeight = \"\";\r\n @Input() ImageWidth = \"\";\r\n @Output() OnImageClick = new EventEmitter();\r\n ImageRequest: ImageRequest;\r\n ImageUrl: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private imageService: ImageService) {\r\n super(A, 'ImageComponent', State); {\r\n }\r\n }\r\n\r\n HandleClick(e) {\r\n this.StopPropagationClick && e.stopPropagation();\r\n this.OnImageClick.emit();\r\n }\r\n\r\n protected Reload() {\r\n // DEBUG\r\n //return; \r\n const request = this.ImageRequest;\r\n\r\n if (!request || request.ImageType === ImageTypeEnums.Empty) {\r\n this.ImageUrl = null;\r\n return;\r\n };\r\n\r\n if (!(request && request.EntryID && request.ImageType && request.ImageSize && request.Version)) {\r\n this.ImageUrl = null;\r\n return;\r\n };\r\n\r\n // Performance investigation\r\n // Ignore any requests which don't have version/index \r\n if (request.Version === -1 || request.Index === -1) {\r\n this.ImageUrl = null;\r\n return;\r\n }\r\n\r\n this.ImageUrl = this.imageService.getImageURL(request);\r\n }\r\n}\r\n","export default \"
\\r\\n \\\"\\\"\\r\\n \\r\\n
\\r\\n \\\"No\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Injectable } from '@angular/core';\r\nimport { EnumSpecificItemContainerTypes } from '@dino-proxy/enums';\r\nimport { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-display-item-options-helper'\r\n})\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemDisplayOptionsHelper {\r\n private optionsMapping = {\r\n [EnumSpecificItemContainerTypes.KitItems]: {\r\n DefaultDesktopViewOption: 'DefaultKitItemsDesktopItemViewOption',\r\n DefaultMobileViewOption: 'DefaultKitItemsMobileItemViewOption',\r\n ListMobileOption: 'KitItemsItemListMobileOption',\r\n ListDesktopOption: 'KitItemsItemListDesktopOption',\r\n CompactMobileOption: 'KitItemsItemCompactMobileOption',\r\n CompactDesktopOption: 'KitItemsItemCompactDesktopOption',\r\n LineMobileOption: 'KitItemsItemLineMobileOption',\r\n LineDesktopOption: 'KitItemsItemLineDesktopOption',\r\n UiEventName: 'KIT_ITEMS_VIEW_MODE_CHANGED',\r\n LocalStorageItemDisplayViewStorageKey: 'KitItemsItemDisplayTypeStorageKey'\r\n },\r\n [EnumSpecificItemContainerTypes.SingleVariation]: {\r\n DefaultDesktopViewOption: 'DefaultSingleVariationDesktopItemViewOption',\r\n DefaultMobileViewOption: 'DefaultSingleVariationMobileItemViewOption',\r\n ListMobileOption: 'SingleVariationListMobileOption',\r\n ListDesktopOption: 'SingleVariationListDesktopOption',\r\n CompactMobileOption: 'SingleVariationCompactMobileOption',\r\n CompactDesktopOption: 'SingleVariationCompactDesktopOption',\r\n LineMobileOption: 'SingleVariationLineMobileOption',\r\n LineDesktopOption: 'SingleVariationLineDesktopOption',\r\n UiEventName: 'SINGLE_VARIATION_VIEW_MODE_CHANGED',\r\n LocalStorageItemDisplayViewStorageKey: 'SingleVariationItemDisplayTypeStorageKey'\r\n },\r\n [EnumSpecificItemContainerTypes.RelatedItem]: {\r\n DefaultDesktopViewOption: 'DefaultRelatedItemsDesktopItemViewOption',\r\n DefaultMobileViewOption: 'DefaultRelatedItemsMobileItemViewOption',\r\n ListMobileOption: 'RelatedItemListMobileOption',\r\n ListDesktopOption: 'RelatedItemListDesktopOption',\r\n CompactMobileOption: 'RelatedItemCompactMobileOption',\r\n CompactDesktopOption: 'RelatedItemCompactDesktopOption',\r\n LineMobileOption: 'RelatedItemLineMobileOption',\r\n LineDesktopOption: 'RelatedItemLineDesktopOption',\r\n UiEventName: 'RELATED_ITEM_VIEW_MODE_CHANGED',\r\n LocalStorageItemDisplayViewStorageKey: 'RelatedItemsItemDisplayTypeStorageKey'\r\n },\r\n [EnumSpecificItemContainerTypes.Wishlist]: {\r\n DefaultDesktopViewOption: 'DefaultWishlistDesktopItemViewOption',\r\n DefaultMobileViewOption: 'DefaultWishlistMobileItemViewOption',\r\n ListMobileOption: 'WishlistListMobileOption',\r\n ListDesktopOption: 'WishlistListDesktopOption',\r\n CompactMobileOption: 'WishlistCompactMobileOption',\r\n CompactDesktopOption: 'WishlistCompactDesktopOption',\r\n LineMobileOption: 'WishlistLineMobileOption',\r\n LineDesktopOption: 'WishlistLineDesktopOption',\r\n UiEventName: 'WISHLIST_VIEW_MODE_CHANGED',\r\n LocalStorageItemDisplayViewStorageKey: 'WishlistItemDisplayTypeStorageKey'\r\n }\r\n };\r\n\r\n getOptionsMapping(type: EnumSpecificItemContainerTypes) {\r\n return this.optionsMapping[type];\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumShoppingCartItemViewOptions, EnumSpecificItemContainerTypes, Enums } from '@dino-proxy/enums';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayOptionsHelper } from './item-display-options-helper/item-display-options.helper';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseOptionState {\r\n SelectedViewOption: EnumShoppingCartItemViewOptions;\r\n IsMobile: boolean;\r\n DesktopListOption: ItemDisplayElementOption;\r\n MobileListOption: ItemDisplayElementOption;\r\n DesktopCompactOption: ItemDisplayElementOption;\r\n MobileCompactOption: ItemDisplayElementOption;\r\n DesktopLineOption: ItemDisplayElementOption;\r\n MobileLineOption: ItemDisplayElementOption;\r\n UiEventName: string;\r\n MenuItemsLength: number = 0;\r\n LocalStorageKey: string; // To store selected item view type\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-display-options',\r\n templateUrl: './item-display-options.component.html',\r\n styleUrls: ['./item-display-options.component.scss']\r\n})\r\nexport class ItemDisplayOptionsComponent extends BaseComponent implements IBottomSheetComponent {\r\n @Input() ItemContainerType: EnumSpecificItemContainerTypes;\r\n\r\n Context: BottomSheetDialogComponent;\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private itemsFilterService: ItemsFilterService,\r\n private customerService: CustomerService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService,\r\n private itemDisplayOptionsHelper: ItemDisplayOptionsHelper,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'ItemDisplayOptionsComponent', State);\r\n }\r\n\r\n IsEnableListView: boolean;\r\n IsEnableCompactView: boolean;\r\n IsEnableLineView: boolean;\r\n \r\n InitViewOptionProperties() {\r\n const optionsMapping = this.itemDisplayOptionsHelper.getOptionsMapping(this.ItemContainerType);\r\n this.State.SelectedViewOption = this.State.IsMobile\r\n ? this.State.CustomerOption?.DefaultItemOption[optionsMapping.DefaultMobileViewOption]\r\n : this.State.CustomerOption?.DefaultItemOption[optionsMapping.DefaultDesktopViewOption];\r\n this.State.DesktopListOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.ListDesktopOption];\r\n this.State.MobileListOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.ListMobileOption];\r\n this.State.DesktopCompactOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.CompactDesktopOption];\r\n this.State.MobileCompactOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.CompactMobileOption];\r\n this.State.DesktopLineOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.LineDesktopOption];\r\n this.State.MobileLineOption = this.State.CustomerOption?.DefaultItemOption[optionsMapping.LineMobileOption];\r\n this.State.UiEventName = UI_EVENTS[optionsMapping.UiEventName];\r\n this.State.LocalStorageKey = `${optionsMapping.LocalStorageItemDisplayViewStorageKey}_${this.State.IsMobile ? 'mobile' : 'desktop'}`;\r\n }\r\n\r\n DefineAllowedViews() {\r\n const isDesktop = !this.screenService.IsMobile();\r\n this.IsEnableListView = isDesktop \r\n ? !!this.State?.DesktopListOption \r\n : !!this.State?.MobileListOption ;\r\n\r\n this.IsEnableCompactView = isDesktop\r\n ? !!this.State?.DesktopCompactOption\r\n : !!this.State?.MobileCompactOption;\r\n\r\n this.IsEnableLineView = isDesktop\r\n ? !!this.State?.DesktopLineOption\r\n : !!this.State?.MobileLineOption;\r\n }\r\n\r\n RetrieveSelectedItemViewOptionFromLocalStorage() {\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(this.State.LocalStorageKey);\r\n if (itemDisplayType) {\r\n this.State.SelectedViewOption = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n }\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.InitViewOptionProperties();\r\n \r\n this.RetrieveSelectedItemViewOptionFromLocalStorage();\r\n\r\n this.DefineAllowedViews();\r\n\r\n if (this.IsEnableListView) {\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => {\r\n this.HandleChangeView(Enums.EnumShoppingCartItemViewOptions.List);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n if (this.IsEnableCompactView) {\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => {\r\n this.HandleChangeView(Enums.EnumShoppingCartItemViewOptions.Compact);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n if (this.IsEnableLineView) {\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewUltraCompact'), icon: 'mdi mdi-minus', command: () => {\r\n this.HandleChangeView(Enums.EnumShoppingCartItemViewOptions.Line);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n this.uiComponentService.TriggerUiEvent(this.State.UiEventName, this.State.SelectedViewOption);\r\n }\r\n\r\n HandleChangeView(view: EnumShoppingCartItemViewOptions) {\r\n this.State.SelectedViewOption = view;\r\n this.ApplyView();\r\n }\r\n\r\n HandleSelectViewMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n HandleSelectViewClick() { }\r\n\r\n ApplyView() {\r\n this.localStorageService.SetItem(this.State.LocalStorageKey, this.State.SelectedViewOption);\r\n this.uiComponentService.TriggerUiEvent(this.State.UiEventName, this.State.SelectedViewOption);\r\n\r\n if (this.screenService.IsMobile()) {\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n = 3\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\nclass State extends BaseState {\r\n PreviousQuantity: number;\r\n IsQuantityIncorrect: boolean;\r\n IsShowTotal: boolean = true;\r\n IsShowAdditionalErrorMessage: boolean = false;\r\n AdditionalErrorMessagePointer: any;\r\n AdditionalErrorMessageInstance: string;\r\n}\r\n\r\nexport type OnClickHandlerFn = (direction: 'minus' | 'plus', previousQuantity: number) => boolean;\r\n\r\n@Component({\r\n selector: 'app-number-iterator',\r\n templateUrl: './number-iterator.component.html',\r\n styleUrls: ['./number-iterator.component.scss']\r\n})\r\nexport class NumberIteratorComponent extends BaseComponent {\r\n private _quantity: number = 0;\r\n @Input() set Quantity(value: number) {\r\n this.State.PreviousQuantity = this._quantity = value;\r\n if (this.EnableIsShowTotalSwitch) {\r\n this.State.IsShowTotal = false;\r\n }\r\n }\r\n get Quantity() { return this._quantity; }\r\n @Input() Max!: number;\r\n @Input() Min: number = 0;\r\n @Input() Step: number = 1;\r\n @Input() Class!: string;\r\n @Input() Format!: string;\r\n @Input() ErrorValidationMessage!: string;\r\n @Input() DisableDecrease!: boolean;\r\n @Input() DisableIncrease!: boolean;\r\n @Input() IsEnabled: boolean = true;\r\n @Input() DebounceTime: number = 300;\r\n @Input() CheckIsIncorrect = (quantity: number) => { return false; };\r\n @Input() AdditionalErrorMessage: string;\r\n @Input() AdditionalErrorMessageFn: () => string;\r\n @Input() Mode: 'list' | 'grid' | 'slim' = 'list';\r\n @Input() EnableIsShowTotalSwitch: boolean;\r\n @Input() IsRenderTotal: boolean;\r\n @Input() Total: number;\r\n //\r\n @Input() OnClickHandler: OnClickHandlerFn = (d, pq) => { return true; };\r\n @Output() ValueChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NumberIteratorComponent', State);\r\n }\r\n\r\n OnDecreaseQuantity(e) {\r\n if (e && e.event) e.event.stopPropagation();\r\n if (this.OnClickHandler && !this.OnClickHandler('minus', this._quantity)) return;\r\n\r\n if (!this.IsEnabled) return;\r\n this._quantity -= this.Step;\r\n //\r\n this.CheckForShowAdditionalErrorMessage();\r\n //\r\n if (this.Min && this._quantity < this.Min) {\r\n this._quantity = this.Min;\r\n return;\r\n }\r\n (this._quantity < 0) && (this._quantity = 0);\r\n }\r\n\r\n OnIncreaseQuantity(e) {\r\n if (e && e.event) e.event.stopPropagation();\r\n if (this.OnClickHandler && !this.OnClickHandler('plus', this._quantity)) return;\r\n\r\n if (!this.IsEnabled) return;\r\n this._quantity += this.Step;\r\n //\r\n this.CheckForShowAdditionalErrorMessage();\r\n //\r\n (this._quantity > this.Max) && (this._quantity = this.Max);\r\n }\r\n\r\n OnChanged() {\r\n if (this.CheckIsIncorrect && this.CheckIsIncorrect(this._quantity)) {\r\n this.CheckForShowAdditionalErrorMessage();\r\n return;\r\n }\r\n\r\n if (this._quantity !== this.State.PreviousQuantity) {\r\n this.State.PreviousQuantity = this._quantity;\r\n this.ValueChanged.emit(this._quantity);\r\n }\r\n }\r\n\r\n CheckForShowAdditionalErrorMessage() {\r\n const clearTimeoutFn = () => {\r\n if (this.State.AdditionalErrorMessagePointer) {\r\n clearTimeout(this.State.AdditionalErrorMessagePointer);\r\n }\r\n this.State.AdditionalErrorMessagePointer = null;\r\n this.State.AdditionalErrorMessageInstance = null;\r\n };\r\n\r\n if (this.CheckIsIncorrect && this.CheckIsIncorrect(this._quantity)) {\r\n this.State.IsShowAdditionalErrorMessage = true;\r\n clearTimeoutFn();\r\n this.State.AdditionalErrorMessageInstance = this.AdditionalErrorMessageFn ? this.AdditionalErrorMessageFn() : this.AdditionalErrorMessage;\r\n this.State.AdditionalErrorMessagePointer = setTimeout(() => {\r\n this.State.IsShowAdditionalErrorMessage = false;\r\n clearTimeoutFn();\r\n }, 3000);\r\n return;\r\n }\r\n\r\n clearTimeoutFn();\r\n this.State.IsShowAdditionalErrorMessage = false;\r\n }\r\n\r\n OnClick(e) {\r\n e.stopPropagation();\r\n }\r\n\r\n IsQuantityCorrect = () => {\r\n this.State.IsQuantityIncorrect = (this.CheckIsIncorrect && this.CheckIsIncorrect(this._quantity));\r\n return !this.State.IsQuantityIncorrect;\r\n }\r\n\r\n // EXTERNAL FUNCS -> TODO: SEPARATE FORM HERE\r\n GetTotalPriceMainPart() {\r\n return (this.Total != null) ? this.GetSplittedPrice(this.Total)[0] : '';\r\n }\r\n\r\n GetTotalPriceChangePart() {\r\n return (this.Total != null) ? this.GetSplittedPrice(this.Total)[1] : '';\r\n }\r\n\r\n GetSplittedPrice(price: number) {\r\n if (price == undefined) return ['', ''];\r\n return formatNumber(price, this.F.NumberPrice).split(this.F.DecimalSeparator);\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{State.AdditionalErrorMessageInstance}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{GetTotalPriceMainPart()}}\\r\\n
{{GetTotalPriceChangePart()}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nclass State extends BaseOptionState {\r\n Format: string = '#,##0';\r\n DisableDecrease = false;\r\n DisableIncrease = false;\r\n PreviousQuantity = undefined;\r\n}\r\n\r\n@Component({\r\n selector: 'app-number-iterator3',\r\n templateUrl: './number-iterator3.component.html',\r\n styleUrls: ['./number-iterator3.component.scss']\r\n})\r\nexport class NumberIterator3Component extends BaseComponent {\r\n private _quantity: number = 0;\r\n @Input() set Quantity(value: number) {\r\n this._quantity = value;\r\n if (this.State.PreviousQuantity === undefined) {\r\n this.State.PreviousQuantity = this._quantity;\r\n }\r\n this.refreshState();\r\n }\r\n get Quantity() { return this._quantity; }\r\n @Input() Max!: number;\r\n @Input() Min: number = 0;\r\n @Input() Step: number = 1;\r\n @Input() SaleMultipleOf: number = 1;\r\n @Output() ValueChanged = new EventEmitter();\r\n DebounceTime = 100;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NumberIterator3Component', State);\r\n }\r\n\r\n OnDecreaseQuantity(e) {\r\n this.stopPropagation(e);\r\n\r\n const divisionFraction = (this._quantity * 1000) % (this.SaleMultipleOf * 1000);\r\n const step = (((divisionFraction !== 0) ? (divisionFraction / 1000) : this.Step) * 1000);\r\n const quantityAfterMinusStep = ((this._quantity * 1000) - step) / 1000;\r\n this._quantity = quantityAfterMinusStep;\r\n\r\n //this._quantity = this._quantity - this.Step;\r\n if (this._quantity < 0) this._quantity = 0;\r\n this.HandleQuantityChanged();\r\n }\r\n\r\n OnIncreaseQuantity(e) {\r\n this.stopPropagation(e);\r\n\r\n const divisionFraction = (this._quantity * 1000) % (this.SaleMultipleOf * 1000);\r\n const step = (((divisionFraction !== 0) ? ((this.SaleMultipleOf * 1000 - divisionFraction) / 1000) : this.Step) * 1000);\r\n const quantityAfterPlusStep = ((this._quantity * 1000) + step) / 1000;\r\n\r\n this._quantity = (quantityAfterPlusStep !== 0 && quantityAfterPlusStep < 0)\r\n ? 0\r\n : this._quantity = quantityAfterPlusStep;\r\n\r\n if (this._quantity > this.Max) {\r\n this._quantity -= step / 1000;\r\n }\r\n\r\n // this._quantity = this._quantity + this.Step;\r\n //if (this._quantity > this.Max) this._quantity = this.Max;\r\n this.HandleQuantityChanged();\r\n }\r\n\r\n HandleQuantityChanged() {\r\n\r\n if (this._quantity === undefined || this._quantity === null) {\r\n this._quantity = 0;\r\n }\r\n\r\n this.refreshState();\r\n\r\n const saleMultipleOfDelta = ((this._quantity * 1000) % (this.SaleMultipleOf * 1000));\r\n if (saleMultipleOfDelta !== 0) {\r\n const errorSaleMultipleOf = this.RC('lblQuantityMultipleOf', this.SaleMultipleOf);\r\n this.A.UI.StopMessage(errorSaleMultipleOf);\r\n return;\r\n }\r\n\r\n if (this._quantity !== this.State.PreviousQuantity) {\r\n this.State.PreviousQuantity = this._quantity;\r\n this.ValueChanged.emit(this.Quantity);\r\n }\r\n }\r\n\r\n HandleDomClick(e) {\r\n this.stopPropagation(e);\r\n }\r\n\r\n protected refreshState() {\r\n this.State.DisableDecrease = this.Quantity <= 0;\r\n this.State.DisableIncrease = this.Quantity >= this.Max;\r\n }\r\n\r\n protected stopPropagation(e) {\r\n if (e && e.stopPropagation) {\r\n e.stopPropagation();\r\n } else {\r\n if (e && e.event && e.event.stopPropagation) e.event.stopPropagation();\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nclass State extends BaseOptionState {\r\n Start: number = 0;\r\n End: number = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'app-number-range',\r\n templateUrl: './number-range.component.html',\r\n styleUrls: ['./number-range.component.scss']\r\n})\r\nexport class NumberRangeComponent extends BaseComponent {\r\n @Input() Min: number = 0;\r\n @Input() Max: number = 100;\r\n @Input() Step: number = 1;\r\n @Input() Value: number[] = [0, 0];\r\n @Output() OnValueChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NumberRangeComponent', State);\r\n }\r\n\r\n \r\n\r\n OnSliderValueChange(e) {\r\n this.OnValueChanged.emit([this.State.Start, this.State.End]);\r\n }\r\n\r\n OnNumberValueChange(e) {\r\n ;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-price',\r\n templateUrl: './price.component.html',\r\n styleUrls: ['./price.component.scss']\r\n})\r\nexport class PriceComponent extends BaseComponent {\r\n @Input() Style: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' = 'medium';\r\n @Output() OnClick = new EventEmitter<{}>();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PriceComponent', State);\r\n }\r\n \r\n}\r\n","export default \"
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-total-balance-dino',\r\n templateUrl: './total-balance.component.html',\r\n styleUrls: ['./total-balance.component.scss']\r\n})\r\nexport class TotalBalanceDinoComponent extends BaseComponent {\r\n\r\n @Input() ShowFirstAmount: boolean;\r\n @Input() ShowSecondAmount: boolean;\r\n @Input() ShowNavigateLink: boolean;\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() FirstAmount: number;\r\n @Input() SecondAmount: number;\r\n @Input() FirstAmountTitle: string;\r\n @Input() SecondAmountTitle: string;\r\n IsMobile: boolean;\r\n\r\n @Output() OnNavigateClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceDinoComponent', BaseState);\r\n this.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n NavigateTo() {\r\n this.OnNavigateClick.emit();\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
\\r\\n
{{Title}}
\\r\\n
{{'lblViewMore' | RC:THIS }}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{FirstAmountTitle || ('lblTotal' | RC:THIS)}}
\\r\\n
\\r\\n {{ FirstAmount | formatPriceWithCurrency: Currency : true : true: true}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{SecondAmountTitle || ('lblMax' | RC:THIS)}}
\\r\\n
\\r\\n {{ SecondAmount | formatPriceWithCurrency: Currency : true : true: true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { Directive, Input } from '@angular/core';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\n@Directive({\r\n selector: '[formatPriceCurrency]'\r\n})\r\nexport class FormatPriceCurrencyDirective {\r\n @Input() dataField: string;\r\n @Input() isShowZero = false;\r\n @Input('formatPriceCurrency') set currencyField(value: string) {\r\n this.c.calculateCellValue = (data) => {\r\n const number = data[this.dataField];\r\n const currency = data[value];\r\n\r\n if (number === null || number === undefined) { return null; }\r\n if (!this.isShowZero && number === 0) { return null; }\r\n\r\n let result = formatNumber(number, this.framework.CompanyInfo.NumberSum);\r\n\r\n if (currency) { result = `${result} ${currency}`; }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n constructor(private c: DxiColumnComponent, private framework: FrameworkService) { }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Item } from './../entities/item.entity';\r\nexport class AllOrderedItemsCountResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AllOrderedItemsCountResult';\r\n }\r\n \r\n public ItemID: number; \r\n public Item: Item = new Item; \r\n public OrdersCount: number; \r\n public SAPOrdersCount: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { AllOrderedItemsCountResult } from '@dino-proxy/entities/allordereditemscountresult.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-all-ordered-items-grid',\r\n templateUrl: './all-ordered-items-grid.component.html'\r\n})\r\nexport class AllOrderedItemsGridComponent extends BaseGridComponent {\r\n @Input() gridData: AllOrderedItemsCountResult[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AllOrderedItemsGridComponent', AllOrderedItemsCountResult, State);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class AllOrdersByCustomerCountResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AllOrdersByCustomerCountResult';\r\n }\r\n \r\n public CardCode: string; \r\n public CardName: string; \r\n public OrdersCount: number; \r\n public SAPOrdersCount: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { AllOrdersByCustomerCountResult } from '@dino-proxy/entities/allordersbycustomercountresult.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-all-orders-grid',\r\n templateUrl: './all-orders-grid.component.html'\r\n})\r\nexport class AllOrdersGridComponent extends BaseGridComponent {\r\n @Input() gridData: AllOrdersByCustomerCountResult[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AllOrdersGridComponent', AllOrdersByCustomerCountResult, State);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ItemSearchCountResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemSearchCountResult';\r\n }\r\n \r\n public SearchCount: number; \r\n public SearchText: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemSearchCountResult } from '@dino-proxy/entities/itemsearchcountresult.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-searches-grid',\r\n templateUrl: './item-searches-grid.component.html'\r\n})\r\nexport class ItemSearchesGridComponent extends BaseGridComponent {\r\n\r\n @Input() gridData: ItemSearchCountResult[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemSearchesGridComponent', ItemSearchCountResult, State);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumEUVatStatuses } from './../enums';\r\nexport class Customer extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Customer';\r\n }\r\n \r\n public CardCode: string; \r\n public CardName: string; \r\n public ForeignName: string; \r\n public PhoneNumber1: string; \r\n public PhoneNumber2: string; \r\n public CellPhone: string; \r\n public Fax: string; \r\n public Email: string; \r\n public Website: string; \r\n public Comment: string; \r\n public GroupCode: number; \r\n public PaymentTermID: number; \r\n public PaymentTermName: string; \r\n public Balance: number; \r\n public Obligo: number; \r\n public MaxBalance: number; \r\n public MaxObligo: number; \r\n public CustomerDiscount: number; \r\n public CustomAlert: string; \r\n public CustomerAttributes: string; \r\n public IsVatLiable: boolean; \r\n public Currency: string; \r\n public DisplayCurrency: string; \r\n public TradeLicenseNumber: string; \r\n public CustomerOptionID: number; \r\n public SalesPersonID: number; \r\n public SalesPersonName: string; \r\n public CheckoutNotes: string; \r\n public TermsAccepted: boolean; \r\n public IsActive: boolean; \r\n public VatGroupCode: string; \r\n public EUVatStatus: EnumEUVatStatuses; \r\n public PriceListNumber: number; \r\n public DefaultNotificationDeliveryMethod: number; \r\n public BankCode: string; \r\n public BankAccountNumber: string; \r\n public BankBranch: string; \r\n public SearchKeywords: string; \r\n public CustomerDataExtension: CustomerDataExtensions = new CustomerDataExtensions; \r\n public CurrencyActual: string; \r\n public CustomFieldValues: string[]; \r\n\t\r\n}\r\n\r\nexport class CustomerItemOption extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerItemOption';\r\n }\r\n \r\n public ItemID: number; \r\n public SalesPersonItemOptionID: number; \r\n public UserItemOptionID: number; \r\n public MinOrderQuantity: number; \r\n public MaxOrderQuantity: number; \r\n public LineID: number;\r\n}\r\nexport class CustomerItemPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerItemPermission';\r\n }\r\n \r\n public ItemID: number; \r\n public IsAllowView: boolean; \r\n public IsAllowOrder: boolean; \r\n public LineID: number;\r\n}\r\nexport class CustomerCategoryPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerCategoryPermission';\r\n }\r\n \r\n public CategoryID: number; \r\n public IsAllowView: boolean; \r\n public IsAllowOrder: boolean; \r\n public LineID: number;\r\n}\r\nexport class CustomerVendorPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerVendorPermission';\r\n }\r\n \r\n public VendorID: number; \r\n public IsAllowView: boolean; \r\n public IsAllowOrder: boolean; \r\n public LineID: number;\r\n}\r\nexport class CustomerBrandPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerBrandPermission';\r\n }\r\n \r\n public BrandID: number; \r\n public IsAllowView: boolean; \r\n public IsAllowOrder: boolean; \r\n public LineID: number;\r\n}\r\nexport class CustomerManufacturerPermission extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerManufacturerPermission';\r\n }\r\n \r\n public ManufacturerID: number; \r\n public IsAllowView: boolean; \r\n public IsAllowOrder: boolean; \r\n public LineID: number;\r\n}\r\nexport class CustomerDataExtensions extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerDataExtensions';\r\n }\r\n \r\n public DefaultAssortmentID: number; \r\n \r\n}\r\n\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { GetMenuPath, ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { NavigatorService } from \"@m4u-angular/core/framework/navigator.service\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { CustomerOptionService } from \"./customer-option.service\";\r\nimport { CustomerService } from \"./customer.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RestrictedNavigationService extends BaseService {\r\n constructor(private customerService: CustomerService,\r\n private customerOptionService: CustomerOptionService,\r\n private navigator: NavigatorService,\r\n private screenService: ScreenService) { \r\n super();\r\n }\r\n\r\n public RestrictedNavigate(path: string, baseNavigate: (changedPath: string) => void): void {\r\n const isSales = this.customerService.IsCurrentUserSalesPerson();\r\n const isAdmin = this.customerService.IsCurrentUserAdmin();\r\n\r\n const canNavigate = this.CanNavigate(path, isAdmin, isSales);\r\n if (canNavigate) {\r\n baseNavigate(this.CheckDeviceSpesificRoute(path));\r\n } else {\r\n const defaultPath = this.GetDefaultPath(isAdmin, isSales);\r\n this.navigator.Navigate([defaultPath], null, null);\r\n }\r\n }\r\n\r\n public CanNavigate(path: string, isAdmin: boolean, isSales: boolean) {\r\n if (isAdmin) {\r\n return true;\r\n }\r\n\r\n const pathToCompare = path.replace('/:EntryID', '');\r\n\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n\r\n if (pathToCompare === ROUTE_PATHS.CATALOGUE) {\r\n return customerOption?.FeatureOption?.IsEnableCatalogue;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.CHECKOUT \r\n || pathToCompare === ROUTE_PATHS.CHECKOUT_DESKTOP \r\n || pathToCompare === ROUTE_PATHS.CHECKOUT_MOBILE) {\r\n return customerOption?.FeatureOption?.IsEnableCheckout;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.MY_DETAILSN \r\n || pathToCompare === ROUTE_PATHS.CUSTOMER_DETAILS_FULL \r\n || pathToCompare === ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW) {\r\n return customerOption?.FeatureOption?.IsEnableMyDetails;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.CREATE_RECEIPT \r\n || pathToCompare === ROUTE_PATHS.CREATE_RECEIPT_DESKTOP \r\n || pathToCompare === ROUTE_PATHS.CREATE_RECEIPT_MOBILE) {\r\n return customerOption?.PaymentOption?.IsAllowReceiptAdd;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.LEDGERS_FULL \r\n || pathToCompare === ROUTE_PATHS.LEDGERS_WINDOW) {\r\n return customerOption?.FeatureOption?.IsEnableLedger;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.DASHBOARD_FULL \r\n || pathToCompare === ROUTE_PATHS.DASHBOARD_FULL_CUSTOMER \r\n || pathToCompare === ROUTE_PATHS.DASHBOARD_WINDOW) {\r\n return customerOption?.FeatureOption?.IsEnableDashboard;\r\n }\r\n\r\n if (pathToCompare === ROUTE_PATHS.AGING_FULL \r\n || pathToCompare === ROUTE_PATHS.AGING_WINDOW\r\n || pathToCompare === ROUTE_PATHS.AGING_CUSTOMERS_LIST) {\r\n return customerOption?.FeatureOption?.IsEnableAging;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public CheckDeviceSpesificRoute(originPath: string): string {\r\n const isMobile = this.screenService.IsMobile();\r\n if (originPath === ROUTE_PATHS.CHECKOUT) {\r\n return isMobile ? ROUTE_PATHS.CHECKOUT_MOBILE : ROUTE_PATHS.CHECKOUT_DESKTOP;\r\n }\r\n\r\n if (originPath === ROUTE_PATHS.CREATE_RECEIPT) {\r\n return isMobile ? ROUTE_PATHS.CREATE_RECEIPT_MOBILE : ROUTE_PATHS.CREATE_RECEIPT_DESKTOP;\r\n }\r\n\r\n if (originPath === ROUTE_PATHS.ITEM) {\r\n return isMobile ? ROUTE_PATHS.ITEM_MOBILE : ROUTE_PATHS.ITEM_DESKTOP;\r\n }\r\n\r\n return originPath;\r\n }\r\n\r\n private GetDefaultPath(isAdmin: boolean, isSales: boolean) {\r\n if (isAdmin) return GetMenuPath(ROUTE_PATHS.CUSTOMERS);\r\n\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n\r\n if (isSales) {\r\n if (customerOption?.FeatureOption?.IsEnableCatalogue) return GetMenuPath(ROUTE_PATHS.CATALOGUE);\r\n return GetMenuPath(ROUTE_PATHS.CUSTOMERS);\r\n }\r\n\r\n if (customerOption?.FeatureOption?.IsEnableHomePage) return GetMenuPath(ROUTE_PATHS.HOME);\r\n if (customerOption?.FeatureOption?.IsEnableCatalogue) return GetMenuPath(ROUTE_PATHS.CATALOGUE);\r\n if (customerOption?.FeatureOption?.IsEnableMyDetails) return GetMenuPath(ROUTE_PATHS.MY_DETAILSN);\r\n return GetMenuPath('system/login');\r\n }\r\n}","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-customers-grid',\r\n templateUrl: './aging-customers-grid.component.html'\r\n})\r\nexport class AgingCustomersGridComponent extends BaseGridComponent {\r\n @Input() SalesPersons: SalesPerson[] ;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() CustomerGroups: CustomerGroup[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'AgingCustomersGridComponent', Customer, State);\r\n }\r\n\r\n public OnCellPrepared(e: any): void {\r\n this.PaintBalanceCells(e);\r\n }\r\n\r\n private PaintBalanceCells(e) {\r\n const columnToPaint = 'Balance';\r\n if (e?.column?.dataField !== columnToPaint) return;\r\n\r\n const balanceValue = e.row?.data[columnToPaint];\r\n (balanceValue !== 0) && e.cellElement.classList.add(balanceValue < 0 ? 'negative-amount' : 'positive-amount');\r\n }\r\n\r\n OnNavigate(event) {\r\n let id = event.data.EntryID;\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.AGING_WINDOW,\r\n (route) => this.Navigate([route], {CustomerID: id})\r\n );\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Balance | formatNumberSum }} {{ cell.data.DisplayCurrency }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-aging-customers-list',\r\n\ttemplateUrl: './aging-customers-list.component.html',\r\n\tstyleUrls: ['./aging-customers-list.component.scss']\r\n})\r\nexport class AgingCustomersListComponent extends BaseComponent {\r\n\t@Input() SalesPersons: SalesPerson[] ;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n\t@Input() DataSource: DataSourceCustomAction;\r\n\t@Input() CustomerGroups: CustomerGroup[] = [];\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tprivate restrictedNavigationService: RestrictedNavigationService) {\r\n\t\tsuper(A, 'AgingCustomersListComponent', State);\r\n\t}\r\n\r\n\tOnNavigate(entryID: number) {\r\n\t\tif (!this.State.CustomerOption?.FeatureOption?.IsEnableAging) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.AGING_WINDOW,\r\n (route) => this.Navigate([route], {CustomerID: entryID})\r\n );\r\n\t}\r\n}\r\n","export default \"\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AgingCustomerReport } from './../entities/agingcustomerreport.entity';\r\nimport { CustomerListParams } from './../params/customerlist.param';\r\n@Injectable()\r\nexport class AgingCustomerReportEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AgingCustomerReport\", api);}\r\n\t\r\n\r\n public GetListByParams(oParams: CustomerListParams, oOptions: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', oParams, {oOptions: oOptions} );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\n\r\nexport class CustomerFilterValues {\r\n PaymentTermID: number;\r\n SalesPersonID: number;\r\n GroupCode: number;\r\n DoInitialize?: boolean = false; \r\n}\r\n\r\nexport type CustomerFilterActionPayload = { CustomerFilterAction: 'apply' | 'clear' };\r\n\r\nclass State extends BaseState {\r\n IsMediumScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-filter',\r\n templateUrl: './customer-filter.component.html',\r\n styleUrls: ['./customer-filter.component.scss']\r\n})\r\nexport class CustomerFilterComponent extends BasePageComponent {\r\n @Input() Filter: CustomerFilterValues;\r\n @Input() SalesPersons: SalesPerson[] ;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() CustomerGroups: CustomerGroup[] = [];\r\n @Output() OnFilterValuesChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'CustomerFilterComponent', BaseEntity, State);\r\n this.State.IsMediumScreen = this.A.Screen.IsWideScreen() || this.A.Screen.IsMediumScreen();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.SetDefaultDateFilterValues();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(e => e.EventName === UI_EVENTS.CUSTOMER_FILTER_ACTION)\r\n )\r\n .subscribe(e => {\r\n const payload = e.Payload as CustomerFilterActionPayload;\r\n if (payload.CustomerFilterAction === 'apply') {\r\n this.HandleFilterChanged(true);\r\n } else if (payload.CustomerFilterAction === 'clear') {\r\n this.Filter.DoInitialize = true;\r\n this.SetDefaultDateFilterValues();\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n private SetDefaultDateFilterValues() {\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n HandleFilterChanged(e?) {\r\n if (!this.A.Screen.IsMobile() && !this.IsUIEvent(e)) return;\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n private cloneFilter() {\r\n return { ...this.Filter } as CustomerFilterValues;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { AgingCustomerReportEndpoint } from '@dino-proxy/endpoints/agingcustomerreport.endpoint';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { CustomerListParams } from '@dino-proxy/params/customerlist.param';\r\nimport { CustomerFilterActionPayload, CustomerFilterValues } from '@dino-pages/customers/components/customer-filter/customer-filter.component';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AgingCustomersGridComponent } from '@dino-pages/aging-customers/aging-customers-grid/aging-customers-grid.component';\r\nimport { AgingCustomersListComponent } from '@dino-pages/aging-customers/aging-customers-list/aging-customers-list.component';\r\n\r\nclass State extends BaseOptionState {\r\n IsMobile: boolean = false;\r\n SalesPersons: SalesPerson[] ;\r\n PaymentTerms: PaymentTerm[] = [];\r\n CustomerGroups: CustomerGroup[] = [];\r\n Filter: CustomerFilterValues;\r\n IsMediumScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-customers',\r\n templateUrl: './aging-customers.component.html',\r\n styleUrls: ['./aging-customers.component.scss']\r\n})\r\nexport class AgingCustomersComponent extends BasePageComponent {\r\n @ViewChild(AgingCustomersGridComponent) grid: AgingCustomersGridComponent;\r\n @ViewChild(AgingCustomersListComponent) list: AgingCustomersListComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: AgingCustomerReportEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'AgingCustomersComponent', BaseEntity, State);\r\n this.State.IsMediumScreen = this.A.Screen.IsWideScreen() || this.A.Screen.IsMediumScreen();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.InitFilter();\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n let params = this.State.Filter as CustomerListParams;\r\n this.DataSources['AgingCustomers'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.GetListByParams(params, options.GetLoadOptions()),\r\n undefined,\r\n undefined,\r\n false);\r\n\r\n this.salesPersonEndpoint.GetListShallow().subscribe(response => this.State.SalesPersons = response.Entities);\r\n this.customerEndpoint.GetPaymentTerms().subscribe(response => this.State.PaymentTerms = response.Entities);\r\n this.customerEndpoint.GetCustomerGroups().subscribe(response => this.State.CustomerGroups = response.Entities);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: !this.State.IsMediumScreen,\r\n IsAllowExport: true,\r\n GridExtender: this.grid?.G \r\n } as ToolbarSettings;\r\n }\r\n\r\n \r\n HandleFilterValuesChanged(e: CustomerFilterValues) {\r\n this.State.Filter = e;\r\n this.State.Filter.DoInitialize && this.InitFilter();\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, this.State.Filter as CustomerListParams);\r\n this.LoadDataSource();\r\n }\r\n\r\n private InitFilter() {\r\n this.State.Filter = new CustomerFilterValues();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, { CustomerFilterAction: 'apply' } as CustomerFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, { CustomerFilterAction: 'clear' } as CustomerFilterActionPayload);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{'lblAgingSection' | RC:THIS}}
\\r\\n
{{State.CustomerTitle}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class TransDocumentListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransDocumentListParams';\r\n }\r\n \r\n public RefDateFrom: Date; \r\n public RefDateUntil: Date; \r\n public IsOpen: boolean; \r\n public HasComplexFilter: boolean; \r\n public CustomerID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from \"@angular/core\";\r\nimport { SalesPersonOption } from \"@dino-proxy/entities/salespersonoption.entity\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ICustomerInjectedComponent } from \"./customer-injected.component\";\r\n\r\n@Component({\r\n selector: 'base-customer-page-component',\r\n template: '
'\r\n})\r\nexport class BaseCustomerPageComponent extends BasePageComponent implements ICustomerInjectedComponent {\r\n public IsSalesPerson: boolean;\r\n public CustomerID: number;\r\n public SalesPersonOption: SalesPersonOption;\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public override EntityType: (new () => TEntity),\r\n public override StateType: (new () => TState),\r\n public customerService: CustomerService,\r\n public displayMode: EnumPageDisplayModes = EnumPageDisplayModes.FullScreen,\r\n public entityMode: EnumPageEntitySources = EnumPageEntitySources.Internal) {\r\n super(A, ComponentName, EntityType, StateType, displayMode, entityMode);\r\n\r\n CustomerService.InjectHandler(this, customerService);\r\n }\r\n\r\n protected IsUseFinishCycleChangeDetection(): boolean { return false; }\r\n\r\n public OnCustomerChanged() { }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AgingReport } from './../entities/agingreport.entity';\r\nimport { TransDocumentListParams } from './../params/transdocumentlist.param';\r\n@Injectable()\r\nexport class AgingReportEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AgingReport\", api);}\r\n\t\r\n\r\n public GetListByParams(oParams: TransDocumentListParams, oOptions: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', oParams, {oOptions: oOptions} );\r\n }\r\n\r\n public GetPdf(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPdf', {EntryID: EntryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class BaseTransDocument extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseTransDocument';\r\n }\r\n \r\n public RefDate: Date; \r\n public DueDate: Date; \r\n public OpenSum: number; \r\n public Comments: string; \r\n public IsPaymentAllowed: boolean; \r\n public AdditionalNotes: string; \r\n public DocumentNumber: number; \r\n public TransType: number; \r\n public OpenSumOrigin: number; \r\n public PdfUrl: string; \r\n public DocumentCurrency: string; \r\n public SBODocumentEntry: number; \r\n public CustomerID: number; \r\n public ContactPersonID: number; \r\n public TransTypeString: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nexport class AgingReport extends BaseTransDocument {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AgingReport';\r\n }\r\n \r\n public OpenSumFeature: number; \r\n public OpenSum1_30: number; \r\n public OpenSum31_60: number; \r\n public OpenSum61_90: number; \r\n public OpenSum91_180: number; \r\n public OpenSum180Plus: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { AgingReport } from '@dino-proxy/entities/agingreport.entity';\r\n\r\nclass State extends BaseState {\r\n IsShowAdditionalNotes: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-grid',\r\n templateUrl: './aging-grid.component.html',\r\n styleUrls: ['./aging-grid.component.scss']\r\n})\r\nexport class AgingGridComponent extends BaseGridComponent {\r\n @Input() Currency: string;\r\n @Input() QuickFiltersGrid: TemplateRef;\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AgingGridComponent', AgingReport, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsShowAdditionalNotes = true;\r\n }\r\n\r\n calculateCustomSummary = (options) => {\r\n const item: AgingReport = options.value;\r\n\r\n if (item) {\r\n if (options.name === 'Sum') { this.calculate(options, item.OpenSum); }\r\n if (options.name === 'SumFeature') { this.calculate(options, item.OpenSumFeature); }\r\n if (options.name === 'Sum1_30') { this.calculate(options, item.OpenSum1_30); }\r\n if (options.name === 'Sum31_60') { this.calculate(options, item.OpenSum31_60); }\r\n if (options.name === 'Sum61_90') { this.calculate(options, item.OpenSum61_90); }\r\n if (options.name === 'Sum90_180') { this.calculate(options, item.OpenSum91_180); }\r\n if (options.name === 'Sum180Plus') { this.calculate(options, item.OpenSum180Plus); }\r\n }\r\n }\r\n\r\n calculate(options: any, value: number) {\r\n if (!options.totalValue) { options.totalValue = 0; }\r\n if (value) { options.totalValue += value; }\r\n }\r\n\r\n OnDocNumClick(document: AgingReport) {\r\n document && this.DocNumClick.emit(document);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (!!this.QuickFiltersGrid) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'quickFiltersGrid',\r\n isCustom: true\r\n });\r\n } \r\n }\r\n\r\n OnNavigate(e) {\r\n const data = e.data;\r\n if (e.rowType !== 'data' || e.columnIndex === 0 && data.PdfUrl) return;\r\n \r\n let docType = data.TransType;\r\n if (docType === 234000031 // RR\r\n || docType === 13 // Invoice\r\n || docType === 14 // Refund\r\n || docType === 15 // DN\r\n || docType === 16 // Return\r\n || docType === 17 // Order\r\n || docType === 23) { // Quote\r\n let type = data.TransTypeString === 'Credit Memo' ? 'Refund' : data.TransTypeString;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: data.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: data.SBODocumentEntry });\r\n }\r\n else {\r\n return;\r\n } \r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{GetDocumentTypeTranslation(cell.data.TransTypeString)}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\nimport { BaseDataResponse, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { TransDocumentListParams } from \"@dino-proxy/params/transdocumentlist.param\";\r\nimport { BalanceView } from \"@dino-proxy/views/balance.view\";\r\nimport { PrintBoxDialogComponent } from '@m4u-angular/ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { BaseCustomerPageComponent } from \"@dino-classes/base-customer-page-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService, UI_EVENTS } from \"@dino-services/ui-component.service\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { EnumDeliveryStatuses, EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { filter } from \"rxjs\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { AgingReport } from \"@dino-proxy/entities/agingreport.entity\";\r\nimport { AgingReportEndpoint } from \"@dino-proxy/endpoints/agingreport.endpoint\";\r\nimport { AgingGridComponent } from \"@dino-pages/aging/aging-grid/aging-grid.component\";\r\n\r\nexport type AgingFilterActionPayload = { AgingFilterAction: 'apply' | 'clear' };\r\n\r\nclass State extends BaseOptionState {\r\n FromDate: Date;\r\n UntilDate: Date;\r\n BalanceView: BalanceView;\r\n CustomerCurrency: string;\r\n Document: AgingReport;\r\n IsMobile: boolean;\r\n RouteCustomerID: number;\r\n CustomerTitle: string;\r\n IsWideScreen: boolean = false;\r\n IsShortScreen: boolean = false;\r\n}\r\n@Component({\r\n selector: 'base-aging',\r\n template: '
',\r\n})\r\nexport abstract class BaseAgingComponent extends BaseCustomerPageComponent {\r\n\r\n @ViewChild(PrintBoxDialogComponent) DialogPrint: PrintBoxDialogComponent;\r\n @ViewChild(AgingGridComponent) grid: AgingGridComponent;\r\n\r\n CustomerDetailsRoute: string = ROUTE_PATHS.CUSTOMER_DETAILS_FULL;\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private agingEndpoint: AgingReportEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n public screenService: ScreenService,\r\n customerService: CustomerService,\r\n private uiComponentService: UiComponentService,\r\n private pageDisplayMode: EnumPageDisplayModes) {\r\n super(A, componentName, BaseEntity, State, customerService, pageDisplayMode);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n this.State.IsShortScreen = !this.A.Screen.IsWideScreen() && !this.A.Screen.IsMediumScreen();\r\n }\r\n\r\n get ShowTitleInToolbar(): boolean {\r\n return this.State.IsMobile || this.pageDisplayMode === EnumPageDisplayModes.Window || !this.State.IsShortScreen;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowExport = true;\r\n settings.GridExtender = this.grid?.G;\r\n settings.IsAllowFilter = !this.State.IsWideScreen;\r\n settings.CustomFilterCssClass = 'window-filter-sidebar';\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n const menu = [];\r\n if ((this.State.RouteCustomerID || this.CustomerID) && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n menu.push({\r\n text: this.RC('btnViewCustomer'),\r\n icon: 'mdi mdi-card-account-details-star-outline',\r\n onClick: () => this.Navigate([this.CustomerDetailsRoute, this.State.RouteCustomerID || this.CustomerID])\r\n });\r\n }\r\n\r\n return menu;\r\n };\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n\r\n if (this.QueryParams.CustomerID) {\r\n this.State.RouteCustomerID = this.QueryParams.CustomerID as number;\r\n this.InitTotalBalance();\r\n }\r\n\r\n if (this.QueryParams.CustomerID || this.QueryParams.Open) this.LoadDataSource();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$.pipe(\r\n filter(e => e.EventName === UI_EVENTS.AGING_FILTER_ACTION)\r\n ).subscribe(e => {\r\n const payload = e.Payload as AgingFilterActionPayload;\r\n if (payload.AgingFilterAction === 'apply') {\r\n this.LoadDataSource();\r\n } else if (payload.AgingFilterAction === 'clear') {\r\n this.State.FromDate = null;\r\n this.State.UntilDate = null;\r\n this.LoadDataSource();\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n override OnInitSubtitle() {\r\n return this.ShowTitleInToolbar ? this.State.CustomerTitle : '';\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.ShowTitleInToolbar ? this.RC('lblAgingSection') : ' ';\r\n }\r\n\r\n GetAgingPageClass(): string {\r\n let uiClass = this.State.IsMobile \r\n ? 'aging-page no-page-scroll no-bottom-padding' \r\n : this.State.IsShortScreen\r\n ? 'aging-page short-header' \r\n : 'aging-page ';\r\n return uiClass;\r\n }\r\n\r\n OnFilterChanged() {\r\n if (!this.State.IsWideScreen) return;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnShowPdf(document: AgingReport) {\r\n this.State.Document = document;\r\n this.DialogPrint.FileName = document.DocumentNumber.toString();\r\n this.DialogPrint.Title = `${this.RC('titlePrintDialog')} ${document.DocumentNumber}`;\r\n this.DialogPrint.ShowDialogShort(undefined);\r\n\r\n this.Do(this.agingEndpoint.GetPdf(document.EntryID), false,\r\n (response: BaseDataResponse) => this.DialogPrint.PDFData = (response.Data as unknown) as string,\r\n (response: BaseDataResponse) => {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n this.DialogPrint.CloseDialogWithCancel();\r\n });\r\n }\r\n\r\n Abs(value: number) {\r\n return Math.abs(value);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadDataSource();\r\n this.InitTotalBalance();\r\n }\r\n\r\n private InitTotalBalance() {\r\n this.customerEndpoint.GetBalance(this.State.RouteCustomerID)\r\n .subscribe(response => { this.State.BalanceView = response.Entity; });\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new TransDocumentListParams();\r\n params.RefDateFrom = this.State.FromDate;\r\n params.RefDateUntil = this.State.UntilDate;\r\n\r\n if (this.State.RouteCustomerID) {\r\n params.CustomerID = this.State.RouteCustomerID;\r\n }\r\n\r\n let customerIDtoView = this.State.RouteCustomerID || this.CustomerID;\r\n if (!customerIDtoView) {\r\n this.State.CustomerTitle = null;\r\n this.ReloadToolbar();\r\n } else {\r\n this.customerEndpoint.GetShallow(customerIDtoView).subscribe(response => {\r\n if (response.IsSuccess && response.Entity) {\r\n this.State.CustomerTitle = response.Entity.CardName + ' - ' + response.Entity.CardCode;\r\n this.State.CustomerCurrency = response.Entity.DisplayCurrency;\r\n this.ReloadToolbar();\r\n }\r\n });\r\n }\r\n\r\n this.DataSources['Aging'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n params.HasComplexFilter = options['ComplexFilter'] ? true : false;\r\n return this.agingEndpoint.GetListByParams(params, options?.GetLoadOptions())\r\n }, undefined, undefined, false);\r\n }\r\n\r\n NavigateTo(e) {\r\n if (this.State.RouteCustomerID) {\r\n this.Navigate([ROUTE_PATHS.DELIVERY_NOTES], {\r\n ObjectType: EnumDocumentTypes.DeliveryNote,\r\n Status: EnumDeliveryStatuses.Open,\r\n CustomerID: this.State.RouteCustomerID\r\n }, true, true);\r\n } else {\r\n this.Navigate([ROUTE_PATHS.DELIVERY_NOTES], {\r\n ObjectType: EnumDocumentTypes.DeliveryNote,\r\n Status: EnumDeliveryStatuses.Open\r\n }, true, true);\r\n }\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.AGING_FILTER_ACTION, { AgingFilterAction: 'apply' } as AgingFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.AGING_FILTER_ACTION, { AgingFilterAction: 'clear' } as AgingFilterActionPayload);\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseAgingComponent } from \"./base/base-aging.component\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { AgingReportEndpoint } from \"@dino-proxy/endpoints/agingreport.endpoint\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-fullscreeen',\r\n templateUrl: './aging.component.html',\r\n styleUrls: ['./aging.component.scss']\r\n})\r\nexport class AgingFullscreenComponent extends BaseAgingComponent {\r\n constructor(A: ServiceBagService,\r\n agingEndpoint: AgingReportEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n screenService: ScreenService,\r\n customerService: CustomerService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'AgingFullscreenComponent', agingEndpoint, customerEndpoint, screenService, customerService, uiComponentService, EnumPageDisplayModes.FullScreen);\r\n }\r\n}","import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { AgingReport } from '@dino-proxy/entities/agingreport.entity';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n IsShowAdditionalNotes: boolean;\r\n ReportItemsState: any = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-list',\r\n templateUrl: './aging-list.component.html',\r\n styleUrls: ['./aging-list.component.scss']\r\n})\r\nexport class AgingListComponent extends BaseComponent {\r\n @Input() DataSource: BaseDataSourceAbstract;\r\n @Input() Currency: string;\r\n\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(DxListComponent) list: DxListComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AgingListComponent', State);\r\n }\r\n \r\n OnDocNumClick(document: AgingReport) {\r\n document && this.DocNumClick.emit(document);\r\n }\r\n\r\n ToggleReportItem(event: any, item: any) {\r\n this.State.ReportItemsState[item.EntryID] = !this.State.ReportItemsState[item.EntryID];\r\n\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const listItemElement = this.FindListItemElement(event.srcElement);\r\n if (this.State.ReportItemsState[item.EntryID]) listItemElement.classList.add('opened');\r\n else listItemElement.classList.remove('opened');\r\n }\r\n }\r\n\r\n OnNavigate(item) {\r\n let docType = item.TransType;\r\n if (docType === 234000031 // RR\r\n || docType === 13 // Invoice\r\n || docType === 14 // Refund\r\n || docType === 15 // DN\r\n || docType === 16 // Return\r\n || docType === 17 // Order\r\n || docType === 23) { // Quote\r\n let type = item.TransTypeString === 'Credit Memo' ? 'Refund' : item.TransTypeString;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: item.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: item.SBODocumentEntry });\r\n }\r\n else {\r\n return;\r\n } \r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n\r\n \r\n private FindListItemElement(element: HTMLElement): HTMLElement {\r\n const parent = element.parentElement;\r\n if (parent.classList.contains('dx-list-item')) return parent;\r\n\r\n return this.FindListItemElement(parent);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{ GetDocumentTypeTranslation(item.TransTypeString) }}\\r\\n \\r\\n  \\r\\n \\r\\n {{ item.DocumentNumber }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{ item.OpenSum | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.RefDate | formatDate }}
\\r\\n
\\r\\n {{ item.TotalSum | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseAgingComponent } from \"./base/base-aging.component\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { AgingReportEndpoint } from \"@dino-proxy/endpoints/agingreport.endpoint\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-aging-window',\r\n templateUrl: './aging.component.html',\r\n styleUrls: ['./aging.component.scss']\r\n})\r\nexport class AgingWindowComponent extends BaseAgingComponent {\r\n constructor(A: ServiceBagService,\r\n agingEndpoint: AgingReportEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n screenService: ScreenService,\r\n customerService: CustomerService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'AgingWindowComponent', agingEndpoint, customerEndpoint, screenService, customerService, uiComponentService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override CustomerDetailsRoute = ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW;\r\n}","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { DocumentService } from \"@dino-services/document.service\";\r\nimport { DocumentView } from \"@dino-proxy/views/document.view\";\r\nimport { DocumentOption } from \"@dino-proxy/entities/documentoption.entity\";\r\nimport { UI_EVENTS, UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { EnumShareDocumentTypes, ShareButtonData } from \"@dino-components/share-document/share-document.component\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { SysGlobals } from \"@m4u-angular/core/framework/sysglobals\";\r\nimport { EnumLanguages } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\n\r\nclass State extends BaseOptionState {\r\n DocumentOption: DocumentOption;\r\n CanCompleteSharing: boolean = null;\r\n ShareButtonText: string = null;\r\n IsSalesPerson: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-checkout-completed',\r\n templateUrl: './checkout-completed.component.html',\r\n styleUrls: ['./checkout-completed.component.scss']\r\n})\r\nexport class CheckoutCompletedComponent extends BaseComponent {\r\n @Input() set Entity(value: DocumentView) {\r\n this._entity = value;\r\n this.State.DocumentOption = value ? this.documentService.GetDocumentOptionByType(this.Entity.DocumentType) : null;\r\n }\r\n @Input() IsEditMode: boolean = false;\r\n get Entity() {\r\n return this._entity;\r\n }\r\n\r\n get IsHebrew(): boolean {\r\n return SysGlobals.Language == EnumLanguages.Hebrew;\r\n }\r\n\r\n private _entity: DocumentView;\r\n\r\n constructor(A: ServiceBagService,\r\n private documentService: DocumentService,\r\n private uiComponentService: UiComponentService,\r\n private customerService: CustomerService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'CheckoutCompletedComponent', State);\r\n }\r\n\r\n override OnInitComponentInternal() {\r\n this.State.IsSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n super.OnInitComponentInternal();\r\n }\r\n\r\n GetDocumentTypeText() {\r\n return `${this.LIST('EnumDocumentTypes').find(x => x.Value === this.Entity?.DocumentType)?.Text} `;\r\n }\r\n\r\n GotoProductCatalog() {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n GotoHistory() {\r\n if (!this.Entity || !this.Entity.DocumentType || !this.State.DocumentOption?.IsAllowView) return;\r\n this.Navigate([`pages/${this.Entity.DocumentType.toLowerCase()}s`], { ObjectType: this.Entity.DocumentType });\r\n }\r\n\r\n HandleGotoDocument() {\r\n if (!this.Entity || !this.Entity.DocumentType || !this.State.DocumentOption?.IsAllowView) return;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: this.Entity.EntryID, DocumentType: this.Entity.DocumentType });\r\n }\r\n\r\n OnShareButtonClick() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.SHARE_DOCUMENT);\r\n }\r\n\r\n UpdateShareButtonData(data: ShareButtonData) {\r\n this.State.CanCompleteSharing = data.CanComplete;\r\n this.State.ShareButtonText = data.SelectedShareType === EnumShareDocumentTypes.Print\r\n ? this.RC('lblSharePrint')\r\n : (data.SelectedShareType === EnumShareDocumentTypes.ShareToApplication) ? this.RC('lblShareToApplication') : this.RC('lblShareSend');\r\n }\r\n\r\n GotoCustomerSelection() {\r\n if (!this.State.IsSalesPerson) return;\r\n\r\n this.customerService.SetCustomer(null)\r\n .subscribe(r => {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblCheckoutSuccessfulSales1' | RC:THIS}} {{' '}}
\\r\\n
{{'lblCheckoutSuccessfulCustomer1' | RC:THIS}}{{' '}}
\\r\\n
{{GetDocumentTypeText()}}
\\r\\n
\\r\\n\\r\\n \\r\\n
{{GetDocumentTypeText()}}
\\r\\n
{{'lblCheckoutSuccessfulSales1' | RC:THIS}}
\\r\\n
{{'lblCheckoutSuccessfulCustomer1' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
{{Entity?.DocumentNumber}}
\\r\\n \\r\\n {{Entity?.DocumentNumber}}\\r\\n \\r\\n
{{'lblCheckoutSuccessfulSales2' | RC:THIS}}
\\r\\n
{{'lblCheckoutSuccessfulCustomer2' | RC:THIS}}
\\r\\n
{{'lblCheckoutSuccessfulEdit' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\n\r\nclass State extends BaseOptionState {}\r\n\r\nexport type NavigationTabCode = 'items' | 'details' | 'attachments' | 'signature' | 'payment';\r\n\r\nexport class NavigationTab {\r\n public Label: string;\r\n public LabelAsNextStep: string;\r\n public Code: NavigationTabCode;\r\n public Index: number;\r\n}\r\n\r\n@Component({\r\n selector: 'app-checkout-navigator',\r\n templateUrl: './checkout-navigator.component.html',\r\n styleUrls: ['./checkout-navigator.component.scss'],\r\n})\r\nexport class CheckoutNavigatorComponent extends BaseComponent {\r\n @Input() SelectedTabIndex: number = 0;\r\n @Input() NavigationTabs: NavigationTab[] = [];\r\n @Output() OnTabIndexChanged = new EventEmitter()\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CheckoutNavigatorComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n\r\n override OnDestroyComponent() {\r\n }\r\n\r\n SetTab(tab: NavigationTab) {\r\n this.OnTabIndexChanged.emit(tab);\r\n }\r\n}\r\n","export default \"
\\r\\n
=tab.Index}\\\" \\r\\n (click)=\\\"SetTab(tab)\\\" \\r\\n *ngFor=\\\"let tab of NavigationTabs\\\">\\r\\n
\\r\\n
\\r\\n {{tab.Label | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\n\r\nclass State\r\n{\r\n OkText: string;\r\n CancelText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-checkout-signature-dialog',\r\n templateUrl: './checkout-signature-dialog.component.html',\r\n styleUrls: ['./checkout-signature-dialog.component.scss']\r\n})\r\nexport class CheckoutSignatureDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild(SignBoxComponent) signBox: SignBoxComponent;\r\n @Input() Title: string;\r\n @Input() OkButtonText: string;\r\n @Input() MaxSignatureHeight: number=0;\r\n @Input() SignatureReadOnly: boolean;\r\n @Input() Required: boolean = false;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CheckoutSignatureDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n public set SignatureData(value: string)\r\n {\r\n this.signBox.SignatureData = value;\r\n }\r\n public get SignatureData(): string\r\n {\r\n return this.signBox.SignatureData;\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n protected override OnInitComponentFinished()\r\n {\r\n if (this.OkButtonText != undefined) { this.State.OkText = this.OkButtonText; }\r\n else { this.State.OkText = this.RC('genSign'); }\r\n this.State.CancelText = this.RC('lblClear');\r\n }\r\n\r\n OnResetPad() {\r\n this.signBox.ClearSignature();\r\n }\r\n\r\n //Save\r\n OnSaveSignature() {\r\n if (!this.SignatureReadOnly) {\r\n //Make sure signature exists\r\n if (this.signBox.IsEmpty() && this.Required) {\r\n this.UI.StopMessage(this.RC('msgSignatureRequired'), '#pad');\r\n return;\r\n }\r\n\r\n //Save and close\r\n this.signBox.Save();\r\n this.CloseDialogWithSuccess(this.SignatureData);\r\n }\r\n else { this.CloseDialogWithCancel();}\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { CheckoutSignatureDialogComponent } from '@dino-pages/checkout2/components/signature-dialog/checkout-signature-dialog.component';\r\nimport { EnumFormFieldOptions } from '@dino-proxy/enums';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-checkout-signature',\r\n templateUrl: './checkout-signature.component.html',\r\n styleUrls: ['./checkout-signature.component.scss']\r\n})\r\nexport class CheckoutSignatureComponent extends BaseComponent {\r\n @Input() Entity: ShoppingCartView;\r\n @Input() SignatureOption: EnumFormFieldOptions;\r\n @Output() OnSignatureChanged: EventEmitter = new EventEmitter();\r\n @ViewChild(CheckoutSignatureDialogComponent) signatureDialog: CheckoutSignatureDialogComponent;\r\n\r\n public get Valid() {\r\n return this.SignatureOption && this.SignatureOption === EnumFormFieldOptions.Mandatory ? !!this.Entity?.SignatureBase64 : true;\r\n }\r\n \r\n public get HasSignature() {\r\n return !!this.Entity?.SignatureBase64;\r\n }\r\n\r\n constructor(A: ServiceBagService,) {\r\n super(A, 'CheckoutSignatureComponent', State);\r\n }\r\n override OnInitComponent(): void {\r\n if (this.Entity?.Signature?.SignatureBase64) {\r\n this.Entity.SignatureBase64 = 'data:image/png;base64,' + this.Entity.Signature.SignatureBase64;\r\n }\r\n }\r\n\r\n public OpenSignBoxDialog() {\r\n if (!!this.Entity.SignatureBase64) {\r\n this.signatureDialog.SignatureData = this.Entity?.SignatureBase64;\r\n }\r\n \r\n this.signatureDialog.ShowDialogShort((signature) => {\r\n this.Entity.SignatureBase64 = signature;\r\n this.OnSignatureChanged.emit();\r\n });\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
{{'lblSignHere' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseOptionState {\r\n SafeHtml: SafeHtml;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-checkout-terms-of-use-dialog',\r\n templateUrl: './checkout-terms-of-use-dialog.component.html',\r\n styleUrls: ['./checkout-terms-of-use-dialog.component.scss']\r\n})\r\nexport class CheckoutTermsOfUseDialogComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'CheckoutTermsOfUseDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.SafeHtml = this.sanitizer.bypassSecurityTrustHtml(this.State.CustomerOption.TermsOfUseOption.Content);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\n\r\nclass State extends BaseState {\r\n PaymentTerms: PaymentTerm[] = [];\r\n IsMobile: boolean;\r\n IsWideScreen: boolean;\r\n DateAndTimeFormat: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-details',\r\n templateUrl: './document-details.component.html',\r\n styleUrls: ['./document-details.component.scss']\r\n})\r\nexport class DocumentDetailsComponent extends BaseComponent {\r\n @Input() Entity: ShoppingCartView;\r\n @Input() DocumentOption: DocumentOption;\r\n @Input() IsDocumentDetailsExpanded: boolean = false;\r\n\r\n @Output() OnCalculatePaymentTermsDate: EventEmitter = new EventEmitter();\r\n @Output() OnDocumentDetailsValueChanged: EventEmitter = new EventEmitter();\r\n \r\n Today = new Date();\r\n\r\n constructor(A: ServiceBagService, private customerEndpoint: CustomerEndpoint, private documentService: DocumentService) {\r\n super(A, 'DocumentDetailsComponent', State);\r\n this.State.DateAndTimeFormat = `${this.Framework.CompanyInfo.DateFormatLong} | ${this.Framework.CompanyInfo.TimeFormatShort}`;\r\n }\r\n\r\n public get IsInvoiceOrRefund() {\r\n return this.documentService.IsFinancial(this.Entity.DocumentType);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n this.customerEndpoint.GetPaymentTerms().subscribe(response => this.State.PaymentTerms = response.Entities);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n CalculatePaymentTermsDate() {\r\n this.OnCalculatePaymentTermsDate.emit();\r\n }\r\n\r\n // This patch method is used for dx-date-box because of a bug when clicking 'Today' button\r\n // triggered onValueChanged event 4-7 times\r\n RecalculatePaymentTermsDate(e) {\r\n const currentDate = new Date(e.value);\r\n const previousDate = new Date(e.previousValue);\r\n currentDate.setHours(0, 0, 0, 0);\r\n previousDate.setHours(0, 0, 0, 0);\r\n\r\n (e && currentDate.getTime() !== previousDate.getTime()) && this.OnCalculatePaymentTermsDate.emit();\r\n }\r\n\r\n UpdateDocumentDetailsValue(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.OnDocumentDetailsValueChanged.emit();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { EnumFormFieldOptions } from '@dino-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ActionResultEvent, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseOptionState {\r\n DiscountPercent: number = 0;\r\n DiscountSum: number = 0;\r\n TotalBeforeVat: number = 0;\r\n TotalVat: number = 0;\r\n TotalAfterVat: number = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-edit-summary',\r\n templateUrl: './edit-summary.component.html',\r\n styleUrls: ['./edit-summary.component.scss']\r\n})\r\nexport class EditSummaryComponent extends BasePageComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'EditSummaryComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitComponent() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n this.State.DiscountPercent = shoppingCart?.DiscountPercent;\r\n this.State.DiscountSum = shoppingCart?.DiscountSum;\r\n this.State.TotalBeforeVat = shoppingCart?.TotalBeforeVat;\r\n this.State.TotalVat = shoppingCart?.TotalVat;\r\n this.State.TotalAfterVat = shoppingCart?.TotalAfterVat;\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumFormFieldOptions.Hidden;\r\n IsFieldDisabled = (name: string) => this.GetFieldOption(name) === EnumFormFieldOptions.Disabled;\r\n IsFieldMandatory = (name: string) => this.GetFieldOption(name) === EnumFormFieldOptions.Mandatory;\r\n GetFieldOption(name: string) {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n if (!shoppingCart || !shoppingCart.DocumentOption) return false;\r\n return shoppingCart?.DocumentOption['Document' + name + 'Option'] as EnumFormFieldOptions;\r\n }\r\n\r\n HandleDiscountPercentChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.CalculateDiscountSumValue();\r\n this.CalculateTotalBeforeVatValue();\r\n this.CalculateVatSumValue();\r\n this.CalculateTotalAfterVatValue();\r\n }\r\n\r\n HandleDiscountSumChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.CalculateDiscountPercentValue();\r\n this.CalculateTotalBeforeVatValue();\r\n this.CalculateVatSumValue();\r\n this.CalculateTotalAfterVatValue();\r\n }\r\n\r\n HandleTotalAfterVatChanged(e) {\r\n if (!e?.event) return;\r\n\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n let discount = (1 - (this.State.TotalAfterVat / (this.GetLineVatSumBeforeDiscount() + shoppingCart.TotalBeforeDiscount))) * 100;\r\n this.State.DiscountPercent = discount;\r\n this.CalculateDiscountSumValue();\r\n this.CalculateTotalBeforeVatValue();\r\n this.CalculateVatSumValue();\r\n this.CalculateTotalAfterVatValue();\r\n }\r\n\r\n private GetDiscountMultiplier(discountPercent: number): number {\r\n return 1 - (discountPercent ?? 0) / 100;\r\n }\r\n\r\n private RoundPrice(value: number): number {\r\n return Number(value.toFixed(2));\r\n }\r\n\r\n private CalculateDiscountPercentValue() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n this.State.DiscountPercent = this.RoundPrice(this.State.DiscountSum / shoppingCart.TotalBeforeDiscount * 100);\r\n }\r\n\r\n private CalculateDiscountSumValue() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n this.State.DiscountSum = this.RoundPrice((this.State.DiscountPercent ?? 0) / 100 * shoppingCart.TotalBeforeDiscount);\r\n }\r\n\r\n private CalculateTotalBeforeVatValue() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n this.State.TotalBeforeVat = shoppingCart.TotalBeforeDiscount - this.State.DiscountSum;\r\n }\r\n\r\n private CalculateVatSumValue() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n this.State.TotalVat = this.RoundPrice(this.GetDiscountMultiplier(this.State.DiscountPercent) * this.GetLineVatSumBeforeDiscount());\r\n }\r\n\r\n private GetLineVatSumBeforeDiscount(): number {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n return shoppingCart.TotalVatBeforeDiscount;\r\n }\r\n\r\n private CalculateTotalAfterVatValue() {\r\n this.State.TotalAfterVat = this.State.TotalBeforeVat + this.State.TotalVat;\r\n\r\n if (this.State.CustomerOption?.BusinessOption?.IsRoundTotals) {\r\n const roundedTotalAfterVat = Math.round(this.State.TotalAfterVat);\r\n if (this.State.TotalAfterVat !== roundedTotalAfterVat) {\r\n this.State.TotalAfterVat = roundedTotalAfterVat;\r\n this.HandleTotalAfterVatChanged({ event: {} });\r\n }\r\n }\r\n }\r\n\r\n\r\n // HandleDiscountPercentChanged(e) {\r\n // if (!e?.event) return;\r\n\r\n // if (!e.value) this.State.DiscountPercent = 0;\r\n\r\n // const shoppingCart = this.Entity as ShoppingCartView;\r\n\r\n // if (this.State.DiscountPercent === 0) {\r\n // this.State.DiscountSum = 0;\r\n // this.State.TotalAfterVat = shoppingCart.TotalAfterVat;\r\n // } else if (this.State.DiscountPercent === 100) {\r\n // this.State.DiscountSum = shoppingCart.TotalBeforeDiscount;\r\n // this.State.TotalAfterVat = 0;\r\n // } else {\r\n\r\n // }\r\n // }\r\n\r\n // HandleDiscountSumChanged(e) {\r\n // if (!e?.event) return;\r\n\r\n // const shoppingCart = this.Entity as ShoppingCartView;\r\n // if (this.State.DiscountSum === 0) {\r\n // this.State.DiscountPercent = 0;\r\n // } else if (this.State.DiscountSum === shoppingCart.TotalBeforeDiscount) {\r\n // this.State.DiscountPercent = 100;\r\n // } else if (shoppingCart.TotalBeforeDiscount === 0) {\r\n // this.State.DiscountPercent = 0;\r\n // } else {\r\n // this.State.DiscountPercent = Utils.Round((this.State.DiscountSum / shoppingCart.TotalBeforeDiscount) * 100);\r\n // }\r\n\r\n // this.RecalculateTotals();\r\n // }\r\n\r\n // HandleTotalAfterVatChanged(e) {\r\n // if (!e?.event) return;\r\n\r\n // const shoppingCart = this.Entity as ShoppingCartView;\r\n // if (this.State.TotalAfterVat === 0) {\r\n // this.State.DiscountPercent = 100;\r\n // } else if ((shoppingCart.TotalBeforeDiscount + shoppingCart.TotalVatBeforeDiscount) === 0) {\r\n // this.State.DiscountPercent = -shoppingCart.TotalAfterVat;\r\n // }\r\n // else {\r\n // this.State.DiscountPercent = Utils.Round((1 - (this.State.TotalAfterVat / (shoppingCart.TotalBeforeDiscount + shoppingCart.TotalVatBeforeDiscount))) * 100);\r\n // }\r\n\r\n // this.RecalculateTotals();\r\n // }\r\n\r\n HandleApplyChanges() {\r\n if (this.State.TotalAfterVat < 0) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageDialog.Title = this.RC('lblEditSummaryError');\r\n this.messageDialog.Prompt = this.RC('lblEditSummaryNegativeTotalAfterVat');\r\n this.messageDialog.ShowDialogShort(() => { });\r\n return;\r\n };\r\n\r\n this.shoppingCartService.updateTotals(this.State.DiscountPercent, this.State.DiscountSum, this.State.TotalAfterVat)\r\n .subscribe((r: ActionResultEvent) => {\r\n if (r.success) {\r\n this.CloseDialogWithSuccess();\r\n } else {\r\n //this.uiComponentService.ProcessAlerts(r.error);\r\n }\r\n });\r\n }\r\n\r\n protected RecalculateTotals() {\r\n const shoppingCart = this.Entity as ShoppingCartView;\r\n if (this.State.DiscountPercent === 0) {\r\n this.State.DiscountSum = 0;\r\n }\r\n\r\n this.State.DiscountSum = Utils.Round((shoppingCart.TotalBeforeDiscount * this.State.DiscountPercent) / 100);\r\n const vatAfterDiscount = Utils.Round(shoppingCart.TotalVatBeforeDiscount - ((shoppingCart.TotalVatBeforeDiscount * this.State.DiscountPercent) / 100));\r\n this.State.TotalAfterVat = Utils.Round(shoppingCart.TotalBeforeDiscount - this.State.DiscountSum + vatAfterDiscount);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Wishlist } from './../entities/wishlist.entity';\r\nimport { ItemView } from './../views/item.view';\r\n@Injectable()\r\nexport class WishlistEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Wishlist\", api);}\r\n\t\r\n\r\n public UpdateItemInWishlist(ItemEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'UpdateItemInWishlist', {ItemEntryID: ItemEntryID} );\r\n }\r\n\r\n public GetWishlistItems() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetWishlistItems', undefined );\r\n }\r\n\r\n public RemoveAllItems() : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'RemoveAllItems', undefined );\r\n }\r\n\r\n public GetWishlistCount() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetWishlistCount', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FilterClarificationResult } from './../entities/filterclarificationresult.entity';\r\nimport { ItemListParams } from './../params/itemlist.param';\r\n@Injectable()\r\nexport class FilterEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Filter\", api);}\r\n\t\r\n\r\n public GetFilterClarification(Params: ItemListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetFilterClarification', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BaseService } from \"@m4u-angular/base/service/BaseService\";\r\nimport { ReplaySubject } from \"rxjs/internal/ReplaySubject\";\r\n\r\nexport type AddonDataDescriptor = { AddonName: string, SerializedData: string };\r\nexport type AddonData = { loaded: boolean, initialized?: boolean, storageKey?: string, data?: {} | string }\r\n\r\nexport const BaseQuantityAddonName = 'quantity-addon';\r\nexport const BaseItemExtendedInformationAddonName = 'item-extended-information-addon';\r\nexport const BaseShoppingCartItemExtendedInformationAddonName = 'shopping-cart-item-extended-information-addon';\r\nexport const BaseListQuantityAddonName = 'list-quantity-addon';\r\nexport const BaseShoppingCartActionAddonName = 'shopping-cart-action-addon';\r\nexport const BaseCatalogHeaderActionAddonName = 'catalog-header-action-addon';\r\nexport const BaseCheckoutExtendedAddonName = 'checkout-extended-addon';\r\n\r\nexport enum AddonEventTypes {\r\n Ready,\r\n SendToAddon,\r\n SendFromAddon,\r\n ItemUpdateFromAddon\r\n}\r\n\r\nexport interface AddonEvent {\r\n EventType: AddonEventTypes;\r\n addonName: string;\r\n entryID?: number | string;\r\n storageKey?: string;\r\n data?: {} | string;\r\n}\r\n\r\n/// IMPORTANT! The current implementation provides ONLY separated for every item/entity functionality. \r\n/// It meants that the instance of AddonService handles ONLY current level and down\r\n/// Should be injected as new instance for root component. ( -> added to providers)\r\n/// Example -> providers: [AddonService]\r\n@Injectable()\r\nexport class AddonService extends BaseService {\r\n private eventSubject = new ReplaySubject(1);\r\n readonly event$ = this.eventSubject.asObservable();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n addonReady(addonName: string, storageKey: string) {\r\n this.eventSubject.next({\r\n EventType: AddonEventTypes.Ready,\r\n addonName: addonName,\r\n storageKey: storageKey\r\n });\r\n }\r\n\r\n sendToAddon(addonName: string, entryID?: number | string, data?: {} | string) {\r\n this.eventSubject.next({\r\n EventType: AddonEventTypes.SendToAddon,\r\n addonName: addonName,\r\n entryID: entryID,\r\n data: data\r\n });\r\n }\r\n\r\n sendFromAddon(addonName: string, storageKey: string, entryID?: number | string, data?: {} | string) {\r\n this.eventSubject.next({\r\n EventType: AddonEventTypes.SendFromAddon,\r\n addonName: addonName,\r\n storageKey: storageKey,\r\n entryID: entryID,\r\n data: data\r\n });\r\n }\r\n\r\n ItemUpdateFromAddon(addonName: string, storageKey: string, entryID?: number | string, data?: {}) {\r\n this.eventSubject.next({\r\n EventType: AddonEventTypes.ItemUpdateFromAddon,\r\n addonName: addonName,\r\n storageKey: storageKey,\r\n entryID: entryID,\r\n data: data\r\n });\r\n }\r\n\r\n parseAdditionalDataAndSendToAddons(entityID: number,\r\n additionalData: string,\r\n addons: { [key: string]: AddonData },\r\n addonName?: string,\r\n forceSending: boolean = false) {\r\n\r\n if (!entityID) return;\r\n\r\n const addonDescriptors = additionalData ? (JSON.parse(additionalData) as AddonDataDescriptor[]) : [];\r\n\r\n const sentDataFunc = (name: string, itemAddonData: AddonData) => {\r\n if ((!itemAddonData.loaded || itemAddonData.initialized) && !forceSending) return;\r\n\r\n const addonDescriptor = addonDescriptors.find(x => x.AddonName === itemAddonData.storageKey);\r\n this.sendToAddon(name, entityID, addonDescriptor ? addonDescriptor.SerializedData : null);\r\n itemAddonData.initialized = true;\r\n };\r\n\r\n if (addonName) {\r\n const itemAddonData = addons[addonName];\r\n sentDataFunc(addonName, itemAddonData);\r\n } else {\r\n for (const [key, value] of Object.entries(addons)) {\r\n (key && value) && sentDataFunc(key, value);\r\n }\r\n }\r\n }\r\n}","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Signature extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Signature';\r\n }\r\n \r\n public SignatureBase64: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumShoppingPaymentStatus } from './../enums';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { EnumCreditCardPaymentStatus } from './../enums';\r\nimport { EnumCreditTypes } from './../enums';\r\nexport class ShoppingPayment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPayment';\r\n }\r\n \r\n public DocumentID: number; \r\n public TotalAmount: number; \r\n public Currency: string; \r\n public ReceiptID: number; \r\n public PaymentOnAccount: number; \r\n public CustomerID: number; \r\n public Status: EnumShoppingPaymentStatus; \r\n public DocumentRemarks: string; \r\n public ShoppingPaymentCashItems: ShoppingPaymentCashItem[] = []; \r\n public ShoppingPaymentChequeItems: ShoppingPaymentChequeItem[] = []; \r\n public ShoppingPaymentLaterItems: ShoppingPaymentLaterItem[] = []; \r\n public ShoppingPaymentWireItems: ShoppingPaymentWireItem[] = []; \r\n public ShoppingPaymentCreditCardItems: ShoppingPaymentCreditCardItem[] = []; \r\n public ShoppingPaymentDocumentItems: ShoppingPaymentDocumentItem[] = []; \r\n public IsOnlyLaterPayment: boolean; \r\n public IsOnlyCreditCardPayment: boolean; \r\n public AnyPaymentDone: boolean; \r\n\t\r\n}\r\n\r\nexport class ShoppingPaymentDocumentItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentDocumentItem';\r\n }\r\n \r\n public DocumentType: EnumDocumentTypes; \r\n public SumApplied: number; \r\n public DocEntry: number; \r\n public DocLineID: number; \r\n public LineID: number;\r\n}\r\nexport class ShoppingPaymentWireItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentWireItem';\r\n }\r\n \r\n public Amount: number; \r\n public PaymentDate: Date; \r\n public WireRefference: string; \r\n public LineID: number;\r\n}\r\nexport class ShoppingPaymentLaterItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentLaterItem';\r\n }\r\n \r\n public Amount: number; \r\n public LineID: number;\r\n}\r\nexport class ShoppingPaymentChequeItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentChequeItem';\r\n }\r\n \r\n public Amount: number; \r\n public PaymentDate: Date; \r\n public ChequeNumber: number; \r\n public BankAccountNumber: string; \r\n public BankCode: string; \r\n public BankBranch: string; \r\n public LineID: number;\r\n}\r\nexport class ShoppingPaymentCashItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentCashItem';\r\n }\r\n \r\n public Amount: number; \r\n public PaymentDate: Date; \r\n public LineID: number;\r\n}\r\nexport class ShoppingPaymentCreditCardItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentCreditCardItem';\r\n }\r\n \r\n public Amount: number; \r\n public PaymentDate: Date; \r\n public CreditCardNum: string; \r\n public UsedSavedCreditCard: boolean; \r\n public IsSaveCreditCard: boolean; \r\n public Status: EnumCreditCardPaymentStatus; \r\n public AccountingAccountCode: string; \r\n public CreditCardExpiryDateMMYY: string; \r\n public AccountingCCTypeName: string; \r\n public CreditCardHolderPersonalID: string; \r\n public Phone: string; \r\n public TransactionID: number; \r\n public ManualApprovalNumber: string; \r\n public CreditType: EnumCreditTypes; \r\n public NumberOfPayments: number; \r\n public FirstPaymentSum: number; \r\n public OtherPaymentsSum: number; \r\n public TerminalNumber: string; \r\n public TotalPayment: number; \r\n public PrivatePaymentRequestID: string; \r\n public PaymentURL: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DistributionCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DistributionCategory';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DistributionCategory } from './../entities/distributioncategory.entity';\r\nexport class DistributionCycle extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DistributionCycle';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public DistributionCycleDates: DistributionCycleDate[] = []; \r\n public DistributionCycleCategories: DistributionCycleCategory[] = []; \r\n\t\r\n}\r\n\r\nexport class DistributionCycleDate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DistributionCycleDate';\r\n }\r\n \r\n public Date: Date; \r\n public LastDocumentUntil: Date; \r\n public EarlierDocumentFrom: Date; \r\n public LineID: number;\r\n}\r\nexport class DistributionCycleCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DistributionCycleCategory';\r\n }\r\n \r\n public DistributionCategoryID: number; \r\n public DistributionCategory: DistributionCategory = new DistributionCategory; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class BaseOption extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseOption';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumAddressFieldOptions } from './../enums';\r\nexport class AddressOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AddressOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public StreetFieldOption: EnumAddressFieldOptions; \r\n public StreetNoFieldOption: EnumAddressFieldOptions; \r\n public BuildingFieldOption: EnumAddressFieldOptions; \r\n public BlockFieldOption: EnumAddressFieldOptions; \r\n public CityFieldOption: EnumAddressFieldOptions; \r\n public CountyFieldOption: EnumAddressFieldOptions; \r\n public ZipCodeFieldOption: EnumAddressFieldOptions; \r\n public CountryFieldOption: EnumAddressFieldOptions; \r\n public StateFieldOption: EnumAddressFieldOptions; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCustomFieldLocations } from './../enums';\r\nimport { EnumCustomFieldTypes } from './../enums';\r\nexport class CustomField extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomField';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public Location: EnumCustomFieldLocations; \r\n public Type: EnumCustomFieldTypes; \r\n public TargetFieldName: string; \r\n public IsMandatory: boolean; \r\n public DefaultValue: string; \r\n public IsRenderForNew: boolean; \r\n public IsRenderForExisting: boolean; \r\n public CustomFieldListValues: CustomFieldListValue[] = []; \r\n public IsNumber: boolean; \r\n public IsString: boolean; \r\n public IsDate: boolean; \r\n public IsPrice: boolean; \r\n\t\r\n}\r\n\r\nexport class CustomFieldListValue extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomFieldListValue';\r\n }\r\n \r\n public Text: string; \r\n public TargetFieldValue: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCustomFieldLocations } from './../enums';\r\nimport { CustomField } from './../entities/customfield.entity';\r\nexport class CustomFieldset extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomFieldset';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public Location: EnumCustomFieldLocations; \r\n public CustomFieldsetLines: CustomFieldsetLine[] = []; \r\n\t\r\n}\r\n\r\nexport class CustomFieldsetLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomFieldsetLine';\r\n }\r\n \r\n public CustomFieldID: number; \r\n public CustomField: CustomField = new CustomField; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumOrderingItemsOutOfStockAction } from './../enums';\r\nimport { EnumAddressEntryModes } from './../enums';\r\nimport { EnumContactPersonEntryModes } from './../enums';\r\nimport { EnumShowDocumentFilesModes } from './../enums';\r\nimport { EnumFormFieldOptions } from './../enums';\r\nimport { EnumCasualContactPersonNotificationReceivers } from './../enums';\r\nimport { EnumDocumentDraftOptions } from './../enums';\r\nimport { AddressOption } from './../entities/addressoption.entity';\r\nimport { CustomFieldset } from './../entities/customfieldset.entity';\r\nexport class DocumentOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsAllowNew: boolean; \r\n public IsAllowEdit: boolean; \r\n public IsAllowView: boolean; \r\n public IsAllowSummaryEditing: boolean; \r\n public IsAllowLineEditing: boolean; \r\n public MinTotalBeforeVat: number; \r\n public IsAllowEditingAddress: boolean; \r\n public IsAllowEditingContact: boolean; \r\n public IsAllowSelectingAddress: boolean; \r\n public IsAllowSelectingContact: boolean; \r\n public IsAllowItemsWithoutPrice: boolean; \r\n public IsEnableNotes: boolean; \r\n public IsAllowCancelation: boolean; \r\n public IsEnableCheckoutNotes: boolean; \r\n public IsAllowDuplication: boolean; \r\n public IsShowStatus: boolean; \r\n public IsShowExtraConfirmation: boolean; \r\n public IsEnableGiftCards: boolean; \r\n public IsEnablePaymentTerms: boolean; \r\n public IsEnableCustomerReference: boolean; \r\n public IsEnableDueDate: boolean; \r\n public IsEnablePostingDate: boolean; \r\n public IsAllowClose: boolean; \r\n public IsAllowBaseDocument: boolean; \r\n public IsAllowRepeat: boolean; \r\n public IsAllowPayment: boolean; \r\n public IsAllowNegativeQuantity: boolean; \r\n public IsAlertPendingItemExists: boolean; \r\n public IsAlertCustomerCredit: boolean; \r\n public IsAlertCustomerObligo: boolean; \r\n public IsShowItemCustomAlert: boolean; \r\n public IsShowCustomerCustomAlert: boolean; \r\n public OrderingItemsOutOfStockAction: EnumOrderingItemsOutOfStockAction; \r\n public IsShowShareNewDocument: boolean; \r\n public IsEnablePromotions: boolean; \r\n public AddressEntryMode: EnumAddressEntryModes; \r\n public ContactPersonEntryMode: EnumContactPersonEntryModes; \r\n public IsShowContactForExistingDocuments: boolean; \r\n public IsShowContactDetailsForExistingDocuments: boolean; \r\n public IsShowAddressForExistingDocuments: boolean; \r\n public IsShowAddressDetailsForExistingDocuments: boolean; \r\n public IsShowShareExistingDocument: boolean; \r\n public IsAllowAttachments: boolean; \r\n public AllowedAttachmentFileTypes: string; \r\n public AddressOptionID: number; \r\n public IsBlockEditingItemsWhenBasedOn: boolean; \r\n public ShowFilesMode: EnumShowDocumentFilesModes; \r\n public AcceptedFileTypes: string; \r\n public ItemOption: EnumFormFieldOptions; \r\n public CurrencyOption: EnumFormFieldOptions; \r\n public PriceOption: EnumFormFieldOptions; \r\n public PriceAfterVatOption: EnumFormFieldOptions; \r\n public DiscountOption: EnumFormFieldOptions; \r\n public PriceAfterDiscountOption: EnumFormFieldOptions; \r\n public PriceAfterDiscountAndVatOption: EnumFormFieldOptions; \r\n public TotalOption: EnumFormFieldOptions; \r\n public TotalAfterVatOption: EnumFormFieldOptions; \r\n public NotesOption: EnumFormFieldOptions; \r\n public WarehouseOption: EnumFormFieldOptions; \r\n public SignatureOption: EnumFormFieldOptions; \r\n public DocumentTotalBeforeDiscountOption: EnumFormFieldOptions; \r\n public DocumentDiscountPercentOption: EnumFormFieldOptions; \r\n public DocumentDiscountSumOption: EnumFormFieldOptions; \r\n public DocumentTotalAfterVatOption: EnumFormFieldOptions; \r\n public CasualContactPersonNotificationReceiver: EnumCasualContactPersonNotificationReceivers; \r\n public DraftOption: EnumDocumentDraftOptions; \r\n public AddressOption: AddressOption = new AddressOption; \r\n public HeaderFieldsetID: number; \r\n public HeaderFieldset: CustomFieldset = new CustomFieldset; \r\n public DocumentLineOptions: DocumentLineOption[] = []; \r\n\t\r\n}\r\n\r\nexport class DocumentLineOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentLineOption';\r\n }\r\n \r\n public FieldName: string; \r\n public FieldOption: EnumFormFieldOptions; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ItemActionPermissions extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemActionPermissions';\r\n }\r\n \r\n public IsAllowItemCodeEditing: boolean; \r\n public IsAllowQuantityEditing: boolean; \r\n public IsAllowItemDeleting: boolean; \r\n public IsAllowPriceEditing: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ShoppingCartStatusEnums } from './../enums';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { SuggestedPromotion } from './../entities/suggestedpromotion.entity';\r\nimport { Signature } from './../entities/signature.entity';\r\nimport { ShoppingPayment } from './../entities/shoppingpayment.entity';\r\nimport { DistributionCycle } from './../entities/distributioncycle.entity';\r\nimport { DocumentOption } from './../entities/documentoption.entity';\r\nimport { EnumShoppingCartItemType } from './../enums';\r\nimport { ItemActionPermissions } from './../entities/itemactionpermissions.entity';\r\nimport { Warehouse } from './../entities/warehouse.entity';\r\nexport class ShoppingCart extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCart';\r\n }\r\n \r\n public CustomerID: number; \r\n public CustomerAddressID: number; \r\n public ContactPersonID: number; \r\n public ShipmentMethodID: number; \r\n public SubmitDate: Date; \r\n public LastUpdateDate: Date; \r\n public Status: ShoppingCartStatusEnums; \r\n public DocumentID: number; \r\n public DocumentRemarks: string; \r\n public ShipmentNotes: string; \r\n public DocDueDate: Date; \r\n public MinPlannedDeliveryDate: Date; \r\n public PaidAmount: number; \r\n public DisableShoppingCartChange: boolean; \r\n public Currency: string; \r\n public ValidationResult: ValidationResult = new ValidationResult; \r\n public TotalItems: number; \r\n public TotalShipments: number; \r\n public TotalCoupons: number; \r\n public TotalCouponsDescription: string; \r\n public TotalVatBeforeDiscount: number; \r\n public TotalItemsByShipmentCalculation: number; \r\n public TotalDeposit: number; \r\n public TotalBeforeDiscount: number; \r\n public DiscountPercent: number; \r\n public DiscountSum: number; \r\n public TotalBeforeVat: number; \r\n public VatPercent: number; \r\n public TotalVat: number; \r\n public TotalAfterVat: number; \r\n public BaseDiscountPercent: number; \r\n public InvoiceID: number; \r\n public ReceiptID: number; \r\n public IsSaveCreditCard: boolean; \r\n public DocumentType: EnumDocumentTypes; \r\n public IsDraft: boolean; \r\n public PostingDate: Date; \r\n public PaymentDueDate: Date; \r\n public NumAtCard: string; \r\n public CheckoutNotes: string; \r\n public PaymentTermID: number; \r\n public SignatureID: number; \r\n public SignatureBase64: string; \r\n public AdditionalData: string; \r\n public ShoppingPaymentID: number; \r\n public CasualAddressCountryCode: string; \r\n public CasualAddressStateCode: string; \r\n public CasualAddressCity: string; \r\n public CasualAddressStreet: string; \r\n public CasualAddressZipCode: string; \r\n public CasualAddressStreetNo: string; \r\n public CasualAddressBuilding: string; \r\n public CasualAddressBlock: string; \r\n public CasualAddressCounty: string; \r\n public CasualAddressFullAddress: string; \r\n public CasualContactPersonPosition: string; \r\n public CasualContactPersonPhone: string; \r\n public CasualContactPersonCellular: string; \r\n public CasualContactPersonEmail: string; \r\n public IsUseCasualAddress: boolean; \r\n public IsUseCasualContactPerson: boolean; \r\n public OriginalDocumentNumber: number; \r\n public IsReminderSent: boolean; \r\n public DistributionCycleID: number; \r\n public UITotalItems: number; \r\n public UITotalShipments: number; \r\n public UITotalCoupons: number; \r\n public UITotalCouponsDescription: string; \r\n public UITotalBeforeDiscount: number; \r\n public UITotalVatBeforeDiscount: number; \r\n public UIDiscountSum: number; \r\n public UITotalBeforeVat: number; \r\n public UITotalVat: number; \r\n public UITotalAfterVat: number; \r\n public UITotalDeposit: number; \r\n public UICurrency: string; \r\n public SuggestedPromotions: SuggestedPromotion[] = []; \r\n public IgnoreRemindSet: boolean; \r\n public Signature: Signature = new Signature; \r\n public ShoppingPayment: ShoppingPayment = new ShoppingPayment; \r\n public DistributionCycle: DistributionCycle = new DistributionCycle; \r\n public Coupons: ShoppingCartCoupon[] = []; \r\n public Attachments: ShoppingCartAttachment[] = []; \r\n public DisabledPromotionsExist: boolean; \r\n public CurrentDocumentOption: DocumentOption = new DocumentOption; \r\n public HasBaseDocumentItems: boolean; \r\n\t\r\n}\r\n\r\nexport class ShoppingCartItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItem';\r\n }\r\n \r\n public ItemID: number; \r\n public Quantity: number; \r\n public Notes: string; \r\n public AdditionalData: string; \r\n public IsFree: boolean; \r\n public PromotionID: number; \r\n public EffectPromotionID: number; \r\n public UniqueItemID: number; \r\n public IsPriceEdited: boolean; \r\n public Currency: string; \r\n public Price: number; \r\n public PriceAfterVat: number; \r\n public Discount: number; \r\n public PriceAfterDiscount: number; \r\n public PriceAfterDiscountAndVat: number; \r\n public InvertedPromotionPrice: number; \r\n public Total: number; \r\n public TotalAfterVat: number; \r\n public ItemType: EnumShoppingCartItemType; \r\n public ParentUniqueItemID: number; \r\n public Permissions: ItemActionPermissions = new ItemActionPermissions; \r\n public WarehouseID: number; \r\n public Warehouse: Warehouse = new Warehouse; \r\n public BaseEntryID: number; \r\n public BaseLineID: number; \r\n public BaseDocumentType: number; \r\n public VatGroupCode: string; \r\n public VatPercent: number; \r\n public IsReadOnly: boolean; \r\n public IsNewKitParent: boolean; \r\n public IsItemDuplicated: boolean; \r\n public IsKitItemQuantityEdited: boolean; \r\n public IsIgnoreItemFromKitCalculation: boolean; \r\n public IsItemHiddenOnUI: boolean; \r\n public OriginalLineID: number; \r\n public IsNumberSelectionEnabled: boolean; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartCoupon extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartCoupon';\r\n }\r\n \r\n public PromotionID: number; \r\n public GiftCardID: number; \r\n public SecretText: string; \r\n public TotalPrice: number; \r\n public Currency: string; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartItemBatch extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItemBatch';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public Number: string; \r\n public Quantity: number; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartItemSerialNumber extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItemSerialNumber';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public SerialNumber: string; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartDisabledPromotion extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartDisabledPromotion';\r\n }\r\n \r\n public PromotionID: number; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartTriggeredPromotions extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartTriggeredPromotions';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public ItemID: number; \r\n public PromotionID: number; \r\n public QuantityUsedToTrigger: number; \r\n public AppliedToItemID: number; \r\n public AppliedToUniqueItemID: number; \r\n public AppliedItemQuantity: number; \r\n public LineID: number;\r\n}\r\nexport class ShoppingCartAttachment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartAttachment';\r\n }\r\n \r\n public FileName: string; \r\n public FilePath: string; \r\n public Size: number; \r\n public Extension: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ShoppingCart } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartItemView } from './../views/shoppingcartitem.view';\r\nimport { ShoppingCartItemBatch } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartItemSerialNumber } from './../entities/shoppingcart.entity';\r\nimport { ShoppingCartCustomField } from './../entities/shoppingcartcustomfield.entity';\r\nimport { ShoppingCartItemCustomField } from './../entities/shoppingcartitemcustomfield.entity';\r\nimport { ShipmentMethod } from './../entities/shipmentmethod.entity';\r\nimport { DocumentOption } from './../entities/documentoption.entity';\r\nexport class ShoppingCartView extends ShoppingCart {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartView';\r\n }\r\n \r\n public ShoppingCartItemViews: ShoppingCartItemView[] = []; \r\n public BatchesView: ShoppingCartItemBatch[] = []; \r\n public SerialNumbersView: ShoppingCartItemSerialNumber[] = []; \r\n public CustomFieldsView: ShoppingCartCustomField[] = []; \r\n public ItemCustomFieldsView: ShoppingCartItemCustomField[] = []; \r\n public CustomFieldsetID: number; \r\n public AvailableShipmentMethods: ShipmentMethod[] = []; \r\n public DocumentOption: DocumentOption = new DocumentOption; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { NavigationTab, NavigationTabCode } from \"../components/checkout-navigator/checkout-navigator.component\";\r\n\r\nexport const NavigatorTabs: NavigationTab[] = [{\r\n Label: 'lblCheckoutMainTabTitle',\r\n LabelAsNextStep: '',\r\n Code: 'items',\r\n Index: 0\r\n}, {\r\n Label: 'lblCheckoutDetailsTabTitle',\r\n LabelAsNextStep: 'lblCheckoutGotoDetails',\r\n Code: 'details',\r\n Index: 1\r\n}, {\r\n Label: 'titleAttachments',\r\n LabelAsNextStep: 'lblCheckoutGotoAttachments',\r\n Code: 'attachments',\r\n Index: 2\r\n}, {\r\n Label: 'titleSignature',\r\n LabelAsNextStep: 'lblCheckoutGotoSignature',\r\n Code: 'signature',\r\n Index: 3\r\n\r\n}, {\r\n Label: 'lblCheckoutPaymentTabTitle',\r\n LabelAsNextStep: 'lblCheckoutGotoPayment',\r\n Code: 'payment',\r\n Index: 4\r\n}];\r\n\r\nexport function GetNavigationTabIndexByCode(code: NavigationTabCode) {\r\n return NavigatorTabs.find(x => x.Code === code)?.Index;\r\n}","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveUsersParams } from '@dino-proxy/params/getactiveusers.param';\r\nimport { DocumentBySourceView } from '@dino-proxy/views/documentbysource.view';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { EnumDocumentSource } from '@dino-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nconst emptyStringValue: string = '-';\r\n\r\nexport enum EnumDashboardChartView {\r\n ByTotal = \"ByTotal\",\r\n ByQuantity = \"ByQuantity\",\r\n}\r\n\r\nclass State extends BaseState {\r\n Documents: DocumentBySourceView[];\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n IsMobile: boolean;\r\n ViewType: EnumDashboardChartView = EnumDashboardChartView.ByQuantity;\r\n IsHebrew: boolean = false;\r\n SwitchButtons: any[];\r\n MobileCustomerValue: string = emptyStringValue;\r\n MobileSalesValue: string = emptyStringValue;\r\n MobileSapValue: string = emptyStringValue;\r\n MobileTotalValue: string = emptyStringValue;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-documents-by-source',\r\n templateUrl: './documents-by-source.component.html',\r\n styleUrls: ['./documents-by-source.component.scss']\r\n})\r\nexport class DocumentsBySourceComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.ClearTooltip(null);\r\n this.UpdateData();\r\n }\r\n\r\n get IsByTotal(): boolean {\r\n return this.State.ViewType === EnumDashboardChartView.ByTotal;\r\n }\r\n\r\n get IsBySalePeriod(): boolean {\r\n return this.State.DashboardSalePeriod?.SalePeriodID > 0;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DocumentsBySourceComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsHebrew = SysGlobals.Language == EnumLanguages.Hebrew;\r\n this.State.SwitchButtons = [\r\n {\r\n Text: this.RC('lblDashboardBySourceChartTypeQuantity'),\r\n Value: EnumDashboardChartView.ByQuantity\r\n },\r\n {\r\n Text: this.RC('lblDashboardBySourceChartTypeTotal'),\r\n Value: EnumDashboardChartView.ByTotal\r\n }\r\n ];\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo\r\n } as GetActiveUsersParams;\r\n this.dashboardEndpoint.GetDocumentsBySource(params)\r\n .subscribe(r => {\r\n if (!r.Entities) return;\r\n this.State.Documents = r.Entities;\r\n });\r\n }\r\n\r\n public GetTooltipInfo(source: EnumDocumentSource, data: DocumentBySourceView, showAsTotal: boolean) {\r\n let propertyName = this.IsByTotal ? 'Total' : 'Quantity';\r\n let total = data[`Customer${propertyName}`] + data[`Sales${propertyName}`] + data[`SBO${propertyName}`];\r\n if (!showAsTotal) {\r\n let value = data[`${source}${propertyName}`];\r\n let percent = total > 0 ? Utils.Round((value / total) * 100) : 0;\r\n return `${value} ${(this.IsByTotal ? this.Framework?.CompanyInfo?.CurrencySystem : '')} (${percent}%)`;\r\n }\r\n else\r\n return `${total} ${(this.IsByTotal ? this.Framework?.CompanyInfo?.CurrencySystem : '')}`;\r\n }\r\n\r\n CustomizeDateText = (e: any) => {\r\n let monthName = (e.value as Date).toLocaleString(this.State.IsHebrew ? 'he' : 'default', { month: 'short' });\r\n let isMultipleYears = (e.max as Date).getFullYear() != (e.min as Date).getFullYear();\r\n return isMultipleYears && e.value.getMonth() === 0 ? `${monthName} ${e.value.getFullYear()}` : monthName;\r\n }\r\n\r\n CustomizePeriodText = (e: any) => {\r\n let part = this.State.DashboardSalePeriod?.SalePeriod?.SalePeriodParts.find(p => p.LineID + 1 === e.value);\r\n return part?.Name;\r\n }\r\n\r\n onPointHoverChanged(event: any) {\r\n if (!this.State.IsMobile) return;\r\n\r\n this.State.MobileCustomerValue = this.GetTooltipInfo(EnumDocumentSource.Customer, event.target.data, false);\r\n this.State.MobileSalesValue = this.GetTooltipInfo(EnumDocumentSource.Sales, event.target.data, false);\r\n this.State.MobileSapValue = this.GetTooltipInfo(EnumDocumentSource.SBO, event.target.data, false);\r\n this.State.MobileTotalValue = this.GetTooltipInfo(null, event.target.data, true);\r\n\r\n }\r\n\r\n ClearTooltip(e: any) {\r\n this.State.MobileCustomerValue = emptyStringValue;\r\n this.State.MobileSalesValue = emptyStringValue;\r\n this.State.MobileSapValue = emptyStringValue;\r\n this.State.MobileTotalValue = emptyStringValue;\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class EmptyParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'EmptyParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { CustomerAddress } from '@dino-proxy/entities/customeraddress.entity';\r\nimport { ShipmentMethod } from '@dino-proxy/entities/shipmentmethod.entity';\r\nimport { EnumDocumentTypes, EnumPaymentMeans, EnumPriceDisplayOptions, EnumShoppingCartItemViewOptions, EnumFormFieldOptions, EnumValidationStatus, EnumAddressEntryModes, EnumContactPersonEntryModes, ShoppingCartStatusEnums, EnumDocumentDraftOptions } from '@dino-proxy/enums';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMenuPositions, EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CheckoutTermsOfUseDialogComponent } from '../components/checkout-terms-of-use-dialog/checkout-terms-of-use-dialog.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { EditSummaryComponent } from '../components/edit-summary/edit-summary.component';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { CalculatePaymentTermsDateParams } from '@dino-proxy/params/calculatepaymenttermsdate.param';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { AddonEventTypes, AddonService, BaseCheckoutExtendedAddonName } from '@dino-services/addon.service';\r\nimport { filter } from 'rxjs/internal/operators/filter';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { ValidationResult } from '@dino-proxy/entities/validationresult.entity';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ShoppingPaymentView } from '@dino-proxy/views/shoppingpayment.view';\r\nimport { Subject, concatMap } from 'rxjs';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { NavigationTab, NavigationTabCode } from '../components/checkout-navigator/checkout-navigator.component';\r\nimport { CompleteCheckoutButtonDescriptor } from '../components/complete-checkout-button/complete-checkout-button.component';\r\nimport { GetNavigationTabIndexByCode, NavigatorTabs } from './navigator-tabs';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\nimport { DistributionCycleDate } from '@dino-proxy/entities/distributioncycle.entity';\r\nimport { EmptyParams } from '@dino-proxy/params/empty.param';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n CustomerAddress: CustomerAddress = {} as CustomerAddress;\r\n ContactPerson: ContactPerson = {} as ContactPerson;\r\n //\r\n OrderPaymentOptions: OrderPaymentOption[] = [];\r\n //\r\n ShipmentMethods: ShipmentMethod[] = [];\r\n //\r\n IsDisablePreSave: boolean = false;\r\n IsDocumentCompleted: boolean = false;\r\n IsTermsOfUseAgreed: boolean = false;\r\n IsItemQuantityInvalid: boolean = false;\r\n IsInvoiceOrRefund: boolean = false;\r\n //\r\n TotalsExpanded: boolean;\r\n SalesPersonOption: SalesPersonOption;\r\n //\r\n CheckoutButtons: any[];\r\n CustomerID: number;\r\n DocumentNotesLabel: string;\r\n DisableCheckoutMultipleClick: boolean = false;\r\n DocumentTypeText: string;\r\n //\r\n IsExtendedSectionVisible = false;\r\n IsCheckoutTotalVisible = true;\r\n IsPaymentDone: boolean = false;\r\n HasCreationError: boolean = false;\r\n AnyPaymentDone: boolean = false;\r\n ItemValidationResult: ValidationResult = null;\r\n //\r\n NavigationTabs: NavigationTab[] = [];\r\n SelectedNavigationTab: NavigationTab;\r\n TabsInitialized: boolean;\r\n\r\n CustomFieldValues: any = {};\r\n DistributionCycleDates: DistributionCycleDate[] = [];\r\n}\r\n\r\nclass OrderPaymentOption {\r\n Type: EnumPaymentMeans;\r\n Name: string;\r\n}\r\n\r\n@Component({\r\n selector: 'base-checkout',\r\n template: '
'\r\n})\r\nexport abstract class BaseCheckoutComponent extends BaseCustomerPageComponent {\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @ViewChild(CheckoutTermsOfUseDialogComponent) termsOfUseDialogComponent: CheckoutTermsOfUseDialogComponent;\r\n @ViewChild(EditSummaryComponent) editSummaryDialog: EditSummaryComponent;\r\n\r\n private invisibleTotalMessageHandler;\r\n\r\n CheckoutItemDisplayTypeStorageKey: string;\r\n AddressEntryModes = EnumAddressEntryModes;\r\n ContactPersonEntryModes = EnumContactPersonEntryModes;\r\n CasualAddressInfo: any;\r\n CasualContactInfo: any;\r\n ItemDisplayType: EnumShoppingCartItemViewOptions;\r\n IsEnableListView: boolean;\r\n IsEnableCompactView: boolean;\r\n IsEnableLineView: boolean;\r\n ContextMenuItems: any[] = [];\r\n CompletedDocument: DocumentView;\r\n private preSaveShoppingCartQueue = new Subject();\r\n\r\n protected get IsSignatureEnabled() {\r\n return this.Entity && this.Entity?.DocumentOption?.SignatureOption !== EnumFormFieldOptions.Hidden;\r\n }\r\n\r\n protected get IsAttachmentsEnabled() {\r\n return this.Entity && this.Entity?.DocumentOption.IsAllowAttachments;\r\n }\r\n\r\n protected get IsPaymentEnabled() {\r\n const paymentOption = this.State.CustomerOption?.PaymentOption;\r\n return this.Entity?.DocumentOption\r\n && this.Entity?.DocumentOption?.IsAllowPayment\r\n && this.Entity?.TotalAfterVat > 0\r\n && this.Entity?.Status != ShoppingCartStatusEnums.Update\r\n && this.Entity.DocumentType !== EnumDocumentTypes.Refund\r\n && paymentOption && (paymentOption.IsAllowCashPayment || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowGoCreditPayment || paymentOption.IsAllowWirePayment || paymentOption.IsAllowLaterPayment);\r\n }\r\n\r\n protected get IsDetailsEnabled() {\r\n return this.Entity?.DocumentOption?.IsEnablePostingDate || this.Entity?.DocumentOption?.IsEnableDueDate\r\n || this.Entity?.DocumentOption?.IsEnableCustomerReference || this.Entity?.DocumentOption?.IsEnablePaymentTerms\r\n || this.Entity?.DocumentOption?.IsEnableNotes\r\n || (this.Entity?.DocumentOption?.IsEnableCheckoutNotes && this.Entity?.CheckoutNotes)\r\n || (this.Entity?.DocumentOption?.IsEnableGiftCards && !this.State.AnyPaymentDone)\r\n || this.Entity?.DocumentOption?.ContactPersonEntryMode !== this.ContactPersonEntryModes.None\r\n || this.Entity?.DocumentOption?.AddressEntryMode !== this.AddressEntryModes.None\r\n || this.State.CustomerOption?.ShipmentOption?.IsEnabledShipment\r\n || this.Entity?.CustomFieldsetID\r\n || this.State.IsExtendedSectionVisible\r\n }\r\n\r\n protected get IsEditMode() {\r\n return this.Entity?.Status === ShoppingCartStatusEnums.Update;\r\n }\r\n\r\n protected get IsEnabledDistributionCycle() {\r\n return this.State.CustomerOption?.ShipmentOption?.IsEnableDistributionCycles\r\n && this.Entity?.DocumentType != EnumDocumentTypes.Invoice\r\n && this.Entity?.DocumentType != EnumDocumentTypes.Refund\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n private documentEndpoint: DocumentEndpoint,\r\n public itemsService: ItemsService,\r\n private shoppingCartService: ShoppingCartService,\r\n public customerService: CustomerService,\r\n public documentService: DocumentService,\r\n public sidebarService: SidebarService,\r\n public addonService: AddonService,\r\n public shoppingCartEndpoint: ShoppingCartEndpoint,\r\n public uiComponentService: UiComponentService,\r\n public restrictedNavigationService: RestrictedNavigationService,\r\n public localStorageService: LocalStorageService) {\r\n super(A, componentName, ShoppingCartView, State, customerService, EnumPageDisplayModes.FullScreen);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitCheckoutLocalStorageKey();\r\n this.State.SalesPersonOption = this.customerService.GetSalesPersonOption();\r\n this.State.CustomerID = this.customerService.GetCustomerID();\r\n this.shoppingCartService.load(false)\r\n .subscribe(r => {\r\n if (r.success) this.InitEvents();\r\n });\r\n }\r\n\r\n override OnInitSubtitle() {\r\n return this.Entity?.Status === ShoppingCartStatusEnums.Update\r\n ? this.RC('lblEditCheckout', this.State.DocumentTypeText, this.Entity.OriginalDocumentNumber.toString())\r\n : '';\r\n }\r\n\r\n private InitEvents() {\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n var fields = {} as any;\r\n r.shoppingCart?.CustomFieldsView?.forEach(cfv => {\r\n fields[cfv.CustomFieldID] = cfv.Value;\r\n });\r\n this.State.CustomFieldValues = fields;\r\n if (this.State.CustomerOption?.ShipmentOption?.IsEnableDistributionCycles\r\n && r.shoppingCart\r\n && (!r.shoppingCart?.DistributionCycleID || r.shoppingCart?.DistributionCycleID <= 0)\r\n && r.shoppingCart?.DocumentType != EnumDocumentTypes.Invoice\r\n && r.shoppingCart?.DocumentType != EnumDocumentTypes.Refund) {\r\n const action = (distributionCycleID: number) => {\r\n let shoppingCart = r.shoppingCart;\r\n shoppingCart.DistributionCycleID = distributionCycleID;\r\n\r\n this.preSaveShoppingCartQueue.next({ Entity: shoppingCart, CustomFieldValues: this.State.CustomFieldValues });\r\n }\r\n\r\n const closeAction = () => {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n this.shoppingCartService.showDistributionDialog(action, closeAction, true);\r\n return;\r\n }\r\n this.Entity = r.shoppingCart;\r\n this.InitNavigationTabs();\r\n this.ProcessShoppingCartAfterChange(r.shoppingCart);\r\n this.ProcessValidationResult({\r\n IsSuccess: true,\r\n Entity: r.shoppingCart?.ValidationResult\r\n } as BaseEntityResponse, true);\r\n this.InitValidDistributionDateRage();\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n\r\n const addonEvent$Subscription = this.addonService.event$\r\n .pipe(filter(x => x.addonName === BaseCheckoutExtendedAddonName))\r\n // add addons which are related to Item component or remove all\r\n .subscribe(event => {\r\n if (event.EventType === AddonEventTypes.Ready) {\r\n this.State.IsExtendedSectionVisible = true;\r\n }\r\n });\r\n this.RegisterSubscription(addonEvent$Subscription);\r\n\r\n const menuPositonSubscription = this.A.SysEvents.MenuPositon\r\n .subscribe(r => {\r\n if (r == null) return;\r\n this.SetVisibilities(r);\r\n });\r\n this.RegisterSubscription(menuPositonSubscription);\r\n\r\n const casualAddressChangeSubscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.CASUAL_ADDRESS_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.shoppingCartService.updateShoppingCartCasualAddress(event?.Payload as CustomerAddress)\r\n .subscribe((result) => { });\r\n });\r\n this.RegisterSubscription(casualAddressChangeSubscription);\r\n\r\n const casualContactPersonChangeSubscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.CASUAL_CONTACT_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.shoppingCartService.updateShoppingCartCasualContactPerson(event?.Payload as ContactPerson)\r\n .subscribe((result) => { });\r\n });\r\n this.RegisterSubscription(casualContactPersonChangeSubscription);\r\n\r\n const shoppingCartPreSavingSubscription = this.preSaveShoppingCartQueue.pipe(\r\n concatMap(entity => this.shoppingCartService.preSaveCheckoutShoppingCartDetails(entity.Entity, true, entity.CustomFieldValues))\r\n ).subscribe({\r\n next: result => { },\r\n error: err => {\r\n this.uiComponentService.ProcessAlerts(err);\r\n }\r\n });\r\n\r\n this.RegisterSubscription(shoppingCartPreSavingSubscription);\r\n }\r\n\r\n DefineViewModeVariables() {\r\n const itemOption = this.State.CustomerOption?.DefaultItemOption;\r\n const isDesktop = !this.A.Screen.IsMobile();\r\n\r\n this.IsEnableListView = isDesktop\r\n ? !!itemOption?.CheckoutListDesktopOption\r\n : !!itemOption?.CheckoutListMobileOption;\r\n\r\n this.IsEnableCompactView = isDesktop\r\n ? !!itemOption?.CheckoutCompactDesktopOption\r\n : !!itemOption?.CheckoutCompactMobileOption;\r\n\r\n this.IsEnableLineView = isDesktop\r\n ? !!itemOption?.CheckoutLineDesktopOption\r\n : !!itemOption?.CheckoutLineMobileOption;\r\n\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(this.CheckoutItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.ItemDisplayType = isDesktop\r\n ? itemOption?.DefaultCheckoutDesktopItemViewOption\r\n : itemOption?.DefaultCheckoutMobileItemViewOption;\r\n }\r\n }\r\n }\r\n\r\n InitCheckoutLocalStorageKey() {\r\n const isMobile = this.A.Screen.IsMobile();\r\n this.CheckoutItemDisplayTypeStorageKey = `CheckoutItemDisplayType_${isMobile ? 'mobile' : 'desktop'}`;\r\n }\r\n\r\n HandleChangeViewMode(itemDisplayType: EnumShoppingCartItemViewOptions) {\r\n this.ItemDisplayType = itemDisplayType;\r\n this.localStorageService.SetItem(this.CheckoutItemDisplayTypeStorageKey, itemDisplayType);\r\n }\r\n\r\n InitViewModes() {\r\n this.DefineViewModeVariables();\r\n (this.IsEnableListView) && this.ContextMenuItems.push({\r\n key: 'ListView',\r\n label: this.RC('lblViewList2'),\r\n icon: 'mdi mdi-view-list',\r\n command: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.List)\r\n });\r\n\r\n (this.IsEnableCompactView) && this.ContextMenuItems.push({\r\n key: 'CompactView',\r\n label: this.RC('lblViewCompact'),\r\n icon: 'mdi mdi-subtitles-outline',\r\n command: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Compact)\r\n });\r\n\r\n (this.IsEnableLineView) && this.ContextMenuItems.push({\r\n key: 'UltraCompactView',\r\n label: this.RC('lblViewUltraCompact'),\r\n icon: 'mdi mdi-minus',\r\n command: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Line)\r\n });\r\n\r\n (this.IsEnableListView || this.IsEnableCompactView || this.IsEnableLineView) && this.ContextMenuItems.push({\r\n separator: true\r\n });\r\n }\r\n\r\n private ProcessShoppingCartAfterChange(shoppingCart) {\r\n this.ProcessShoppingCartForCheckout();\r\n this.DefineMinPlannedDeliveryDate();\r\n this.DefinePostingDate();\r\n this.DefineCasualAddress(shoppingCart);\r\n this.DefineCasualContact(shoppingCart);\r\n this.State.AnyPaymentDone = this.Entity?.ShoppingPayment?.AnyPaymentDone;\r\n this.SetCheckoutButtons();\r\n this.HandleShoppingCartChanged();\r\n this.ToggleEnableAllPromotionItemsContextMenu();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n\r\n ProcessShoppingCartForCheckout() {\r\n if (!this.Entity) {\r\n if (this.State.SelectedNavigationTab?.Code === 'items') {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (this.Entity.PaymentTermID > 0 && !this.Entity.PaymentDueDate) {\r\n this.CalculatePaymentTermsDate();\r\n }\r\n\r\n this.State.DocumentTypeText = this.LIST('EnumDocumentTypes').filter(t => t.Value === this.Entity.DocumentType)[0].Text;\r\n this.State.DocumentNotesLabel = this.RC('lblDocumentNotesDesc', this.State.DocumentTypeText);\r\n this.State.IsInvoiceOrRefund = this.documentService.IsFinancial(this.Entity.DocumentType);\r\n\r\n this.RefreshEntityOriginal();\r\n }\r\n\r\n HandleShoppingCartChanged() {\r\n this.SetShipmentOptionMethods();\r\n }\r\n\r\n HandleCustomerAddressChanged(customerAddress: CustomerAddress) {\r\n if (this.Entity.CustomerAddressID === customerAddress.EntryID) return;\r\n\r\n this.Entity.IsUseCasualAddress = customerAddress.IsCasual;\r\n this.State.CustomerAddress = customerAddress;\r\n this.Entity.CustomerAddressID = customerAddress ? customerAddress.EntryID : null;\r\n\r\n this.preSaveShoppingCartQueue.next({ Entity: this.Entity, CustomFieldValues: this.State.CustomFieldValues });\r\n }\r\n\r\n HandleContactPersonChanged(contactPerson: ContactPerson) {\r\n if (this.Entity.ContactPersonID === contactPerson.EntryID) return;\r\n\r\n this.Entity.IsUseCasualContactPerson = contactPerson.IsCasual;\r\n this.State.ContactPerson = contactPerson;\r\n this.Entity.ContactPersonID = contactPerson ? contactPerson.EntryID : null;\r\n\r\n this.preSaveShoppingCartQueue.next({ Entity: this.Entity, CustomFieldValues: this.State.CustomFieldValues });\r\n }\r\n\r\n InitValidDistributionDateRage() {\r\n if (!this.Entity || !this.Entity.DistributionCycle\r\n || !this.Entity.DistributionCycle.DistributionCycleDates\r\n || this.Entity.DistributionCycle.DistributionCycleDates.length == 0) {\r\n this.State.DistributionCycleDates = [];\r\n return;\r\n }\r\n\r\n this.State.DistributionCycleDates = this.Entity.DistributionCycle.DistributionCycleDates\r\n .filter(c => this.Entity.PostingDate < c.Date && this.Entity.PostingDate < c.LastDocumentUntil && (c.EarlierDocumentFrom == null || this.Entity.PostingDate > c.EarlierDocumentFrom))\r\n .sort((a, b) => { return a.Date.getTime() - b.Date.getTime() });\r\n }\r\n\r\n HandleTabIndexChanged(tab: NavigationTab) {\r\n if (!this.Entity?.ShoppingCartItemViews?.length) return;\r\n\r\n const action = () => {\r\n if (tab.Code !== 'items' && tab.Code !== 'details') {\r\n const validate = () => {\r\n if (this.IsSignatureEnabled\r\n && this.Entity?.DocumentOption?.SignatureOption === EnumFormFieldOptions.Mandatory\r\n && !this.Entity?.SignatureBase64) {\r\n this.OnValidateError();\r\n this.SetTabByCode('signature', true);\r\n return;\r\n }\r\n else {\r\n this.SetTabByCode(tab.Code, true);\r\n return;\r\n }\r\n }\r\n\r\n if (this.IsDetailsEnabled) {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) {\r\n this.OnValidateError();\r\n this.SetTabByCode('details', false);\r\n return;\r\n } else {\r\n validate();\r\n return;\r\n }\r\n });\r\n } else {\r\n validate();\r\n return;\r\n }\r\n }\r\n\r\n this.SetTabByCode(tab.Code, true);\r\n }\r\n\r\n this.shoppingCartEndpoint.ValidateShoppingCart()\r\n .subscribe(r => {\r\n this.ProcessValidationResult(r, false);\r\n if (this.State.ItemValidationResult.Status !== EnumValidationStatus.Error) {\r\n action();\r\n }\r\n });\r\n }\r\n\r\n HandleShipmentOptionChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.shoppingCartService.updateShipmentMethod(this.Entity.ShipmentMethodID);\r\n }\r\n\r\n HandleCompleteCheckout() {\r\n if (this.Entity?.ShoppingCartItemViews?.length) {\r\n const action = () => {\r\n const isLastStep = this.State.SelectedNavigationTab?.Code === this.State.NavigationTabs[this.State.NavigationTabs.length - 1].Code;\r\n\r\n if (this.State.SelectedNavigationTab?.Code === 'details') {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) {\r\n this.OnValidateError();\r\n return;\r\n }\r\n if (isLastStep) {\r\n this.CompleteCheckout();\r\n } else {\r\n const tabIndx = this.State.NavigationTabs.findIndex(x => x.Code === this.State.SelectedNavigationTab?.Code);\r\n this.State.SelectedNavigationTab = this.State.NavigationTabs[(tabIndx !== -1) ? (tabIndx + 1) : 0];\r\n }\r\n });\r\n } else if (this.State.SelectedNavigationTab.Code === 'signature'\r\n && this.Entity?.DocumentOption?.SignatureOption === EnumFormFieldOptions.Mandatory\r\n && !this.Entity?.SignatureBase64) {\r\n return;\r\n } else if (isLastStep) {\r\n this.CompleteCheckout();\r\n } else {\r\n const tabIndx = this.State.NavigationTabs.findIndex(x => x.Code === this.State.SelectedNavigationTab?.Code);\r\n this.State.SelectedNavigationTab = this.State.NavigationTabs[(tabIndx !== -1) ? (tabIndx + 1) : 0];\r\n }\r\n };\r\n\r\n this.shoppingCartEndpoint.ValidateShoppingCart().subscribe(r => {\r\n this.ProcessValidationResult(r, false);\r\n if (this.State.ItemValidationResult.Status !== EnumValidationStatus.Error) {\r\n action();\r\n }\r\n });\r\n }\r\n }\r\n\r\n SetCheckoutButtons() {\r\n const completeLabel = this.Entity?.Status === ShoppingCartStatusEnums.Update ? 'btnEditCheckout' : 'btnCompleteCheckout';\r\n const buttons: CompleteCheckoutButtonDescriptor[] = [];\r\n const getNextStepLabelByCode = (code: NavigationTabCode) => {\r\n if (!this.State.NavigationTabs) return '';\r\n const idx = this.State.NavigationTabs?.findIndex(x => x.Code === code);\r\n if (idx === (this.State.NavigationTabs.length - 1)) return completeLabel;\r\n if (idx === -1) return '';\r\n return this.State.NavigationTabs[idx + 1].LabelAsNextStep;\r\n };\r\n\r\n buttons.push({\r\n TabRelatedIndex: GetNavigationTabIndexByCode('items'),\r\n Label: getNextStepLabelByCode('items')\r\n });\r\n\r\n if (this.IsDetailsEnabled) {\r\n buttons.push({\r\n TabRelatedIndex: GetNavigationTabIndexByCode('details'),\r\n Label: getNextStepLabelByCode('details')\r\n });\r\n }\r\n\r\n if (this.IsAttachmentsEnabled) {\r\n buttons.push({\r\n TabRelatedIndex: GetNavigationTabIndexByCode('attachments'),\r\n Label: getNextStepLabelByCode('attachments')\r\n });\r\n }\r\n\r\n if (this.IsSignatureEnabled) {\r\n buttons.push({\r\n TabRelatedIndex: GetNavigationTabIndexByCode('signature'),\r\n Label: getNextStepLabelByCode('signature')\r\n });\r\n }\r\n\r\n if (this.IsPaymentEnabled) {\r\n buttons.push({\r\n TabRelatedIndex: GetNavigationTabIndexByCode('payment'),\r\n Label: completeLabel\r\n });\r\n }\r\n\r\n this.State.CheckoutButtons = buttons;\r\n }\r\n\r\n CompleteCheckout() {\r\n if (!this.Entity?.ShoppingCartItemViews?.length) return;\r\n\r\n if (this.State.CustomerOption?.TermsOfUseOption?.IsEnableTOnCheckout && !this.State.IsTermsOfUseAgreed) {\r\n this.UI.StopMessage(this.RC('msgTermsNotAgreed'));\r\n return;\r\n }\r\n\r\n if (this.State.IsItemQuantityInvalid) {\r\n this.SetTabByCode('items', false);\r\n return;\r\n }\r\n\r\n const checkoutAction = () => {\r\n this.State.DisableCheckoutMultipleClick = true;\r\n this.shoppingCartService.preSaveCheckoutShoppingCartDetails(this.Entity, false, this.State.CustomFieldValues).subscribe(result => {\r\n if (result) {\r\n this.documentEndpoint.SaveDocument(new EmptyParams()).subscribe(this.OnCompleteSubscribe());\r\n }\r\n return;\r\n });\r\n };\r\n\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) {\r\n this.OnValidateError();\r\n // TODO fix later correct navigation on error\r\n this.SetTabByCode('details', false);\r\n return;\r\n }\r\n\r\n if (this.Entity?.DocumentOption?.SignatureOption === EnumFormFieldOptions.Mandatory && !this.Entity?.SignatureBase64) {\r\n this.OnValidateError();\r\n this.SetTabByCode('signature', true);\r\n return;\r\n }\r\n\r\n if (this.IsPaymentEnabled && !this.State.IsPaymentDone) {\r\n this.OnValidateError();\r\n this.UI.StopMessage(this.RC('msgNotFullyPaid', this.State.DocumentTypeText));\r\n this.SetTabByCode('payment', true);\r\n return;\r\n }\r\n\r\n if (this.Entity?.DocumentOption?.IsShowExtraConfirmation) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageDialog.Title = this.RC('lblCheckoutConfirmationTitle');\r\n this.messageDialog.Prompt =\r\n this.RC(this.State.CustomerOption.BusinessOption.PriceDisplayOption === EnumPriceDisplayOptions.None\r\n ? 'lblCheckoutConfirmationPromptNoPrice'\r\n : 'lblCheckoutConfirmationPrompt',\r\n this.Entity.ShoppingCartItemViews.length.toString(),\r\n `${formatNumber(this.Entity.UITotalAfterVat, this.F.NumberPrice).toString()} ${this.Entity.UICurrency}`);\r\n this.messageDialog.ShowDialogShort(() => {\r\n checkoutAction();\r\n });\r\n } else {\r\n checkoutAction();\r\n }\r\n });\r\n }\r\n\r\n HandleShowTermsOfUse() {\r\n this.termsOfUseDialogComponent.ShowDialogShort(() => { });\r\n }\r\n\r\n HandleQuantiesValidation(valid: boolean) {\r\n this.State.IsItemQuantityInvalid = !valid;\r\n }\r\n\r\n CalculatePaymentTermsDate() {\r\n if (!this.Entity.PostingDate || !this.Entity.PaymentTermID) {\r\n return;\r\n }\r\n\r\n const params = {\r\n DocumentDate: this.Entity.PostingDate,\r\n PaymentTermsID: this.Entity.PaymentTermID\r\n } as CalculatePaymentTermsDateParams;\r\n\r\n this.documentEndpoint.GetCalculatedPaymentTermsDate(params).subscribe(response => {\r\n this.Entity.PaymentDueDate = response.Data;\r\n this.HandleCheckoutFieldUpdate();\r\n });\r\n }\r\n\r\n // This patch method is used for dx-date-box because of a bug when clicking 'Today' button\r\n // triggered onValueChanged event 4-7 times\r\n HandleDocDueDateUpdate(e) {\r\n const currentDate = new Date(e.value);\r\n const previousDate = new Date(e.previousValue);\r\n currentDate.setHours(0, 0, 0, 0);\r\n previousDate.setHours(0, 0, 0, 0);\r\n\r\n (e && currentDate.getTime() !== previousDate.getTime()) && this.HandleCheckoutFieldUpdate();\r\n }\r\n\r\n HandleCheckoutFieldUpdate() {\r\n this.preSaveShoppingCartQueue.next({ Entity: this.Entity, CustomFieldValues: this.State.CustomFieldValues });\r\n }\r\n\r\n OnPreSaveDetails() {\r\n if (this.State.IsDisablePreSave) return;\r\n\r\n this.preSaveShoppingCartQueue.next({ Entity: this.Entity, CustomFieldValues: this.State.CustomFieldValues });\r\n }\r\n\r\n OnValidateError() { }\r\n\r\n SetVisibilities(state: EnumMenuPositions) {\r\n if (this.A.Screen.IsMobile() || this.A.Screen.IsWideScreen()) return;\r\n\r\n if (this.invisibleTotalMessageHandler) {\r\n clearTimeout(this.invisibleTotalMessageHandler);\r\n this.invisibleTotalMessageHandler = null;\r\n }\r\n\r\n this.State.IsCheckoutTotalVisible = (state === EnumMenuPositions.Close);\r\n if (!this.State.IsCheckoutTotalVisible) {\r\n this.invisibleTotalMessageHandler = setTimeout(() => {\r\n this.UI.InfoMessage(this.RC('msgCheckoutTotalIsHidden'));\r\n this.invisibleTotalMessageHandler = null;\r\n }, 1000);\r\n }\r\n }\r\n\r\n SetIsPaymentComplete(result: {\r\n PaymentDone: boolean,\r\n ShoppingPaymentID: number,\r\n PaidAmount: number,\r\n PaidAmountWithLater: number,\r\n OnlyLaterPayment: boolean,\r\n ShoppingPaymentView: ShoppingPaymentView\r\n }) {\r\n this.State.IsPaymentDone = result.PaymentDone;\r\n if (result.ShoppingPaymentID) {\r\n this.Entity.ShoppingPaymentID = result.ShoppingPaymentID;\r\n }\r\n\r\n this.Entity.PaidAmount = result.PaidAmount;\r\n this.State.AnyPaymentDone = result.PaidAmountWithLater > 0;\r\n this.HandlePaymentDoneChanged(this.State.AnyPaymentDone);\r\n if (this.State.IsPaymentDone && this.State.SelectedNavigationTab?.Code === 'payment' && !this.State.HasCreationError && !result.OnlyLaterPayment) {\r\n this.CompleteCheckout();\r\n }\r\n\r\n setTimeout(() => this.State.HasCreationError = false, 100);\r\n }\r\n\r\n protected OnCompleteSubscribe() {\r\n return {\r\n next: (r: BaseEntityResponse) => {\r\n if (r.IsSuccess) {\r\n this.CompletedDocument = r.Entity;\r\n this.State.IsDisablePreSave = true;\r\n this.State.IsDocumentCompleted = true;\r\n } else {\r\n this.State.HasCreationError = true;\r\n this.uiComponentService.ProcessAlerts(r.ResponseMessage);\r\n this.SetTabByCode('items', false);\r\n }\r\n this.shoppingCartService.load(false);\r\n this.State.DisableCheckoutMultipleClick = false;\r\n },\r\n error: () => {\r\n this.State.HasCreationError = true;\r\n this.State.DisableCheckoutMultipleClick = false;\r\n this.shoppingCartService.load(false);\r\n this.SetTabByCode('items', false);\r\n }\r\n };\r\n }\r\n\r\n protected SetShipmentOptionMethods() {\r\n if (!this.Entity\r\n || !this.Entity.ShoppingCartItemViews\r\n || !this.Entity.ShoppingCartItemViews.length) {\r\n this.State.ShipmentMethods = [];\r\n return;\r\n }\r\n\r\n this.State.ShipmentMethods = this.Entity?.AvailableShipmentMethods;\r\n }\r\n\r\n abstract ToggleEnableAllPromotionItemsContextMenu();\r\n\r\n HandleEnableAllPromotionItems() {\r\n this.shoppingCartService.enableAllPromotionItems();\r\n }\r\n\r\n DefineCasualAddress(shoppingCart: ShoppingCartView) {\r\n this.CasualAddressInfo = {\r\n Country: shoppingCart?.CasualAddressCountryCode,\r\n State: shoppingCart?.CasualAddressStateCode,\r\n City: shoppingCart?.CasualAddressCity,\r\n Street: shoppingCart?.CasualAddressStreet,\r\n ZipCode: shoppingCart?.CasualAddressZipCode,\r\n FullAddress: shoppingCart?.CasualAddressFullAddress,\r\n IsCasualAddressSelected: shoppingCart?.IsUseCasualAddress\r\n };\r\n\r\n if (shoppingCart?.DocumentOption?.AddressEntryMode === EnumAddressEntryModes.Casual) {\r\n this.Entity.IsUseCasualAddress = true;\r\n }\r\n }\r\n\r\n DefineCasualContact(shoppingCart: ShoppingCartView) {\r\n this.CasualContactInfo = {\r\n Email: shoppingCart?.CasualContactPersonEmail,\r\n Phone: shoppingCart?.CasualContactPersonPhone,\r\n Cellular: shoppingCart?.CasualContactPersonCellular,\r\n Position: shoppingCart?.CasualContactPersonPosition,\r\n IsCasualContactPersonSelected: shoppingCart?.IsUseCasualContactPerson\r\n };\r\n\r\n if (shoppingCart?.DocumentOption?.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual) {\r\n this.Entity.IsUseCasualContactPerson = true;\r\n }\r\n }\r\n\r\n DefineMinPlannedDeliveryDate() {\r\n if (!this.Entity || this.Entity.MinPlannedDeliveryDate) return;\r\n const currentDate = new Date();\r\n currentDate.setHours(0, 0, 0, 0);\r\n this.Entity.MinPlannedDeliveryDate = currentDate;\r\n }\r\n\r\n DefinePostingDate() {\r\n if (!this.Entity) return;\r\n this.Entity.PostingDate = this.Entity.PostingDate ? this.Entity.PostingDate : new Date();\r\n }\r\n\r\n ProcessValidationResult(result: BaseEntityResponse, showWarnings: boolean = true) {\r\n if (!this.State.HasCreationError) {\r\n if (result.IsSuccess) {\r\n if (!result.Entity) {\r\n this.State.ItemValidationResult = null;\r\n return;\r\n }\r\n\r\n this.State.ItemValidationResult = result.Entity;\r\n\r\n if (result.Entity.Status === EnumValidationStatus.Error) {\r\n this.uiComponentService.ProcessAlerts(result.Entity.ValidationMessage);\r\n this.SetTabByCode('items', false);\r\n }\r\n } else {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n this.State.ItemValidationResult = {\r\n Status: EnumValidationStatus.Error,\r\n ValidationMessage: result.ResponseMessage\r\n } as ValidationResult;\r\n this.SetTabByCode('items', false);\r\n }\r\n\r\n if (this.State.ItemValidationResult?.Status !== EnumValidationStatus.Error) {\r\n showWarnings && this.uiComponentService.ProcessAlerts(this.State.ItemValidationResult?.ValidationMessage, 15000);\r\n }\r\n }\r\n }\r\n\r\n TryShowItemsValidation(): boolean {\r\n if (!!this.State.ItemValidationResult) {\r\n this.SetTabByCode('items', false);\r\n this.uiComponentService.ProcessAlerts(this.State.ItemValidationResult);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n HandleRemoveAll() {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('btnRemoveAll');\r\n this.messageDialog.Prompt = this.RC('promptClearShoppingCart');\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.shoppingCartService.cleanShoppingCart();\r\n });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n return settings;\r\n }\r\n\r\n getCouponsSum() {\r\n return this.Entity?.Coupons?.reduce((a, b) => a + b.TotalPrice, 0);\r\n }\r\n\r\n HandleEditSummary() {\r\n this.editSummaryDialog.ShowDialogShort(() => { }, null, false, this.Entity);\r\n }\r\n\r\n HandleItemEdit(shoppingCartItem: ShoppingCartItemView, isDuplicate: boolean = false) {\r\n if (!this.Entity?.DocumentOption?.IsAllowLineEditing) return;\r\n\r\n this.Navigate([ROUTE_PATHS.EDIT_SHOPPING_CART_ITEM], { UniqueItemID: shoppingCartItem.UniqueItemID, IsDuplicate: isDuplicate });\r\n }\r\n\r\n IsDraftAllowed() {\r\n return this.Entity?.DocumentOption?.DraftOption === EnumDocumentDraftOptions.Allowed\r\n || this.Entity?.DocumentOption?.DraftOption === EnumDocumentDraftOptions.AllowedAndDefault;\r\n }\r\n\r\n InitNavigationTabs() {\r\n if (this.State.TabsInitialized) return;\r\n\r\n this.State.NavigationTabs = [NavigatorTabs.find(x => x.Code === 'items')];\r\n\r\n if (this.IsDetailsEnabled) {\r\n this.State.NavigationTabs.push(NavigatorTabs.find(x => x.Code === 'details'));\r\n }\r\n\r\n if (this.IsAttachmentsEnabled) {\r\n this.State.NavigationTabs.push(NavigatorTabs.find(x => x.Code === 'attachments'));\r\n }\r\n\r\n if (this.IsSignatureEnabled) {\r\n this.State.NavigationTabs.push(NavigatorTabs.find(x => x.Code === 'signature'));\r\n }\r\n\r\n if (this.IsPaymentEnabled) {\r\n this.State.NavigationTabs.push(NavigatorTabs.find(x => x.Code === 'payment'));\r\n }\r\n\r\n this.SetTabByCode('items', true);\r\n\r\n this.State.TabsInitialized = true;\r\n }\r\n\r\n GetLastStepIndex() {\r\n if (!this.State.NavigationTabs || this.State.NavigationTabs.length === 0) return 0;\r\n return this.State.NavigationTabs[this.State.NavigationTabs.length - 1].Index;\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.State.TabsInitialized = false;\r\n }\r\n\r\n OnFormChange(field: any) {\r\n if (!this.State.CustomFieldValues) {\r\n this.State.CustomFieldValues = {} as any;\r\n }\r\n this.State.CustomFieldValues[field.Key] = field.Value;\r\n this.OnPreSaveDetails();\r\n }\r\n\r\n abstract HandlePaymentDoneChanged(anyPaymentDone: boolean);\r\n abstract SetTabByCode(code: NavigationTabCode, toTop: boolean);\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { BaseCheckoutComponent } from '../base/base-checkout';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ShoppingCartItemsComponent } from '../../shopping-cart/components/shopping-cart-items/shopping-cart-items.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { DxScrollViewComponent } from 'devextreme-angular';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { NavigationTabCode } from '../components/checkout-navigator/checkout-navigator.component';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-desktop-checkout',\r\n templateUrl: './desktop-checkout.component.html',\r\n styleUrls: ['./desktop-checkout.component.scss']\r\n \r\n})\r\nexport class DesktopCheckoutComponent extends BaseCheckoutComponent {\r\n constructor(A: ServiceBagService,\r\n documentEndpoint: DocumentEndpoint,\r\n itemsService: ItemsService,\r\n shoppingCartService: ShoppingCartService,\r\n customerService: CustomerService,\r\n documentService: DocumentService,\r\n sidebarService: SidebarService,\r\n addonService: AddonService,\r\n uiComponentService: UiComponentService,\r\n shoppingCartEndpoint: ShoppingCartEndpoint,\r\n restrictedNavigationService: RestrictedNavigationService,\r\n localStorageService: LocalStorageService) {\r\n super(A, 'DesktopCheckoutComponent', documentEndpoint, itemsService,\r\n shoppingCartService, customerService, documentService, \r\n sidebarService, addonService, shoppingCartEndpoint, \r\n uiComponentService, restrictedNavigationService, localStorageService);\r\n }\r\n\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n @ViewChild('pagesScroll') pagesScroll: DxScrollViewComponent;\r\n \r\n IsDragAndDropModeEnabled: boolean = false;\r\n\r\n HandleContextMenuChange(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitCheckoutLocalStorageKey();\r\n this.InitContextMenuItems();\r\n super.OnInitComponent();\r\n }\r\n\r\n ToggleEnableAllPromotionItemsContextMenu() {\r\n const disabledPromotionsExist = this.Entity?.DisabledPromotionsExist;\r\n const promotionItem = {\r\n label: this.RC('btnEnableAllPromotionItems'),\r\n icon: 'mdi mdi-currency-usd',\r\n command: () => { this.HandleEnableAllPromotionItems() }\r\n };\r\n\r\n if (disabledPromotionsExist && !this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, { separator: true }, promotionItem];\r\n } else if (!disabledPromotionsExist && this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n const itemIndex = this.ContextMenuItems.findIndex(item => item.label === promotionItem.label);\r\n if (itemIndex > -1) {\r\n this.ContextMenuItems = [\r\n ...this.ContextMenuItems.slice(0, itemIndex - 1),\r\n ...this.ContextMenuItems.slice(itemIndex + 1)\r\n ];\r\n }\r\n }\r\n }\r\n\r\n private InitContextMenuItems() {\r\n this.InitViewModes();\r\n \r\n this.ContextMenuItems.push({\r\n key: 'DragAndDrop', label: this.RC('lblShoppingCartReorderItemsButton'), icon: 'mdi mdi-drag', command: () => {\r\n this.ToggleDragAndDropMode();\r\n }\r\n });\r\n\r\n this.ContextMenuItems.push({\r\n separator: true\r\n });\r\n\r\n this.ContextMenuItems.push({\r\n key: 'RemoveAll', label: this.RC('btnRemoveAllProducts'), icon: 'mdi mdi-trash-can-outline', command: () => { this.HandleRemoveAll() },\r\n });\r\n }\r\n\r\n override HandlePaymentDoneChanged(anyPaymentDone: boolean) {\r\n if (this.Entity && !anyPaymentDone && !this.ContextMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.ContextMenuItems.push({\r\n separator: true\r\n });\r\n this.ContextMenuItems.push({\r\n key: 'RemoveAll', label: this.RC('btnRemoveAllProducts'), icon: 'mdi mdi-trash-can-outline', command: () => { this.HandleRemoveAll() },\r\n });\r\n } else if (this.Entity && anyPaymentDone && this.ContextMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.ContextMenuItems = this.ContextMenuItems.filter(mi => mi.key !== 'RemoveAll' && !mi.separator);\r\n }\r\n }\r\n\r\n private ToggleDragAndDropMode() {\r\n this.IsDragAndDropModeEnabled = !this.IsDragAndDropModeEnabled;\r\n const dragAndDropLabel = this.IsDragAndDropModeEnabled ? this.RC('lblShoppingCartSaveItemsOrder') : this.RC('lblShoppingCartReorderItemsButton');\r\n this.ContextMenuItems.filter(item => item.key === 'DragAndDrop')[0].label = dragAndDropLabel;\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n override SetTabByCode(code: NavigationTabCode, toTop: boolean) {\r\n this.State.SelectedNavigationTab = this.State.NavigationTabs.find(x => x.Code === code);\r\n toTop && this.pagesScroll?.instance && this.pagesScroll.instance.scrollTo(0);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblPleaseFinishDocument' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data && data['Date'] | formatDateAtTime}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'lblCheckoutTermsOfUseLink' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseCheckoutComponent } from '../base/base-checkout';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ShoppingCartItemsComponent } from '../../shopping-cart/components/shopping-cart-items/shopping-cart-items.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { NavigationTabCode } from '../components/checkout-navigator/checkout-navigator.component';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-mobile-checkout',\r\n templateUrl: './mobile-checkout.component.html',\r\n styleUrls: ['./mobile-checkout.component.scss']\r\n})\r\nexport class MobileCheckoutComponent extends BaseCheckoutComponent {\r\n IsAddressExpanded: boolean;\r\n IsShipmentOptionExpanded: boolean;\r\n IsContactExpanded: boolean;\r\n IsPaymentOptionsExpanded: boolean;\r\n IsDocumentDetailsExpanded: boolean;\r\n IsDragAndDropModeEnabled: boolean = false;\r\n\r\n constructor(A: ServiceBagService,\r\n documentEndpoint: DocumentEndpoint,\r\n itemsService: ItemsService,\r\n shoppingCartService: ShoppingCartService,\r\n customerService: CustomerService,\r\n documentService: DocumentService,\r\n sidebarService: SidebarService,\r\n addonService: AddonService,\r\n uiComponentService: UiComponentService,\r\n shoppingCartEndpoint: ShoppingCartEndpoint,\r\n restrictedNavigationService: RestrictedNavigationService,\r\n localStorageService: LocalStorageService) {\r\n super(A, 'DesktopCheckoutComponent', documentEndpoint, itemsService,\r\n shoppingCartService, customerService, documentService, \r\n sidebarService, addonService, shoppingCartEndpoint, \r\n uiComponentService, restrictedNavigationService, localStorageService);\r\n }\r\n\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n this.InitContextMenuItems();\r\n }\r\n\r\n private InitContextMenuItems() {\r\n this.InitViewModes();\r\n \r\n this.ContextMenuItems.push({\r\n key: 'RemoveAll', label: this.RC('btnRemoveAllProducts'), icon: 'mdi mdi-trash-can-outline', command: () => { this.HandleRemoveAll() },\r\n });\r\n }\r\n\r\n override HandlePaymentDoneChanged(anyPaymentDone: boolean) {\r\n if (this.Entity && !anyPaymentDone && !this.ContextMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.ContextMenuItems.push({\r\n separator: true\r\n });\r\n this.ContextMenuItems.push({\r\n key: 'RemoveAll', label: this.RC('btnRemoveAllProducts'), icon: 'mdi mdi-trash-can-outline', command: () => { this.HandleRemoveAll() },\r\n });\r\n } else if (this.Entity && anyPaymentDone && this.ContextMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.ContextMenuItems = this.ContextMenuItems.filter(mi => mi.key !== 'RemoveAll' && !mi.separator);\r\n }\r\n }\r\n\r\n ToggleEnableAllPromotionItemsContextMenu() {\r\n const disabledPromotionsExist = this.Entity?.DisabledPromotionsExist;\r\n const promotionItem = {\r\n label: this.RC('btnEnableAllPromotionItems'),\r\n icon: 'mdi mdi-currency-usd',\r\n command: () => { \r\n this.HandleEnableAllPromotionItems();\r\n }\r\n };\r\n\r\n if (disabledPromotionsExist && !this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, { separator: true }, promotionItem];\r\n } else if (!disabledPromotionsExist && this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n const itemIndex = this.ContextMenuItems.findIndex(item => item.label === promotionItem.label);\r\n if (itemIndex > -1) {\r\n this.ContextMenuItems = [\r\n ...this.ContextMenuItems.slice(0, itemIndex - 1),\r\n ...this.ContextMenuItems.slice(itemIndex + 1)\r\n ];\r\n }\r\n }\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n HandleClickError(e) {\r\n e && e.stopPropagation();\r\n }\r\n\r\n HandleToggleTotals() {\r\n this.State.TotalsExpanded = !this.State.TotalsExpanded;\r\n }\r\n\r\n HandleSwipeTotals(dest: 'up' | 'down') {\r\n if (dest === 'up') this.State.TotalsExpanded = true;\r\n if (dest === 'down') this.State.TotalsExpanded = false;\r\n }\r\n\r\n override OnValidateError() {\r\n this.IsAddressExpanded = this.IsShipmentOptionExpanded = this.IsContactExpanded = this.IsPaymentOptionsExpanded = this.IsDocumentDetailsExpanded = true;\r\n }\r\n\r\n HandleShowActions(dcm, e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n dcm.show(e);\r\n }\r\n\r\n override SetTabByCode(code: NavigationTabCode, toTop: boolean) {\r\n this.State.SelectedNavigationTab = this.State.NavigationTabs.find(x => x.Code === code);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblPleaseFinishDocument' | RC:THIS}}
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data && data['Date'] | formatDateAtTime}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'lblCheckoutTermsOfUseLink' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input, ViewChild } from '@angular/core';;\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ActionResultEvent, ShoppingCartItemUpdate, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ShoppingCartItemEditComponent } from '@dino-pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ShoppingCartItemCustomField } from '@dino-proxy/entities/shoppingcartitemcustomfield.entity';\r\n\r\nclass State extends BaseOptionState {\r\n SalesPersonOption: SalesPersonOption;\r\n ShoppingCart: ShoppingCartView;\r\n EditShoppingCartItem: ShoppingCartItemView;\r\n ShoppingCartItemUpdate: ShoppingCartItemUpdate;\r\n GotoShoppingCartOnClose: boolean;\r\n ItemCustomFields: ShoppingCartItemCustomField[] = [];\r\n}\r\n\r\n/// Page DOESN'T load shopping cart by performance improvement.\r\n/// Load it before navigate to this page\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-edit-shopping-cart-item',\r\n templateUrl: './edit-shopping-cart-item.component.html',\r\n styleUrls: ['./edit-shopping-cart-item.component.scss']\r\n})\r\nexport class EditShoppingCartItemComponent extends BaseCustomerPageComponent {\r\n @Input() EditShoppingCartItem: ShoppingCartItemView;\r\n @Input() DocumentOption: DocumentOption;\r\n @ViewChild('shoppingCartItemEditComponent', { static: false }) ShoppingCartItemEditComponent: ShoppingCartItemEditComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'EditShoppingCartItemComponent', BaseEntity, State, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n get ItemCustomFields(): ShoppingCartItemCustomField[] {\r\n return this.State.ItemCustomFields.length > 0 \r\n ? this.State.ItemCustomFields \r\n : (this.EditShoppingCartItem && this.State.ShoppingCart?.ItemCustomFieldsView?.filter(f => f.UniqueItemID === this.EditShoppingCartItem.UniqueItemID)) || [];\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.SalesPersonOption = this.customerService.GetSalesPersonOption();\r\n if (this.QueryParams.GotoShoppingCartOnClose) this.State.GotoShoppingCartOnClose = this.QueryParams.GotoShoppingCartOnClose;\r\n\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n const firstLoad = !this.State.ShoppingCart;\r\n this.State.ShoppingCart = r.shoppingCart;\r\n const uniqueItemID = +this.QueryParams.UniqueItemID;\r\n const isDuplicate = this.QueryParams.IsDuplicate;\r\n const isNew = this.QueryParams.IsNew;\r\n\r\n if (isNew) {\r\n this.State.EditShoppingCartItem = {} as ShoppingCartItemView;\r\n this.State.EditShoppingCartItem.WarehouseID = this.State.CustomerOption.BusinessOption.WarehouseID;\r\n this.State.EditShoppingCartItem.EntryID = null;\r\n return;\r\n }\r\n\r\n if (!this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing || !uniqueItemID) return;\r\n\r\n const shoppingCartItem = this.State.ShoppingCart.ShoppingCartItemViews.find(x => x.UniqueItemID === uniqueItemID);\r\n if (!shoppingCartItem) return;\r\n\r\n if (!isDuplicate) {\r\n this.State.ItemCustomFields = this.State.ShoppingCart?.ItemCustomFieldsView?.filter(f => f.UniqueItemID === uniqueItemID);\r\n this.State.EditShoppingCartItem = shoppingCartItem;\r\n } else {\r\n // run initial validation only on 1 load\r\n if (firstLoad) {\r\n setTimeout(() => this.ShoppingCartItemEditComponent.SendEvent(), 100);\r\n }\r\n this.State.ItemCustomFields = this.State.ShoppingCart?.ItemCustomFieldsView?.filter(f => f.UniqueItemID === uniqueItemID);\r\n this.State.EditShoppingCartItem = Utils.CloneObject(shoppingCartItem);\r\n this.State.EditShoppingCartItem.EntryID = null;\r\n }\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n\r\n }\r\n\r\n HandleShoppingCartItemChanged(update: ShoppingCartItemUpdate) {\r\n this.State.ShoppingCartItemUpdate = update;\r\n this.SetDirty();\r\n }\r\n\r\n HandleConfirmEdit() {\r\n setTimeout(() => {\r\n if (!this.State.ShoppingCartItemUpdate?.IsValid) return;\r\n\r\n const isNew = !this.State.EditShoppingCartItem.EntryID;\r\n if (isNew) {\r\n this.State.ShoppingCartItemUpdate.PlaceAfterUniqueID = this.State.ShoppingCartItemUpdate.UniqueItemID;\r\n this.State.ShoppingCartItemUpdate.UniqueItemID = null;\r\n }\r\n\r\n this.shoppingCartService.updateItem(this.State.ShoppingCartItemUpdate, isNew)\r\n .subscribe((r: ActionResultEvent) => {\r\n if (r.success) {\r\n this.ClosePage();\r\n if (this.State.GotoShoppingCartOnClose) this.Navigate([ROUTE_PATHS.SHOPPING_CART]);\r\n } else {\r\n //this.uiComponentService.ProcessAlerts(r.error);\r\n }\r\n });\r\n }, 366);\r\n }\r\n\r\n HandleCancelEdit() {\r\n this.ClosePage();\r\n if (this.State.GotoShoppingCartOnClose) this.Navigate([ROUTE_PATHS.SHOPPING_CART]);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.State.ShoppingCartItemUpdate = null;\r\n this.State.ShoppingCart = null;\r\n this.State.EditShoppingCartItem = null;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, Output, EventEmitter } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { CredentialResult } from '@dino-proxy/entities/credentialresult.entity';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { EnumImpersonateTargets } from '@dino-proxy/enums';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\n\r\nclass State extends BaseOptionState {\r\n Credentials: CredentialResult[] = [];\r\n SalesPersons: SalesPerson[] = [];\r\n ContactPersons: ContactPerson[] = [];\r\n CustomerID: number;\r\n SalesPersonID: number;\r\n ContactPersonID: number;\r\n IsUseContactPerson: boolean;\r\n ImpersonateTarget: EnumImpersonateTargets = EnumImpersonateTargets.Customer;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-with-sales-selector',\r\n templateUrl: './credential-with-sales-selector.component.html',\r\n styleUrls: ['./credential-with-sales-selector.component.scss']\r\n})\r\nexport class CredentialWithSalesSelectorComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService,\r\n public customerEndpoint: CustomerEndpoint,\r\n public loginService: LoginService) {\r\n super(A, 'CredentialWithSalesSelectorComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n @Output() OnImpersonateCancel = new EventEmitter();\r\n\r\n ImpersonateTargets = EnumImpersonateTargets;\r\n\r\n override OnInitComponent() {\r\n this.State.IsUseContactPerson = this.A.Framework.SystemOptionFlag(\"IsUseContactPerson\");\r\n this.LoadData();\r\n }\r\n\r\n LoadData() {\r\n this.customerEndpoint.GetCredentials()\r\n .subscribe(r => {\r\n this.State.Credentials = r.Entities;\r\n });\r\n\r\n this.customerEndpoint.GetSalesPersonsCredentials()\r\n .subscribe(r => {\r\n this.State.SalesPersons = r.Entities;\r\n });\r\n }\r\n\r\n OnCustomerChanged() {\r\n if (!this.State.IsUseContactPerson) return;\r\n\r\n this.State.ContactPersonID = null;\r\n this.State.ContactPersons = this.State.CustomerID ? this.State.Credentials.find(x => x.EntryID === this.State.CustomerID).ContactPersons : [];\r\n if (this.State.ContactPersons && this.State.ContactPersons.length === 1) {\r\n this.State.ContactPersonID = this.State.ContactPersons[0].EntryID;\r\n }\r\n }\r\n\r\n Impersonate(validationGroup: any) {\r\n if (!validationGroup.instance.validate().isValid) return;\r\n\r\n if (this.State.ImpersonateTarget === EnumImpersonateTargets.Customer) {\r\n this.ImpersonateByCustomer();\r\n } else {\r\n this.ImpersonateBySalesPerson();\r\n }\r\n }\r\n\r\n ImpersonateByCustomer() {\r\n if (this.State.IsUseContactPerson) {\r\n this.State.ContactPersonID && this.loginService.ImpersonateLogin(this.State.ContactPersonID)\r\n .subscribe(() => { });\r\n } else {\r\n this.State.CustomerID && this.loginService.ImpersonateLogin(this.State.CustomerID)\r\n .subscribe(() => { });\r\n }\r\n }\r\n\r\n ImpersonateBySalesPerson() {\r\n this.State.SalesPersonID && this.loginService.ImpersonateLogin(this.State.SalesPersonID)\r\n .subscribe(() => {});\r\n }\r\n\r\n OnCancel() {\r\n this.OnImpersonateCancel.emit();\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.CardCode}}
\\r\\n
{{data.CardName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.SlpCode}}
\\r\\n
{{data.Name}}
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, Output, EventEmitter } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-impersonate-page',\r\n templateUrl: './impersonate-page.component.html'\r\n})\r\nexport class ImpersonatePageComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ImpersonatePageComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\";","import { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\n\r\nclass State extends BaseState {\r\n IsMediumScreen: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-bank-details',\r\n templateUrl: './customer-bank-details.component.html',\r\n styleUrls: ['./customer-bank-details.component.scss']\r\n})\r\nexport class CustomerBankDetailsComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint) {\r\n super(A, 'CustomerBankDetailsComponent', Customer, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMediumScreen = this.A.Screen.IsMediumScreen();\r\n const entryID = this.A.Navigator.GetRouteParams().EntryID;\r\n if ((isNaN(entryID))) {\r\n this.NavigateBack();\r\n return;\r\n }\r\n\r\n this.customerEndpoint.Get(entryID).subscribe(response => {\r\n this.Entity = response.Entity;\r\n });\r\n }\r\n\r\n OnSaveDetails() {\r\n this.customerEndpoint.SaveBankDetails(this.Entity).subscribe(response => {\r\n if (response.IsSuccess) {\r\n this.NotifyEntitySaved(this.Entity, Customer);\r\n this.NavigateBack();\r\n } else {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{data.FullInfo}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class CreatePaymentRequestResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CreatePaymentRequestResult';\r\n }\r\n \r\n public PaymentURL: string; \r\n public ShoppingPaymentID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { CreatePaymentRequestResult } from '@dino-proxy/entities/createpaymentrequestresult.entity';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\n\r\nclass State extends BaseState {\r\n Url: SafeResourceUrl;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-change-credit-card-dialog-dino',\r\n templateUrl: './change-credit-card-dialog.component.html',\r\n styleUrls: ['./change-credit-card-dialog.component.scss']\r\n})\r\nexport class ChangeCreditCardDialogComponent extends BasePageComponent {\r\n @Input() CustomerEntryID: number = 0;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private Sanitizer: DomSanitizer,\r\n private ref: ChangeDetectorRef) {\r\n super(A, 'ChangeCreditCardDialogComponent', CreatePaymentRequestResult, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n this.customerEndpoint.ChangeCreditCardRequest(this.CustomerEntryID)\r\n .subscribe(r => {\r\n this.State.Url = this.Sanitizer.bypassSecurityTrustResourceUrl(r.Entity.PaymentURL);\r\n });\r\n\r\n (window.document as any).OnSuccessfulPayment = (PrivateRequestID: string) => {\r\n this.OnSuccessfulPaymentHandler(PrivateRequestID);\r\n };\r\n\r\n (window.document as any).OnBackPayment = () => {\r\n this.OnBackPaymentHandler();\r\n };\r\n }\r\n\r\n ngAfterContentChecked(){\r\n if (this.State.Url) {\r\n this.layout?.popup?.instance.repaint();\r\n }\r\n }\r\n\r\n private OnSuccessfulPaymentHandler(PrivateRequestID: string) {\r\n this.customerEndpoint.ConfirmChangeCreditCardRequest(PrivateRequestID)\r\n .subscribe(() => {\r\n this.CloseDialogWithSuccess();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n private OnBackPaymentHandler() {\r\n this.CloseDialogWithCancel();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { AddressDialogComponent } from \"@dino-components/customer-address/address-dialog/address-dialog.component\";\r\nimport { CustomerAddress } from \"@dino-proxy/entities/customeraddress.entity\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { EnumAddressFieldOptions } from \"@dino-proxy/enums\";\r\n\r\nclass State extends BaseOptionState {\r\n AllowEditCustomer: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-customer-addresses-grid',\r\n templateUrl: './customer-addresses-grid.component.html',\r\n styleUrls: ['./customer-addresses-grid.component.scss']\r\n})\r\nexport class CustomerAddressesGridComponent extends BaseGridComponent {\r\n @ViewChild(AddressDialogComponent) addressDialog: AddressDialogComponent;\r\n\r\n @Input() IsAddMode: boolean = false;\r\n\r\n @Output() OnAdd = new EventEmitter();\r\n @Output() OnUpdate = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService) {\r\n super(A, \"CustomerAddressesGridComponent\", CustomerAddress, State);\r\n }\r\n\r\n get AllowEdit(): boolean {\r\n return this.IsAddMode \r\n || (this.State.AllowEditCustomer \r\n && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingAddresses);\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumAddressFieldOptions.Hidden;\r\n GetFieldOption = (name: string) => (this.State?.CustomerOption?.AddressOption) ? this.State?.CustomerOption?.AddressOption[name + 'FieldOption'] as EnumAddressFieldOptions : null;\r\n\r\n override OnInitComponent() {\r\n this.State.AllowEditCustomer = this.customerService.IsCurrentUserSalesPerson()\r\n ? this.customerService.GetSalesPersonOption().IsAllowCustomerEditing\r\n : false;\r\n this.State.CustomerOption.AddressOption\r\n }\r\n\r\n OnEditAddress(event, mode: 'new' | 'edit') {\r\n if (!this.AllowEdit) return;\r\n\r\n this.addressDialog.Address = mode === 'new'\r\n ? ({\r\n Country: \"IL\",\r\n IsDefault: false,\r\n } as CustomerAddress)\r\n : Utils.CloneObject(event.data);\r\n this.addressDialog.AddressOption = this.State.CustomerOption?.AddressOption;\r\n\r\n this.addressDialog.ShowDialogShort((entity) => {\r\n if (mode === 'new') {\r\n this.OnAdd.emit(entity);\r\n } else {\r\n this.OnUpdate.emit(entity);\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { AddressDialogComponent } from \"@dino-components/customer-address/address-dialog/address-dialog.component\";\r\nimport { CustomerAddress } from \"@dino-proxy/entities/customeraddress.entity\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { EnumAddressFieldOptions } from \"@dino-proxy/enums\";\r\n\r\nclass State extends BaseOptionState {\r\n Menu = [];\r\n AllowEditCustomer: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-customer-addresses-list',\r\n templateUrl: './customer-addresses-list.component.html',\r\n styleUrls: ['./customer-addresses-list.component.scss']\r\n})\r\nexport class CustomerAddressesListComponent extends BaseComponent {\r\n @ViewChild(AddressDialogComponent) addressDialog: AddressDialogComponent;\r\n @Input() DataSource: CustomerAddress[];\r\n @Input() IsAddMode: boolean = false;\r\n\r\n @Output() OnAdd = new EventEmitter();\r\n @Output() OnUpdate = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService) {\r\n super(A, \"CustomerAddressesListComponent\", State);\r\n }\r\n\r\n get AllowEdit(): boolean {\r\n return this.IsAddMode \r\n || (this.State.AllowEditCustomer \r\n && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingAddresses);\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumAddressFieldOptions.Hidden;\r\n GetFieldOption = (name: string) => (this.State?.CustomerOption?.AddressOption) ? this.State?.CustomerOption?.AddressOption[name + 'FieldOption'] as EnumAddressFieldOptions : null;\r\n\r\n override OnInitComponent(){\r\n this.State.AllowEditCustomer = this.customerService.IsCurrentUserSalesPerson() \r\n ? this.customerService.GetSalesPersonOption().IsAllowCustomerEditing\r\n : false;\r\n }\r\n\r\n GetMenu(address: CustomerAddress) {\r\n return [{\r\n text: this.RC('lblEditCustomerAddress'),\r\n icon: 'mdi mdi-pencil',\r\n onClick: () => this.OnEditAddress(address, 'edit')\r\n }];\r\n }\r\n\r\n OnEditAddress(address: CustomerAddress, mode: 'new' | 'edit') {\r\n if (!this.AllowEdit) return;\r\n this.addressDialog.Address = mode === 'new'\r\n ? ({\r\n Country: \"IL\",\r\n IsDefault: false,\r\n } as CustomerAddress)\r\n : Utils.CloneObject(address);\r\n this.addressDialog.AddressOption = this.State.CustomerOption?.AddressOption;\r\n\r\n this.addressDialog.ShowDialogShort((entity) => {\r\n if (mode === 'new') {\r\n this.OnAdd.emit(entity);\r\n } else {\r\n this.OnUpdate.emit(entity);\r\n }\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { ContactPerson } from \"@dino-proxy/entities/contactperson.entity\";\r\nimport { ContactDialogComponent } from \"@dino-components/contact-person/contact-dialog/contact-dialog.component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\n\r\nclass State extends BaseOptionState {\r\n AllowEditCustomer: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-customer-contact-persons-grid',\r\n templateUrl: './customer-contact-persons-grid.component.html',\r\n styleUrls: ['./customer-contact-persons-grid.component.scss']\r\n})\r\nexport class CustomerContactPersonsGridComponent extends BaseGridComponent {\r\n @ViewChild(ContactDialogComponent) contactDialog: ContactDialogComponent;\r\n\r\n @Input() IsAddMode: boolean = false;\r\n\r\n @Output() OnAdd = new EventEmitter();\r\n @Output() OnUpdate = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService) {\r\n super(A, \"CustomerContactPersonsGridComponent\", ContactPerson, State);\r\n }\r\n\r\n get AllowEdit(): boolean {\r\n return this.IsAddMode \r\n || (this.State.AllowEditCustomer \r\n && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingContacts);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.AllowEditCustomer = this.customerService.IsCurrentUserSalesPerson()\r\n ? this.customerService.GetSalesPersonOption().IsAllowCustomerEditing\r\n : false;\r\n }\r\n\r\n OnEditContact(event, mode: 'new' | 'edit') {\r\n if (!this.AllowEdit) return;\r\n\r\n this.contactDialog.ShowDialogShort(entity => {\r\n if (mode === 'new') {\r\n this.OnAdd.emit(entity);\r\n } else {\r\n this.OnUpdate.emit(entity);\r\n }\r\n }, null, false, \r\n mode === 'new' \r\n ? ({ IsDefault: false } as ContactPerson) \r\n : Utils.CloneObject(event.data)\r\n );\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { ContactPerson } from \"@dino-proxy/entities/contactperson.entity\";\r\nimport { ContactDialogComponent } from \"@dino-components/contact-person/contact-dialog/contact-dialog.component\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\n\r\nclass State extends BaseOptionState {\r\n Menu = [];\r\n AllowEditCustomer: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-customer-contact-persons-list',\r\n templateUrl: './customer-contact-persons-list.component.html',\r\n styleUrls: ['./customer-contact-persons-list.component.scss']\r\n})\r\nexport class CustomerContactPersonsListComponent extends BaseComponent {\r\n @ViewChild(ContactDialogComponent) contactDialog: ContactDialogComponent;\r\n\r\n @Input() DataSource: ContactPerson[];\r\n @Input() IsAddMode: boolean = false;\r\n\r\n @Output() OnAdd = new EventEmitter();\r\n @Output() OnUpdate = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService) {\r\n super(A, \"CustomerContactPersonsListComponent\", State);\r\n }\r\n \r\n get AllowEdit(): boolean {\r\n return this.IsAddMode \r\n || (this.State.AllowEditCustomer \r\n && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingContacts);\r\n }\r\n\r\n override OnInitComponent(){\r\n this.State.AllowEditCustomer = this.customerService.IsCurrentUserSalesPerson() \r\n ? this.customerService.GetSalesPersonOption().IsAllowCustomerEditing\r\n : false;\r\n }\r\n\r\n GetMenu(contactPerson: ContactPerson) {\r\n return [{\r\n text: this.RC('lblEditCustomerAddress'),\r\n icon: 'mdi mdi-pencil',\r\n onClick: () => this.OnEditContact(contactPerson, 'edit')\r\n }];\r\n }\r\n\r\n OnEditContact(contactPerson: ContactPerson, mode: 'new' | 'edit') {\r\n if (!this.AllowEdit) return;\r\n\r\n this.contactDialog.ShowDialogShort((entity) => {\r\n if (mode === 'new') {\r\n this.OnAdd.emit(entity);\r\n } else {\r\n this.OnUpdate.emit(entity);\r\n }\r\n }, null, false,\r\n mode === 'new' \r\n ? ({ IsDefault: false } as ContactPerson) \r\n : Utils.CloneObject(contactPerson)\r\n );\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\";","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 0)\\\">\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsCardDetails' | RC:THIS}}
\\r\\n
{{'lblEdit' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsCustomerName' | RC:THIS}}
\\r\\n
{{Entity.CardName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblTaxNumber' | RC:THIS}}
\\r\\n
{{Entity.TradeLicenseNumber || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsCreditCard' | RC:THIS}}
\\r\\n
{{State.CreditCard.Number ? '**** ' + State.CreditCard.Number : '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankDetails' | RC:THIS}}
\\r\\n
{{'lblEdit' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankCode' | RC:THIS}}
\\r\\n
{{Entity.BankCode === '-1' ? '—' : (Entity.BankCode || '—')}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankBranch' | RC:THIS}}
\\r\\n
{{Entity.BankBranch || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankAccountNumber' | RC:THIS}}
\\r\\n
{{Entity.BankAccountNumber || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
{{'lblEdit' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsCustomerName' | RC:THIS}}
\\r\\n
{{Entity.CardName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblTaxNumber' | RC:THIS}}
\\r\\n
{{Entity.TradeLicenseNumber || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsCreditCard' | RC:THIS}}
\\r\\n
{{State.CreditCard.Number ? '**** ' + State.CreditCard.Number : '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblEdit' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankAccountNumber' | RC:THIS}}
\\r\\n
{{Entity.BankAccountNumber || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankCode' | RC:THIS}}
\\r\\n
{{Entity.BankCode === '-1' ? '—' : (Entity.BankCode || '—')}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblBankBranch' | RC:THIS}}
\\r\\n
{{Entity.BankBranch || '—'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { SalesPersonOption } from \"@dino-proxy/entities/salespersonoption.entity\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { BasePageCRUDComponent } from \"@m4u-angular/base/component/BasePageCRUDComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEndpointCRUD } from \"@m4u-angular/base/endpoint/BaseEndpointCRUD\";\r\nimport { BaseEntity, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ICustomerInjectedComponent } from \"./customer-injected.component\";\r\n\r\n@Component({\r\n selector: 'base-customer-page-component',\r\n template: '
'\r\n})\r\nexport class BaseCustomerCRUDPageComponent> extends BasePageCRUDComponent implements ICustomerInjectedComponent {\r\n public IsSalesPerson: boolean;\r\n public CustomerID: number;\r\n public SalesPersonOption: SalesPersonOption;\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public override EntityType: (new () => TEntity),\r\n public override StateType: (new () => TState),\r\n public override Endpoint: TEndpoint,\r\n public customerService: CustomerService,\r\n public displayMode: EnumPageDisplayModes = EnumPageDisplayModes.FullScreen,\r\n public entityMode: EnumPageEntitySources = EnumPageEntitySources.Internal) {\r\n super(A, ComponentName, EntityType, StateType, Endpoint, displayMode, entityMode);\r\n\r\n CustomerService.InjectHandler(this, customerService);\r\n }\r\n\r\n protected IsUseFinishCycleChangeDetection(): boolean { return false; }\r\n\r\n public OnCustomerChanged() { }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { VatGroup } from './../entities/vatgroup.entity';\r\nimport { VatGroupView } from './../views/vatgroup.view';\r\n@Injectable()\r\nexport class VatGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"VatGroup\", api);}\r\n\t\r\n\r\n public GetVatGroups() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetVatGroups', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BusinessOption } from './../entities/businessoption.entity';\r\n@Injectable()\r\nexport class BusinessOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"BusinessOption\", api);}\r\n\t\r\n\r\n public GetPriceListNumbers() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPriceListNumbers', undefined );\r\n }\r\n}\r\n\r\n","import { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumCRUDActions, EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dino-proxy/endpoints/customeraddress.endpoint';\r\nimport { ContactPerson } from '@dino-proxy/entities/contactperson.entity';\r\nimport { CustomerAddress } from '@dino-proxy/entities/customeraddress.entity';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumDocumentTypes, EnumEUVatStatuses } from '@dino-proxy/enums';\r\nimport { CurrentCreditCardResult } from '@dino-proxy/entities/currentcreditcardresult.entity';\r\nimport { ChangeCreditCardDialogComponent } from '@dino-pages/customers/components/change-credit-card-dialog/change-credit-card.component';\r\nimport { BaseCustomerCRUDPageComponent } from '@dino-classes/base-customer-crud-page-component';\r\nimport { VatGroupEndpoint } from '@dino-proxy/endpoints/vatgroup.endpoint';\r\nimport { VatGroupView } from '@dino-proxy/views/vatgroup.view';\r\nimport { BaseEntity, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { CustomerAttribute } from '@dino-proxy/entities/customerattribute.entity';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomerSaveParams } from '@dino-proxy/params/customersave.param';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\nclass State extends BaseOptionState {\r\n EffectItems: ItemView[] = [];\r\n Customers: Customer[] = [];\r\n CustomerGroups: CustomerGroup[] = [];\r\n CustomerAttributes: CustomerAttribute[] = [];\r\n SalesPersons: SalesPerson[] = [];\r\n PaymentTerms: PaymentTerm[] = [];\r\n SalesPersonOption: SalesPersonOption;\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n ContactPersons: ContactPerson[] = [];\r\n CustomerAddresses: CustomerAddress[] = [];\r\n ContactPersonsToUpdate: ContactPerson[] = [];\r\n CustomerAddressesToUpdate: CustomerAddress[] = [];\r\n IsMobile: boolean;\r\n CreditCard: CurrentCreditCardResult;\r\n ShowToolbar: boolean = false;\r\n VatGroups: VatGroupView[] = [];\r\n ShowVatGroupSelection: boolean = false;\r\n TaxStatuses: any[] = [];\r\n AllVatGroups: VatGroupView[] = [];\r\n PriceListNumbers: GenericListEntity[] = [];\r\n IsSalesPerson: boolean = false;\r\n SelectAfterCreation: boolean = false;\r\n MaxAddressEntryID = 0;\r\n MaxContactEntryID = 0;\r\n CurrentAddressEntryID = 0;\r\n CurrentContactEntryID = 0;\r\n FieldsetID: number;\r\n CustomFieldValues: any = {};\r\n}\r\n\r\n@Component({\r\n selector: 'base-customer-details',\r\n template: '
'\r\n})\r\nexport abstract class BaseCustomerDetailsComponent extends BaseCustomerCRUDPageComponent {\r\n @ViewChild('changeCreditCardDialog') changeCreditCardDialogComponent: ChangeCreditCardDialogComponent;\r\n\r\n ContactPersonsTabsIndex = 1;\r\n LedgerRoute: string = null;\r\n AgingRoute: string = null;\r\n DashboardRoute = 'dashboard';\r\n IsFullScreen: boolean;\r\n IsShowSubtitle: boolean = true;\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private customerEndpoint: CustomerEndpoint,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n customerService: CustomerService,\r\n private contactPersonEndpoint: ContactPersonEndpoint,\r\n private customerAddressEndpoint: CustomerAddressEndpoint,\r\n private screenService: ScreenService,\r\n private vatGroupEndpoint: VatGroupEndpoint,\r\n private businessOptionEndpoint: BusinessOptionEndpoint,\r\n pageDisplayMode: EnumPageDisplayModes,\r\n public framework: FrameworkService,\r\n public restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, componentName, Customer, State, customerEndpoint, customerService, pageDisplayMode, EnumPageEntitySources.Internal);\r\n }\r\n\r\n customerPropertyAttributeIDs: number[] = [];\r\n\r\n get ShowDetails(): boolean {\r\n return this.State.IsSalesPerson\r\n && (!!this.EntityEntryID || this.IsAddMode)\r\n && this.State.CustomerOption?.CustomerDetailOption\r\n && (this.State.CustomerOption.CustomerDetailOption.IsShowGeneralDetails\r\n || this.State.CustomerOption.CustomerDetailOption.IsShowContactInformation\r\n || this.State.CustomerOption.CustomerDetailOption.IsShowPaymentTerms);\r\n }\r\n\r\n get ShowContactPersons(): boolean {\r\n return this.State.CustomerOption?.CustomerDetailOption?.IsShowContactPersons \r\n || (this.IsAddMode && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingContacts)\r\n }\r\n\r\n get ShowAddresses(): boolean {\r\n return this.State.CustomerOption?.CustomerDetailOption?.IsShowAddresses \r\n || (this.IsAddMode && this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingAddresses)\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n if (this.State.SelectAfterCreation && this.IsNewCustomerRelatedToCurrentSalesPerson() && this.IsAddMode) {\r\n this.customerService.SetCustomer(this.Entity.EntryID);\r\n }\r\n if (!this.IsFullScreen) this.NavigateBack();\r\n }\r\n\r\n override OnInitTitle() {\r\n return (this.State.IsSalesPerson)\r\n ? this.RC('lblCustomerDetails')\r\n : this.RC('lblMyDetails');\r\n }\r\n\r\n override OnInitSubtitle() {\r\n if (!this.IsShowSubtitle) return null;\r\n\r\n return (this.Entity.EntryID > 0)\r\n ? this.Entity.CardName + ' - ' + this.Entity.CardCode\r\n : this.RC('lblNew') + ' - ' + this.RC('lblCustomer');\r\n }\r\n\r\n override OnInitComponentInternal() {\r\n this.State.IsSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.TaxStatuses = this.LIST('EnumEUVatStatuses').reverse();\r\n\r\n // if (this.State.IsSalesPerson) {\r\n let entryId = this.A.Navigator.GetRouteParams().EntryID;\r\n if (entryId === 'current' || !entryId) {\r\n const currentCustomerID = this.customerService.GetCustomerID();\r\n if (!currentCustomerID) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n return;\r\n }\r\n this.EntityEntryID = currentCustomerID;\r\n }\r\n //}\r\n\r\n if (this.QueryParams.SelectAfterCreation)\r\n this.State.SelectAfterCreation = this.QueryParams.SelectAfterCreation;\r\n\r\n\r\n super.OnInitComponentInternal();\r\n }\r\n\r\n IsNewCustomerRelatedToCurrentSalesPerson() {\r\n const loggedInSalesPersonID = this.customerService.GetCurrentSalesPersonId();\r\n return loggedInSalesPersonID === this.Entity?.SalesPersonID;\r\n }\r\n\r\n HandleCustomerAttributesChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.SetDirty();\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.State.IsSalesPerson) {\r\n this.State.SalesPersonOption = this.customerService.GetSalesPersonOption();\r\n this.customerEndpoint.GetCustomerGroups().subscribe(response => this.State.CustomerGroups = response.Entities);\r\n this.customerEndpoint.GetCustomerAttributes().subscribe(response => this.State.CustomerAttributes = response.Entities);\r\n this.salesPersonEndpoint.GetListShallow().subscribe(response => this.State.SalesPersons = response.Entities);\r\n this.customerEndpoint.GetPaymentTerms().subscribe(response => this.State.PaymentTerms = response.Entities);\r\n\t\t\tthis.State.TaxStatuses = this.LIST('EnumEUVatStatuses').reverse();\r\n this.businessOptionEndpoint.GetPriceListNumbers()\r\n .subscribe(r => this.State.PriceListNumbers = \r\n [\r\n {\r\n EntryID: -1,\r\n Text: this.RC('lblLastPurchasePrice')\r\n } as GenericListEntity,\r\n {\r\n EntryID: -2,\r\n Text: this.RC('lblLastEvaluatedPrice')\r\n } as GenericListEntity,\r\n ...r.Entities\r\n ]);\r\n }\r\n\r\n if (this.F.LocalizationType === this.SysEnums.EnumLocalizationTypes.Europe) {\r\n this.vatGroupEndpoint.GetVatGroups().subscribe(response => {\r\n this.State.AllVatGroups = response.Entities || [];\r\n this.FilterVatGroups();\r\n this.State.ShowVatGroupSelection = true;\r\n });\r\n } else {\r\n this.State.TaxStatuses = this.State.TaxStatuses.filter(s => s.Value !== EnumEUVatStatuses.EU)\r\n }\r\n this.SetTabs();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.SetDefaultFormValues();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) \r\n {\r\n if (ExternalEntityType === Customer && ExternalEntityAction === EnumCRUDActions.CreateOrUpdate) {\r\n this.LoadEntity(this.EntityEntryID);\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n settings.IsAllowPrint = false;\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = () : ContextMenuElement[] => {\r\n const menu = [];\r\n const customerOption = this.State.CustomerOption;\r\n if (!customerOption) {\r\n return menu;\r\n }\r\n\r\n if (customerOption.FeatureOption.IsEnableLedger && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnLedger'),\r\n icon: 'mdi mdi-wallet',\r\n onClick: () => {\r\n if (this.State.IsSalesPerson) {\r\n this.Navigate([this.LedgerRoute], {Open: true, CustomerID: this.EntityEntryID})\r\n } else {\r\n this.Navigate([this.LedgerRoute], {Open: true})\r\n } \r\n }\r\n });\r\n }\r\n\r\n if (customerOption.FeatureOption.IsEnableAging && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnAging'),\r\n icon: 'mdi mdi-wallet',\r\n onClick: () => {\r\n if (this.State.IsSalesPerson) {\r\n this.Navigate([this.AgingRoute], {Open: true, CustomerID: this.EntityEntryID})\r\n } else {\r\n this.Navigate([this.AgingRoute], {Open: true})\r\n } \r\n }\r\n });\r\n }\r\n\r\n if (customerOption.FeatureOption.IsEnableDashboard && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnDashboard'),\r\n icon: 'mdi mdi-speedometer',\r\n onClick: () => {\r\n if (this.State.IsSalesPerson) {\r\n this.Navigate([this.DashboardRoute], {CustomerID: this.EntityEntryID})\r\n } else {\r\n this.Navigate([this.DashboardRoute])\r\n } \r\n }\r\n });\r\n }\r\n\r\n if (customerOption.QuoteOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnQuotes'),\r\n icon: 'mdi mdi-text-box-plus-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.QUOTES], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.Quote })\r\n });\r\n }\r\n\r\n if (customerOption.OrderOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnOrders'),\r\n icon: 'mdi mdi-file-document-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.ORDERS], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.Order })\r\n });\r\n }\r\n\r\n if (customerOption.DeliveryNoteOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnDeliveryNotes'),\r\n icon: 'mdi mdi-truck-delivery-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.DELIVERY_NOTES], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.DeliveryNote })\r\n });\r\n }\r\n\r\n if (customerOption.InvoiceOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnInvoices'),\r\n icon: 'mdi mdi-file-check-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.INVOICES], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.Invoice })\r\n });\r\n }\r\n\r\n if (customerOption.ReturnRequestOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnReturnRequests'),\r\n icon: 'mdi mdi-keyboard-return',\r\n onClick: () => this.Navigate([ROUTE_PATHS.RETURN_REQUESTS], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.ReturnRequest })\r\n });\r\n }\r\n\r\n if (customerOption.ReturnOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnReturns'),\r\n icon: 'mdi mdi-clipboard-arrow-left',\r\n onClick: () => this.Navigate([ROUTE_PATHS.RETURNS], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.Return })\r\n });\r\n }\r\n\r\n if (customerOption.RefundOption?.IsAllowView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnRefunds'),\r\n icon: 'mdi mdi-cash-refund',\r\n onClick: () => this.Navigate([ROUTE_PATHS.REFUNDS], { CustomerID: this.EntityEntryID, ObjectType: EnumDocumentTypes.Refund })\r\n });\r\n }\r\n\r\n if (customerOption.PaymentOption.IsAllowReceiptView && this.EntityEntryID) {\r\n menu.push({\r\n text: this.RC('btnReceipts'),\r\n icon: 'mdi mdi-receipt-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.RECEIPTS], { CustomerID: this.EntityEntryID })\r\n });\r\n }\r\n\r\n return menu;\r\n };\r\n\r\n\r\n SetDefaultFormValues() {\r\n const isCurrentUserSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n const salesPersonOption = this.customerService.GetSalesPersonOption();\r\n const currentSalesPersonId = this.customerService.GetCurrentSalesPersonId();\r\n\r\n this.Entity.EUVatStatus = EnumEUVatStatuses.Liable;\r\n this.Entity.Currency = this.framework.CompanyInfo.CurrencyLocal;\r\n\r\n if (isCurrentUserSalesPerson) {\r\n this.Entity.SalesPersonID = currentSalesPersonId;\r\n this.Entity.GroupCode = salesPersonOption.DefaultCustomerGroupID;\r\n this.Entity.PaymentTermID = salesPersonOption.DefaultPaymentTermsID;\r\n this.Entity.PriceListNumber = salesPersonOption.DefaultPriceListNumber;\r\n\r\n if (salesPersonOption.CustomerOption?.CustomerFieldsetID) {\r\n this.State.FieldsetID = salesPersonOption.CustomerOption.CustomerFieldsetID;\r\n }\r\n }\r\n }\r\n\r\n emailValidationCallback = (e: any) => {\r\n if (e.value == null) return true;\r\n return Utils.IsEmail(e.value, true);\r\n };\r\n\r\n GetSelectedTabName() {\r\n return (this.State.Tabs[this.State.CurrentTabIndex] as any)?.Name;\r\n }\r\n\r\n SetTabs() {\r\n let tabIdx = 0;\r\n this.State.Tabs = [];\r\n if (this.ShowDetails) {\r\n this.State.Tabs.push({\r\n index: tabIdx++,\r\n text: this.RC('lblCustomerDetailGeneral'),\r\n Name: \"General\"\r\n });\r\n }\r\n\r\n if (this.ShowAddresses) {\r\n this.State.Tabs.push({\r\n index: tabIdx++,\r\n text: this.RC('lblCustomerAddresses'),\r\n Name: \"CustomerAddresses\"\r\n });\r\n\r\n if (this.EntityEntryID) {\r\n this.customerAddressEndpoint.GetListByCustomer(this.EntityEntryID)\r\n .subscribe(response => {\r\n this.State.CustomerAddresses = response.Entities || [];\r\n const maxEntryID = Math.max(...this.State.CustomerAddresses.map(ad => ad.EntryID)) || 0;\r\n this.State.MaxAddressEntryID = maxEntryID;\r\n this.State.CurrentAddressEntryID = maxEntryID;\r\n });\r\n\r\n }\r\n }\r\n\r\n if (this.ShowContactPersons) {\r\n this.State.Tabs.push({\r\n index: tabIdx++,\r\n text: this.RC('lblCustomerContactPersons'),\r\n Name: \"ContactPersons\"\r\n });\r\n\r\n if (this.EntityEntryID) {\r\n this.contactPersonEndpoint.GetListByCustomer(this.EntityEntryID)\r\n .subscribe(response => {\r\n this.State.ContactPersons = response.Entities || [];\r\n const maxEntryID = Math.max(...this.State.ContactPersons.map(cp => cp.EntryID)) || 0;\r\n this.State.MaxContactEntryID = maxEntryID;\r\n this.State.CurrentContactEntryID = maxEntryID;\r\n });\r\n }\r\n }\r\n }\r\n\r\n GetCurrentCreditCard() {\r\n this.customerEndpoint.GetCurrentCreditCard(this.EntityEntryID)\r\n .subscribe(response => this.State.CreditCard = response.Entity);\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n this.GetCurrentCreditCard();\r\n this.LoadPropertyAttributes();\r\n if (this.State.CustomerOption?.CustomerFieldsetID) {\r\n this.State.FieldsetID = this.State.CustomerOption?.CustomerFieldsetID;\r\n }\r\n\r\n this.State.CustomFieldValues = this.Entity.CustomFieldValues;\r\n }\r\n\r\n override OnIsDirtyDisabled() {\r\n return true;\r\n }\r\n\r\n LoadPropertyAttributes() {\r\n const attributesArray = this.Entity.CustomerAttributes.split('');\r\n\r\n attributesArray.forEach((attribute, index) => {\r\n if (attribute === 'Y') {\r\n this.customerPropertyAttributeIDs.push(++index);\r\n }\r\n });\r\n }\r\n\r\n HandleChangeCreditCard() {\r\n if (!this.State.CustomerOption?.CustomerDetailOption?.IsAllowChangeCardDetails) return;\r\n\r\n this.changeCreditCardDialogComponent.CustomerEntryID = this.EntityEntryID;\r\n this.changeCreditCardDialogComponent.ShowDialogShort(() => {\r\n this.LoadEntity(this.EntityEntryID);\r\n this.GetCurrentCreditCard();\r\n });\r\n }\r\n\r\n HandleChangeVatStatus(e: any) {\r\n if (!e.event) {\r\n return;\r\n }\r\n\r\n this.Entity.VatGroupCode = null;\r\n this.FilterVatGroups();\r\n }\r\n\r\n FilterVatGroups() {\r\n this.State.VatGroups = this.State.AllVatGroups.filter(vg => {\r\n switch (this.Entity.EUVatStatus) {\r\n case EnumEUVatStatuses.Liable: return vg.Percent > 0 && !vg.IsEU;\r\n case EnumEUVatStatuses.Excempt: return vg.Percent === 0 && !vg.IsEU;\r\n case EnumEUVatStatuses.EU: return vg.IsEU;\r\n }\r\n });\r\n }\r\n\r\n NavigateTo(type: 'Whatsapp' | 'Phone' | 'Email' | 'Website' | 'Fax' | 'bank-details', additionalParam: string) {\r\n switch (type) {\r\n case 'Email':\r\n this.A.Navigator.NavigateEmail(additionalParam);\r\n break;\r\n case 'Phone':\r\n this.A.Navigator.NavigatePhone(additionalParam);\r\n break;\r\n case 'Fax':\r\n this.A.Navigator.NavigateExternal(`fax:${additionalParam}`);\r\n break;\r\n case 'Whatsapp':\r\n this.A.Navigator.NavigateWhatsApp(additionalParam);\r\n break;\r\n case 'Website':\r\n this.A.Navigator.NavigateExternal(additionalParam);\r\n break;\r\n case 'bank-details':\r\n this.Navigate([ROUTE_PATHS.BANK_DETAILS, this.Entity.EntryID]);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n return;\r\n }\r\n\r\n OnUpdateContact(contact: ContactPerson, isAdded: boolean = false) {\r\n if (isAdded) {\r\n contact.EntryID = ++this.State.CurrentContactEntryID;\r\n this.State.ContactPersonsToUpdate.push(contact);\r\n this.State.ContactPersons.push(contact);\r\n } else {\r\n if (this.State.ContactPersonsToUpdate.some(cp => cp.EntryID === contact.EntryID)) {\r\n this.State.ContactPersonsToUpdate = this.State.ContactPersonsToUpdate.filter(cp => cp.EntryID !== contact.EntryID)\r\n }\r\n this.State.ContactPersonsToUpdate.push(contact);\r\n this.State.ContactPersons = this.State.ContactPersons.map(cp => cp.EntryID === contact.EntryID ? contact : cp);\r\n }\r\n }\r\n\r\n OnUpdateAddress(address: CustomerAddress, isAdded: boolean = false) {\r\n if (isAdded) {\r\n address.EntryID = ++this.State.CurrentAddressEntryID;\r\n this.State.CustomerAddressesToUpdate.push(address);\r\n this.State.CustomerAddresses.push(address);\r\n } else {\r\n if (this.State.CustomerAddressesToUpdate.some(ad => ad.EntryID === address.EntryID)) {\r\n this.State.CustomerAddressesToUpdate = this.State.CustomerAddressesToUpdate.filter(ad => ad.EntryID !== address.EntryID)\r\n }\r\n this.State.CustomerAddressesToUpdate.push(address);\r\n this.State.CustomerAddresses = this.State.CustomerAddresses.map(ad => ad.EntryID === address.EntryID ? address : ad);\r\n }\r\n }\r\n\r\n ConvertPropertyAttributesToString() {\r\n const outputArray = new Array(64).fill('N');\r\n\r\n this.customerPropertyAttributeIDs.forEach(id => {\r\n outputArray[id - 1] = 'Y';\r\n });\r\n\r\n const outputString = outputArray.join('');\r\n\r\n this.Entity.CustomerAttributes = outputString;\r\n }\r\n\r\n override OnSave() {\r\n this.ConvertPropertyAttributesToString();\r\n this.IsSaving = true;\r\n this.Entity.CustomFieldValues = this.State.CustomFieldValues;\r\n const customerSaveParams = {\r\n Customer: this.Entity,\r\n CustomerAddresses: this.State.CustomerAddressesToUpdate.map(ad => {\r\n if (ad.EntryID > this.State.MaxAddressEntryID) {\r\n ad.EntryID = -1;\r\n }\r\n return ad;\r\n }),\r\n CustomerContacts: this.State.ContactPersonsToUpdate.map(cp => {\r\n if (cp.EntryID > this.State.MaxContactEntryID) {\r\n cp.EntryID = -1;\r\n }\r\n return cp;\r\n })\r\n } as CustomerSaveParams;\r\n\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveFull(customerSaveParams), true, (_) => this.ReflectEntitySaved(), (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n\r\n OnFormChange(field: any) {\r\n if (!this.State.CustomFieldValues) {\r\n this.State.CustomFieldValues = {} as any;\r\n }\r\n this.State.CustomFieldValues[field.Key] = field.Value;\r\n }\r\n}\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dino-proxy/endpoints/customeraddress.endpoint';\r\nimport { BaseCustomerDetailsComponent } from '../base/base-customer-details.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { VatGroupEndpoint } from '@dino-proxy/endpoints/vatgroup.endpoint';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-details-fullscreen',\r\n templateUrl: './customer-details.component.html',\r\n styleUrls: ['./customer-details.component.scss']\r\n})\r\nexport class CustomerDetailsFullscreenComponent extends BaseCustomerDetailsComponent {\r\n constructor(A: ServiceBagService,\r\n customerEndpoint: CustomerEndpoint,\r\n salesPersonEndpoint: SalesPersonEndpoint,\r\n customerService: CustomerService,\r\n contactPersonEndpoint: ContactPersonEndpoint,\r\n customerAddressEndpoint: CustomerAddressEndpoint,\r\n screenService: ScreenService,\r\n vatGroupEndpoint: VatGroupEndpoint,\r\n businessOptionEndpoint: BusinessOptionEndpoint,\r\n framework: FrameworkService,\r\n public restrictedNavigationService: RestrictedNavigationService) {\r\n super(A,\r\n 'CustomerDetailsFullscreenComponent',\r\n customerEndpoint,\r\n salesPersonEndpoint,\r\n customerService,\r\n contactPersonEndpoint,\r\n customerAddressEndpoint,\r\n screenService,\r\n vatGroupEndpoint,\r\n businessOptionEndpoint,\r\n EnumPageDisplayModes.FullScreen,\r\n framework,\r\n restrictedNavigationService);\r\n }\r\n\r\n override LedgerRoute = ROUTE_PATHS.LEDGERS_FULL;\r\n override DashboardRoute = ROUTE_PATHS.DASHBOARD_FULL;\r\n override AgingRoute = ROUTE_PATHS.AGING_FULL;\r\n override IsFullScreen = true;\r\n override IsShowSubtitle = false;\r\n\r\n override OnInitComponent() { \r\n super.OnInitComponent();\r\n this.State.ShowToolbar = true;\r\n }\r\n \r\n IsNewCustomerRelatedToCurrentSalesPerson() {\r\n const loggedInSalesPersonID = this.customerService.GetCurrentSalesPersonId();\r\n return loggedInSalesPersonID === this.Entity?.SalesPersonID;\r\n }\r\n\r\n override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) {\r\n if (!!currentCustomerID && currentCustomerID != this.EntityEntryID) {\r\n this.LoadEntity(currentCustomerID);\r\n this.EntityEntryID = currentCustomerID;\r\n this.SetTabs();\r\n this.State.CurrentTabIndex = 0;\r\n this.ReloadToolbar();\r\n } else if (!currentCustomerID && !!prevCustomerID) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n }\r\n}\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dino-proxy/endpoints/customeraddress.endpoint';\r\nimport { BaseCustomerDetailsComponent } from '../base/base-customer-details.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { VatGroupEndpoint } from '@dino-proxy/endpoints/vatgroup.endpoint';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-details-window',\r\n templateUrl: './customer-details.component.html',\r\n styleUrls: ['./customer-details.component.scss']\r\n})\r\nexport class CustomerDetailsWindowComponent extends BaseCustomerDetailsComponent {\r\n constructor(A: ServiceBagService,\r\n customerEndpoint: CustomerEndpoint,\r\n salesPersonEndpoint: SalesPersonEndpoint,\r\n customerService: CustomerService,\r\n contactPersonEndpoint: ContactPersonEndpoint,\r\n customerAddressEndpoint: CustomerAddressEndpoint,\r\n screenService: ScreenService,\r\n vatGroupEndpoint: VatGroupEndpoint,\r\n businessOptionEndpoint: BusinessOptionEndpoint,\r\n framework: FrameworkService,\r\n restrictedNavigationService: RestrictedNavigationService) {\r\n super(A,\r\n \"CustomerDetailsWindowComponent\",\r\n customerEndpoint,\r\n salesPersonEndpoint,\r\n customerService,\r\n contactPersonEndpoint,\r\n customerAddressEndpoint,\r\n screenService,\r\n vatGroupEndpoint,\r\n businessOptionEndpoint,\r\n EnumPageDisplayModes.Window,\r\n framework,\r\n restrictedNavigationService);\r\n }\r\n\r\n override LedgerRoute = ROUTE_PATHS.LEDGERS_WINDOW;\r\n override DashboardRoute = ROUTE_PATHS.DASHBOARD_WINDOW;\r\n override AgingRoute = ROUTE_PATHS.AGING_WINDOW;\r\n}\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customers-grid',\r\n templateUrl: './customers-grid.component.html'\r\n})\r\nexport class CustomersGridComponent extends BaseGridComponent {\r\n @Input() SalesPersons: SalesPerson[] ;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() CustomerGroups: CustomerGroup[] = [];\r\n @Input() ForSelect: boolean = false;\r\n\r\n @Output() OnCustomerSelect = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'CustomersGridComponent', Customer, State);\r\n }\r\n\r\n get CanNavigate(): boolean {\r\n return this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails;\r\n }\r\n\r\n public OnCellPrepared(e: any): void {\r\n this.PaintBalanceCells(e);\r\n }\r\n\r\n private PaintBalanceCells(e) {\r\n const columnToPaint = 'Balance';\r\n if (e?.column?.dataField !== columnToPaint) return;\r\n\r\n const balanceValue = e.row?.data[columnToPaint];\r\n (balanceValue !== 0) && e.cellElement.classList.add(balanceValue < 0 ? 'negative-amount' : 'positive-amount');\r\n }\r\n\r\n OnRowClick(e) {\r\n if (!this.ForSelect && this.CanNavigate) {\r\n this.OnNavigate(e.data.EntryID);\r\n return;\r\n }\r\n\r\n this.OnCustomerSelect.emit(e.data.EntryID);\r\n }\r\n\r\n OnNavigate = event => {\r\n let id = event.row ? event.row.data.EntryID : event;\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW,\r\n (route) => this.Navigate([route, id])\r\n );\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Balance | formatNumberSum }} {{ cell.data.DisplayCurrency }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-customers-list',\r\n\ttemplateUrl: './customers-list.component.html',\r\n\tstyleUrls: ['./customers-list.component.scss']\r\n})\r\nexport class CustomersListComponent extends BaseComponent {\r\n\t@Input() SalesPersons: SalesPerson[] ;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() CustomerGroups: CustomerGroup[] = [];\r\n\t@Input() DataSource: DataSourceCustomAction;\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tprivate restrictedNavigationService: RestrictedNavigationService) {\r\n\t\tsuper(A, 'CustomersListComponent', State);\r\n\t}\r\n\r\n\tOnNavigate(entryID: number) {\r\n\t\tif (!this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW,\r\n (route) => this.Navigate([route, entryID])\r\n );\r\n\t}\r\n}\r\n","export default \"\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { GetNewObjectPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { CustomerListParams } from '@dino-proxy/params/customerlist.param';\r\nimport { CustomerFilterActionPayload, CustomerFilterValues } from './components/customer-filter/customer-filter.component';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseOptionState {\r\n AllowAddCustomer: boolean = false;\r\n IsMobile: boolean = false;\r\n SalesPersons: SalesPerson[] ;\r\n PaymentTerms: PaymentTerm[] = [];\r\n CustomerGroups: CustomerGroup[] = [];\r\n Filter: CustomerFilterValues;\r\n IsMediumScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customers',\r\n templateUrl: './customers.component.html',\r\n styleUrls: ['./customers.component.scss']\r\n})\r\nexport class CustomersComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CustomerEndpoint,\r\n private customerService: CustomerService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'CustomersComponent', BaseEntity, State);\r\n this.State.IsMediumScreen = this.A.Screen.IsWideScreen() || this.A.Screen.IsMediumScreen();\r\n }\r\n\r\n DetailsNewWindowRoute: string = GetNewObjectPath(ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW);\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.InitFilter();\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n let params = this.State.Filter as CustomerListParams;\r\n this.DataSources['CustomersAdmin'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListByParams(params, options),\r\n undefined,\r\n undefined,\r\n false);\r\n\r\n this.State.AllowAddCustomer = this.customerService.IsCurrentUserSalesPerson()\r\n ? this.customerService.GetSalesPersonOption().IsAllowCustomerAdding && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails\r\n : false;\r\n \r\n\r\n this.salesPersonEndpoint.GetListShallow().subscribe(response => this.State.SalesPersons = response.Entities);\r\n this.customerEndpoint.GetPaymentTerms().subscribe(response => this.State.PaymentTerms = response.Entities);\r\n this.customerEndpoint.GetCustomerGroups().subscribe(response => this.State.CustomerGroups = response.Entities);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n\r\n OnAddCustomer() {\r\n\t\tthis.Navigate([this.DetailsNewWindowRoute]);\r\n\t}\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: !this.State.IsMediumScreen\r\n } as ToolbarSettings;\r\n }\r\n\r\n HandleFilterValuesChanged(e: CustomerFilterValues) {\r\n this.State.Filter = e;\r\n this.State.Filter.DoInitialize && this.InitFilter();\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, this.State.Filter as CustomerListParams);\r\n this.LoadDataSource();\r\n }\r\n\r\n private InitFilter() {\r\n this.State.Filter = new CustomerFilterValues();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, { CustomerFilterAction: 'apply' } as CustomerFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.CUSTOMER_FILTER_ACTION, { CustomerFilterAction: 'clear' } as CustomerFilterActionPayload);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { OpenDocumentsTotal } from './../entities/opendocumentstotal.entity';\r\nimport { CountDocumentsFromPortal } from './../entities/countdocumentsfromportal.entity';\r\nimport { ActiveCustomersFromPortal } from './../entities/activecustomersfromportal.entity';\r\nimport { TopCustomer } from './../entities/topcustomer.entity';\r\nimport { TopItem } from './../entities/topitem.entity';\r\nimport { DocumentView } from './../views/document.view';\r\nimport { DocumentBySourceView } from './../views/documentbysource.view';\r\nimport { DashboardSaleAnalysis } from './../entities/dashboardsaleanalysis.entity';\r\nimport { GetActiveUsersParams } from './../params/getactiveusers.param';\r\nimport { BaseDashboardParams } from './../params/basedashboard.param';\r\nimport { GetActiveCustomersParams } from './../params/getactivecustomers.param';\r\nimport { GetInactiveCustomersParams } from './../params/getinactivecustomers.param';\r\nimport { GetTop10ItemsParams } from './../params/gettop10items.param';\r\n@Injectable()\r\nexport class DashboardEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Dashboard\", api);}\r\n\t\r\n\r\n public GetActiveUsers(Params: GetActiveUsersParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetActiveUsers', Params, undefined );\r\n }\r\n\r\n public GetOpenDocumentsTotal(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetOpenDocumentsTotal', Params, undefined );\r\n }\r\n\r\n public GetActiveCustomers(Params: GetActiveCustomersParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetActiveCustomers', Params, undefined );\r\n }\r\n\r\n public GetInactiveCustomers(Params: GetInactiveCustomersParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetInactiveCustomers', Params, undefined );\r\n }\r\n\r\n public GetCountDocumentsFromPortal(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetCountDocumentsFromPortal', Params, undefined );\r\n }\r\n\r\n public GetActiveCustomersFromPortal(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetActiveCustomersFromPortal', Params, undefined );\r\n }\r\n\r\n public GetTop10Customers(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTop10Customers', Params, undefined );\r\n }\r\n\r\n public GetTop10Items(Params: GetTop10ItemsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTop10Items', Params, undefined );\r\n }\r\n\r\n public GetLatestDocuments(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetLatestDocuments', Params, undefined );\r\n }\r\n\r\n public GetDocumentsBySource(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetDocumentsBySource', Params, undefined );\r\n }\r\n\r\n public GetSalesAnalysis(Params: BaseDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetSalesAnalysis', Params, undefined );\r\n }\r\n\r\n public GetBalance() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBalance', undefined );\r\n }\r\n\r\n public GetBalanceLate() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBalanceLate', undefined );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveUsersParams } from '@dino-proxy/params/getactiveusers.param';\r\nimport { ActiveCustomersFromPortal } from '@dino-proxy/entities/activecustomersfromportal.entity';\r\nimport { generateColors } from \"devextreme/viz/palette\";\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n ActiveCustomersFromPortal: ActiveCustomersFromPortal;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n Data: { name: string, value: number }[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-active-customers-from-dino',\r\n templateUrl: './dashboard-active-customers-from-dino.component.html',\r\n styleUrls: ['./dashboard-active-customers-from-dino.component.scss']\r\n})\r\nexport class DashboardActiveCustomersFromDinoComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n palette = generateColors(['#35599F', '#FFFFFF', '#E8EFFF'], 3, {});\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardActiveCustomersFromDinoComponent', State);\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo\r\n } as GetActiveUsersParams;\r\n\r\n this.dashboardEndpoint.GetActiveCustomersFromPortal(params)\r\n .subscribe(r => {\r\n this.State.ActiveCustomersFromPortal = r.Entity;\r\n this.PrepareData();\r\n });\r\n }\r\n\r\n protected PrepareData() {\r\n const _total = this.State?.ActiveCustomersFromPortal?.Total - this.State?.ActiveCustomersFromPortal?.Active;\r\n const _active = this.State?.ActiveCustomersFromPortal?.Active;\r\n\r\n this.State.Data = [\r\n { name: this.RC('lblDashboardActiveCustomers'), value: _active },\r\n { name: this.RC('lblDashboardTotalCustomers'), value: _total }\r\n ];\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
{{ 'lblDashboardActiveCustomersFromDinoTitleInfo' | RC:THIS}}
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n {{State?.ActiveCustomersFromPortal?.Active | formatNumberShort}}\\r\\n \\r\\n \\r\\n {{'lblDashboardOutOf' | RC:THIS}} {{State?.ActiveCustomersFromPortal?.Total | formatNumberShort}}\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveCustomersParams } from '@dino-proxy/params/getactivecustomers.param';\r\nimport { EnumDashboardFilterAdditionalPeriod } from '@dino-proxy/enums';\r\nimport { BottomSheetListParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n ActiveCustomers: number;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n SelectedAdditionalPeriod: EnumDashboardFilterAdditionalPeriod = EnumDashboardFilterAdditionalPeriod.LastMonth;\r\n IsMobile: boolean;\r\n CustomerID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-active-customers',\r\n templateUrl: './dashboard-active-customers.component.html',\r\n styleUrls: ['./dashboard-active-customers.component.scss']\r\n})\r\nexport class DashboardActiveCustomersComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CustomerID(value: number) {\r\n this.State.CustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'DashboardActiveCustomersComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n get GetTextValue(): string {\r\n return this.ContextMenuItems.find(c => c.value === this.State.SelectedAdditionalPeriod)?.label;\r\n }\r\n\r\n HandleAdditionalPeriodChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.UpdateData();\r\n }\r\n\r\n override OnInitComponent() {\r\n let periods = this.LIST('DashboardFilterAdditionalPeriods');\r\n periods.forEach(p => {\r\n this.ContextMenuItems.push({\r\n label: p.Text, \r\n command: () => {\r\n this.State.SelectedAdditionalPeriod = p.Value as EnumDashboardFilterAdditionalPeriod;\r\n this.UpdateData();\r\n },\r\n value: p.Value\r\n });\r\n });\r\n\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n AdditionalPeriod: this.State.SelectedAdditionalPeriod,\r\n CustomerID: this.State.CustomerID\r\n } as GetActiveCustomersParams;\r\n\r\n this.dashboardEndpoint.GetActiveCustomers(params)\r\n .subscribe(r => {\r\n this.State.ActiveCustomers = r.Data;\r\n });\r\n }\r\n\r\n\r\n OpenBottomSheet() {\r\n const onSelect = (e) => {\r\n if (e.value) {\r\n this.State.SelectedAdditionalPeriod = e.value;\r\n this.UpdateData();\r\n }\r\n };\r\n\r\n const params = {\r\n Title: this.RC('lblDashboardTimeInterval'),\r\n DataSource: this.LIST('DashboardFilterAdditionalPeriods'),\r\n IsMultiSelection: false,\r\n ValueExpr: 'Value',\r\n DisplayExpr: 'Text',\r\n Value: this.State.SelectedAdditionalPeriod,\r\n IsSearchEnabled: false,\r\n OnCompleted: onSelect,\r\n OnCanceled: () => { }\r\n } as BottomSheetListParams;\r\n this.bottomSheetService.ShowList(params);\r\n }\r\n\r\n HandleSelectPeriod(event, cm) {\r\n if (this.State.IsMobile) {\r\n this.OpenBottomSheet();\r\n return;\r\n }\r\n\r\n event?.preventDefault && event.preventDefault();\r\n event?.stopPropagation && event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
{{GetTextValue}}
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveUsersParams } from '@dino-proxy/params/getactiveusers.param';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n ActiveUsers: number;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-active-users',\r\n templateUrl: './dashboard-active-users.component.html',\r\n styleUrls: ['./dashboard-active-users.component.scss']\r\n})\r\nexport class DashboardActiveUsersComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardActiveUsersComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n \r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo\r\n } as GetActiveUsersParams;\r\n \r\n this.dashboardEndpoint.GetActiveUsers(params)\r\n .subscribe(r => {\r\n this.State.ActiveUsers = r.Data;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SalePeriod } from './../entities/saleperiod.entity';\r\n@Injectable()\r\nexport class SalePeriodEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SalePeriod\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Output, EventEmitter } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { SalePeriod } from '@dino-proxy/entities/saleperiod.entity';\r\nimport { SalePeriodEndpoint } from '@dino-proxy/endpoints/saleperiod.endpoint';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n IsMobile: boolean = false;\r\n IsMediumScreen: boolean;\r\n SalePeriods: SalePeriod[] = [];\r\n SelectedSalePeriodID: number;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\nexport class DashboardSalePeriodValue {\r\n SalePeriodID: number;\r\n SalePeriod: SalePeriod;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\nconst CustomSalePeriodID = 999999;\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-filter',\r\n templateUrl: './dashboard-filter.component.html',\r\n styleUrls: ['./dashboard-filter.component.scss']\r\n})\r\nexport class DashboardFilterComponent extends BaseComponent {\r\n @Output() OnFilterValueChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private salePeriodEndpoint: SalePeriodEndpoint,) {\r\n super(A, 'DashboardFilterComponent', State);\r\n this.State.IsMediumScreen = this.A.Screen.IsWideScreen() || this.A.Screen.IsMediumScreen();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected OnInitComponent() {\r\n this.salePeriodEndpoint.GetList()\r\n .subscribe(r => {\r\n this.State.SalePeriods = r.Entities;\r\n\r\n if (this.State.SalePeriods?.length === 1) {\r\n this.State.SelectedSalePeriodID = this.State.SalePeriods[0].EntryID;\r\n } else if (this.State.SalePeriods?.length > 1) {\r\n const maxDate = this.State.SalePeriods.map(x => x.StartDate).reduce(function (a, b) { return a > b ? a : b; });\r\n this.State.SelectedSalePeriodID = this.State.SalePeriods.find(x => x.StartDate === maxDate)?.EntryID;\r\n } else\r\n this.State.SelectedSalePeriodID = CustomSalePeriodID;\r\n\r\n this.State.SalePeriods && (this.State.SalePeriods.push({\r\n EntryID: CustomSalePeriodID,\r\n Name: this.RC('lblDashboardCustomPeriod')\r\n } as SalePeriod));\r\n\r\n this.HandleSalePeriodChange(true);\r\n });\r\n }\r\n\r\n HandleSalePeriodChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.State.SelectedSalePeriodID === CustomSalePeriodID) {\r\n const now = new Date();\r\n if (!this.State.DateFrom) this.State.DateFrom = new Date(now.getFullYear(), 0, 1);\r\n if (!this.State.DateTo) this.State.DateTo = new Date(now.getFullYear(), 11, 31);\r\n }\r\n\r\n const value = {} as DashboardSalePeriodValue;\r\n if (this.State.SelectedSalePeriodID === CustomSalePeriodID) {\r\n value.DateFrom = this.State.DateFrom;\r\n value.DateTo = this.State.DateTo;\r\n } else {\r\n value.SalePeriodID = this.State.SelectedSalePeriodID;\r\n const selectedSalePeriod = this.State.SalePeriods.find(x => x.EntryID === this.State.SelectedSalePeriodID);\r\n value.SalePeriod = Utils.CloneObject(selectedSalePeriod);\r\n value.DateFrom = selectedSalePeriod?.StartDate;\r\n value.DateTo = selectedSalePeriod?.EndDate;\r\n }\r\n\r\n this.OnFilterValueChanged.emit(value);\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveUsersParams } from '@dino-proxy/params/getactiveusers.param';\r\nimport { CountDocumentsFromPortal } from '@dino-proxy/entities/countdocumentsfromdino.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n CountDocumentsFromPortal: CountDocumentsFromPortal;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-documents-from-dino',\r\n templateUrl: './dashboard-documents-from-dino.component.html',\r\n styleUrls: ['./dashboard-documents-from-dino.component.scss']\r\n})\r\nexport class DashboardDocumentsFromDinoComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardDocumentsFromDinoComponent', State);\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo\r\n } as GetActiveUsersParams;\r\n\r\n this.dashboardEndpoint.GetCountDocumentsFromPortal(params)\r\n .subscribe(r => {\r\n this.State.CountDocumentsFromPortal = r.Entity;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{title}}{{count | formatNumberShort}}\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { ItemPriceDetailsView } from \"@dino-proxy/views/itempricedetails.view\";\r\nimport { EnumKitTypes, EnumPriceInfoDisplayTypes } from \"@dino-proxy/enums\";\r\n\r\nexport type PriceViewMode = 'normal' | 'short' | 'ultra-short';\r\nexport enum ItemPriceRenderDetails {\r\n WithCommentBlock\r\n}\r\n\r\nclass State extends BaseOptionState {\r\n IsPriceCommentsVisible: boolean;\r\n GetPriceMainPart: string;\r\n GetPriceChangePart: string;\r\n GetFinalPriceMainPart: string;\r\n GetFinalPriceChangePart: string;\r\n GetPricePer100MainPart: string;\r\n GetPricePer100ChangePart: string;\r\n GetInvertedPromotionPriceMainPart: string;\r\n GetInvertedPromotionPriceChangePart: string;\r\n GetItemElementID: string;\r\n IsShowDiscount: boolean;\r\n IsShowOldPrice: boolean;\r\n IsShowFinalPrice: boolean;\r\n IsShowPer100Gr: boolean;\r\n IsShowPriceComments: boolean;\r\n PriceComments: string | SafeHtml;\r\n PriceDetails: ItemPriceDetailsView;\r\n IsAlternativePriceActive: boolean;\r\n AlternativePriceTitle: string = 'Show FCK';\r\n IsShowSalesKitParentLabel: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-price2',\r\n templateUrl: './item-price2.component.html',\r\n styleUrls: ['./item-price2.component.scss'],\r\n})\r\nexport class ItemPrice2Component extends BaseComponent {\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.State.PriceDetails = value.PriceDetails;\r\n this.RefreshState();\r\n }\r\n get Item() { return this.item; }\r\n\r\n @Input() set ElementOption(value: ItemDisplayPopupOption | ItemDisplayElementOption) {\r\n this.elementOption = value;\r\n this.RefreshState();\r\n }\r\n get ElementOption() { return this.elementOption; }\r\n @Input() HidePriceComments: boolean;\r\n @Input() Mode: PriceViewMode = 'normal';\r\n @Input() LabelOnly: boolean = false;\r\n @Output() ControlRenderEvent = new EventEmitter();\r\n\r\n private item: ItemView;\r\n private elementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'ItemBadgesComItemPrice2Componentponent', State);\r\n }\r\n\r\n RefreshState() {\r\n if (!this.Item || !this.ElementOption || !this.State.PriceDetails) return;\r\n if (!this.State || !this.State.CustomerOption) return;\r\n\r\n const businessOption = this.State.CustomerOption.BusinessOption;\r\n\r\n this.DisplayAlternativePriceAsDefault();\r\n\r\n this.State.GetPriceMainPart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.Price))[0];\r\n this.State.GetPriceChangePart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.Price))[1];\r\n this.State.GetFinalPriceMainPart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.FinalPrice))[0];\r\n this.State.GetFinalPriceChangePart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.FinalPrice))[1];\r\n this.State.GetPricePer100MainPart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.PricePer100G))[0];\r\n this.State.GetPricePer100ChangePart = this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.PricePer100G))[1];\r\n\r\n const shouldInvertPrice = this.State.PriceDetails.InvertedPromotionPrice ? true : false;\r\n this.State.GetInvertedPromotionPriceMainPart\r\n = shouldInvertPrice ? this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.InvertedPromotionPrice))[0] : undefined;\r\n this.State.GetInvertedPromotionPriceChangePart\r\n = shouldInvertPrice ? this.GetSplittedPrice(this.GetTotalPerItemPrice(this.State.PriceDetails.InvertedPromotionPrice))[1] : undefined;\r\n\r\n this.State.IsShowDiscount = !!this.State.PriceDetails.Discount\r\n && (businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountAndDiscountPercent\r\n || businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountDiscountPercentAndFinal);\r\n\r\n this.State.IsShowOldPrice = !!this.State.PriceDetails.Price\r\n && this.State.PriceDetails.Price != this.State.PriceDetails.FinalPrice\r\n && (businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountAndAfterDiscount\r\n || businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountDiscountPercentAndFinal);\r\n\r\n this.State.IsShowFinalPrice = businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountAndDiscountPercent\r\n || businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.AfterDiscount\r\n || businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountAndAfterDiscount\r\n || businessOption.PriceDisplayOption === this.Enums.EnumPriceDisplayOptions.BeforeDiscountDiscountPercentAndFinal;\r\n\r\n this.State.IsShowPer100Gr = this.ElementOption?.PriceDisplayOption?.IsRenderPricePer100G \r\n && this.State.PriceDetails.PricePer100G !== 0;\r\n\r\n const isRenderPriceComments = this.ElementOption?.PriceDisplayOption?.PriceInfoDisplayType === EnumPriceInfoDisplayTypes.Comments\r\n || this.ElementOption?.PriceDisplayOption?.PriceInfoDisplayType === EnumPriceInfoDisplayTypes.CommentsAndDescription;\r\n\r\n this.State.IsShowPriceComments = isRenderPriceComments\r\n && this.State.PriceDetails.PriceComments\r\n && !!this.State.PriceDetails.PriceComments.length\r\n && !this.HidePriceComments;\r\n\r\n if (this.State.IsShowPriceComments && this.State.PriceDetails.PriceComments) {\r\n const priceComments = this.State.PriceDetails.PriceComments\r\n .map(x => x?.trim())\r\n .filter(x => !!x);\r\n\r\n this.State.PriceComments = priceComments.join('; ');\r\n this.State.IsShowPriceComments = !!this.State.PriceComments;\r\n }\r\n\r\n if (this.State.IsShowPriceComments && this.IsRenderPriceDescriptionBlock()) {\r\n this.ControlRenderEvent.emit(ItemPriceRenderDetails.WithCommentBlock);\r\n }\r\n\r\n if (!this.State.GetItemElementID) {\r\n let nameSuffix = Math.random().toString();\r\n this.State.GetItemElementID = `item-price-${this.Item.EntryID}-${nameSuffix.substring(nameSuffix.length - 4)}`;\r\n }\r\n\r\n this.State.AlternativePriceTitle = this.GetAlternativePriceTitle(\r\n this.State.IsAlternativePriceActive ? businessOption.AlternativePriceTitleOff : businessOption.AlternativePriceTitleOn,\r\n this.State.IsAlternativePriceActive ? this.Item.PriceDetails?.CurrencySymbol : this.Item.AlternativePriceDetails?.CurrencySymbol);\r\n\r\n this.State.IsShowSalesKitParentLabel = this.Item.KitType === EnumKitTypes.Sales\r\n && (this.Item.IsKitItem || this.Item.PriceDetails.FinalPrice === 0);\r\n }\r\n\r\n IsRenderPriceDescriptionBlock() {\r\n return this.ElementOption?.PriceDisplayOption?.PriceInfoDisplayType === EnumPriceInfoDisplayTypes.CommentsAndDescription;\r\n }\r\n\r\n GetAlternativePriceTitle(text: string, currency: string) {\r\n return text?.replace('{currency}', currency);\r\n }\r\n\r\n GetSplittedPrice(price: number) {\r\n if (price == undefined) return ['', ''];\r\n return formatNumber(price, this.F.NumberPrice).split(this.F.DecimalSeparator);\r\n }\r\n\r\n GetTotalPerItemPrice(price: number) {\r\n return price;\r\n // if (!this.State.PriceDetails?.IsShowPriceWithVat || !this.State.PriceDetails?.Vat || !price) return price;\r\n\r\n // const vatAmount = ((price * 1000) * (this.State.PriceDetails?.Vat * 1000)) / (100 * 1000000);\r\n // return Utils.Round(price + vatAmount);\r\n }\r\n\r\n DisplayAlternativePriceAsDefault() {\r\n const isUseAlternativePriceAsDefault = this.State.CustomerOption.BusinessOption.IsUseAlternativePriceAsDefault;\r\n if (!this.Item?.AlternativePriceDetails) return;\r\n\r\n // To load alternative price on initialization\r\n // And to not change price to the opposite one if user adds items to SC\r\n if ((this.State.IsAlternativePriceActive === undefined && isUseAlternativePriceAsDefault)\r\n || this.State.IsAlternativePriceActive) {\r\n this.State.PriceDetails = this.Item.AlternativePriceDetails;\r\n this.State.IsAlternativePriceActive = true;\r\n }\r\n }\r\n\r\n HandleSwitchAlternativePrice(e?) {\r\n e && e.stopPropagation();\r\n if (!this.Item?.AlternativePriceDetails) return;\r\n this.State.PriceDetails = this.State.IsAlternativePriceActive ? this.Item.PriceDetails : this.Item.AlternativePriceDetails;\r\n this.State.IsAlternativePriceActive = !this.State.IsAlternativePriceActive;\r\n this.RefreshState();\r\n }\r\n\r\n IsChangePriceZero(value) {\r\n return value === '0' || value === '00' || value === '000' || (+value === 0);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'lblDashboardCustomerDocumentsBySourceMobile' | RC:THIS}}
\\r\\n
{{State.MobileCustomerValue}}
\\r\\n
\\r\\n
\\r\\n
{{'lblDashboardSalesDocumentsBySourceMobile' | RC:THIS}}
\\r\\n
{{State.MobileSalesValue}}
\\r\\n
\\r\\n
\\r\\n
{{'lblDashboardSBODocumentsBySourceMobile' | RC:THIS}}
\\r\\n
{{State.MobileSapValue}}
\\r\\n
\\r\\n
\\r\\n
{{'lblDashboardTotalDocumentsBySourceMobile' | RC:THIS}}
\\r\\n
{{State.MobileTotalValue}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
{{'lblDashboardCustomerDocumentsBySource' | RC:THIS}}: {{GetTooltipInfo(Enums.EnumDocumentSource.Customer, info.point.data, false)}}
\\r\\n
{{'lblDashboardSalesDocumentsBySource' | RC:THIS}}: {{GetTooltipInfo(Enums.EnumDocumentSource.Sales, info.point.data, false)}}
\\r\\n
\\r\\n {{'lblDashboardSBODocumentsBySource' | RC:THIS}} \\r\\n : \\r\\n {{GetTooltipInfo(Enums.EnumDocumentSource.SBO, info.point.data, false)}}
\\r\\n
{{'lblDashboardTotalDocumentsBySource' | RC:THIS}}: {{GetTooltipInfo(null, info.point.data, true)}}
\\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveCustomersParams } from '@dino-proxy/params/getactivecustomers.param';\r\nimport { EnumDashboardFilterAdditionalPeriod } from '@dino-proxy/enums';\r\nimport { BottomSheetListParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ContextMenuService } from 'primeng/api';\r\n\r\nclass State extends BaseState {\r\n InactiveCustomers: number;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n SelectedAdditionalPeriod: EnumDashboardFilterAdditionalPeriod = EnumDashboardFilterAdditionalPeriod.LastMonth;\r\n IsMobile: boolean;\r\n CustomerID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-inactive-customers',\r\n templateUrl: './dashboard-inactive-customers.component.html',\r\n styleUrls: ['./dashboard-inactive-customers.component.scss']\r\n})\r\nexport class DashboardInactiveCustomersComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CustomerID(value: number) {\r\n this.State.CustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint,\r\n private bottomSheetService: BottomSheetService,\r\n private a: ContextMenuService) {\r\n super(A, 'DashboardInactiveCustomersComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n get GetTextValue(): string {\r\n return this.ContextMenuItems.find(c => c.value === this.State.SelectedAdditionalPeriod)?.label;\r\n }\r\n\r\n HandleAdditionalPeriodChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.UpdateData();\r\n }\r\n\r\n override OnInitComponent() {\r\n let periods = this.LIST('DashboardFilterAdditionalPeriods');\r\n periods.forEach(p => {\r\n this.ContextMenuItems.push({\r\n label: p.Text, \r\n command: () => {\r\n this.State.SelectedAdditionalPeriod = p.Value as EnumDashboardFilterAdditionalPeriod;\r\n this.UpdateData();\r\n },\r\n value: p.Value\r\n });\r\n });\r\n \r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n AdditionalPeriod: this.State.SelectedAdditionalPeriod,\r\n CustomerID: this.State.CustomerID\r\n } as GetActiveCustomersParams;\r\n\r\n this.dashboardEndpoint.GetInactiveCustomers(params)\r\n .subscribe(r => {\r\n this.State.InactiveCustomers = r.Data;\r\n });\r\n }\r\n\r\n OpenBottomSheet() {\r\n const onSelect = (e) => {\r\n if (e?.value) {\r\n this.State.SelectedAdditionalPeriod = e.value;\r\n this.UpdateData();\r\n }\r\n };\r\n\r\n const params = {\r\n Title: this.RC('lblDashboardTimeInterval'),\r\n DataSource: this.LIST('DashboardFilterAdditionalPeriods'),\r\n IsMultiSelection: false,\r\n ValueExpr: 'Value',\r\n DisplayExpr: 'Text',\r\n Value: this.State.SelectedAdditionalPeriod,\r\n IsSearchEnabled: false,\r\n OnCompleted: onSelect,\r\n OnCanceled: () => { }\r\n } as BottomSheetListParams;\r\n this.bottomSheetService.ShowList(params);\r\n }\r\n\r\n HandleSelectPeriod(event, cm) {\r\n if (this.State.IsMobile) {\r\n this.OpenBottomSheet();\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
{{GetTextValue}}
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { BaseDashboardParams } from '@dino-proxy/params/basedashboard.param';\r\nimport { OpenDocumentsTotal } from '@dino-proxy/entities/opendocumentstotal.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n OpenDocumentsTotal: OpenDocumentsTotal;\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n IsMobile: boolean;\r\n CustomerID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-open-documents',\r\n templateUrl: './dashboard-open-documents.component.html',\r\n styleUrls: ['./dashboard-open-documents.component.scss']\r\n})\r\nexport class DashboardOpenDocumentsComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CustomerID(value: number) {\r\n this.State.CustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardOpenDocumentsComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n \r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n CustomerID: this.State.CustomerID\r\n } as BaseDashboardParams;\r\n\r\n this.dashboardEndpoint.GetOpenDocumentsTotal(params)\r\n .subscribe(r => {\r\n this.State.OpenDocumentsTotal = r.Entity;\r\n this.State.OpenDocumentsTotal.Total = Math.round(this.State.OpenDocumentsTotal.Total);\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n {{State?.OpenDocumentsTotal?.Quantity}}\\r\\n | {{State?.OpenDocumentsTotal?.Total | formatNumberShort}} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { BaseDashboardParams } from '@dino-proxy/params/basedashboard.param';\r\nimport { TopCustomer } from '@dino-proxy/entities/topcustomer.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n TopCustomers: TopCustomer[] = [];\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n CustomerID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-top10-customers',\r\n templateUrl: './dashboard-top10-customers.component.html',\r\n styleUrls: ['./dashboard-top10-customers.component.scss']\r\n})\r\nexport class DashboardTop10CustomersComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CustomerID(value: number) {\r\n this.State.CustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardTop10CustomersComponent', State);\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n CustomerID: this.State.CustomerID\r\n } as BaseDashboardParams;\r\n\r\n this.dashboardEndpoint.GetTop10Customers(params)\r\n .subscribe(r => {\r\n this.State.TopCustomers = r.Entities;\r\n this.PrepareData();\r\n });\r\n }\r\n \r\n protected PrepareData() {\r\n if (!this.State.TopCustomers.length) return;\r\n\r\n this.State.TopCustomers = this.State.TopCustomers.sort((a, b) => b.Total - a.Total);\r\n const topItem = this.State.TopCustomers[0];\r\n const maxTotal = Math.round(topItem.Total);\r\n (topItem as any).ItemWidth = '100%';\r\n this.State.TopCustomers.forEach(x => {\r\n if (maxTotal === 0) return;\r\n x.Total = Math.round(x.Total);\r\n if (x.Total === 0) (topItem as any).ItemWidth = '0%';\r\n (x as any).ItemWidth = Math.round(((x.Total / maxTotal) * 100)).toString() + '%'; \r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n\\r\\n
{{'lblDashboardNoDataTitle' | RC:THIS}}
\\r\\n\\r\\n
\\r\\n
\\r\\n {{item.CustomerName}}\\r\\n
\\r\\n
\\r\\n {{item.Total | formatNumberShort}} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ICustomerInjectedComponent } from './customer-injected.component';\r\n\r\n@Component({\r\n selector: 'base-customer-component',\r\n template: '
'\r\n})\r\nexport class BaseCustomerComponent extends BaseComponent implements ICustomerInjectedComponent {\r\n public IsSalesPerson: boolean;\r\n public CustomerID: number;\r\n // this could be moved \r\n public SalesPersonOption: SalesPersonOption;\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public override StateType: (new () => TState),\r\n public customerService: CustomerService) {\r\n super(A, ComponentName, StateType);\r\n\r\n CustomerService.InjectHandler(this, customerService);\r\n }\r\n\r\n public OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) { }\r\n}","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { TopItem } from '@dino-proxy/entities/topitem.entity';\r\nimport { GetTop10ItemsParams } from '@dino-proxy/params/gettop10items.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { Category } from '@dino-proxy/entities/category.entity';\r\n\r\nclass State extends BaseState {\r\n TopItems: TopItem[] = [];\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n CategoryIDs: number[] = [];\r\n CurrentCustomerID: number;\r\n IsDesktop: boolean;\r\n Categories: Category[] = [];\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-top10-items',\r\n templateUrl: './dashboard-top10-items.component.html',\r\n styleUrls: ['./dashboard-top10-items.component.scss']\r\n})\r\nexport class DashboardTop10ItemsComponent extends BaseCustomerComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CurrentCustomerID(value: number) {\r\n this.State.CurrentCustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint,\r\n private categoryEndpoint: CategoryEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardTop10ItemsComponent', State, customerService);\r\n this.State.IsDesktop = this.A.Screen.IsDesktop();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n if (this.State.IsDesktop) {\r\n this.DataSources['Categories'] = new DataSourceCustomAction((options: DataLoadOptions) => this.categoryEndpoint.GetAllCategories(options),\r\n entryID => this.categoryEndpoint.GetCategoryByID(entryID),\r\n undefined,\r\n false);\r\n } else {\r\n this.categoryEndpoint.GetAllCategories(null)\r\n .subscribe(r => {\r\n this.State.Categories = r.Entities;\r\n });\r\n }\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n CategoryIDs: this.State.CategoryIDs,\r\n CustomerID: this.State.CurrentCustomerID\r\n } as GetTop10ItemsParams;\r\n\r\n this.dashboardEndpoint.GetTop10Items(params)\r\n .subscribe(r => {\r\n this.State.TopItems = r.Entities;\r\n this.PrepareData();\r\n });\r\n }\r\n\r\n protected PrepareData() {\r\n if (!this.State.TopItems.length) return;\r\n this.State.TopItems = this.State.TopItems.sort((a, b) => b.Total - a.Total);\r\n this.State.TopItems.forEach(x => { \r\n x.Total = Math.round(x.Total);\r\n (x as any).Currency = this.Framework?.CompanyInfo?.CurrencySystem;\r\n });\r\n }\r\n\r\n HandleCategoryChanged(e?) {\r\n //if (!this.IsUIEvent(e)) return;\r\n\r\n this.UpdateData();\r\n }\r\n\r\n override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) {\r\n this.UpdateData();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{cell.value | formatNumberShort}} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
{{'lblDashboardNoDataTitle' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentProcessing } from './../entities/documentprocessing.entity';\r\nimport { DocumentProcessingParams } from './../params/documentprocessing.param';\r\nimport { UpdateAsResolvedParams } from './../params/updateasresolved.param';\r\n@Injectable()\r\nexport class DocumentProcessingEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DocumentProcessing\", api);}\r\n\t\r\n\r\n public ListByParams(Params: DocumentProcessingParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListByParams', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public UpdateAsResolved(Params: UpdateAsResolvedParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateAsResolved', Params, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentProcessingStatus } from './../enums';\r\nimport { EnumDocumentProcessingTypes } from './../enums';\r\nimport { EnumDocumentProcessingSteps } from './../enums';\r\nexport class DocumentProcessing extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentProcessing';\r\n }\r\n \r\n public PrivatePaymentRequestID: string; \r\n public CustomerID: number; \r\n public ContactPersonID: number; \r\n public DocumentID: number; \r\n public ShoppingCartID: number; \r\n public ShoppingPaymentID: number; \r\n public InvoiceID: number; \r\n public Status: EnumDocumentProcessingStatus; \r\n public DocumentType: EnumDocumentProcessingTypes; \r\n public DocumentNumber: string; \r\n public InstanceID: string; \r\n public CustomerCardCode: string; \r\n public CustomerCardName: string; \r\n public ContactPersonName: string; \r\n public Steps: DocumentProcessingStep[] = []; \r\n\t\r\n}\r\n\r\nexport class DocumentProcessingStep extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentProcessingStep';\r\n }\r\n \r\n public Step: EnumDocumentProcessingSteps; \r\n public IsSuccess: boolean; \r\n public Comment: string; \r\n public InstanceID: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { EnumDocumentProcessingStatus } from '@dino-proxy/enums';\r\nimport { UpdateAsResolvedParams } from '@dino-proxy/params/updateasresolved.param';\r\nimport { DocumentProcessingEndpoint } from '@dino-proxy/endpoints/documentprocessing.endpoint';\r\nimport { DocumentProcessing } from '@dino-proxy/entities/documentprocessing.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-processing-grid',\r\n templateUrl: './document-processing-grid.component.html',\r\n styleUrls: ['./document-processing-grid.component.scss']\r\n})\r\nexport class DocumentProcessingGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private documentProcessingEndpoint: DocumentProcessingEndpoint) {\r\n super(A, 'DocumentProcessingGridComponent', DocumentProcessing, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (!e || !e.data || (e.data as DocumentProcessing).Status === EnumDocumentProcessingStatus.NoData) return;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT_PROCESSING, e.data.EntryID]);\r\n }\r\n\r\n HandleResolve(e, documentProcessing: DocumentProcessing) {\r\n if (e) e.stopPropagation();\r\n\r\n this.documentProcessingEndpoint.UpdateAsResolved({ EntryID: documentProcessing.EntryID } as UpdateAsResolvedParams)\r\n .subscribe({\r\n next: () => {\r\n this.G.Refresh();\r\n },\r\n error: e => { }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{ cell.data.Status | LookupList:LIST('EnumDocumentProcessingStatus') }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{cell.data.DocumentID}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{cell.data.DocumentNumber}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{cell.data.CustomerCardCode}} - {{cell.data.CustomerCardName}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{cell.data.ContactPersonName}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataSourceCustomAction, DataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DocumentProcessingEndpoint } from '@dino-proxy/endpoints/documentprocessing.endpoint';\r\nimport { DocumentProcessingParams } from '@dino-proxy/params/documentprocessing.param';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-processing-list',\r\n templateUrl: './document-processing-list.component.html',\r\n styleUrls: ['./document-processing-list.component.scss']\r\n})\r\nexport class DocumentProcessingListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private documentProcessingEndpoint: DocumentProcessingEndpoint) {\r\n super(A, 'DocumentProcessingListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DocumentProcessings'] = this.GetDataSource();\r\n }\r\n\r\n private GetDataSource(): DataSourceCustomAction {\r\n const params = {\r\n DocumentType: EnumDocumentTypes.None,\r\n } as DocumentProcessingParams;\r\n\r\n const ds = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.documentProcessingEndpoint.ListByParams(params, options),\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n\r\n return ds;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DocumentProcessingEndpoint } from '@dino-proxy/endpoints/documentprocessing.endpoint';\r\nimport { DocumentProcessing } from '@dino-proxy/entities/documentprocessing.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-processing',\r\n templateUrl: './document-processing.component.html',\r\n styleUrls: ['./document-processing.component.scss']\r\n})\r\nexport class DocumentProcessingComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private documentProcessingEndpoint: DocumentProcessingEndpoint) {\r\n super(A, 'DocumentProcessingComponent', DocumentProcessing, State, documentProcessingEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.data.Step | LookupList:LIST('EnumDocumentProcessingSteps') }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-additional-status',\r\n templateUrl: './additional-status.component.html',\r\n styleUrls: ['./additional-status.component.scss']\r\n})\r\nexport class AdditionalStatusComponent extends BaseComponent {\r\n @Input() Value: string;\r\n @Input() Style: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AdditionalStatusComponent', BaseState);\r\n }\r\n\r\n \r\n\r\n getColorByIdx(idx: number) {\r\n if (!this.Style || idx < 0 || idx > 1) return null;\r\n const colors = this.Style.split(';');\r\n if (!colors || !colors.length) return null;\r\n return colors[idx];\r\n }\r\n}\r\n","export default \"
\\r\\n {{ Value }}\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentFilterBySubjects, EnumDocumentStatuses } from '@dino-proxy/enums';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Globals } from 'projects/dino/_globals';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport { DocumentFilterActionPayload } from '@dino-pages/documents/documents.component';\r\n\r\nexport class DocumentFilterValues {\r\n DateFrom: Date;\r\n DateTo: Date;\r\n Status: EnumDocumentStatuses = EnumDocumentStatuses.All;\r\n Subject: EnumDocumentFilterBySubjects = EnumDocumentFilterBySubjects.All;\r\n CustomerID: number;\r\n SalesPersonIDs: number[] = [];\r\n DoInitialize?: boolean = false; \r\n}\r\n\r\nclass State extends BaseState {\r\n SalesPersons: SalesPerson[] = [];\r\n Subjects = [];\r\n IsWideScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-filter',\r\n templateUrl: './document-filter.component.html',\r\n styleUrls: ['./document-filter.component.scss']\r\n})\r\nexport class DocumentFilterComponent extends BaseCustomerComponent {\r\n @Input() Filter: DocumentFilterValues;\r\n @Output() OnFilterValuesChanged = new EventEmitter();\r\n\r\n ReportDateRangesSortedList: any[];\r\n\r\n constructor(A: ServiceBagService,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private uiComponentService: UiComponentService,\r\n customerService: CustomerService) {\r\n super(A, 'DocumentFilterComponent', State, customerService);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.IsSalesPerson) {\r\n this.salesPersonEndpoint.GetListShallow()\r\n .subscribe(response => this.State.SalesPersons = response.Entities);\r\n }\r\n this.DataSources[\"Customers\"] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n\r\n this.SetDefaultDateFilterValues();\r\n this.ReportDateRangesSortedList = this.SortDateRangesList();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(e => e.EventName === UI_EVENTS.DOCUMENT_FILTER_ACTION)\r\n )\r\n .subscribe(e => {\r\n const payload = e.Payload as DocumentFilterActionPayload;\r\n if (payload.DocumentFilterAction === 'apply') {\r\n this.HandleFilterChanged(true);\r\n } else if (payload.DocumentFilterAction === 'clear') {\r\n this.Filter.DoInitialize = true;\r\n this.SetDefaultDateFilterValues();\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n private SetDefaultDateFilterValues() {\r\n this.Filter.DateFrom = Globals.OneYearAgoDate;\r\n this.Filter.DateTo = Globals.Today;\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n SortDateRangesList() {\r\n let list = this.LIST('ReportDateRanges');\r\n let sortedList = [...list].sort((a, b) => a['Order'] - b['Order']);\r\n return sortedList;\r\n }\r\n\r\n HandleFilterChanged(e?) {\r\n if (!this.IsUIEvent(e)) return;\r\n if (this.Filter.Subject === EnumDocumentFilterBySubjects.Customer) {\r\n this.Filter.CustomerID = 0;\r\n }\r\n if (this.Filter.Subject === EnumDocumentFilterBySubjects.Mine) {\r\n this.Filter.SalesPersonIDs = [];\r\n }\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n HandleSalesPersonChange(e) {\r\n // mobile e.event is Always undefined, no need to check UI event.\r\n if (!this.A.Screen.IsMobile()) {\r\n return this.HandleFilterChanged(e);\r\n } else {\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n }\r\n\r\n HandleDateFromChanged(event: any) {\r\n if (!event?.value) return;\r\n this.Filter.DateFrom = new Date(event.value.setHours(0, 0, 0));\r\n }\r\n\r\n HandleDateToChanged(event: any) {\r\n if (!event?.value) return;\r\n this.Filter.DateTo = new Date(event.value.setHours(23, 59, 59, 999));\r\n }\r\n\r\n OnDateRangeChanged(event: any) {\r\n if (!event?.itemData) return;\r\n\r\n this.Filter.DateFrom = event.itemData.DateFrom;\r\n this.Filter.DateTo = event.itemData.DateTo;\r\n }\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number): void {\r\n this.State.Subjects = this.LIST('EnumDocumentFilterBySubjects');\r\n if (!currentCustomerID || currentCustomerID <= 0) {\r\n this.State.Subjects = this.State.Subjects.filter(x => x.Value !== EnumDocumentFilterBySubjects.Customer);\r\n }\r\n }\r\n\r\n private cloneFilter() {\r\n return { ...this.Filter } as DocumentFilterValues;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.CardCode}}
\\r\\n
{{data.CardName}}
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentStatuses } from './../enums';\r\nimport { EnumDocumentFilterBySubjects } from './../enums';\r\nimport { EnumDocumentTypes } from './../enums';\r\nexport class DocumentListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentListParams';\r\n }\r\n \r\n public Status: EnumDocumentStatuses; \r\n public Subject: EnumDocumentFilterBySubjects; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public SalesPersonIDs: number[]; \r\n public CustomerID: number; \r\n public DocumentType: EnumDocumentTypes; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DocumentListParams } from './../params/documentlist.param';\r\nimport { DocumentSummaryEntry } from './../entities/documentsummaryentry.entity';\r\nexport class DocumentSummaryParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentSummaryParams';\r\n }\r\n \r\n public DocumentListParams: DocumentListParams = new DocumentListParams; \r\n public ColumnsToSummarize: DocumentSummaryEntry[] = []; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { EnumDocumentStatuses, EnumDocumentTypes, EnumSummaryTypes } from '@dino-proxy/enums';\r\nimport { DocumentListParams } from '@dino-proxy/params/documentlist.param';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs';\r\nimport { DocumentSummaryEntry } from '@dino-proxy/entities/documentsummaryentry.entity';\r\nimport { DocumentSummaryParams } from '@dino-proxy/params/documentsummary.param';\r\nimport { DocumentSummaryResult } from '@dino-proxy/entities/documentsummaryresult.entity';\r\n\r\nclass State extends BaseState {\r\n DocumentType: EnumDocumentTypes;\r\n Status: EnumDocumentStatuses;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-summary',\r\n templateUrl: './document-grid-summary.component.html',\r\n styleUrls: ['./document-grid-summary.component.scss'],\r\n})\r\nexport class DocumentGridSummaryComponent extends BaseComponent {\r\n @Input() DocumentListParameters: DocumentListParams;\r\n\r\n Summaries: DocumentSummaryResult[];\r\n Payload: any;\r\n\r\n constructor(A: ServiceBagService,\r\n public uiComponentService: UiComponentService,\r\n private documentEndpoint: DocumentEndpoint,\r\n public customerService: CustomerService) {\r\n super(A, 'DocumentGridSummaryComponent', State);\r\n }\r\n\r\n override OnInitComponent(): void {\r\n this.InitEvents();\r\n }\r\n\r\n InitEvents() {\r\n const documentFilterChangeSubscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.DOCUMENT_FILTER_CHANGE)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.Payload = event.Payload as DocumentListParams;\r\n this.GetSummary(this.Payload);\r\n });\r\n\r\n const customerChangedSubscription = this.customerService.customerChanged$\r\n .subscribe(() => {\r\n this.GetSummary(this.Payload);\r\n });\r\n\r\n this.RegisterSubscription(documentFilterChangeSubscription);\r\n this.RegisterSubscription(customerChangedSubscription);\r\n }\r\n\r\n GetSummary(params?: DocumentListParams) {\r\n const documentListParams = params ?? this.DocumentListParameters;\r\n if (!documentListParams) return;\r\n\r\n const summaryParams = new DocumentSummaryParams();\r\n summaryParams.ColumnsToSummarize = this.FillColumnsToSummarize() as DocumentSummaryEntry[];\r\n summaryParams.DocumentListParams = documentListParams;\r\n\r\n this.documentEndpoint.GetColumnSummaryByParams(summaryParams)\r\n .subscribe(response => {\r\n if (response.IsSuccess)\r\n this.Summaries = response.Entities;\r\n });\r\n }\r\n\r\n FillColumnsToSummarize() {\r\n return [\r\n { ColumnName: 'Status', SummaryType: EnumSummaryTypes.Count, Label: this.RC('lblQuantity') },\r\n { ColumnName: 'TotalBeforeVat', SummaryType: EnumSummaryTypes.SumCurrency, Label: this.RC('lblOrderTotalBeforeVat') },\r\n { ColumnName: 'TotalAfterVat', SummaryType: EnumSummaryTypes.SumCurrency, Label: this.RC('lblDocumentTotalAfterVat') }\r\n ];\r\n }\r\n\r\n}","export default \"
\\r\\n
\\r\\n {{ summary.Text }}: \\r\\n {{ summary.Value | formatNumberQuantity }} \\r\\n {{ summary.Value | formatNumberSum }} \\r\\n {{ summary.Currency }}\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { CustomerOption } from '@dino-proxy/entities/customeroption.entity';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n IsSalesPerson: boolean = false;\r\n CustomerOption: CustomerOption;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-grid',\r\n templateUrl: './document-grid.component.html',\r\n styleUrls: ['./document-grid.component.scss']\r\n})\r\nexport class DocumentGridComponent extends BaseGridComponent {\r\n @Input() DocumentType: EnumDocumentTypes;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() DocumentOption: DocumentOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService,\r\n private customerOptionService: CustomerOptionService,\r\n private documentService: DocumentService) {\r\n super(A, 'DocumentGridComponent', DocumentView, State);\r\n }\r\n\r\n get IsFinancial() {\r\n return this.documentService.IsFinancial(this.DocumentType);\r\n }\r\n\r\n protected OnInitComponent() {\r\n this.State.IsSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n this.State.CustomerOption = this.customerOptionService.GetCustomerOption();\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e?.data?.EntryID) this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.EntryID, DocumentType: this.DocumentType });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.TotalBeforeVat | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.TotalAfterVat | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","import { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumItemStockManagementTypes } from '@dino-proxy/enums';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { DocumentBatchLine, DocumentSerialNumberLine } from '@dino-proxy/entities/document.entity';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\n\r\nclass State extends BaseState {\r\n SelectItemCode: string = \"\";\r\n DocumentItems: ItemView[] = [];\r\n FilteredNumbers: DocumentBatchLine[] | DocumentSerialNumberLine[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-document-item-numbers',\r\n templateUrl: './document-item-numbers.component.html',\r\n styleUrls: ['./document-item-numbers.component.scss']\r\n})\r\nexport class DocumentItemNumbersComponent extends BaseComponent {\r\n private _document: DocumentView;\r\n\r\n @Input() NumbersType: EnumItemStockManagementTypes;\r\n \r\n get Document(): DocumentView {\r\n return this._document;\r\n }\r\n @Input() set Document(value: DocumentView) {\r\n this._document = value;\r\n if (value.EntryID) {\r\n //console.log(value.EntryID);\r\n this.InitData();\r\n }\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentItemNumbersComponent', State);\r\n }\r\n\r\n InitData() {\r\n if (this.NumbersType === EnumItemStockManagementTypes.Batch) {\r\n this.State.DocumentItems = this.Document.DocumentItemViews?.filter(item => \r\n item.ItemStockManagementType === EnumItemStockManagementTypes.Batch) || [];\r\n this.State.FilteredNumbers = this.Document.DocumentBatches || [];\r\n } else {\r\n this.State.DocumentItems = this.Document.DocumentItemViews?.filter(item => \r\n item.ItemStockManagementType === EnumItemStockManagementTypes.Serial) || [];\r\n this.State.FilteredNumbers = this.Document.DocumentSerialNumbers || [];\r\n }\r\n }\r\n\r\n HandleItemChanged(event: any) {\r\n if (this.NumbersType === EnumItemStockManagementTypes.Batch) {\r\n if (this.State.SelectItemCode) {\r\n this.State.FilteredNumbers = this.Document.DocumentBatches.filter(b => b.ItemCode === this.State.SelectItemCode);\r\n } else {\r\n this.State.FilteredNumbers = this.Document.DocumentBatches;\r\n }\r\n }\r\n if (this.NumbersType === EnumItemStockManagementTypes.Serial) {\r\n if (this.State.SelectItemCode) {\r\n this.State.FilteredNumbers = this.Document.DocumentSerialNumbers.filter(b => b.ItemCode === this.State.SelectItemCode);\r\n } else {\r\n this.State.FilteredNumbers = this.Document.DocumentSerialNumbers;\r\n }\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumDocumentStatuses, EnumDocumentTypes, EnumPriceDisplayOptions, Enums } from '@dino-proxy/enums';\r\nimport { ContextMenuElement, EntitySavedEventArgs } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UpdateDocumentParams } from '@dino-proxy/params/duplicatedocument.param';\r\nimport { CancelDocumentParams } from '@dino-proxy/params/canceldocument.param';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n Menu: ContextMenuElement[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-list-item',\r\n templateUrl: './document-list-item.component.html',\r\n styleUrls: ['./document-list-item.component.scss']\r\n})\r\nexport class DocumentListItemComponent extends BaseComponent {\r\n EnumPriceDisplayOptions = EnumPriceDisplayOptions;\r\n\r\n @Input() Entity: DocumentView;\r\n @Input() CancelPrompt: MessageBoxDialogComponent;\r\n @Input() ClosePrompt: MessageBoxDialogComponent;\r\n @Input() SearchText: string = null;\r\n @Input() DocumentOption: DocumentOption;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() ShowCustomerNameFirst: boolean;\r\n\r\n public get IsInvoiceOrRefund() {\r\n return this.documentService.IsFinancial(this.Entity?.DocumentType);\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n private documentService: DocumentService) {\r\n super(A, 'DocumentListItemComponent', State);\r\n }\r\n\r\n \r\n\r\n override OnInitComponent() {\r\n this.State.Menu = [\r\n {\r\n text: this.RC('mnuView'),\r\n icon: 'mdi mdi-text-box-search-outline',\r\n onClick: () => this.OnView()\r\n }\r\n ];\r\n\r\n // if (this.Entity.Status === this.Enums.EnumDocumentStatuses.Pending\r\n // && this.State.CustomerOption.OrderOption.IsAllowCancelation) {\r\n // this.State.Menu.push({\r\n // text: this.RC('mnuCancel'),\r\n // icon: 'mdi mdi-cancel',\r\n // onClick: () => this.OnCancelOrder()\r\n // });\r\n // }\r\n }\r\n\r\n OnView() {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: this.Entity?.EntryID, DocumentType: this.Entity?.DocumentType });\r\n }\r\n\r\n // OnDuplicateOrder() {\r\n // const params = { DocumentID: this.Entity.EntryID } as DuplicateDocumentParams;\r\n // this.orderEndpoint.DuplicateDocument(params)\r\n // .subscribe(response => {\r\n // if (response.Data) {\r\n // this.shoppingCartService.load(false);\r\n // }\r\n // });\r\n // }\r\n\r\n // OnCancelOrder() {\r\n // if (this.Entity.Status !== EnumDocumentStatuses.Pending || !this.State.CustomerOption.OrderOption.IsAllowCancelation) return;\r\n\r\n // this.CancelPrompt.ShowDialogShort(() => {\r\n // const params = { DocumentID: this.Entity.EntryID } as CancelDocumentParams;\r\n // this.orderEndpoint.CancelDocument(params)\r\n // .subscribe(() => {\r\n // this.A.SysEvents.NotifyEntitySaved({ Entity: null, Action: null, Type: Order } as EntitySavedEventArgs);\r\n // });\r\n // });\r\n // }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-document-list',\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.scss']\r\n})\r\nexport class DocumentListComponent extends BaseComponent {\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n @ViewChild('cancelPrompt') cancelPrompt: MessageBoxDialogComponent;\r\n @ViewChild('closePrompt') closePrompt: MessageBoxDialogComponent;\r\n\r\n @Input() DataSource: DataSourceCustomAction;\r\n @Input() DocumentOption: DocumentOption;\r\n @Input() PaymentTerms: PaymentTerm[] = [];\r\n @Input() DocumentType: EnumDocumentTypes;\r\n @Input() ShowCustomerNameFirst: boolean = false;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentListComponent', State);\r\n }\r\n\r\n \r\n}\r\n","export default \" \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { EnumDocumentStatuses, EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-status',\r\n templateUrl: './document-status.component.html',\r\n styleUrls: ['./document-status.component.scss']\r\n})\r\nexport class DocumentStatusComponent extends BaseComponent {\r\n @Input() Status: EnumDocumentStatuses;\r\n @Input() Type: EnumDocumentTypes;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentStatusComponent', BaseState);\r\n }\r\n \r\n GetStatusName(): string {\r\n if (!this.Type || !this.Status || this.Type === EnumDocumentTypes.None) return '';\r\n return this.LIST(`Enum${this.Type}Statuses`).find(s => s.Value === this.Status).Text;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{ GetStatusName() }}\\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { DxDataGridComponent } from \"devextreme-angular\";\r\nimport { DocumentView } from \"@dino-proxy/views/document.view\";\r\nimport { BaseDocumentView } from \"@dino-proxy/views/basedocument.view\";\r\n\r\nclass State extends BaseOptionState {\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-related-documents-dialog',\r\n templateUrl: './related-documents-dialog.component.html',\r\n styleUrls: ['./related-documents-dialog.component.scss'],\r\n})\r\nexport class RelatedDocumentsDialogComponent extends BasePageComponent {\r\n @ViewChild(DxDataGridComponent, { static: false }) dataGrid: DxDataGridComponent;\r\n\r\n public RelatedDocuments: BaseDocumentView[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'RelatedDocumentsDialogComponent', DocumentView, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.RC('titleRelatedDocumentsDialog');\r\n }\r\n\r\n OnRowClick(e) {\r\n this.CloseDialogWithSuccess({ DocumentID: e.data.EntryID, DocumentType: e.data.DocumentType });\r\n }\r\n\r\n OnItemClick(document) {\r\n this.CloseDialogWithSuccess({ DocumentID: document.EntryID, DocumentType: document.DocumentType });\r\n }\r\n\r\n GetMenu(document: DocumentView): any {\r\n return [\r\n {\r\n text: this.RC('mnuView'),\r\n icon: 'mdi mdi-text-box-search-outline',\r\n onClick: () => this.OnItemClick(document)\r\n }\r\n ];\r\n }\r\n\r\n GetItemTitle(document: DocumentView): string {\r\n let title = this.LISTITEM('EnumDocumentTypes', document.DocumentType) + ' # ' + document.DocumentNumber;\r\n return title;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Currency }} {{ cell.data.TotalAfterVat | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { DocumentView } from \"@dino-proxy/views/document.view\";\r\nimport { EnumDocumentTypes } from \"@dino-proxy/enums\";\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-share-document-dialog',\r\n templateUrl: './share-document-dialog.component.html',\r\n styleUrls: ['./share-document-dialog.component.scss'],\r\n})\r\nexport class ShareDocumentDialogComponent extends BasePageComponent {\r\n\r\n public DocumentID: number;\r\n public DocumentType: EnumDocumentTypes;\r\n public IsReceipt: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ShareDocumentDialogComponent', DocumentView, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n \r\n HandleShareCompleted() {\r\n this.CloseDialogWithSuccess();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\";","import { CompanyInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\nexport class Helper {\r\n public static GetPriceMainPart(value: number, companyInfo: CompanyInfo) {\r\n return this.GetSplittedPrice(value, companyInfo)[0];\r\n }\r\n\r\n public static GetPriceChangePart(value: number, companyInfo: CompanyInfo) {\r\n return this.GetSplittedPrice(value, companyInfo)[1];\r\n }\r\n\r\n public static GetSplittedPrice(price: number, companyInfo: CompanyInfo) {\r\n if (price == undefined) return ['', ''];\r\n return formatNumber(price, companyInfo.NumberPrice).split(companyInfo.DecimalSeparator);\r\n }\r\n\r\n public static GetPriceMainPartRound(value: number, companyInfo: CompanyInfo) {\r\n if (Math.abs(value) < 0.01) {\r\n value = 0;\r\n }\r\n if (value < 0) {\r\n value *= -1;\r\n return `-${Helper.GetPriceMainPart(value, companyInfo)}`;\r\n }\r\n\r\n return Helper.GetPriceMainPart(value, companyInfo);\r\n }\r\n\r\n public static GetPriceChangePartRound(value: number, companyInfo: CompanyInfo) {\r\n if (Math.abs(value) < 0.01) {\r\n value = 0;\r\n }\r\n if (value < 0) {\r\n value *= -1;\r\n }\r\n return Helper.GetPriceChangePart(value, companyInfo);\r\n }\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumDocumentStatuses, EnumDocumentTypes, EnumShoppingCartItemViewOptions, EnumShowDocumentFilesModes, EnumValidationStatus } from '@dino-proxy/enums';\r\nimport { ShipmentMethod } from '@dino-proxy/entities/shipmentmethod.entity';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PrintBoxDialogComponent } from '@m4u-angular/ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { ContextMenuElement, EntitySavedEventArgs, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataResponse, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { DxDataGridComponent } from \"devextreme-angular/ui/data-grid\";\r\nimport { exportDataGrid } from 'devextreme/excel_exporter';\r\nimport { Workbook } from 'exceljs';\r\nimport saveAs from 'file-saver';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { CancelDocumentParams } from '@dino-proxy/params/canceldocument.param';\r\nimport { UpdateDocumentParams } from '@dino-proxy/params/duplicatedocument.param';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { CustomerEvent, CustomerService } from '@dino-services/customer.service';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CloseDocumentParams } from '@dino-proxy/params/closedocument.param';\r\nimport { CopyToDialogComponent } from '@dino-pages/documents/components/copy-to-dialog/copy-to-dialog.component';\r\nimport { RelatedDocumentsDialogComponent } from '@dino-pages/documents/components/related-documents-dialog/related-documents-dialog.component';\r\nimport { RepeatDocumentParams } from '@dino-proxy/params/repeatdocument.param';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { ShareDocumentDialogComponent } from '../components/share-document-dialog/share-document-dialog.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { DocumentLineDataParams } from '@dino-proxy/params/documentlinedata.param';\r\nimport { CustomerAddress } from '@dino-proxy/entities/customeraddress.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseOptionState {\r\n IsHideItems: boolean;\r\n ShipmentMethods: ShipmentMethod[];\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n IsMobile: boolean;\r\n TotalsExpanded: boolean;\r\n ExportDocumentItems: ItemView[] = [];\r\n DocumentType: EnumDocumentTypes;\r\n DocumentID: number;\r\n DocumentOption: DocumentOption;\r\n AvailableTargetDocumentTypes: EnumDocumentTypes[] = [];\r\n IsCustomerCurrencyAllowedForDuplication: boolean;\r\n IsPaymentExists: boolean = false;\r\n IsPaymentExistsForDocumentCustomer: boolean = false;\r\n ItemDisplayType: EnumShoppingCartItemViewOptions = EnumShoppingCartItemViewOptions.List;\r\n SelectedTabName: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document',\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss']\r\n})\r\nexport class DocumentComponent extends BaseCustomerPageComponent {\r\n @ViewChild('cancelPrompt') cancelPrompt: MessageBoxDialogComponent;\r\n @ViewChild('closePrompt') closePrompt: MessageBoxDialogComponent;\r\n @ViewChild('duplicatePrompt') duplicatePrompt: MessageBoxDialogComponent;\r\n @ViewChild('repeatPrompt') repeatPrompt: MessageBoxDialogComponent;\r\n @ViewChild('editPrompt') editPrompt: MessageBoxDialogComponent;\r\n @ViewChild('notEmptyShoppingCartPrompt') notEmptyShoppingCartPrompt: MessageBoxDialogComponent;\r\n @ViewChild(PrintBoxDialogComponent) dialogPrint: PrintBoxDialogComponent;\r\n @ViewChild(DxDataGridComponent) gridDocumentItems: DxDataGridComponent;\r\n @ViewChild('pcm') pcm: any;\r\n @ViewChild('copyToDialog') copyToDialog: CopyToDialogComponent;\r\n @ViewChild('relatedDocumentsToDialog') relatedDocumentsToDialog: RelatedDocumentsDialogComponent;\r\n @ViewChild('shareDocumentDialog') shareDocumentDialog: ShareDocumentDialogComponent;\r\n @ViewChild('noRelatedPrompt') noRelatedPrompt: MessageBoxDialogComponent;\r\n\r\n Entity: DocumentView;\r\n Customer: Customer;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n DisplayType = DisplayType;\r\n PrintMenuItems: any[] = [];\r\n ContextMenuViewModes: any[] = [];\r\n DocumentItemDisplayTypeStorageKey: string;\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint,\r\n private shoppingCartService: ShoppingCartService,\r\n private documentService: DocumentService,\r\n customerService: CustomerService,\r\n public screenService: ScreenService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private shoppingCartEndpoint: ShoppingCartEndpoint,\r\n private customerOptionService: CustomerOptionService,\r\n private uiComponentService: UiComponentService,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'DocumentComponent', DocumentView, State, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n public get HasCustomer() { return !!this.CustomerID; }\r\n\r\n public get IsInvoiceOrRefund() {\r\n return this.documentService.IsFinancial(this.State.DocumentType);\r\n }\r\n\r\n public get DiscountSum() {\r\n return this.Entity.TotalBeforeDiscount - this.Entity.TotalBeforeVat;\r\n }\r\n\r\n get HasHeaderCustomValues() {\r\n return this.Entity && this.Entity.HeaderFieldValues && Object.keys(this.Entity.HeaderFieldValues).length !== 0;\r\n }\r\n\r\n DocumentAddress: any;\r\n IsUseCustomAddress: boolean;\r\n DocumentContactPerson: any;\r\n\r\n override OnCustomerChanged() {\r\n if (!this.HasCustomer) {\r\n this.State.IsPaymentExists = false;\r\n return;\r\n }\r\n\r\n let getDescriptionAction = this.IsSalesPerson\r\n ? this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.CustomerID)\r\n : this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser();\r\n\r\n getDescriptionAction.subscribe(data => {\r\n this.State.IsPaymentExists = data?.Entity?.DisableShoppingCartChange;\r\n });\r\n }\r\n\r\n override OnInitComponentInternal() {\r\n if (this.QueryParams.DocumentType) this.State.DocumentType = this.QueryParams.DocumentType as EnumDocumentTypes;\r\n if (this.QueryParams.DocumentID) this.State.DocumentID = +this.QueryParams.DocumentID;\r\n if (!this.State.DocumentID || !this.State.DocumentType) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n this.DocumentItemDisplayTypeStorageKey = `DocumentItemDisplayType_${this.State.IsMobile ? 'mobile' : 'desktop'}`;\r\n\r\n const documentTypePerm = this.documentService.IsDocumentTypeAvailable(this.State.DocumentType);\r\n if (!documentTypePerm.IsAllowView) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n this.State.DocumentOption = this.documentService.GetDocumentOptionByType(this.State.DocumentType);\r\n\r\n super.OnInitComponentInternal();\r\n }\r\n\r\n override OnInitTitle() {\r\n return `${this.RC('lblDocument' + this.State.DocumentType)} ${this.Entity && this.Entity.DocumentNumber ? this.Entity.DocumentNumber.toString() : ''}`;\r\n }\r\n\r\n override OnInitSubtitle() {\r\n if (this.IsSalesPerson) {\r\n return !!this.Customer ? `${this.Customer.CardName} - ${this.Customer.CardCode}` : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n //this.InitViewModes();\r\n\r\n this.documentEndpoint.GetDocument(this.State.DocumentID, this.State.DocumentType)\r\n .subscribe(response => {\r\n if (!response.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n return;\r\n }\r\n\r\n this.Entity = response.Entity as DocumentView;\r\n this.DefineCustomerAddress();\r\n this.DefineContactPerson();\r\n this.State.AvailableTargetDocumentTypes = this.GetAvailableTargetDocumentTypes();\r\n const shipmentOptionMethod = this.State.CustomerOption.ShipmentOption.Methods\r\n .find(x => x.ShipmentMethodID === this.Entity.ShipmentMethodID)\r\n this.State.ShipmentMethods = shipmentOptionMethod ? [shipmentOptionMethod.ShipmentMethod] : [];\r\n this.State.ExportDocumentItems = Utils.CloneObject(this.Entity.DocumentItemViews);\r\n\r\n this.State.ExportDocumentItems.push({\r\n DocumentCurrencySymbol: this.RC('lblDocumentCurrencySymbol'),\r\n TotalBeforeVat: this.RC('lblTotalBeforeVAT'),\r\n TotalAfterVat: this.RC('lblTotalAfterVAT'),\r\n TotalDiscount: this.RC('lblTotals_DiscountSum')\r\n } as any);\r\n\r\n // fix for correct display negative values\r\n let discountSum = this.DiscountSum;\r\n if (Math.abs(discountSum) < 0.01) {\r\n discountSum = 0;\r\n }\r\n const discountValue = discountSum < 0 ? discountSum * -1 : discountSum;\r\n\r\n this.State.ExportDocumentItems.push({\r\n DocumentCurrencySymbol: this.Entity.Currency,\r\n TotalBeforeVat: this.Entity.TotalBeforeVat,\r\n TotalAfterVat: this.Entity.TotalAfterVat,\r\n TotalDiscount: +`${discountSum < 0 ? '-' : ''}${Helper.GetPriceMainPart(discountValue, this.F)}.${Helper.GetPriceChangePart(discountValue, this.F)}`\r\n } as any);\r\n\r\n this.PrintMenuItems.push({\r\n key: 'Print',\r\n label: this.RC('lblPrintOrder'),\r\n command: () => {\r\n this.Entity?.HasDocumentPDF && this.HandleGetPDF();\r\n }\r\n });\r\n\r\n let tabs = Utils.CloneObject(this.LIST('DocumentDetailsTabs') as any[]);\r\n\r\n if (this.Entity.DocumentBatches.length === 0) {\r\n tabs = tabs.filter(x => x.Name !== 'BatchesTab');\r\n }\r\n\r\n if (this.Entity.DocumentSerialNumbers.length === 0) {\r\n tabs = tabs.filter(x => x.Name !== 'SerialNumbersTab');\r\n }\r\n\r\n if (this.State.DocumentOption?.ShowFilesMode === EnumShowDocumentFilesModes.None\r\n || this.State.DocumentOption?.ShowFilesMode === EnumShowDocumentFilesModes.Vito) { // TEMP\r\n tabs = tabs.filter(x => x.Name !== 'FilesTab');\r\n } else if (this.State.DocumentOption?.ShowFilesMode === EnumShowDocumentFilesModes.DocumentOne) {\r\n const fileTab = tabs.find(x => x.Name === 'FilesTab') as GenericListEntity;\r\n fileTab && ((fileTab as any).text = this.RC('lblDocumentOneFilesTabName'));\r\n }\r\n\r\n // if (this.Entity.DocumentBatches.length > 0 && this.Entity.DocumentSerialNumbers.length > 0) {\r\n // tabs = allTabs;\r\n // } else if (this.Entity.DocumentBatches.length > 0) {\r\n // tabs = allTabs.filter(t => t.index !== 3);\r\n // } else if (this.Entity.DocumentSerialNumbers.length > 0) {\r\n // tabs = allTabs.filter(t => t.index !== 2);\r\n // } else {\r\n // tabs = allTabs.filter(t => t.index === 0 || t.index === 1)\r\n // }\r\n\r\n this.State.Tabs = tabs;\r\n\r\n this.RegisterSubscription(this.customerService.customerChanged$\r\n .subscribe((customerEvent: CustomerEvent) => {\r\n this.CheckDuplicationAccessByCurrencies(customerEvent);\r\n }));\r\n\r\n if (this.IsSalesPerson) {\r\n this.customerEndpoint.GetShallow(this.Entity.CustomerID).subscribe(response => {\r\n this.Customer = response.Entity;\r\n this.ReloadToolbar();\r\n });\r\n }\r\n\r\n this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.Entity.CustomerID).subscribe(r => {\r\n this.State.IsPaymentExistsForDocumentCustomer = r.Entity?.DisableShoppingCartChange;\r\n this.ReloadToolbar();\r\n });\r\n });\r\n }\r\n\r\n\r\n DefineCustomerAddress() {\r\n this.DocumentAddress = {\r\n Country: this.Entity.ShipToCountry,\r\n State: this.Entity.ShipToState,\r\n City: this.Entity.ShipToCity,\r\n Street: this.Entity.ShipToStreet,\r\n ZipCode: this.Entity.ShipToZipCode,\r\n FullAddress: this.Entity.ShipToFullAddress,\r\n DocumentCustomerID: this.Entity.CustomerID\r\n };\r\n this.IsUseCustomAddress = !!this.DocumentAddress.FullAddress;\r\n }\r\n\r\n DefineContactPerson() {\r\n this.DocumentContactPerson = {\r\n ContactPersonPosition: this.Entity.ContactPersonPosition,\r\n ContactPersonEmail: this.Entity.ContactPersonEmail,\r\n ContactPersonPhone: this.Entity.ContactPersonPhone,\r\n ContactPersonCellular: this.Entity.ContactPersonCellular,\r\n DocumentCustomerID: this.Entity.CustomerID\r\n };\r\n }\r\n\r\n GetDocumentLineData(itemView) {\r\n const documentLineData = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType,\r\n //DocumentLineID: todo replace warehouseID usage with passing LineID and parsing it on the backend (in GetItem)\r\n //This will require to change how elements are rendered in the document component\r\n WarehouseID: itemView.WarehouseID\r\n } as DocumentLineDataParams;\r\n\r\n return documentLineData;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.IsHideItems = true;\r\n const allTabs = this.LIST('DocumentDetailsTabs') as any[];\r\n this.State.Tabs = allTabs.filter(t => t.index === 0 || t.index === 1)\r\n }\r\n\r\n public override OnIsDirtyDisabled() {\r\n return true;\r\n }\r\n\r\n CanCancel() {\r\n return !!this.Entity\r\n && this.Entity.Status === EnumDocumentStatuses.Pending\r\n && this.State.DocumentOption?.IsAllowCancelation\r\n && !this.Entity.IsDraft\r\n && (this.Entity.DocumentType === EnumDocumentTypes.Order || this.Entity.DocumentType === EnumDocumentTypes.Quote\r\n || this.Entity.DocumentType === EnumDocumentTypes.ReturnRequest);\r\n }\r\n\r\n CanClose() {\r\n return !!this.Entity\r\n && this.Entity.Status === EnumDocumentStatuses.Pending\r\n && this.State.DocumentOption?.IsAllowClose\r\n && !this.Entity.IsDraft\r\n && (this.Entity.DocumentType === EnumDocumentTypes.Order || this.Entity.DocumentType === EnumDocumentTypes.Quote\r\n || this.Entity.DocumentType === EnumDocumentTypes.ReturnRequest || this.Entity.DocumentType === EnumDocumentTypes.DeliveryNote\r\n || this.Entity.DocumentType === EnumDocumentTypes.Return);\r\n }\r\n\r\n CheckDuplicationAccessByCurrencies(customerEvent: CustomerEvent) {\r\n if (!this.HasCustomer) {\r\n this.State.IsCustomerCurrencyAllowedForDuplication = false;\r\n return;\r\n }\r\n\r\n this.State.IsCustomerCurrencyAllowedForDuplication = this.Entity.Currency === customerEvent.customerActualCurrency;\r\n }\r\n\r\n CanDuplicate() {\r\n return !!this.Entity\r\n && this.HasCustomer\r\n && !this.State.IsPaymentExists\r\n && this.State.DocumentOption?.IsAllowDuplication\r\n && this.State.IsCustomerCurrencyAllowedForDuplication;\r\n }\r\n\r\n CanRepeat() {\r\n return !!this.Entity\r\n && this.HasCustomer\r\n && !this.State.IsPaymentExists\r\n && this.State.DocumentOption?.IsAllowRepeat;\r\n }\r\n\r\n CanCopyTo() {\r\n return !!this.Entity\r\n && this.Entity.Status === EnumDocumentStatuses.Pending\r\n && !this.Entity.IsDraft\r\n && this.State.AvailableTargetDocumentTypes.length > 0\r\n && this.Entity.Confirmed\r\n && this.Entity.DocumentItemViews?.length > 0\r\n && this.Entity.DocumentItemViews.some(i => i.Opened)\r\n && !this.State.IsPaymentExistsForDocumentCustomer\r\n && (this.IsSalesPerson ? this.Customer?.IsActive : true)\r\n && (this.State.CustomerOption?.FeatureOption?.IsEnableCatalogue || this.State.CustomerOption?.FeatureOption?.IsEnableCheckout);\r\n }\r\n\r\n CanEdit() {\r\n return !!this.Entity\r\n && this.Entity.Status === EnumDocumentStatuses.Pending\r\n && this.State.DocumentOption?.IsAllowEdit\r\n && (this.Entity.DocumentType === EnumDocumentTypes.Quote || this.Entity.DocumentType === EnumDocumentTypes.Order)\r\n && !(this.Entity.DocumentItemViews?.length > 0 && this.Entity.DocumentItemViews.some(i => !i.Opened))\r\n && !this.State.IsPaymentExistsForDocumentCustomer\r\n && (this.IsSalesPerson ? this.Customer?.IsActive : true);\r\n }\r\n\r\n HandleCancelDocument() {\r\n if (!this.CanCancel()) return;\r\n\r\n this.cancelPrompt.ShowDialogShort(() => {\r\n const params = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType\r\n } as CancelDocumentParams;\r\n\r\n this.documentEndpoint.CancelDocument(params)\r\n .subscribe(res => {\r\n if (!res.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(res.ResponseMessage);\r\n return;\r\n }\r\n\r\n this.A.SysEvents.NotifyEntitySaved({ Type: DocumentView, Action: null, Entity: null } as EntitySavedEventArgs);\r\n this.documentService.NotifyDocumentUpdated(this.Entity.DocumentType, null);\r\n this.ClosePage();\r\n });\r\n });\r\n }\r\n\r\n HandleCloseDocument() {\r\n if (!this.CanClose()) return;\r\n\r\n this.closePrompt.ShowDialogShort(() => {\r\n const params = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType\r\n } as CloseDocumentParams;\r\n\r\n this.documentEndpoint.CloseDocument(params)\r\n .subscribe(res => {\r\n if (!res.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(res.ResponseMessage);\r\n return;\r\n }\r\n\r\n this.A.SysEvents.NotifyEntitySaved({ Type: DocumentView, Action: null, Entity: null } as EntitySavedEventArgs);\r\n this.documentService.NotifyDocumentUpdated(this.Entity.DocumentType, null);\r\n this.ClosePage();\r\n });\r\n });\r\n }\r\n\r\n HandleDuplicateDocument() {\r\n if (!this.CanDuplicate()) return;\r\n\r\n let duplicateAction = () => {\r\n const params = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType,\r\n IsEditExisting: false\r\n } as UpdateDocumentParams;\r\n\r\n this.documentEndpoint.UpdateDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART], { ShoppingCartDisplayMode: 'checkout' });\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n }\r\n\r\n let getDescriptionAction = this.IsSalesPerson ? this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.CustomerID) : this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser();\r\n\r\n getDescriptionAction.subscribe(data => {\r\n this.duplicatePrompt.ShowDialogShort(() => {\r\n if (data?.Entity?.Length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => duplicateAction())\r\n } else {\r\n duplicateAction();\r\n }\r\n });\r\n });\r\n }\r\n\r\n HandleRepeatDocument() {\r\n if (!this.CanRepeat()) return;\r\n\r\n const repeatAction = () => {\r\n const params = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType\r\n } as RepeatDocumentParams;\r\n\r\n this.documentEndpoint.RepeatDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART], { ShoppingCartDisplayMode: 'checkout' });\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n };\r\n\r\n const getDescriptionAction = this.IsSalesPerson\r\n ? this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.CustomerID)\r\n : this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser();\r\n\r\n getDescriptionAction.subscribe(data => {\r\n this.repeatPrompt.ShowDialogShort(() => {\r\n if (data?.Entity?.Length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => repeatAction());\r\n } else {\r\n repeatAction();\r\n }\r\n });\r\n });\r\n }\r\n\r\n HandleGetPDF() {\r\n if (!this.Entity?.HasDocumentPDF) return;\r\n\r\n this.dialogPrint.FileName = `${this.Entity.EntryID}`;\r\n this.dialogPrint.Title = `${this.LIST('EnumDocumentTypes').find(x => x.Value === this.Entity.DocumentType).Text} N ${this.Entity.DocumentNumber}`;\r\n this.dialogPrint.ShowDialogShort(undefined);\r\n\r\n this.documentEndpoint.GetPdfByCurrentUrl(this.Entity.EntryID, this.Entity.DocumentType)\r\n .subscribe((response: BaseDataResponse) => {\r\n if (response.IsSuccess) {\r\n this.dialogPrint.PDFData = (response.Data as unknown) as string;\r\n } else {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n this.dialogPrint.CloseDialogWithCancel();\r\n }\r\n });\r\n }\r\n\r\n HandleToggleTotals() {\r\n this.State.TotalsExpanded = !this.State.TotalsExpanded;\r\n }\r\n\r\n HandleSwipeTotals(dest: 'up' | 'down') {\r\n if (dest === 'up') this.State.TotalsExpanded = true;\r\n if (dest === 'down') this.State.TotalsExpanded = false;\r\n }\r\n\r\n HandleClickError(e) {\r\n e && e.stopPropagation();\r\n }\r\n\r\n HandleExportDocumentItems() {\r\n setTimeout(async () => {\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet('Items');\r\n\r\n await exportDataGrid({\r\n component: this.gridDocumentItems.instance,\r\n worksheet: worksheet,\r\n ...this.gridDocumentItems.export,\r\n customizeCell: (options) => {\r\n const { gridCell, excelCell } = options;\r\n\r\n if (gridCell.rowType === 'data') {\r\n if (['DocumentCurrencySymbol', 'TotalBeforeVat', 'TotalAfterVat', 'TotalDiscount']\r\n .includes(gridCell.column.dataField)) {\r\n excelCell.font = { bold: true };\r\n }\r\n }\r\n }\r\n });\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Document_${this.Entity.DocumentNumber}.xlsx`);\r\n }, 100);\r\n }\r\n\r\n HandleCopyTo() {\r\n if (!this.CanCopyTo()) return;\r\n this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.Entity.CustomerID).subscribe(data => {\r\n const itemsExistsInCustomer = data?.Entity?.Length > 0;\r\n this.copyToDialog.SetupComponent(this.State.AvailableTargetDocumentTypes, itemsExistsInCustomer);\r\n this.copyToDialog.ShowDialogShort((path: string) => {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n path,\r\n (route) => this.Navigate([route])\r\n );\r\n }, () => { }, false, this.Entity);\r\n });\r\n }\r\n\r\n HandleEdit() {\r\n if (!this.CanEdit()) return;\r\n\r\n const editAction = () => {\r\n const params = {\r\n DocumentID: this.Entity.EntryID,\r\n DocumentType: this.Entity.DocumentType,\r\n IsEditExisting: true\r\n } as UpdateDocumentParams;\r\n\r\n this.documentEndpoint.UpdateDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.Navigate(['pages/shoppingcartN'], { ShoppingCartDisplayMode: 'checkout' });\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n };\r\n\r\n const editCheckAction = () => {\r\n if (this.IsSalesPerson && this.Entity.CustomerID != this.customerService.GetCustomerID()) {\r\n this.customerService.SetCustomer(this.Entity.CustomerID)\r\n .subscribe(() => {\r\n editAction();\r\n });\r\n } else {\r\n editAction();\r\n }\r\n }\r\n\r\n const getDescriptionAction = this.IsSalesPerson\r\n ? this.shoppingCartEndpoint.GetDescriptionByCustomerID(this.CustomerID)\r\n : this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser();\r\n\r\n getDescriptionAction.subscribe(data => {\r\n this.editPrompt.ShowDialogShort(() => {\r\n if (data?.Entity?.Length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => editCheckAction());\r\n } else {\r\n editCheckAction();\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n HandleShowRelatedDocuments() {\r\n this.documentEndpoint.GetRelatedDocuments(this.Entity.EntryID, this.Entity.DocumentType).subscribe(response => {\r\n const documents = response.Data || [];\r\n if (documents.length > 0) {\r\n this.relatedDocumentsToDialog.RelatedDocuments = documents;\r\n this.relatedDocumentsToDialog.ShowDialogShort((params) => {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], params);\r\n }, null, false, this.Entity);\r\n } else {\r\n this.noRelatedPrompt.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n\r\n HandleShare() {\r\n this.shareDocumentDialog.DocumentID = this.Entity?.EntryID;\r\n this.shareDocumentDialog.DocumentType = this.Entity?.DocumentType;\r\n this.shareDocumentDialog.ShowDialogShort(() => {\r\n\r\n }, null, false, this.Entity);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n settings.IsAllowPrint = (this.Entity?.HasDocumentPDF) && !this.State.IsMobile;\r\n settings.OnPrintButtonClick = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (this.Entity?.HasDocumentPDF && !this.State.IsMobile && this.pcm) {\r\n this.pcm.show(e);\r\n return;\r\n }\r\n\r\n this.HandleGetPDF();\r\n };\r\n // settings.ShowBackButton = this.A.Screen.IsMobile();\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n const menu = [];\r\n\r\n this.InitViewModes(menu);\r\n menu.push({\r\n separator: true\r\n });\r\n\r\n if (this.CanEdit()) {\r\n menu.push({\r\n text: this.RC('btnEditDocument'),\r\n icon: 'mdi mdi-file-document-edit-outline',\r\n onClick: () => this.HandleEdit()\r\n });\r\n }\r\n\r\n if (this.CanCancel()) {\r\n menu.push({\r\n text: this.RC('btnCancelDocument'),\r\n icon: 'mdi mdi-cancel',\r\n onClick: () => this.HandleCancelDocument()\r\n });\r\n }\r\n\r\n if (this.CanClose()) {\r\n menu.push({\r\n text: this.RC('btnCloseDocument'),\r\n icon: 'mdi mdi-close-circle-outline',\r\n onClick: () => this.HandleCloseDocument()\r\n });\r\n }\r\n\r\n if (this.CanDuplicate()) {\r\n menu.push({\r\n text: this.RC('btnDuplicateDocument'),\r\n icon: 'mdi mdi-content-copy',\r\n onClick: () => this.HandleDuplicateDocument()\r\n });\r\n }\r\n\r\n if (this.CanRepeat()) {\r\n menu.push({\r\n text: this.RC('btnRepeatDocument'),\r\n icon: 'mdi mdi-calendar-sync-outline',\r\n onClick: () => this.HandleRepeatDocument()\r\n });\r\n }\r\n\r\n if (this.CanCopyTo()) {\r\n menu.push({\r\n text: this.RC('btnCopyToDocument'),\r\n icon: 'mdi mdi-file-document-multiple-outline',\r\n onClick: () => this.HandleCopyTo()\r\n });\r\n }\r\n\r\n menu.push({\r\n text: this.RC('btnRelatedDocuments'),\r\n icon: 'mdi mdi-file-code-outline',\r\n onClick: () => this.HandleShowRelatedDocuments()\r\n });\r\n\r\n if (!!this.Customer && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n menu.push({\r\n text: this.RC('btnViewCustomer'),\r\n icon: 'mdi mdi-card-account-details-star-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW, this.Customer.EntryID])\r\n });\r\n }\r\n\r\n if (this.State.IsMobile) {\r\n menu.push({\r\n text: this.RC('lblExportOrderItems'),\r\n icon: 'mdi mdi-microsoft-excel',\r\n onClick: () => this.HandleExportDocumentItems()\r\n });\r\n }\r\n\r\n if (this.State.DocumentOption?.IsShowShareExistingDocument && this.State.IsMobile && this.Entity?.IsAllowShare) {\r\n menu.push({\r\n text: this.RC('lblShareDocument'),\r\n icon: 'mdi mdi-share-variant-outline',\r\n onClick: () => this.HandleShare()\r\n });\r\n }\r\n\r\n return menu;\r\n };\r\n\r\n private GetAvailableTargetDocumentTypes(): EnumDocumentTypes[] {\r\n const availableDocumentTypes: EnumDocumentTypes[] = [];\r\n\r\n const customerOptions = this.customerOptionService.GetCustomerOption();\r\n switch (this.Entity.DocumentType) {\r\n case EnumDocumentTypes.Quote:\r\n if (customerOptions.OrderOption?.IsAllowBaseDocument && customerOptions.OrderOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Order);\r\n if (customerOptions.DeliveryNoteOption?.IsAllowBaseDocument && customerOptions.DeliveryNoteOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n if (customerOptions.InvoiceOption?.IsAllowBaseDocument && customerOptions.InvoiceOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n break;\r\n case EnumDocumentTypes.Order:\r\n if (customerOptions.DeliveryNoteOption?.IsAllowBaseDocument && customerOptions.DeliveryNoteOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n if (customerOptions.InvoiceOption?.IsAllowBaseDocument && customerOptions.InvoiceOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n break;\r\n case EnumDocumentTypes.Invoice:\r\n if (customerOptions.RefundOption?.IsAllowBaseDocument && customerOptions.RefundOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Refund);\r\n if (customerOptions.ReturnRequestOption?.IsAllowBaseDocument && customerOptions.ReturnRequestOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.ReturnRequest);\r\n break;\r\n case EnumDocumentTypes.DeliveryNote:\r\n if (customerOptions.InvoiceOption?.IsAllowBaseDocument && customerOptions.InvoiceOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n if (customerOptions.ReturnRequestOption?.IsAllowBaseDocument && customerOptions.ReturnRequestOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.ReturnRequest);\r\n if (customerOptions.ReturnOption?.IsAllowBaseDocument && customerOptions.ReturnOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Return);\r\n break;\r\n case EnumDocumentTypes.Refund:\r\n break;\r\n case EnumDocumentTypes.Return:\r\n if (customerOptions.RefundOption?.IsAllowBaseDocument && customerOptions.RefundOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Refund);\r\n if (customerOptions.DeliveryNoteOption?.IsAllowBaseDocument && customerOptions.DeliveryNoteOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n break;\r\n case EnumDocumentTypes.ReturnRequest:\r\n if (customerOptions.ReturnOption?.IsAllowBaseDocument && customerOptions.ReturnOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Return);\r\n if (customerOptions.RefundOption?.IsAllowBaseDocument && customerOptions.RefundOption?.IsAllowNew) availableDocumentTypes.push(EnumDocumentTypes.Refund);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return availableDocumentTypes;\r\n }\r\n\r\n HandleSelectViewMode(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n InitViewModes(menu: any[]) {\r\n const itemOption = this.State.CustomerOption?.DefaultItemOption;\r\n\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(this.DocumentItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.State.ItemDisplayType = this.State.IsMobile\r\n ? itemOption.DefaultFinalizedDocumentMobileItemViewOption\r\n : itemOption.DefaultFinalizedDocumentDesktopItemViewOption;\r\n }\r\n }\r\n\r\n const isDesktop = !this.screenService.IsMobile();\r\n const isEnableListView = isDesktop\r\n ? !!itemOption?.FinalizedDocumentListDesktopOption\r\n : !!itemOption?.FinalizedDocumentListMobileOption;\r\n\r\n const isEnableCompactView = isDesktop\r\n ? !!itemOption?.FinalizedDocumentCompactDesktopOption\r\n : !!itemOption?.FinalizedDocumentCompactMobileOption;\r\n\r\n const isEnableLineView = isDesktop\r\n ? !!itemOption?.FinalizedDocumentLineDesktopOption\r\n : !!itemOption?.FinalizedDocumentLineMobileOption;\r\n\r\n (isEnableListView) && menu.push({\r\n //label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.List) }\r\n text: this.RC('lblViewList2'),\r\n icon: 'mdi mdi-view-list',\r\n onClick: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.List)\r\n });\r\n\r\n (isEnableCompactView) && menu.push({\r\n // label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Compact) }\r\n text: this.RC('lblViewCompact'),\r\n icon: 'mdi mdi-subtitles-outline',\r\n onClick: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Compact)\r\n });\r\n\r\n (isEnableLineView) && menu.push({\r\n // label: this.RC('lblViewUltraCompact'), icon: 'mdi mdi-minus', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Line) }\r\n text: this.RC('lblViewUltraCompact'),\r\n icon: 'mdi mdi-minus',\r\n onClick: () => this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Line)\r\n });\r\n }\r\n\r\n HandleChangeViewMode(itemDisplayType: EnumShoppingCartItemViewOptions) {\r\n this.State.ItemDisplayType = itemDisplayType;\r\n // ??? localStorage\r\n this.localStorageService.SetItem(this.DocumentItemDisplayTypeStorageKey, itemDisplayType);\r\n }\r\n\r\n GetViewModeIcon() {\r\n if (this.State.ItemDisplayType === EnumShoppingCartItemViewOptions.List) return 'mdi mdi-view-list';\r\n if (this.State.ItemDisplayType === EnumShoppingCartItemViewOptions.Compact) return 'mdi mdi-subtitles-outline';\r\n if (this.State.ItemDisplayType === EnumShoppingCartItemViewOptions.Line) return 'mdi mdi-minus';\r\n return 'mdi mdi-view-headline';\r\n }\r\n\r\n GetSourceText() {\r\n return this.LIST('EnumDocumentSource').find(s => s.Value === this.Entity.Source).Text;\r\n }\r\n\r\n HandleSelectedIndexChange(index: number) {\r\n this.State.SelectedTabName = (this.State.Tabs[index])?.Name;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n 0\\\"\\r\\n [model]=\\\"PrintMenuItems\\\" \\r\\n appendTo=\\\"body\\\">\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{DiscountSum}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentStatuses, EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DocumentListParams } from '@dino-proxy/params/documentlist.param';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { DocumentGridComponent } from './components/document-grid/document-grid.component';\r\nimport { PaymentTerm } from '@dino-proxy/entities/paymentterm.entity';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { DocumentFilterValues } from './components/document-filter/document-filter.component';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nexport type DocumentFilterActionPayload = { DocumentFilterAction: 'apply' | 'clear' };\r\n\r\nclass State extends BaseState {\r\n DocumentType: EnumDocumentTypes;\r\n SalesPersonOption: SalesPersonOption;\r\n Status: EnumDocumentStatuses = EnumDocumentStatuses.All;\r\n IsLoadedInitialy: boolean;\r\n PaymentTerms: PaymentTerm[];\r\n Filter: DocumentFilterValues;\r\n DocumentOption: DocumentOption;\r\n IsWideScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-documents',\r\n templateUrl: './documents.component.html',\r\n styleUrls: ['./documents.component.scss'],\r\n})\r\nexport class DocumentsComponent extends BaseCustomerPageComponent {\r\n @ViewChild(DocumentGridComponent) grid: DocumentGridComponent;\r\n DocumentListParameters: DocumentListParams;\r\n\r\n constructor(A: ServiceBagService,\r\n customerService: CustomerService,\r\n private documentEndpoint: DocumentEndpoint,\r\n private documentService: DocumentService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'DocumentsComponent', BaseEntity, State, customerService);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadDataSource(true);\r\n }\r\n\r\n public get HasCustomer() {\r\n return !!this.CustomerID;\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.State.DocumentType ? this.RC('lblDocument' + this.State.DocumentType + 's') : '';\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.QueryParams.ObjectType)\r\n this.State.DocumentType = this.QueryParams.ObjectType as EnumDocumentTypes;\r\n\r\n this.InitFilter();\r\n\r\n if (!this.State.DocumentType) {\r\n this.Navigate([ROUTE_PATHS.ORDERS], { ObjectType: EnumDocumentTypes.Order });\r\n this.A.RouteHistoryService.ClearHistory();\r\n }\r\n\r\n const updatedSubscription = this.documentService.updated$\r\n .subscribe(e => {\r\n if (e.Type === this.State.DocumentType) {\r\n this.LoadDataSource(false);\r\n }\r\n });\r\n this.RegisterSubscription(updatedSubscription);\r\n\r\n this.LoadDataSource(true);\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n LoadDataSource(initial: boolean) {\r\n this.DataSources['Documents'] = null;\r\n if (!this.State.DocumentType) return;\r\n\r\n // Initial/Customer changed loading should ALWAYS contains DateFrom/DateTo\r\n if (initial && (this.State.Filter?.DateFrom == null || this.State.Filter?.DateTo == null)) return;\r\n\r\n const documentTypePerm = this.documentService.IsDocumentTypeAvailable(this.State.DocumentType);\r\n if (!documentTypePerm.IsAllowView) return;\r\n\r\n const dataSource = this.GetDataSource();\r\n this.DataSources['Documents'] = dataSource;\r\n this.customerEndpoint.GetPaymentTerms().subscribe(response => this.State.PaymentTerms = response.Entities);\r\n this.State.DocumentOption = this.documentService.GetDocumentOptionByType(this.State.DocumentType);\r\n }\r\n\r\n HandleFilterValuesChanged(e: DocumentFilterValues) {\r\n this.State.Filter = e;\r\n this.State.Filter.DoInitialize && this.InitFilter();\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.DOCUMENT_FILTER_CHANGE,\r\n {\r\n ...this.State.Filter, ... {\r\n DocumentType: this.State.DocumentType,\r\n Status: this.State.Filter.Status,\r\n }\r\n } as DocumentListParams);\r\n this.LoadDataSource(false);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowExport: !this.A.Screen.IsMobile(),\r\n GridExtender: this.grid?.G,\r\n IsAllowFilter: !this.State.IsWideScreen\r\n } as ToolbarSettings;\r\n }\r\n\r\n private GetDataSource(): DataSourceCustomAction {\r\n const params = {\r\n ...this.State.Filter, ... {\r\n DocumentType: this.State.DocumentType,\r\n Status: this.State.Filter.Status,\r\n }\r\n } as DocumentListParams;\r\n\r\n this.DocumentListParameters = params;\r\n\r\n const ds = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.documentEndpoint.GetListByParams(params, options),\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n\r\n return ds;\r\n }\r\n\r\n private InitFilter() {\r\n this.State.Filter = new DocumentFilterValues();\r\n if (this.QueryParams.CustomerID) {\r\n this.State.Filter.CustomerID = +this.QueryParams.CustomerID;\r\n }\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.DOCUMENT_FILTER_ACTION, { DocumentFilterAction: 'apply' } as DocumentFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.DOCUMENT_FILTER_ACTION, { DocumentFilterAction: 'clear' } as DocumentFilterActionPayload);\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\nimport { BaseEntity, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { ExternalLink } from '@dino-proxy/entities/externallink.entity';\r\n\r\nclass State extends BaseOptionState {\r\n UrlSafe: SafeResourceUrl;\r\n Title: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-link',\r\n templateUrl: './external-link.component.html',\r\n styleUrls: ['./external-link.component.scss']\r\n})\r\nexport class ExternalLinkComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer,\r\n public externalLinkEndpoint: ExternalLinkEndpoint) {\r\n super(A, 'ExternalLinkComponent', BaseEntity, State);\r\n }\r\n\r\n override GetTitle() {\r\n return this.State.Title || this.RC('Pages.ExternalLinkComponent');\r\n }\r\n\r\n override OnInitState() {\r\n this.State.UrlSafe = this.sanitizer.bypassSecurityTrustResourceUrl('');\r\n }\r\n\r\n override OnInitComponent() {\r\n const entryID = this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n this.Do(this.externalLinkEndpoint.Get(entryID), false, (response: BaseEntityResponse) => {\r\n this.State.Title = response.Entity['Title' + SysGlobals.Language];\r\n this.NotifyReloadTitle();\r\n this.State.UrlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(response.Entity.Link);\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumExternalQueryType } from './../enums';\r\nimport { EnumExternalQueryFieldFormats } from './../enums';\r\nexport class ExternalQuery extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalQuery';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public TitleEN: string; \r\n public TitleHE: string; \r\n public MenuNameEN: string; \r\n public MenuNameHE: string; \r\n public ViewName: string; \r\n public IsActive: boolean; \r\n public TopRows: number; \r\n public Type: EnumExternalQueryType; \r\n public Fields: ExternalQueryField[] = []; \r\n\t\r\n}\r\n\r\nexport class ExternalQueryField extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalQueryField';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public Text: string; \r\n public IsAlwaysLTR: boolean; \r\n public Format: EnumExternalQueryFieldFormats; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { IGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntityResponse, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { GridExtender } from \"@m4u-angular/base/grid/Grid.extender\";\r\nimport { ExternalQuery, ExternalQueryField } from \"@dino-proxy/entities/externalquery.entity\";\r\nimport { ExternalQueryDataRow } from \"@dino-proxy/entities/externalquerydatarow.entity\";\r\nimport { ExternalQueryResult } from \"@dino-proxy/entities/externalqueryresult.entity\";\r\nimport { EnumExternalQueryFieldFormats } from \"@dino-proxy/enums\";\r\nimport { DxDataGridComponent } from \"devextreme-angular/ui/data-grid\";\r\nimport { ExternalQueryEndpoint } from \"@dino-proxy/endpoints/externalquery.endpoint\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { SysGlobals } from \"@m4u-angular/core/framework/sysglobals\";\r\n\r\nclass State extends BaseState {\r\n ExternalQueryResult: ExternalQueryResult;\r\n Data: {}[];\r\n IsLoading = false;\r\n Title: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-query-data',\r\n templateUrl: './external-query-data.component.html',\r\n styleUrls: ['./external-query-data.component.scss']\r\n})\r\nexport class ExternalQueryDataComponent extends BasePageComponent implements IGridComponent {\r\n @ViewChild(DxDataGridComponent) grid: DxDataGridComponent;\r\n \r\n EnumFormats = EnumExternalQueryFieldFormats;\r\n public get gridAny(): any { return this.grid }\r\n public get G(): GridExtender { return this.gridAny && this.gridAny.G }\r\n\r\n constructor(A: ServiceBagService,\r\n private screenService: ScreenService,\r\n private externalQueryEndpoint: ExternalQueryEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, \"ExternalQueryDataComponent\", ExternalQuery, State);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowExport: !this.screenService.IsMobile(),\r\n GridExtender: this.G\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.State.Title || this.RC('Pages.ExternalQueryDataComponent')\r\n }\r\n\r\n override OnInitComponent() {\r\n const entryID = this.A.Navigator.GetRouteParams().EntryID;\r\n const forSelectedCustomer = this.A.Navigator.GetQueryParams(false)?.ForSelectedCustomer;\r\n\r\n this.Do(this.externalQueryEndpoint.Get(entryID), false, (response: BaseEntityResponse) => {\r\n if (response.IsSuccess) {\r\n this.State.Data = [];\r\n this.State.IsLoading = true;\r\n this.Entity = response.Entity;\r\n this.State.Title = response.Entity['Title' + SysGlobals.Language];\r\n this.NotifyReloadTitle();\r\n \r\n this.externalQueryEndpoint.GetExternalQueryData(this.Entity.EntryID, !!forSelectedCustomer)\r\n .subscribe({\r\n next: result => {\r\n this.State.IsLoading = false;\r\n this.State.ExternalQueryResult = result.Entity;\r\n !this.State.ExternalQueryResult.Error && this.prepareData();\r\n !!this.State.ExternalQueryResult.Error \r\n && this.uiComponentService.ProcessAlerts(this.State.ExternalQueryResult.Error);\r\n },\r\n error: () => { this.State.IsLoading = false; }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getCellTemplate(field: ExternalQueryField) {\r\n let cellTemplate = 'number_text';\r\n switch (field.Format) {\r\n case EnumExternalQueryFieldFormats.Number:\r\n case EnumExternalQueryFieldFormats.Text: cellTemplate = 'number_text'; break;\r\n case EnumExternalQueryFieldFormats.Date: cellTemplate = 'date'; break;\r\n case EnumExternalQueryFieldFormats.Money: cellTemplate = 'money'; break;\r\n case EnumExternalQueryFieldFormats.Boolean: cellTemplate = 'bool'; break;\r\n }\r\n return cellTemplate;\r\n }\r\n\r\n prepareData() {\r\n this.State.ExternalQueryResult.Rows\r\n .forEach(r => {\r\n this.State.Data.push(this.getDataRow(r));\r\n });\r\n }\r\n\r\n getDataRow(externalQueryDataRow: ExternalQueryDataRow): {} {\r\n const dataRow = {};\r\n this.State.ExternalQueryResult.ExternalQuery.Fields\r\n .forEach(f => {\r\n const field = externalQueryDataRow.Fields.find(x => x.FieldName === f.Name);\r\n if (field) {\r\n let value;\r\n if (field.ErrorText) {\r\n value = field.ErrorText;\r\n } else {\r\n switch (f.Format) {\r\n case EnumExternalQueryFieldFormats.Number: value = field.AsNumber; break;\r\n case EnumExternalQueryFieldFormats.Text: value = field.AsString; break;\r\n case EnumExternalQueryFieldFormats.Date: value = field.AsDate; break;\r\n case EnumExternalQueryFieldFormats.Money: value = field.AsMoney; break;\r\n case EnumExternalQueryFieldFormats.Boolean: value = field.AsBool; break;\r\n }\r\n }\r\n dataRow[f.Name] = value;\r\n }\r\n });\r\n return dataRow;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ImageRequest } from \"@dino-components/image/image.component\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { HomeInfoResult } from \"@dino-proxy/entities/homeinforesult.entity\";\r\nimport { EnumDocumentTypes, EnumValidationStatus, ImageSizeEnums, ImageTypeEnums } from \"@dino-proxy/enums\";\r\nimport { DxGalleryComponent } from \"devextreme-angular\";\r\nimport { MessageBoxDialogComponent } from \"@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component\";\r\nimport { EnumMessageBoxTypes, EnumWindowSizes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { UpdateDocumentParams } from \"@dino-proxy/params/duplicatedocument.param\";\r\nimport { DocumentEndpoint } from \"@dino-proxy/endpoints/document.endpoint\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { RepeatDocumentParams } from \"@dino-proxy/params/repeatdocument.param\";\r\n\r\nclass State extends BaseOptionState {\r\n BannerImageRequests: ImageRequest[];\r\n HomeInfo: HomeInfoResult;\r\n IsDesktop: boolean;\r\n StartDocumentLabel: string;\r\n LastDocumentLabel: string;\r\n DocumentTypeName: string;\r\n HasShoppingCart: boolean;\r\n IsShowAsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-home-banner',\r\n templateUrl: './home-banner.component.html',\r\n styleUrls: ['./home-banner.component.scss']\r\n})\r\nexport class HomeBannerComponent extends BaseComponent {\r\n @ViewChild('copyLastDocumentPrompt') copyLastDocumentPrompt: MessageBoxDialogComponent;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n DialogWindowSize = EnumWindowSizes.WindowAutoSize;\r\n\r\n @Input() set HomeInfo(value: HomeInfoResult) {\r\n this.State.HomeInfo = value;\r\n this.InitImageRequests();\r\n }\r\n @ViewChild(DxGalleryComponent) itemsGallery: DxGalleryComponent;\r\n\r\n // get IsAllowDuplication(): boolean {\r\n // return this.State.CustomerOption \r\n // && this.State.CustomerOption[`${this.State.CustomerOption.BusinessOption.DefaultDocumentType}Option`]?.IsAllowDuplication\r\n // && (this.State.CustomerOption.FeatureOption.IsEnableCatalogue || this.State.CustomerOption.FeatureOption.IsEnableCheckout);\r\n // }\r\n\r\n get IsAllowRepeat(): boolean {\r\n return this.State.CustomerOption.OrderOption\r\n && this.State.CustomerOption[`${this.State.CustomerOption.BusinessOption.DefaultDocumentType}Option`]?.IsAllowRepeat\r\n && (this.State.CustomerOption.FeatureOption.IsEnableCatalogue || this.State.CustomerOption.FeatureOption.IsEnableCheckout);\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, \"HomeBannerComponent\", State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsShowAsMobile = this.A.Screen.IsMobile() || this.A.Screen.IsTablet()\r\n || (this.A.Screen.IsDesktop() && !this.A.Screen.IsWideScreen());\r\n this.DialogWindowSize = this.A.Screen.IsMobile()\r\n ? EnumWindowSizes.WindowAutoSize\r\n : this.A.Screen.IsWideScreen() ? EnumWindowSizes.WindowSmall : EnumWindowSizes.WindowLarge;\r\n this.InitImageRequests();\r\n if (this.State.CustomerOption && this.State.CustomerOption.BusinessOption.DefaultDocumentType !== EnumDocumentTypes.None) {\r\n const documentsEnum = this.LIST('EnumDocumentTypes');\r\n this.State.DocumentTypeName = documentsEnum.filter(x => x.Value === this.State.CustomerOption.BusinessOption.DefaultDocumentType)[0].Text.toLowerCase();\r\n this.State.StartDocumentLabel = this.RC('lblHomePageStartDocument', this.State.DocumentTypeName);\r\n this.State.LastDocumentLabel = this.RC('lblHomePageLastDocument', this.State.DocumentTypeName);\r\n }\r\n\r\n const description$Subscription = this.shoppingCartService.description$\r\n .subscribe(r => {\r\n this.State.HasShoppingCart = !!r;\r\n });\r\n\r\n this.RegisterSubscription(description$Subscription);\r\n this.shoppingCartService.loadShoppingCartDescription();\r\n }\r\n\r\n GotoCatalogue() {\r\n if (this.State.HasShoppingCart) {\r\n this.UI.InfoMessage(this.RC('msgDocumentNotFinilised'));\r\n }\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n InitImageRequests() {\r\n if (this.State.CustomerOption?.HomePageOption?.IsEnableHomePageBanner\r\n && ((this.State.HomeInfo?.DesktopImageVersions && this.State.HomeInfo?.DesktopImageVersions?.length)\r\n || (this.State.HomeInfo?.MobileImageVersions && this.State.HomeInfo?.MobileImageVersions?.length))) {\r\n\r\n !this.State.BannerImageRequests ? (this.State.BannerImageRequests = []) : (this.State.BannerImageRequests.length = 0);\r\n\r\n const isDesktop = !this.A.Screen.IsMobile();\r\n const imageVersions = isDesktop ? this.State.HomeInfo.DesktopImageVersions : this.State.HomeInfo.MobileImageVersions;\r\n\r\n this.State.BannerImageRequests = imageVersions.map(item => {\r\n return {\r\n EntryID: 1,\r\n ImageSize: isDesktop ? ImageSizeEnums.Original : ImageSizeEnums.Large,\r\n Index: item.Index,\r\n Version: item.ImageVersion,\r\n ImageType: isDesktop ? ImageTypeEnums.HomeDesktop : ImageTypeEnums.HomeMobile\r\n } as ImageRequest;\r\n });\r\n }\r\n }\r\n\r\n getTitleAlign() {\r\n return 'title-container ' + this.State.CustomerOption.HomePageOption.TitleTextPosition.toLowerCase();\r\n }\r\n\r\n getAutoplayInterval() {\r\n return (this.State.BannerImageRequests && (this.State.BannerImageRequests.length > 1)) ? 3000 : 0;\r\n }\r\n\r\n HandleCopyLastDocument() {\r\n if (!this.IsAllowRepeat) return;\r\n\r\n const checkoutPath = ROUTE_PATHS.CHECKOUT;\r\n\r\n const path = this.State.CustomerOption?.FeatureOption?.IsEnableCatalogue ? ROUTE_PATHS.CATALOGUE : checkoutPath;\r\n\r\n if (this.State.HasShoppingCart) {\r\n this.UI.InfoMessage(this.RC('msgDocumentNotFinilised'));\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n path,\r\n (route) => this.Navigate([route])\r\n );\r\n return;\r\n }\r\n\r\n this.copyLastDocumentPrompt.Prompt = this.RC('msgCopyLastDocumentPrompt', this.State.DocumentTypeName);\r\n this.copyLastDocumentPrompt.Title = this.RC('msgCopyLastDocumentTitle', this.State.DocumentTypeName);\r\n this.copyLastDocumentPrompt.ShowDialogShort(() => {\r\n const params = { DocumentID: -999, DocumentType: this.State.CustomerOption.BusinessOption.DefaultDocumentType } as RepeatDocumentParams;\r\n\r\n this.documentEndpoint.RepeatDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n path,\r\n (route) => this.Navigate([route])\r\n );\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n } else if (response.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n } else {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.HomeInfo?.HomePageText}}\\r\\n
\\r\\n
\\r\\n {{State.HomeInfo?.HomePageDescription}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ImageRequest } from \"@dino-components/image/image.component\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ImageSizeEnums, ImageTypeEnums } from \"@dino-proxy/enums\";\r\nimport { CategoryView } from \"@dino-proxy/views/category.view\";\r\nimport { CategoriesService } from \"@dino-services/categories.service\";\r\nimport { DxScrollViewComponent } from \"devextreme-angular\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\n\r\nclass State extends BaseOptionState {\r\n Categories: CategoryView[];\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-home-categories',\r\n templateUrl: './home-categories.component.html',\r\n styleUrls: ['./home-categories.component.scss']\r\n})\r\nexport class HomeCategoriesComponent extends BaseCustomerComponent {\r\n @ViewChild(DxScrollViewComponent) scrollView: DxScrollViewComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private categoriesService: CategoriesService,\r\n private screenService: ScreenService,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n customerService: CustomerService) {\r\n super(A, \"HomeCategoriesComponent\", State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n }\r\n\r\n LoadFeaturedCategories() {\r\n this.categoriesService.getFeaturedCategories()\r\n .subscribe(categories => {\r\n this.State.Categories = categories;\r\n this.State.Categories.forEach(x => {\r\n (x as any).ImageRequest = {\r\n EntryID: x.EntryID,\r\n ImageSize: ImageSizeEnums.Medium,\r\n ImageType: ImageTypeEnums.Category,\r\n Index: 0,\r\n Version: x.ImageVersion\r\n } as ImageRequest;\r\n (x as any).IsHebrew = Utils.ContainsHebrewLetters(x.Name);\r\n });\r\n });\r\n }\r\n\r\n OnCategoryClick(category: CategoryView) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route], { CategoryID: category.EntryID })\r\n );\r\n }\r\n\r\n OnScrollTo(direction: 'left' | 'right') {\r\n this.scrollView.instance.scrollBy({ left: (direction === 'left' ? -150 : 150) });\r\n }\r\n\r\n override OnCustomerChanged() {\r\n setTimeout(() => {\r\n this.State.CustomerOption?.HomePageOption?.IsShowFeaturedCategories && this.LoadFeaturedCategories();\r\n }, 999);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{'lblHomeCategories' | RC:THIS}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{category.Name}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntitiesResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { ItemsEndpoint } from \"@dino-proxy/endpoints/items.endpoint\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { DisplayType } from \"@dino-services/item-option.service\";\r\nimport { DxScrollViewComponent } from \"devextreme-angular\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\n\r\nclass State extends BaseOptionState {\r\n Items: ItemView[];\r\n CurrentItemIndex: number;\r\n IsMobile: boolean;\r\n DisableShoppingCartChange: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-home-items',\r\n templateUrl: './home-items.component.html',\r\n styleUrls: ['./home-items.component.scss']\r\n})\r\nexport class HomeItemsComponent extends BaseCustomerComponent {\r\n DisplayType = DisplayType;\r\n @ViewChild(DxScrollViewComponent) scrollView: DxScrollViewComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private screenService: ScreenService,\r\n private shoppingCartService: ShoppingCartService,\r\n customerService: CustomerService) {\r\n super(A, \"HomeItemsComponent\", State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n const shoppingCartDescription$Subscription = this.shoppingCartService.description$.subscribe(r => {\r\n if (!!r) {\r\n this.State.DisableShoppingCartChange = r.DisableShoppingCartChange;\r\n }\r\n })\r\n\r\n this.RegisterSubscription(shoppingCartDescription$Subscription); \r\n }\r\n\r\n LoadFeaturedItems() {\r\n this.itemsEndpoint.GetFeaturedItems()\r\n .subscribe(response => {\r\n this.State.Items = response.Entities;\r\n this.State.CurrentItemIndex = response.Entities?.length ? 0 : null;\r\n });\r\n }\r\n\r\n override OnCustomerChanged() {\r\n setTimeout(() => {\r\n this.State.CustomerOption?.HomePageOption?.IsShowFeaturedItems && this.LoadFeaturedItems();\r\n }, 999);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{'lblHomeItems' | RC:THIS}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { ContactUsSubject } from \"@dino-proxy/entities/contactussubject.entity\";\r\nimport { SendContactUsParams } from \"@dino-proxy/params/sendcontactus.param\";\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { SysGlobals } from \"@m4u-angular/core/framework/sysglobals\";\r\n\r\nclass State extends BaseOptionState {\r\n Content: string;\r\n SubjectID: number;\r\n IsConfirmationMessage: boolean;\r\n IsMobile: boolean;\r\n IsHebrew: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-dialog-dino',\r\n templateUrl: './contact-us-dialog.component.html',\r\n styleUrls: ['./contact-us-dialog.component.scss']\r\n})\r\nexport class ContactUsDialogComponent extends BasePageComponent {\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n get showInfoBlock(): boolean {\r\n return !!this.State.CustomerOption?.ContactUsOption \r\n && (!!this.State.CustomerOption.ContactUsOption.Phone\r\n || !!this.State.CustomerOption.ContactUsOption.Email \r\n || !!this.State.CustomerOption.ContactUsOption.MailingAddress \r\n || !!this.State.CustomerOption.ContactUsOption.Whatsapp);\r\n }\r\n\r\n get confirmationMessage(): string {\r\n return this.State.IsHebrew \r\n ? this.State.CustomerOption?.ContactUsOption?.MessageHebrew \r\n : this.State.CustomerOption?.ContactUsOption?.MessageEnglish;\r\n }\r\n\r\n get subjectNameField(): string {\r\n return this.State.IsHebrew ? 'NameHebrew' : 'NameEnglish';\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private screenService: ScreenService) {\r\n super(A, \"ContactUsDialogComponent\", BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.IsHebrew = SysGlobals.Language == EnumLanguages.Hebrew;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.IsConfirmationMessage = false;\r\n this.State.SubjectID = null;\r\n this.State.Content = null;\r\n }\r\n\r\n HandleSend() {\r\n if (!this.State.IsConfirmationMessage) {\r\n\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) { return; }\r\n\r\n const request = {\r\n Content: this.State.Content,\r\n SubjectID: this.State.SubjectID\r\n } as SendContactUsParams;\r\n\r\n this.customerEndpoint.SendContactUsRequest(request).subscribe(() => {\r\n if (this.confirmationMessage) {\r\n this.State.IsConfirmationMessage = true;\r\n } else {\r\n this.ClosePage();\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n this.ClosePage();\r\n }\r\n }\r\n\r\n NavigateTo(type: 'Whatsapp' | 'Phone' | 'Email') {\r\n if (type === 'Email') {\r\n this.A.Navigator.NavigateEmail(this.State.CustomerOption?.ContactUsOption?.Email);\r\n return;\r\n }\r\n\r\n if (type === 'Phone') {\r\n this.A.Navigator.NavigatePhone(this.State.CustomerOption?.ContactUsOption?.Phone);\r\n return;\r\n }\r\n\r\n if (type === 'Whatsapp') {\r\n this.A.Navigator.NavigateWhatsApp(this.State.CustomerOption?.ContactUsOption?.Whatsapp);\r\n return;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n {{State.CustomerOption?.ContactUsOption?.Email}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n {{State.CustomerOption?.ContactUsOption?.Phone}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n {{State.CustomerOption?.ContactUsOption?.Whatsapp}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n {{State.CustomerOption?.ContactUsOption.MailingAddress}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
{{'lblPhone' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
{{'lblEmail' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblMailingAddress' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblWhatsapp' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n 0\\\" class=\\\"contact-us-inputs\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{confirmationMessage}}\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemSearch } from './../entities/itemsearch.entity';\r\n@Injectable()\r\nexport class ItemSearchEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemSearch\", api);}\r\n\t\r\n\r\n public override Save(Entity: ItemSearch) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { HomeInfoResult } from '@dino-proxy/entities/homeinforesult.entity';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ItemSearchEndpoint } from '@dino-proxy/endpoints/itemsearch.endpoint';\r\nimport { ItemSearch } from '@dino-proxy/entities/itemsearch.entity';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\nclass State extends BaseOptionState {\r\n HomeInfo: HomeInfoResult;\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-home',\r\n templateUrl: './home.component.html',\r\n styleUrls: ['./home.component.scss']\r\n})\r\nexport class HomeComponent extends BaseCustomerPageComponent {\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n IsHomePagePermitted: boolean;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private framework: FrameworkService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private itemSearchEndpoint: ItemSearchEndpoint,\r\n public customerService: CustomerService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'HomeComponent', BaseEntity, State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.IsHomePagePermitted = this.State.CustomerOption?.FeatureOption?.IsEnableHomePage;\r\n if (!this.State.CustomerOption?.FeatureOption?.IsEnableHomePage) return;\r\n }\r\n\r\n override OnCustomerChanged() {\r\n (this.State.CustomerOption?.HomePageOption?.IsEnableHomePageBanner\r\n || this.State.CustomerOption?.HomePageOption?.IsEnableHomePageText)\r\n && this.LoadHomeInfo();\r\n }\r\n\r\n LoadHomeInfo() {\r\n this.customerEndpoint.GetHomeInfo()\r\n .subscribe(response => {\r\n this.State.HomeInfo = response.Entity;\r\n });\r\n }\r\n\r\n GetVersion(): string {\r\n return `S-${this.framework.CompanyInfo.ServerVersion} : C-${Utils.NZ(this.framework.CompanyInfo.ClientVersion)}`;\r\n }\r\n\r\n OnSearchKeyUp(e) {\r\n if (e.event && e.event.keyCode === 13 && this.State.SearchText) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route], { SearchText: this.State.SearchText })\r\n );\r\n }\r\n }\r\n\r\n OnSearchByText(e) {\r\n this.State.SearchText = e;\r\n const newSearch = { Text: e } as ItemSearch;\r\n\r\n if (e.length > 2) {\r\n this.Do(this.itemSearchEndpoint.Save(newSearch), false);\r\n }\r\n\r\n if (this.State.SearchText) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route], { SearchText: this.State.SearchText })\r\n );\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (this.State.CustomerOption.HomePageOption.Announcement) {\r\n setTimeout(() => {\r\n this.messageDialog.Type = this.MessageBoxTypes.OK;\r\n this.messageDialog.Title = this.RC('titleAnnouncement');\r\n this.messageDialog.IsHideCancel = true;\r\n this.messageDialog.Prompt = this.State.CustomerOption?.HomePageOption?.Announcement;\r\n this.messageDialog.ShowDialogShort(() => { });\r\n }, 666);\r\n }\r\n }\r\n\r\n override GetTitle(): string {\r\n return this.A.Screen.IsMobile() ? null : this.RC('Pages.HomeComponent');\r\n }\r\n\r\n public get HasCustomer() { return !!this.CustomerID; }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n/m4u-messageboxdialog>\";","import { Component, TemplateRef, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { Ledger } from '@dino-proxy/entities/ledger.entity';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n IsShowAdditionalNotes: boolean;\r\n ReportItemsState: any = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-mobile-list',\r\n templateUrl: './ledger-mobile-list.component.html',\r\n styleUrls: ['./ledger-mobile-list.component.scss']\r\n})\r\nexport class LedgerMobileListComponent extends BaseComponent {\r\n @Input() DataSource: BaseDataSourceAbstract;\r\n @Input() Currency: string;\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(DxListComponent) list: DxListComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LedgerMobileListComponent', State);\r\n }\r\n \r\n OnDocNumClick(document: Ledger) {\r\n document && this.DocNumClick.emit(document);\r\n }\r\n\r\n ToggleReportItem(event: any, item: any) {\r\n this.State.ReportItemsState[item.EntryID] = !this.State.ReportItemsState[item.EntryID];\r\n\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const listItemElement = this.FindListItemElement(event.srcElement);\r\n if (this.State.ReportItemsState[item.EntryID]) listItemElement.classList.add('opened');\r\n else listItemElement.classList.remove('opened');\r\n }\r\n }\r\n\r\n OnNavigate(item) {\r\n let docType = item.TransType;\r\n if (docType === 234000031 // RR\r\n || docType === 13 // Invoice\r\n || docType === 14 // Refund\r\n || docType === 15 // DN\r\n || docType === 16 // Return\r\n || docType === 17 // Order\r\n || docType === 23) { // Quote\r\n let type = item.TransTypeString === 'Credit Memo' ? 'Refund' : item.TransTypeString;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: item.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: item.SBODocumentEntry });\r\n }\r\n else {\r\n return;\r\n } \r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n\r\n \r\n private FindListItemElement(element: HTMLElement): HTMLElement {\r\n const parent = element.parentElement;\r\n if (parent.classList.contains('dx-list-item')) return parent;\r\n\r\n return this.FindListItemElement(parent);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{ GetDocumentTypeTranslation(item.TransTypeString) }}\\r\\n \\r\\n  \\r\\n \\r\\n {{ item.DocumentNumber }}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{ (item.IsOpen ? item.DebitOpen : item.Debit) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n {{ (item.IsOpen ? item.CreditOpen : item.Credit) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.RefDate | formatDate }}
\\r\\n
\\r\\n {{ (item.IsOpen ? item.OpenBalance : item.Balance) | formatPriceWithCurrency:item.DocumentCurrency:true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{'lblLedgerSection' | RC:THIS}}
\\r\\n
{{State.CustomerTitle}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { LedgerView } from './../views/ledger.view';\r\nimport { TransDocumentListParams } from './../params/transdocumentlist.param';\r\n@Injectable()\r\nexport class LedgerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Ledger\", api);}\r\n\t\r\n\r\n public GetListByParams(oParams: TransDocumentListParams, oOptions: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetListByParams', oParams, {oOptions: oOptions} );\r\n }\r\n\r\n public GetPdf(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPdf', {EntryID: EntryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nexport class Ledger extends BaseTransDocument {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Ledger';\r\n }\r\n \r\n public Debit: number; \r\n public Credit: number; \r\n public DebitOpen: number; \r\n public CreditOpen: number; \r\n public NumAtCard: string; \r\n public TotalSum: number; \r\n public IsOpen: boolean; \r\n public PaymentSum: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Ledger } from '@dino-proxy/entities/ledger.entity';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseState {\r\n IsShowAdditionalNotes: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledgers-grid',\r\n templateUrl: './ledgers-grid.component.html',\r\n styleUrls: ['./ledgers-grid.component.scss']\r\n})\r\nexport class LedgersGridComponent extends BaseGridComponent {\r\n @Input() IsOpen: boolean;\r\n @Input() Currency: string;\r\n @Input() QuickFiltersGrid: TemplateRef;\r\n @Output() DocNumClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LedgersGridComponent', Ledger, State);\r\n }\r\n\r\n OnRowPrepared(e) {\r\n // Hide row if it is 'Opening balance' row and opening balance equal 0\r\n if (e.data && e.data.EntryID == 0 && e.data.OpenBalance == 0) {\r\n e.rowElement.style.display = 'none';\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsShowAdditionalNotes = true;\r\n }\r\n\r\n OnDocNumClick(document: Ledger) {\r\n document && this.DocNumClick.emit(document);\r\n }\r\n\r\n OnCellPrepared(e) {\r\n if (e.column.command == 'select') {\r\n const document = e.data as Ledger;\r\n\r\n if (document && (!document.PaymentSum || document.PaymentSum == 0 || (document as Ledger).IsPaymentAllowed == false)) {\r\n (e.cellElement as HTMLElement).style.visibility = 'hidden';\r\n }\r\n }\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (!!this.QuickFiltersGrid) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'quickFiltersGrid',\r\n isCustom: true\r\n });\r\n } \r\n }\r\n\r\n OnNavigate(e) {\r\n const data = e.data;\r\n if (e.rowType !== 'data' || e.columnIndex === 0 && data.PdfUrl) return;\r\n \r\n let docType = data.TransType;\r\n if (docType === 234000031 // RR\r\n || docType === 13 // Invoice\r\n || docType === 14 // Refund\r\n || docType === 15 // DN\r\n || docType === 16 // Return\r\n || docType === 17 // Order\r\n || docType === 23) { // Quote\r\n let type = data.TransTypeString === 'Credit Memo' ? 'Refund' : data.TransTypeString;\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: data.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: data.SBODocumentEntry });\r\n }\r\n else {\r\n return;\r\n } \r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{GetDocumentTypeTranslation(cell.data.TransTypeString)}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\nimport { BaseDataResponse, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { LedgerEndpoint } from \"@dino-proxy/endpoints/ledger.endpoint\";\r\nimport { Ledger } from \"@dino-proxy/entities/ledger.entity\";\r\nimport { TransDocumentListParams } from \"@dino-proxy/params/transdocumentlist.param\";\r\nimport { BalanceView } from \"@dino-proxy/views/balance.view\";\r\nimport { PrintBoxDialogComponent } from '@m4u-angular/ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { BaseCustomerPageComponent } from \"@dino-classes/base-customer-page-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService, UI_EVENTS } from \"@dino-services/ui-component.service\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { EnumDeliveryStatuses, EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { filter } from \"rxjs\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { LedgersGridComponent } from \"../ledgers-grid/ledgers-grid.component\";\r\n\r\nexport type LedgerFilterActionPayload = { LedgerFilterAction: 'apply' | 'clear' };\r\n\r\nclass State extends BaseOptionState {\r\n FromDate: Date;\r\n UntilDate: Date;\r\n IsOpen: boolean = true;\r\n BalanceView: BalanceView;\r\n Document: Ledger;\r\n IsMobile: boolean;\r\n RouteCustomerID: number;\r\n CustomerTitle: string;\r\n IsWideScreen: boolean = false;\r\n IsShortScreen: boolean = false;\r\n}\r\n@Component({\r\n selector: 'base-ledgers',\r\n template: '
',\r\n})\r\nexport abstract class BaseLedgersComponent extends BaseCustomerPageComponent {\r\n\r\n @ViewChild(PrintBoxDialogComponent) DialogPrint: PrintBoxDialogComponent;\r\n @ViewChild(LedgersGridComponent) grid: LedgersGridComponent;\r\n\r\n CustomerDetailsRoute: string = ROUTE_PATHS.CUSTOMER_DETAILS_FULL;\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private ledgerEndpoint: LedgerEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n public screenService: ScreenService,\r\n customerService: CustomerService,\r\n private uiComponentService: UiComponentService,\r\n private pageDisplayMode: EnumPageDisplayModes) {\r\n super(A, componentName, BaseEntity, State, customerService, pageDisplayMode);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n this.State.IsShortScreen = !this.A.Screen.IsWideScreen() && !this.A.Screen.IsMediumScreen();\r\n }\r\n\r\n get ShowTitleInToolbar(): boolean {\r\n return this.State.IsMobile || this.pageDisplayMode === EnumPageDisplayModes.Window || !this.State.IsShortScreen;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowExport = !this.screenService.IsMobile();\r\n settings.GridExtender = this.grid?.G;\r\n settings.IsAllowFilter = !this.State.IsWideScreen;\r\n settings.CustomFilterCssClass = 'window-filter-sidebar';\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n const menu = [];\r\n if ((this.State.RouteCustomerID || this.CustomerID) && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n menu.push({\r\n text: this.RC('btnViewCustomer'),\r\n icon: 'mdi mdi-card-account-details-star-outline',\r\n onClick: () => this.Navigate([this.CustomerDetailsRoute, this.State.RouteCustomerID || this.CustomerID])\r\n });\r\n }\r\n\r\n return menu;\r\n };\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n\r\n if (this.QueryParams.CustomerID) {\r\n this.State.RouteCustomerID = this.QueryParams.CustomerID as number;\r\n this.InitTotalBalance();\r\n }\r\n\r\n if (this.QueryParams.Open) {\r\n this.State.IsOpen = this.QueryParams.Open as boolean;\r\n }\r\n\r\n if (this.QueryParams.CustomerID || this.QueryParams.Open) this.LoadDataSource();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$.pipe(\r\n filter(e => e.EventName === UI_EVENTS.LEDGER_FILTER_ACTION)\r\n ).subscribe(e => {\r\n const payload = e.Payload as LedgerFilterActionPayload;\r\n if (payload.LedgerFilterAction === 'apply') {\r\n this.LoadDataSource();\r\n } else if (payload.LedgerFilterAction === 'clear') {\r\n this.State.FromDate = null;\r\n this.State.UntilDate = null;\r\n this.State.IsOpen = true;\r\n this.LoadDataSource();\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n override OnInitSubtitle() {\r\n return this.ShowTitleInToolbar ? this.State.CustomerTitle : '';\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.ShowTitleInToolbar ? this.RC('lblLedgerSection') : ' ';\r\n }\r\n\r\n GetLedgerPageClass(): string {\r\n return this.State.IsMobile \r\n ? 'ledger-page no-page-scroll no-bottom-padding' \r\n : this.State.IsShortScreen\r\n ? 'ledger-page short-header' \r\n : 'ledger-page ';\r\n }\r\n\r\n // override GetTitle() {\r\n // return this.A.Screen.IsMobile() ? null : this.RC('Pages.LedgersComponent')\r\n // }\r\n\r\n OnFilterChanged() {\r\n if (!this.State.IsWideScreen) return;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnShowPdf(document: Ledger) {\r\n this.State.Document = document;\r\n this.DialogPrint.FileName = document.DocumentNumber.toString();\r\n this.DialogPrint.Title = `${this.RC('titlePrintDialog')} ${document.DocumentNumber}`;\r\n this.DialogPrint.ShowDialogShort(undefined);\r\n\r\n this.Do(this.ledgerEndpoint.GetPdf(document.EntryID), false,\r\n (response: BaseDataResponse) => this.DialogPrint.PDFData = (response.Data as unknown) as string,\r\n (response: BaseDataResponse) => {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n this.DialogPrint.CloseDialogWithCancel();\r\n });\r\n }\r\n\r\n Abs(value: number) {\r\n return Math.abs(value);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadDataSource();\r\n this.InitTotalBalance();\r\n }\r\n\r\n private InitTotalBalance() {\r\n this.customerEndpoint.GetBalance(this.State.RouteCustomerID)\r\n .subscribe(response => { this.State.BalanceView = response.Entity; });\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new TransDocumentListParams();\r\n params.RefDateFrom = this.State.FromDate;\r\n params.RefDateUntil = this.State.UntilDate;\r\n params.IsOpen = this.State.IsOpen;\r\n\r\n if (this.State.RouteCustomerID) {\r\n params.CustomerID = this.State.RouteCustomerID;\r\n }\r\n\r\n let customerIDtoView = this.State.RouteCustomerID || this.CustomerID;\r\n if (!customerIDtoView) {\r\n this.State.CustomerTitle = null;\r\n this.ReloadToolbar();\r\n } else {\r\n this.customerEndpoint.GetShallow(customerIDtoView).subscribe(response => {\r\n if (response.IsSuccess && response.Entity) {\r\n this.State.CustomerTitle = response.Entity.CardName + ' - ' + response.Entity.CardCode;\r\n this.ReloadToolbar();\r\n }\r\n });\r\n }\r\n\r\n this.DataSources['Ledgers'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n params.HasComplexFilter = options['ComplexFilter'] ? true : false;\r\n return this.ledgerEndpoint.GetListByParams(params, options?.GetLoadOptions())\r\n }, undefined, undefined, false);\r\n }\r\n\r\n NavigateTo(e) {\r\n if (this.State.RouteCustomerID) {\r\n this.Navigate([ROUTE_PATHS.DELIVERY_NOTES], {\r\n ObjectType: EnumDocumentTypes.DeliveryNote,\r\n Status: EnumDeliveryStatuses.Open,\r\n CustomerID: this.State.RouteCustomerID\r\n }, true, true);\r\n } else {\r\n this.Navigate([ROUTE_PATHS.DELIVERY_NOTES], {\r\n ObjectType: EnumDocumentTypes.DeliveryNote,\r\n Status: EnumDeliveryStatuses.Open\r\n }, true, true);\r\n }\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.LEDGER_FILTER_ACTION, { LedgerFilterAction: 'apply' } as LedgerFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.LEDGER_FILTER_ACTION, { LedgerFilterAction: 'clear' } as LedgerFilterActionPayload);\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { LedgerEndpoint } from \"@dino-proxy/endpoints/ledger.endpoint\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseLedgersComponent } from \"./base/base-ledgers.component\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledgers-fullscreeen',\r\n templateUrl: './ledgers.component.html',\r\n styleUrls: ['./ledgers.component.scss']\r\n})\r\nexport class LedgersFullscreenComponent extends BaseLedgersComponent {\r\n constructor(A: ServiceBagService,\r\n ledgerEndpoint: LedgerEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n screenService: ScreenService,\r\n customerService: CustomerService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'LedgersFullscreenComponent', ledgerEndpoint, customerEndpoint, screenService, customerService, uiComponentService, EnumPageDisplayModes.FullScreen);\r\n }\r\n}","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { LedgerEndpoint } from \"@dino-proxy/endpoints/ledger.endpoint\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseLedgersComponent } from \"./base/base-ledgers.component\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledgers-window',\r\n templateUrl: './ledgers.component.html',\r\n styleUrls: ['./ledgers.component.scss']\r\n})\r\nexport class LedgersWindowComponent extends BaseLedgersComponent {\r\n constructor(A: ServiceBagService,\r\n ledgerEndpoint: LedgerEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n screenService: ScreenService,\r\n customerService: CustomerService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'LedgersWindowComponent', ledgerEndpoint, customerEndpoint, screenService, customerService, uiComponentService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override CustomerDetailsRoute = ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW;\r\n}","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPaymentMeans, EnumGoCreditCardTypes } from '@dino-proxy/enums';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { ShoppingPaymentCashItem, ShoppingPaymentChequeItem, ShoppingPaymentCreditCardItem, ShoppingPaymentLaterItem, ShoppingPaymentWireItem } from '@dino-proxy/entities/shoppingpayment.entity';\r\nimport { SafeResourceUrl } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n Entity: any;\r\n Title: string;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n})\r\nexport abstract class BaseTypePaymentComponent extends BaseComponent {\r\n @Input() PaymentType: EnumPaymentMeans;\r\n @Input() FixedPrice: number;\r\n @Input() LeftPaymentAmount: number;\r\n @Input() Currency: string;\r\n\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n @Output() OnPaymentDone = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, componentName: string ) {\r\n super(A, componentName, State);\r\n }\r\n\r\n override OnInitComponent(){\r\n let paymentObject = null;\r\n switch (this.PaymentType) {\r\n case EnumPaymentMeans.Cash: {\r\n paymentObject = new ShoppingPaymentCashItem();\r\n break;\r\n }\r\n case EnumPaymentMeans.Cheque: {\r\n paymentObject = new ShoppingPaymentChequeItem();\r\n break;\r\n }\r\n case EnumPaymentMeans.WireTransfer: {\r\n paymentObject = new ShoppingPaymentWireItem();\r\n break;\r\n }\r\n case EnumPaymentMeans.CreditCard: {\r\n paymentObject = new ShoppingPaymentCreditCardItem();\r\n break;\r\n }\r\n case EnumPaymentMeans.Later: {\r\n paymentObject = new ShoppingPaymentLaterItem();\r\n break;\r\n }\r\n }\r\n\r\n if (this.FixedPrice > 0) {\r\n paymentObject.Amount = this.FixedPrice;\r\n }\r\n\r\n if (this.LeftPaymentAmount > 0) {\r\n paymentObject.Amount = this.LeftPaymentAmount;\r\n }\r\n \r\n const enumList = this.LIST('EnumPaymentMeans');\r\n this.State.Title = enumList.find(l => l.Value === this.PaymentType).Text;\r\n\r\n this.State.Entity = paymentObject;\r\n }\r\n\r\n DonePayment() {\r\n this.ValidateValidationGroup(this.validationGroup).then(result => {\r\n if (result) {\r\n this.OnPaymentDone.emit(this.State.Entity);\r\n }\r\n });\r\n }\r\n\r\n Cancel() {\r\n this.OnPaymentDone.emit(null);\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseTypePaymentComponent } from '../base/base-type-payment.component';\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-cash-payment',\r\n templateUrl: './cash-payment.component.html',\r\n styleUrls: ['./../base/base-type-payment.component.scss']\r\n})\r\nexport class CashPaymentComponent extends BaseTypePaymentComponent {\r\n\r\n constructor(A: ServiceBagService ) {\r\n super(A, 'CashPaymentComponent');\r\n }\r\n\r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n 0\\\" [min]=\\\"0.01\\\" formatPrice [formatCurrency]=\\\"Currency\\\">\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
{{'btnCancel' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseTypePaymentComponent } from '../base/base-type-payment.component';\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-cheque-payment',\r\n templateUrl: './cheque-payment.component.html',\r\n styleUrls: ['./../base/base-type-payment.component.scss']\r\n})\r\nexport class ChequePaymentComponent extends BaseTypePaymentComponent {\r\n\r\n constructor(A: ServiceBagService ) {\r\n super(A, 'ChequePaymentComponent');\r\n }\r\n\r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
{{'btnCancel' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ShoppingPayment } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentView } from './../views/shoppingpayment.view';\r\nimport { DonePaymentResult } from './../entities/donepaymentresult.entity';\r\nimport { CreatePaymentRequestResult } from './../entities/createpaymentrequestresult.entity';\r\nimport { UpdateShoppingPaymentParams } from './../params/updateshoppingpayment.param';\r\nimport { CreditCardPaymentStage2Params } from './../params/creditcardpaymentstage2.param';\r\nimport { DeletePaymentParams } from './../params/deletepayment.param';\r\n@Injectable()\r\nexport class ShoppingPaymentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ShoppingPayment\", api);}\r\n\t\r\n\r\n public GetByID(entryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByID', {entryID: entryID} );\r\n }\r\n\r\n public GetDraft(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDraft', {customerID: customerID} );\r\n }\r\n\r\n public SaveCashPayments(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveCashPayments', Params, undefined );\r\n }\r\n\r\n public SaveChequePayments(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveChequePayments', Params, undefined );\r\n }\r\n\r\n public SaveWirePayments(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveWirePayments', Params, undefined );\r\n }\r\n\r\n public SaveLaterPayments(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveLaterPayments', Params, undefined );\r\n }\r\n\r\n public MakePaymentWithExistingCreditCard(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MakePaymentWithExistingCreditCard', Params, undefined );\r\n }\r\n\r\n public MakeNewCreditCardPaymentStage1(Params: UpdateShoppingPaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MakeNewCreditCardPaymentStage1', Params, undefined );\r\n }\r\n\r\n public UpdatePaymentCreditCardItem(Params: UpdateShoppingPaymentParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdatePaymentCreditCardItem', Params, undefined );\r\n }\r\n\r\n public MakeNewCreditCardPaymentStage2(Params: CreditCardPaymentStage2Params) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MakeNewCreditCardPaymentStage2', Params, undefined );\r\n }\r\n\r\n public DeletePayment(Params: DeletePaymentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'DeletePayment', Params, undefined );\r\n }\r\n\r\n public DeleteShoppingPayment(shoppingPaymentID: number, useShoppingCart: boolean) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteDeleteAction(this.ControllerName, 'DeleteShoppingPayment', {shoppingPaymentID: shoppingPaymentID, useShoppingCart: useShoppingCart} );\r\n }\r\n}\r\n\r\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumGoCreditCardTypes } from '@dino-proxy/enums';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\r\nimport { UpdateShoppingPaymentParams } from '@dino-proxy/params/updateshoppingpayment.param';\r\nimport { ShoppingPaymentView } from '@dino-proxy/views/shoppingpayment.view';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ShoppingPaymentCreditCardItem } from '@dino-proxy/entities/shoppingpayment.entity';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n Entity: ShoppingPaymentCreditCardItem;\r\n GoCreditCardTypes: GenericListEntity[] = [];\r\n GoCreditCardType: EnumGoCreditCardTypes = EnumGoCreditCardTypes.New;\r\n UrlSafe: SafeResourceUrl;\r\n BackupUrlSafe: SafeResourceUrl;\r\n IsMobile: boolean = false;\r\n AllowSaveCard: boolean = false;\r\n AllowUseExistingCard: boolean = false;\r\n ShoppingPaymentView: ShoppingPaymentView;\r\n UseShoppingCart: boolean = false;\r\n FixedPrice: number;\r\n LeftPaymentAmount: number;\r\n Currency: string;\r\n ExceededAmount: number = 0;\r\n HasError: boolean = false;\r\n InitInProcess: boolean = true;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-credit-card-payment-dialog',\r\n templateUrl: './credit-card-payment-dialog.component.html',\r\n styleUrls: ['./credit-card-payment-dialog.component.scss']\r\n})\r\nexport class CreditCardPaymentDialogComponent extends BasePageComponent {\r\n @Output() OnCreateShoppingPayment = new EventEmitter();\r\n @Output() OnExceedAmountChange = new EventEmitter();\r\n\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private screenService: ScreenService,\r\n private shoppingPaymentEndpoint: ShoppingPaymentEndpoint,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'CreditCardPaymentDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n public SetupData(\r\n AllowSaveCard: boolean,\r\n AllowUseExistingCard: boolean,\r\n ShoppingPaymentView: ShoppingPaymentView,\r\n UseShoppingCart: boolean,\r\n FixedPrice: number,\r\n LeftPaymentAmount: number,\r\n Currency: string) {\r\n this.State.AllowSaveCard = AllowSaveCard;\r\n this.State.AllowUseExistingCard = AllowUseExistingCard;\r\n this.State.ShoppingPaymentView = ShoppingPaymentView;\r\n this.State.UseShoppingCart = UseShoppingCart;\r\n this.State.FixedPrice = FixedPrice;\r\n this.State.LeftPaymentAmount = LeftPaymentAmount;\r\n this.State.Currency = Currency;\r\n\r\n const paymentObject = new ShoppingPaymentCreditCardItem();\r\n\r\n if (this.State.FixedPrice > 0) {\r\n paymentObject.Amount = this.State.FixedPrice;\r\n }\r\n\r\n if (this.State.LeftPaymentAmount > 0) {\r\n paymentObject.Amount = this.State.LeftPaymentAmount;\r\n }\r\n\r\n this.State.Entity = paymentObject;\r\n\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n const creditTypes = Utils.CloneObject(this.LIST('GoCreditCardTypes'));\r\n if (this.State.AllowUseExistingCard) {\r\n this.LoadCreditCard(creditTypes);\r\n } else {\r\n this.State.GoCreditCardTypes = creditTypes.filter(t => t.Value != EnumGoCreditCardTypes.Existing);\r\n }\r\n this.GetNewPaymentUrl();\r\n return;\r\n }\r\n\r\n OnAmountChange() {\r\n this.CheckAmount();\r\n this.State.BackupUrlSafe = null;\r\n if (this.State.GoCreditCardType === EnumGoCreditCardTypes.New && !this.State.HasError) {\r\n this.GetNewPaymentUrl();\r\n }\r\n }\r\n\r\n GetNewPaymentUrl() {\r\n const params = {\r\n ShoppingPaymentView: this.State.ShoppingPaymentView,\r\n UseShoppingCart: this.State.UseShoppingCart,\r\n CreditCardItem: this.State.Entity\r\n } as UpdateShoppingPaymentParams;\r\n this.shoppingPaymentEndpoint.MakeNewCreditCardPaymentStage1(params)\r\n .subscribe(r => {\r\n if (r.IsSuccess) {\r\n if (!this.State.ShoppingPaymentView || !this.State.ShoppingPaymentView.EntryID || this.State.ShoppingPaymentView.EntryID <= 0) {\r\n this.OnCreateShoppingPayment.emit(r.Entity.ShoppingPaymentID);\r\n }\r\n this.State.InitInProcess = false;\r\n this.State.UrlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(r.Entity.PaymentURL);\r\n this.State.BackupUrlSafe = this.State.UrlSafe;\r\n } else {\r\n this.UI.StopMessage(r.ResponseMessage);\r\n this.State.InitInProcess = false;\r\n }\r\n });\r\n }\r\n\r\n protected LoadCreditCard(goCreditCardTypes: GenericListEntity[]) {\r\n this.customerEndpoint.GetCurrentCreditCard(-999)\r\n .subscribe(response => {\r\n if (!response.Entity?.Number || response.Entity.IsExpired) {\r\n const idx = goCreditCardTypes.findIndex(x => x.Value === EnumGoCreditCardTypes.Existing);\r\n if (idx !== -1) goCreditCardTypes.splice(idx, 1);\r\n if (goCreditCardTypes.length) {\r\n this.State.GoCreditCardType = goCreditCardTypes[0].Value as EnumGoCreditCardTypes;\r\n this.State.GoCreditCardTypes = goCreditCardTypes;\r\n }\r\n } else {\r\n const item = goCreditCardTypes.find(x => x.Value === EnumGoCreditCardTypes.Existing);\r\n if (!item) return;\r\n item.Text = this.RC('lblExistingCreditCardNumber') + response.Entity.Number;\r\n this.State.GoCreditCardTypes = goCreditCardTypes;\r\n }\r\n });\r\n }\r\n\r\n OnCreditTypeChange() {\r\n if (this.State.GoCreditCardType === EnumGoCreditCardTypes.Existing) {\r\n this.State.UrlSafe = null;\r\n } else if (!this.State.HasError) {\r\n if (!!this.State.BackupUrlSafe) {\r\n this.State.UrlSafe = this.State.BackupUrlSafe;\r\n } else {\r\n this.GetNewPaymentUrl();\r\n }\r\n }\r\n }\r\n\r\n UpdateIsSaveCreditCard() {\r\n if (this.State.GoCreditCardType === EnumGoCreditCardTypes.New && !this.State.HasError) {\r\n setTimeout(() => {\r\n const params = {\r\n ShoppingPaymentView: this.State.ShoppingPaymentView,\r\n UseShoppingCart: this.State.UseShoppingCart,\r\n CreditCardItem: this.State.Entity\r\n } as UpdateShoppingPaymentParams;\r\n this.shoppingPaymentEndpoint.UpdatePaymentCreditCardItem(params).subscribe(r => {\r\n if (!r.IsSuccess) {\r\n this.State.Entity.IsSaveCreditCard = !this.State.Entity.IsSaveCreditCard;\r\n this.UI.StopMessage(r.ResponseMessage);\r\n }\r\n })\r\n }, 100);\r\n }\r\n }\r\n\r\n PayWithExistingCard() {\r\n this.ValidateValidationGroup(this.validationGroup).then(result => {\r\n if (result) {\r\n this.CloseDialogWithSuccess(this.State.Entity);\r\n }\r\n });\r\n }\r\n\r\n CheckAmount() {\r\n const exceededAmpount = Utils.Round(this.State.Entity.Amount - this.State.LeftPaymentAmount);\r\n\r\n if (this.State.UseShoppingCart && exceededAmpount > 0) {\r\n this.UI.StopMessage(this.RC('msgPaidAmountGreatenThanRequired'));\r\n this.State.HasError = true;\r\n this.State.UrlSafe = null;\r\n return;\r\n } else if (!this.State.UseShoppingCart && exceededAmpount > 0) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('lblPaymentExceeded');\r\n this.messageDialog.Prompt = this.RC('lblPaymentExceededPrompt',\r\n `${exceededAmpount} ${this.State.Currency}`);\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.State.ExceededAmount = exceededAmpount;\r\n this.OnExceedAmountChange.emit(this.State.ExceededAmount);\r\n }, () => {\r\n this.State.Entity.Amount = this.State.LeftPaymentAmount;\r\n this.State.ExceededAmount = 0;\r\n this.OnExceedAmountChange.emit(this.State.ExceededAmount);\r\n });\r\n return;\r\n } else {\r\n this.State.ExceededAmount = 0;\r\n this.State.HasError = false;\r\n this.OnExceedAmountChange.emit(this.State.ExceededAmount);\r\n return;\r\n }\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 0\\\" [min]=\\\"0.01\\\" formatPrice\\r\\n [formatCurrency]=\\\"State.Currency\\\" (onValueChanged)=\\\"OnAmountChange()\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 1\\\" [Component]=\\\"THIS\\\"\\r\\n Name=\\\"lblCreditCardOption\\\" Label=\\\"{{'lblOrderCreditCard' | RC:THIS}}\\\"\\r\\n class=\\\"no-bottom-margin\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n 0\\\" [min]=\\\"0.01\\\" formatPrice\\r\\n [formatCurrency]=\\\"State.Currency\\\" (onValueChanged)=\\\"OnAmountChange()\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 1\\\" [Component]=\\\"THIS\\\"\\r\\n Name=\\\"lblCreditCardOption\\\" Label=\\\"{{'lblOrderCreditCard' | RC:THIS}}\\\"\\r\\n class=\\\"no-bottom-margin\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseTypePaymentComponent } from '../base/base-type-payment.component';\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-later-payment',\r\n templateUrl: './later-payment.component.html',\r\n styleUrls: ['./../base/base-type-payment.component.scss']\r\n})\r\nexport class LaterPaymentComponent extends BaseTypePaymentComponent {\r\n\r\n constructor(A: ServiceBagService ) {\r\n super(A, 'LaterPaymentComponent');\r\n }\r\n\r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n 0\\\" [min]=\\\"0.01\\\" formatPrice [formatCurrency]=\\\"Currency\\\">\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
{{'btnCancel' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-payment-type-select-dialog',\r\n templateUrl: './payment-type-select-dialog.component.html'\r\n //styleUrls: ['./payment-type-select.component.scss']\r\n})\r\nexport class PaymentTypeSelectDialogComponent extends BasePageComponent {\r\n @Input() AvailablePaymentTypes: EnumPaymentMeans[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentTypeSelectDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n SelectType(type: EnumPaymentMeans) {\r\n this.CloseDialogWithSuccess(type);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('lblChooseAPaymentMethod');\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n PaymentButtons: {\r\n ImageClass: string,\r\n EnumValue: EnumPaymentMeans,\r\n Title: string\r\n }[] = [];\r\n Title: string = null;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-payment-type-select',\r\n templateUrl: './payment-type-select.component.html',\r\n styleUrls: ['./payment-type-select.component.scss']\r\n})\r\nexport class PaymentTypeSelectComponent extends BaseComponent {\r\n @Input() AvailablePaymentTypes: EnumPaymentMeans[] = [];\r\n @Input() ShowTitle: boolean = false;\r\n @Output() OnSelectType = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentTypeSelectComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Title = this.RC('lblChooseAPaymentMethod');\r\n this.SetPaymentButtons();\r\n }\r\n\r\n IsPaymentTypeAllowed(type: EnumPaymentMeans): boolean {\r\n return this.AvailablePaymentTypes.some(apt => apt === type);\r\n }\r\n\r\n private SetPaymentButtons() {\r\n const enumList = this.LIST('EnumPaymentMeans');\r\n this.State.PaymentButtons = [\r\n {\r\n ImageClass: 'later',\r\n EnumValue: EnumPaymentMeans.Later,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.Later).Text\r\n },\r\n {\r\n ImageClass: 'cash',\r\n EnumValue: EnumPaymentMeans.Cash,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.Cash).Text\r\n },\r\n {\r\n ImageClass: 'cheque',\r\n EnumValue: EnumPaymentMeans.Cheque,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.Cheque).Text\r\n },\r\n {\r\n ImageClass: 'go-credit',\r\n EnumValue: EnumPaymentMeans.CreditCard,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.CreditCard).Text\r\n },\r\n {\r\n ImageClass: 'wire',\r\n EnumValue: EnumPaymentMeans.WireTransfer,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.WireTransfer).Text\r\n }];\r\n }\r\n\r\n SelectType(type: EnumPaymentMeans) {\r\n this.OnSelectType.emit(type);\r\n }\r\n}","export default \"
\\r\\n {{State.Title}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{button.Title}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseTypePaymentComponent } from '../base/base-type-payment.component';\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-wire-payment',\r\n templateUrl: './wire-payment.component.html',\r\n styleUrls: ['./../base/base-type-payment.component.scss']\r\n})\r\nexport class WirePaymentComponent extends BaseTypePaymentComponent {\r\n\r\n constructor(A: ServiceBagService ) {\r\n super(A, 'WirePaymentComponent');\r\n }\r\n\r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n 0\\\" [min]=\\\"0.01\\\" formatPrice [formatCurrency]=\\\"Currency\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
{{'btnCancel' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ShoppingPayment } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentCashItem } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentChequeItem } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentLaterItem } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentWireItem } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentCreditCardItem } from './../entities/shoppingpayment.entity';\r\nimport { ShoppingPaymentDocumentItem } from './../entities/shoppingpayment.entity';\r\nexport class ShoppingPaymentView extends ShoppingPayment {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingPaymentView';\r\n }\r\n \r\n public ShoppingPaymentCashItemViews: ShoppingPaymentCashItem[] = []; \r\n public ShoppingPaymentChequeItemViews: ShoppingPaymentChequeItem[] = []; \r\n public ShoppingPaymentLaterItemViews: ShoppingPaymentLaterItem[] = []; \r\n public ShoppingPaymentWireItemViews: ShoppingPaymentWireItem[] = []; \r\n public ShoppingPaymentCreditCardItemViews: ShoppingPaymentCreditCardItem[] = []; \r\n public ShoppingPaymentDocumentItemViews: ShoppingPaymentDocumentItem[] = []; \r\n public AnyPaymentDone: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\r\nimport { EnumCreditCardPaymentStatus, EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { ShoppingPaymentView } from '@dino-proxy/views/shoppingpayment.view';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { PaymentTypeSelectDialogComponent } from './components/payment-type-select-dialog/payment-type-select-dialog.component';\r\nimport { UpdateShoppingPaymentParams } from '@dino-proxy/params/updateshoppingpayment.param';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CreditCardPaymentStage2Params } from '@dino-proxy/params/creditcardpaymentstage2.param';\r\nimport { DeletePaymentParams } from '@dino-proxy/params/deletepayment.param';\r\nimport {\r\n ShoppingPaymentCashItem, ShoppingPaymentChequeItem, ShoppingPaymentCreditCardItem, ShoppingPaymentLaterItem,\r\n ShoppingPaymentWireItem\r\n} from '@dino-proxy/entities/shoppingpayment.entity';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CreditCardPaymentDialogComponent } from './components/credit-card-payment-dialog/credit-card-payment-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { NavigationTabCode } from '@dino-pages/checkout2/components/checkout-navigator/checkout-navigator.component';\r\n\r\nclass DonePayment {\r\n PaymentType: EnumPaymentMeans;\r\n PaymentObject: {\r\n LineID: number,\r\n Identifier: string,\r\n Amount: number\r\n };\r\n}\r\n\r\nclass State extends BaseOptionState {\r\n AllowedPaymentTypes: EnumPaymentMeans[] = [];\r\n SelectedTabIndex: number = 1;\r\n IsAllPaymentDone: boolean = false;\r\n DonePayments: DonePayment[] = [];\r\n FixedPrice: number = 0;\r\n IsMobile: boolean = false;\r\n LeftPaymentAmount: number = 0;\r\n ExceededAmount: number = 0;\r\n DeleteDisabled: boolean = false;\r\n IsWideScreen: boolean = false;\r\n IsPaymentInProgress: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-payment',\r\n templateUrl: './payment.component.html',\r\n styleUrls: ['./payment.component.scss']\r\n})\r\nexport class PaymentComponent extends BaseComponent {\r\n private _shoppingCart: ShoppingCartView;\r\n private _totalAfterVat: number = 0;\r\n private _tabCode: NavigationTabCode = 'items';\r\n\r\n Entity: ShoppingPaymentView = new ShoppingPaymentView();\r\n\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @ViewChild(CreditCardPaymentDialogComponent) creditCardPaymentDialog: CreditCardPaymentDialogComponent;\r\n @ViewChild('paymentSelectDialog') paymentSelectDialog: PaymentTypeSelectDialogComponent;\r\n\r\n @Input() Currency: string;\r\n @Input() UseShoppingCart: boolean = false;\r\n @Input()\r\n set TabCode(code: NavigationTabCode) {\r\n this._tabCode = code;\r\n if (this.UseShoppingCart && this._tabCode === 'payment') {\r\n this.CheckNavigateOnlyOneMethod();\r\n }\r\n if (this.UseShoppingCart && this._tabCode !== 'payment') {\r\n this.SetTab(1);\r\n }\r\n }\r\n get TabCode(): NavigationTabCode {\r\n return this._tabCode;\r\n }\r\n @Input()\r\n set ShoppingCart(value: ShoppingCartView) {\r\n this._shoppingCart = value;\r\n const fixedPrice = this._shoppingCart?.TotalAfterVat;\r\n if (!this.State.CustomerOption?.PaymentOption?.IsAllowSplitPayment) {\r\n this.State.FixedPrice = fixedPrice || 0;\r\n }\r\n if (value && this._shoppingCart.ShoppingPaymentID > 0 && this.Entity.TotalAmount != this._shoppingCart.PaidAmount) {\r\n this.shoppingPaymentEndpoint.GetByID(this._shoppingCart.ShoppingPaymentID).subscribe(response => {\r\n if (response.IsSuccess && !!response.Entity) {\r\n this.Entity = response.Entity;\r\n this.SetDonePayments();\r\n this.RecalculateIsPaymentDone();\r\n return;\r\n }\r\n });\r\n return;\r\n }\r\n this.RecalculateIsPaymentDone();\r\n }\r\n get ShoppingCart(): ShoppingCartView {\r\n return this._shoppingCart;\r\n }\r\n @Input()\r\n set TotalAfterVat(value: number) {\r\n this._totalAfterVat = Utils.Round(value);\r\n this.SetAvailablePaymentMethods();\r\n this.RecalculateIsPaymentDone();\r\n }\r\n get TotalAfterVat(): number {\r\n return this._totalAfterVat;\r\n }\r\n @Input()\r\n set PaymentEntity(shoppingPayment: ShoppingPaymentView) {\r\n if (shoppingPayment != null) {\r\n this.Entity = shoppingPayment;\r\n this.SetDonePayments();\r\n this.RecalculateIsPaymentDone();\r\n }\r\n }\r\n\r\n @Output() OnPaymentChangeIsPaymentComplete = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingPaymentEndpoint: ShoppingPaymentEndpoint,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private screenService: ScreenService,\r\n private shoppingCartService: ShoppingCartService) {\r\n super(A, 'PaymentComponent', State);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n\r\n public get IsAllowCreditCardSaving() {\r\n return this.State.CustomerOption?.PaymentOption?.IsAllowCreditCardSaving\r\n && !(this.Entity\r\n && this.Entity.ShoppingPaymentCreditCardItemViews\r\n && this.Entity.ShoppingPaymentCreditCardItemViews.length > 0\r\n && this.Entity.ShoppingPaymentCreditCardItemViews.some(c => c.IsSaveCreditCard && c.Status === EnumCreditCardPaymentStatus.Paid));\r\n }\r\n\r\n public get OnlyLaterPayment(): boolean {\r\n return this.State.DonePayments.every(p => p.PaymentType === EnumPaymentMeans.Later);\r\n }\r\n \r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n if (!this.UseShoppingCart) {\r\n this.CheckNavigateOnlyOneMethod();\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Entity.Currency = this.ShoppingCart?.Currency || this.Currency;\r\n this.Entity.DocumentID = this.ShoppingCart ? this.ShoppingCart.EntryID : 0;\r\n\r\n this.SetAvailablePaymentMethods();\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n const hasShoppingcart = !!this.ShoppingCart; // up to doc scope, maybe var\r\n (window.document as any).OnSuccessfulPayment = (PrivateRequestID: string) => {\r\n this.OnSuccessfulPaymentHandler(PrivateRequestID, this.UseShoppingCart);\r\n };\r\n\r\n if (hasShoppingcart && this.ShoppingCart.ShoppingPaymentID > 0) {\r\n this.shoppingPaymentEndpoint.GetByID(this.ShoppingCart.ShoppingPaymentID).subscribe(response => {\r\n if (response.IsSuccess && !!response.Entity) {\r\n this.Entity = response.Entity;\r\n this.SetDonePayments();\r\n this.RecalculateIsPaymentDone();\r\n }\r\n });\r\n }\r\n }\r\n\r\n SetTab(tabId: number) {\r\n this.State.SelectedTabIndex = tabId;\r\n }\r\n\r\n CheckNavigateOnlyOneMethod() {\r\n if (this.State.AllowedPaymentTypes.length === 1 && !this.State.IsAllPaymentDone) {\r\n this.SelectPaymentType(this.State.AllowedPaymentTypes[0]);\r\n }\r\n }\r\n\r\n OnPaymentDone(paymentType: EnumPaymentMeans, paymentEntity: any, shoppingPaymentFromCreditCard: ShoppingPaymentView = null) {\r\n if (!paymentEntity) {\r\n this.SetTab(1);\r\n return;\r\n }\r\n\r\n if (this.State.IsPaymentInProgress && !shoppingPaymentFromCreditCard) {\r\n return;\r\n }\r\n\r\n this.State.IsPaymentInProgress = true;\r\n\r\n const paymentDoneHadler = () => {\r\n paymentEntity.PaymentDate = new Date();\r\n let paymentItem = null;\r\n const donePayment = {\r\n PaymentType: paymentType,\r\n PaymentObject: {\r\n Amount: paymentEntity.Amount\r\n }\r\n } as DonePayment;\r\n\r\n const params = {\r\n ShoppingPaymentView: this.Entity,\r\n UseShoppingCart: this.UseShoppingCart\r\n } as UpdateShoppingPaymentParams;\r\n\r\n switch (paymentType) {\r\n case EnumPaymentMeans.Cash: {\r\n paymentItem = paymentEntity as ShoppingPaymentCashItem;\r\n params.CashItem = paymentItem;\r\n this.shoppingPaymentEndpoint.SaveCashPayments(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n donePayment.PaymentObject.LineID = result.Entity.ShoppingPaymentCashItem.LineID;\r\n this.SetPaymentSaveResponse(result.Entity.ShoppingPayment, donePayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n break;\r\n }\r\n case EnumPaymentMeans.Cheque: {\r\n paymentItem = paymentEntity as ShoppingPaymentChequeItem;\r\n params.ChequeItem = paymentItem;\r\n this.shoppingPaymentEndpoint.SaveChequePayments(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n donePayment.PaymentObject.Identifier =\r\n `${paymentItem.BankCode}-${paymentItem.BankBranch}-${paymentItem.BankAccountNumber}-${paymentItem.ChequeNumber}`;\r\n donePayment.PaymentObject.LineID = result.Entity.ShoppingPaymentChequeItem.LineID;\r\n this.SetPaymentSaveResponse(result.Entity.ShoppingPayment, donePayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n break;\r\n }\r\n case EnumPaymentMeans.WireTransfer: {\r\n paymentItem = paymentEntity as ShoppingPaymentWireItem;\r\n params.WireItem = paymentItem;\r\n this.shoppingPaymentEndpoint.SaveWirePayments(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n donePayment.PaymentObject.Identifier = paymentItem.WireRefference;\r\n donePayment.PaymentObject.LineID = result.Entity.ShoppingPaymentWireItem.LineID;\r\n this.SetPaymentSaveResponse(result.Entity.ShoppingPayment, donePayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n break;\r\n }\r\n case EnumPaymentMeans.CreditCard: {\r\n paymentItem = paymentEntity as ShoppingPaymentCreditCardItem;\r\n donePayment.PaymentObject.Identifier = paymentItem.CreditCardNum;\r\n donePayment.PaymentObject.LineID = paymentItem.LineID;\r\n this.SetPaymentSaveResponse(shoppingPaymentFromCreditCard, donePayment);\r\n break;\r\n }\r\n case EnumPaymentMeans.Later: {\r\n paymentItem = paymentEntity as ShoppingPaymentLaterItem;\r\n params.LaterItem = paymentItem;\r\n this.shoppingPaymentEndpoint.SaveLaterPayments(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n donePayment.PaymentObject.LineID = result.Entity.ShoppingPaymentLaterItem.LineID;\r\n this.SetPaymentSaveResponse(result.Entity.ShoppingPayment, donePayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n\r\n if (paymentType != EnumPaymentMeans.CreditCard) {\r\n const exceededAmpount = Utils.Round(paymentEntity.Amount - this.State.LeftPaymentAmount);\r\n\r\n if (this.UseShoppingCart && exceededAmpount > 0) {\r\n this.UI.StopMessage(this.RC('msgPaidAmountGreatenThanRequired'));\r\n return;\r\n } else if (!this.UseShoppingCart && Utils.Round((this.State.LeftPaymentAmount - paymentEntity.Amount)) < 0) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('lblPaymentExceeded');\r\n this.messageDialog.Prompt = this.RC('lblPaymentExceededPrompt',\r\n `${exceededAmpount} ${this.Entity.Currency}`);\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.State.ExceededAmount = exceededAmpount;\r\n paymentDoneHadler();\r\n });\r\n return;\r\n }\r\n }\r\n\r\n paymentDoneHadler();\r\n }\r\n\r\n private SetPaymentSaveResponse(shoppingPayment: ShoppingPaymentView, donePayment: DonePayment) {\r\n this.Entity = shoppingPayment;\r\n this.State.DonePayments.push(donePayment);\r\n this.RecalculateIsPaymentDone();\r\n this.SetTab(1);\r\n this.State.IsPaymentInProgress = false;\r\n }\r\n\r\n SelectPaymentType(paymentType: EnumPaymentMeans): void {\r\n switch (paymentType) {\r\n case EnumPaymentMeans.Cash: {\r\n this.SetTab(2);\r\n break;\r\n }\r\n case EnumPaymentMeans.Cheque: {\r\n this.SetTab(3);\r\n break;\r\n }\r\n case EnumPaymentMeans.WireTransfer: {\r\n this.SetTab(4);\r\n break;\r\n }\r\n case EnumPaymentMeans.CreditCard: {\r\n this.OpenCreditCardDialog();\r\n break;\r\n }\r\n case EnumPaymentMeans.Later: {\r\n if (this.State.FixedPrice > 0) {\r\n const laterItem = new ShoppingPaymentLaterItem();\r\n laterItem.Amount = this.State.FixedPrice;\r\n this.OnPaymentDone(EnumPaymentMeans.Later, laterItem);\r\n } else {\r\n this.SetTab(5);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n OpenSelectTypeDialog() {\r\n if (this.State.CustomerOption.PaymentOption.IsAllowChequePayment && !this.State.CustomerOption.PaymentOption.IsAllowSplitPayment) {\r\n this.paymentSelectDialog.AvailablePaymentTypes = [EnumPaymentMeans.Cheque];\r\n } else {\r\n this.paymentSelectDialog.AvailablePaymentTypes = this.State.AllowedPaymentTypes;\r\n }\r\n\r\n this.paymentSelectDialog.ShowDialogShort(type => {\r\n if (type) {\r\n this.SelectPaymentType(type);\r\n }\r\n });\r\n }\r\n\r\n OpenCreditCardDialog() {\r\n this.creditCardPaymentDialog.SetupData(\r\n this.IsAllowCreditCardSaving,\r\n this.State.CustomerOption?.PaymentOption?.IsAllowUsingExistingCreditCard,\r\n this.Entity,\r\n this.UseShoppingCart,\r\n this.State.FixedPrice,\r\n this.State.LeftPaymentAmount,\r\n this.ShoppingCart?.Currency || this.Currency);\r\n this.creditCardPaymentDialog.ShowDialogShort(result => this.OnPayWithExistingCard(result));\r\n }\r\n\r\n GetDonePaymentLabel(donePayment: DonePayment): string {\r\n const enumList = this.LIST('EnumPaymentMeans');\r\n let identifierTitle = enumList.find(l => l.Value === donePayment.PaymentType).Text;\r\n if (donePayment.PaymentObject.Identifier) {\r\n identifierTitle += ` - ${donePayment.PaymentObject.Identifier}`;\r\n }\r\n return identifierTitle;\r\n }\r\n\r\n GetImageClass(paymentType: EnumPaymentMeans): string {\r\n let imageClassName = '';\r\n switch (paymentType) {\r\n case EnumPaymentMeans.Cash: {\r\n imageClassName = 'cash';\r\n break;\r\n }\r\n case EnumPaymentMeans.Cheque: {\r\n imageClassName = 'cheque';\r\n break;\r\n }\r\n case EnumPaymentMeans.WireTransfer: {\r\n imageClassName = 'wire';\r\n break;\r\n }\r\n case EnumPaymentMeans.CreditCard: {\r\n imageClassName = 'go-credit';\r\n break;\r\n }\r\n case EnumPaymentMeans.Later: {\r\n imageClassName = 'later';\r\n break;\r\n }\r\n }\r\n\r\n return `image ${imageClassName}`;\r\n }\r\n\r\n OnCreateShoppingPayment(entryID: number) {\r\n this.Entity.EntryID = entryID;\r\n }\r\n\r\n OnCardItemExceedAmountChange(exceedAmount: number) {\r\n this.State.ExceededAmount = exceedAmount;\r\n }\r\n\r\n OnPayWithExistingCard(creditCardItem: ShoppingPaymentCreditCardItem) {\r\n if (!creditCardItem) {\r\n this.SetTab(1);\r\n return;\r\n }\r\n\r\n if (this.State.IsPaymentInProgress) {\r\n return;\r\n }\r\n\r\n this.State.IsPaymentInProgress = true;\r\n\r\n if (!this.UseShoppingCart && creditCardItem.Amount > this.State.LeftPaymentAmount) {\r\n this.State.ExceededAmount = Utils.Round(creditCardItem.Amount - this.State.LeftPaymentAmount);\r\n }\r\n\r\n const params = {\r\n ShoppingPaymentView: this.Entity,\r\n UseShoppingCart: this.UseShoppingCart,\r\n CreditCardItem: creditCardItem\r\n } as UpdateShoppingPaymentParams;\r\n this.shoppingPaymentEndpoint.MakePaymentWithExistingCreditCard(params)\r\n .subscribe(result => {\r\n if (result.IsSuccess) {\r\n this.OnPaymentDone(EnumPaymentMeans.CreditCard,\r\n result.Entity.ShoppingPaymentCreditCardItem, result.Entity.ShoppingPayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n DeletePayment(donePayment: DonePayment) {\r\n if (this.State.DeleteDisabled) {\r\n return;\r\n }\r\n this.State.DeleteDisabled = true;\r\n const params = {\r\n PaymentType: donePayment.PaymentType,\r\n PaymentLineID: donePayment.PaymentObject.LineID,\r\n ShoppingPaymentID: this.Entity.EntryID,\r\n UseShoppingCart: this.UseShoppingCart\r\n } as DeletePaymentParams;\r\n\r\n const deleteAction = () => this.shoppingPaymentEndpoint.DeletePayment(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n this.Entity = result.Entity;\r\n this.State.DonePayments = this.State.DonePayments.filter(p => (p.PaymentType !== donePayment.PaymentType)\r\n || (p.PaymentObject.LineID !== donePayment.PaymentObject.LineID));\r\n if (this.UseShoppingCart) {\r\n this.shoppingCartService.load(false);\r\n }\r\n this.RecalculateIsPaymentDone();\r\n this.SetTab(1);\r\n } else {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n\r\n this.State.DeleteDisabled = false;\r\n });\r\n\r\n if (donePayment.PaymentType === EnumPaymentMeans.CreditCard) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('lblCreditCardPaymentDelete');\r\n this.messageDialog.Prompt = this.RC('lblCreditCardPaymentDeletePrompt');\r\n this.messageDialog.ShowDialogShort(() => {\r\n deleteAction();\r\n }, () => {\r\n this.State.DeleteDisabled = false;\r\n });\r\n return;\r\n }\r\n\r\n deleteAction();\r\n }\r\n\r\n private SetAvailablePaymentMethods() {\r\n if (this.State.CustomerOption.PaymentOption.IsAllowCashPayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.Cash)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.Cash);\r\n }\r\n if (this.State.CustomerOption.PaymentOption.IsAllowChequePayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.Cheque)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.Cheque);\r\n }\r\n if (this.State.CustomerOption.PaymentOption.IsAllowLaterPayment\r\n && (this.UseShoppingCart ? !!this.ShoppingCart : false) && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.Later)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.Later);\r\n }\r\n if (this.State.CustomerOption.PaymentOption.IsAllowWirePayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.WireTransfer)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.WireTransfer);\r\n }\r\n if (this.State.CustomerOption.PaymentOption.IsAllowGoCreditPayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.CreditCard)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.CreditCard);\r\n }\r\n\r\n const fixedPrice = this.ShoppingCart?.TotalAfterVat || this.TotalAfterVat;\r\n if (!this.State.CustomerOption?.PaymentOption?.IsAllowSplitPayment) {\r\n this.State.FixedPrice = fixedPrice;\r\n }\r\n }\r\n\r\n private RecalculateIsPaymentDone() {\r\n this.State.IsAllPaymentDone = this.Entity.TotalAmount === (this.ShoppingCart?.TotalAfterVat || this.TotalAfterVat)\r\n && this.Entity.TotalAmount > 0;\r\n this.State.LeftPaymentAmount = Utils.Round((this.ShoppingCart?.TotalAfterVat || this.TotalAfterVat) - (this.Entity.TotalAmount || 0));\r\n this.CheckWireAndCashAndLaterOnlyOne();\r\n\r\n const laterPayments = this.State.DonePayments.filter(p => p.PaymentType === EnumPaymentMeans.Later);\r\n let laterAmount = 0;\r\n if (laterPayments.length > 0) {\r\n laterAmount = Utils.Round(laterPayments.reduce((accumulator, payment) => {\r\n return accumulator + payment.PaymentObject.Amount;\r\n }, 0));\r\n }\r\n this.OnPaymentChangeIsPaymentComplete.emit({\r\n PaymentDone: this.State.IsAllPaymentDone,\r\n ShoppingPaymentID: this.Entity.EntryID,\r\n PaidAmount: Utils.Round(this.Entity.TotalAmount - laterAmount),\r\n PaidAmountWithLater: this.Entity.TotalAmount,\r\n ExceededAmount: this.State.ExceededAmount,\r\n OnlyLaterPayment: this.OnlyLaterPayment,\r\n ShoppingPaymentView: this.Entity\r\n });\r\n\r\n this.State.ExceededAmount = 0;\r\n }\r\n\r\n private CheckWireAndCashAndLaterOnlyOne() {\r\n const wirePaymentExists = this.State.DonePayments.some(p => p.PaymentType === EnumPaymentMeans.WireTransfer);\r\n const cashPaymentExists = this.State.DonePayments.some(p => p.PaymentType === EnumPaymentMeans.Cash);\r\n const laterPaymentExists = this.State.DonePayments.some(p => p.PaymentType === EnumPaymentMeans.Later);\r\n this.State.AllowedPaymentTypes = this.State.AllowedPaymentTypes.filter(apt =>\r\n (wirePaymentExists ? apt !== EnumPaymentMeans.WireTransfer : true)\r\n && (cashPaymentExists ? apt !== EnumPaymentMeans.Cash : true)\r\n && (laterPaymentExists ? apt !== EnumPaymentMeans.Later : true)\r\n );\r\n\r\n if (this.State.AllowedPaymentTypes.length === 1\r\n && (this.State.AllowedPaymentTypes[0] === EnumPaymentMeans.Cash\r\n || this.State.AllowedPaymentTypes[0] === EnumPaymentMeans.WireTransfer\r\n || this.State.AllowedPaymentTypes[0] === EnumPaymentMeans.Later)) {\r\n this.State.FixedPrice = this.State.LeftPaymentAmount;\r\n }\r\n\r\n if (this.State.CustomerOption.PaymentOption.IsAllowCashPayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.Cash)\r\n && !cashPaymentExists) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.Cash);\r\n }\r\n\r\n if (this.State.CustomerOption.PaymentOption.IsAllowWirePayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.WireTransfer)\r\n && !wirePaymentExists) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.WireTransfer);\r\n }\r\n\r\n if (this.State.CustomerOption.PaymentOption.IsAllowLaterPayment\r\n && !this.State.AllowedPaymentTypes.some(type => type === EnumPaymentMeans.Later)\r\n && !laterPaymentExists\r\n && (this.UseShoppingCart ? !!this.ShoppingCart : false)) {\r\n this.State.AllowedPaymentTypes.push(EnumPaymentMeans.Later);\r\n }\r\n }\r\n\r\n protected OnSuccessfulPaymentHandler(privateRequestID: string, useShoppingCart: boolean) {\r\n this.creditCardPaymentDialog.ClosePage();\r\n // fix: paymentDialog doesn't close.\r\n this.changeDetectorRef.detectChanges();\r\n\r\n const params = {\r\n PrivateRequestID: privateRequestID,\r\n UseShoppingCart: useShoppingCart\r\n } as CreditCardPaymentStage2Params;\r\n\r\n this.shoppingPaymentEndpoint.MakeNewCreditCardPaymentStage2(params)\r\n .subscribe(result => {\r\n if (result.IsSuccess) {\r\n this.OnPaymentDone(EnumPaymentMeans.CreditCard,\r\n result.Entity.ShoppingPaymentCreditCardItem, result.Entity.ShoppingPayment);\r\n } else {\r\n this.State.IsPaymentInProgress = false;\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n }\r\n\r\n private SetDonePayments() {\r\n this.State.DonePayments.length = 0;\r\n this.Entity.ShoppingPaymentCashItemViews.forEach(cashItem => {\r\n this.State.DonePayments.push({\r\n PaymentType: EnumPaymentMeans.Cash,\r\n PaymentObject: {\r\n LineID: cashItem.LineID,\r\n Amount: cashItem.Amount\r\n }\r\n } as DonePayment);\r\n });\r\n this.Entity.ShoppingPaymentChequeItemViews.forEach(chequeItem => {\r\n this.State.DonePayments.push({\r\n PaymentType: EnumPaymentMeans.Cheque,\r\n PaymentObject: {\r\n LineID: chequeItem.LineID,\r\n Identifier: `${chequeItem.BankCode}-${chequeItem.BankBranch}-${chequeItem.BankAccountNumber}-${chequeItem.ChequeNumber}`,\r\n Amount: chequeItem.Amount\r\n }\r\n } as DonePayment);\r\n });\r\n this.Entity.ShoppingPaymentWireItemViews.forEach(wireItem => {\r\n this.State.DonePayments.push({\r\n PaymentType: EnumPaymentMeans.WireTransfer,\r\n PaymentObject: {\r\n LineID: wireItem.LineID,\r\n Identifier: wireItem.WireRefference,\r\n Amount: wireItem.Amount\r\n }\r\n } as DonePayment);\r\n });\r\n this.Entity.ShoppingPaymentCreditCardItemViews.forEach(creditCardItem => {\r\n if (creditCardItem.Status === EnumCreditCardPaymentStatus.Paid) {\r\n this.State.DonePayments.push({\r\n PaymentType: EnumPaymentMeans.CreditCard,\r\n PaymentObject: {\r\n LineID: creditCardItem.LineID,\r\n Identifier: creditCardItem.CreditCardNum,\r\n Amount: creditCardItem.Amount\r\n }\r\n } as DonePayment);\r\n }\r\n });\r\n this.Entity.ShoppingPaymentLaterItemViews.forEach(laterItem => {\r\n this.State.DonePayments.push({\r\n PaymentType: EnumPaymentMeans.Later,\r\n PaymentObject: {\r\n LineID: laterItem.LineID,\r\n Amount: laterItem.Amount\r\n }\r\n } as DonePayment);\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
{{'lblCompletePaymentTitle' | RC:THIS}}
\\r\\n
{{'lblCompleteLaterPaymentTitle' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n 0\\\">\\r\\n
\\r\\n \\r\\n
{{'lblCompletePaymentTitle' | RC:THIS}}
\\r\\n
{{'lblCompleteLaterPaymentTitle' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblPaymentMethod' | RC:THIS}}
\\r\\n
{{'lblPaymentMade' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
{{GetDonePaymentLabel(payment)}}
\\r\\n
{{Entity.Currency + ' ' + payment.PaymentObject.Amount}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n 0\\\"\\r\\n class=\\\"add-payment-method-button\\\" Mode=\\\"light\\\" Type=\\\"default\\\" Icon=\\\"mdi mdi-plus\\\"\\r\\n Text=\\\"{{'btnAddPaymentMethod' | RC:THIS}}\\\" (OnClick)=\\\"OpenSelectTypeDialog()\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Assortment } from './../entities/assortment.entity';\r\n@Injectable()\r\nexport class AssortmentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Assortment\", api);}\r\n\t\r\n\r\n public GetCustomerAssortment() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCustomerAssortment', undefined );\r\n }\r\n}\r\n\r\n","import { Component, Input, EventEmitter, Output } from '@angular/core';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';;\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { AssortmentEndpoint } from '@dino-proxy/endpoints/assortment.endpoint';\r\nimport { Assortment } from '@dino-proxy/entities/assortment.entity';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumAssortmentVisibilityModes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseOptionState {\r\n Assortments: Assortment[] = [];\r\n SelectedAssortmentID: number;\r\n}\r\n\r\nconst DEFAULT_ASSORTMENT_ID: number = -1;\r\n\r\n@Component({\r\n selector: 'app-assortment',\r\n templateUrl: './assortment.component.html',\r\n styleUrls: ['./assortment.component.scss'],\r\n})\r\nexport class AssortmentComponent extends BaseCustomerComponent {\r\n @Input() Mode: 'apply' | 'event' = 'apply';\r\n @Input() View: 'normal' | 'flat' = 'normal';\r\n @Output() OnAssortmentChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private assortmentEndpoint: AssortmentEndpoint,\r\n private itemsFilterService: ItemsFilterService,\r\n public customerService: CustomerService) {\r\n super(A, 'AssortmentComponent', State, customerService);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadAssortment(() => {\r\n //if (this.SetShownByDefault()) return;\r\n\r\n if (!this.State.SelectedAssortmentID) this.State.SelectedAssortmentID = DEFAULT_ASSORTMENT_ID;\r\n });\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n if (!filter.AssortmentID) {\r\n this.State.SelectedAssortmentID = DEFAULT_ASSORTMENT_ID;\r\n } else {\r\n const idx = this.State.Assortments.findIndex(x => x.EntryID === filter.AssortmentID);\r\n if (idx === -1) {\r\n this.LoadAssortment(() => { this.State.SelectedAssortmentID = filter.AssortmentID; });\r\n } else {\r\n this.State.SelectedAssortmentID = filter.AssortmentID;\r\n }\r\n }\r\n });\r\n\r\n // const filter$Subscription = this.itemsFilterService.filter$\r\n // .subscribe(filter => {\r\n // if (!filter.AssortmentID) {\r\n // this.State.SelectedAssortmentID = DEFAULT_ASSORTMENT_ID;\r\n // } else {\r\n // const idx = this.State.Assortments.findIndex(x => x.EntryID === filter.AssortmentID);\r\n // if (idx === -1) {\r\n // this.LoadAssortment(() => {\r\n // const idx = this.State.Assortments.findIndex(x => x.EntryID === filter.AssortmentID);\r\n // if (idx === -1) {\r\n // if (!this.SetShownByDefault()) this.State.SelectedAssortmentID = DEFAULT_ASSORTMENT_ID;\r\n // } else {\r\n // this.State.SelectedAssortmentID = filter.AssortmentID;\r\n // }\r\n // });\r\n // } else {\r\n // this.State.SelectedAssortmentID = filter.AssortmentID;\r\n // }\r\n // }\r\n // });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n SetShownByDefault() {\r\n if (this.State.CustomerOption?.CatalogueOption?.AssortmentVisibilityMode === EnumAssortmentVisibilityModes.ShownByDefault && this.State.Assortments?.length === 2) {\r\n const ass = this.State.Assortments.find(x => x.EntryID !== DEFAULT_ASSORTMENT_ID);\r\n if (ass) this.State.SelectedAssortmentID = ass.EntryID;\r\n this.ApplyAssortment();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n SetValue(value: number) {\r\n this.State.SelectedAssortmentID = value;\r\n this.ApplyAssortment();\r\n }\r\n\r\n LoadAssortment(func: () => void) {\r\n this.assortmentEndpoint.GetCustomerAssortment()\r\n .subscribe(response => {\r\n this.State.Assortments = this.GetDefaultAssortment().concat(response.Entities);\r\n func && func();\r\n });\r\n }\r\n\r\n GetDefaultAssortment() {\r\n const resetAssortment: Assortment = { EntryID: DEFAULT_ASSORTMENT_ID, CustomerID: undefined, Name: this.RC('lblNoAssortment'), Items: [] };\r\n return [resetAssortment];\r\n }\r\n\r\n OnAssortmentItemClick(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.ApplyAssortment();\r\n }\r\n\r\n OnAssortmentClick(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.State.SelectedAssortmentID = this.IsAssortmentSelected() ? -1 : this.GetCustomerAssortment()[0].EntryID;\r\n this.ApplyAssortment();\r\n }\r\n\r\n ApplyAssortment() {\r\n const assortmentID = (!this.State.SelectedAssortmentID || this.State.SelectedAssortmentID === DEFAULT_ASSORTMENT_ID) ? null : this.State.SelectedAssortmentID;\r\n const filterPatch = { AssortmentID: assortmentID } as ItemsFilter;\r\n\r\n if (this.Mode === 'apply') {\r\n this.itemsFilterService.apply(filterPatch, ItemsFilterApplyTypes.Overwrite);\r\n } else {\r\n this.OnAssortmentChanged.emit(filterPatch);\r\n }\r\n }\r\n\r\n GetButtonText() {\r\n return this.IsAssortmentSelected()\r\n ? this.State.Assortments.find(x => x.EntryID === this.State.SelectedAssortmentID).Name\r\n : !this.IsMoreThanOneAssortment() ? this.State.Assortments[0].Name : this.RC('btnShowAssortment');\r\n }\r\n\r\n IsAssortmentSelected() {\r\n return this.State.SelectedAssortmentID && this.State.SelectedAssortmentID !== DEFAULT_ASSORTMENT_ID;\r\n }\r\n\r\n IsMoreThanOneAssortment() {\r\n return this.GetCustomerAssortment().length > 1;\r\n }\r\n\r\n IsAssortmentExists() {\r\n return this.GetCustomerAssortment().length > 0;\r\n }\r\n\r\n GetCustomerAssortment() {\r\n return this.State.Assortments.filter(item => !!item.CustomerID);\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{item.Name}}
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { BaseEntity, GenericListEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { DxDataGridComponent } from \"devextreme-angular\";\r\nimport { MessageBoxDialogComponent } from \"@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component\";\r\nimport { BaseDocumentView } from \"@dino-proxy/views/basedocument.view\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { UI_EVENTS, UiComponentService } from \"@dino-services/ui-component.service\";\r\n\r\nclass State extends BaseOptionState {\r\n BaseDocuments: BaseDocumentView[] = [];\r\n BaseDocumentsByType: BaseDocumentView[] = [];\r\n OnlyOneTypeAvailable: boolean = false;\r\n SelectedDocuments: BaseDocumentView[] = [];\r\n\r\n SelectedDocType: EnumDocumentTypes;\r\n ListAvailableDocTypes: GenericListEntity[] = [];\r\n ListDocTypes: GenericListEntity[] = [];\r\n\r\n ShoppingCartItemsExisted: boolean = false;\r\n IsMobile: boolean = false;\r\n DataSource: DataSourceCustomAction;\r\n}\r\n\r\n@Component({\r\n selector: 'app-base-document-dialog',\r\n templateUrl: './base-document-dialog.component.html',\r\n styleUrls: ['./base-document-dialog.component.scss'],\r\n})\r\nexport class BaseDocumentDialogComponent extends BasePageComponent {\r\n @ViewChild('dataGrid') dataGrid: DxDataGridComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'BaseDocumentDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.RC('titleBaseDocumentDialog');\r\n }\r\n\r\n public override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n const docTypes = this.State.BaseDocuments.map(bd => bd.DocumentType);\r\n const uniqTypes = docTypes.filter((value, index) => docTypes.indexOf(value) === index);\r\n this.State.ListAvailableDocTypes = this.State.ListDocTypes.filter(ldt => uniqTypes.includes(ldt.Value as EnumDocumentTypes));\r\n\r\n if (uniqTypes.length === 1) {\r\n this.State.OnlyOneTypeAvailable = true;\r\n this.State.SelectedDocType = uniqTypes[0];\r\n this.FilterBaseDocuments();\r\n }\r\n }\r\n\r\n public SetupData(documents: BaseDocumentView[], shoppingCartItemsExisted: boolean) {\r\n this.State.BaseDocuments = documents;\r\n this.State.ListDocTypes = this.LIST('EnumDocumentTypes');\r\n this.State.ShoppingCartItemsExisted = shoppingCartItemsExisted;\r\n }\r\n\r\n public FilterBaseDocuments() {\r\n this.State.BaseDocumentsByType = this.State.BaseDocuments.filter(bdi => bdi.DocumentType === this.State.SelectedDocType);\r\n }\r\n\r\n ngAfterContentChecked(){\r\n if (!!this.State.SelectedDocType && !this.State.IsMobile) {\r\n this.layout?.popup?.instance.repaint();\r\n }\r\n }\r\n\r\n Clear() {\r\n this.State.SelectedDocuments = [];\r\n if (!this.State.IsMobile) {\r\n this.dataGrid.instance.deselectAll()\r\n };\r\n }\r\n\r\n onSelectionChanged(event: any) {\r\n this.State.SelectedDocuments = event.selectedRowsData;\r\n }\r\n\r\n onMobileSelect(event: any, document: BaseDocumentView) {\r\n if (event.value && !this.State.SelectedDocuments.some(d => d.EntryID === document.EntryID)) {\r\n this.State.SelectedDocuments.push(document);\r\n } else if (!event.value && this.State.SelectedDocuments.length > 0) {\r\n this.State.SelectedDocuments = this.State.SelectedDocuments.filter(d => d.EntryID != document.EntryID);\r\n }\r\n }\r\n\r\n onMobileSelectAll(event: any) {\r\n if (event.value) {\r\n this.State.SelectedDocuments = this.State.BaseDocumentsByType;\r\n } else if (!event.value && this.State.SelectedDocuments.length === this.State.BaseDocumentsByType.length) {\r\n this.State.SelectedDocuments = [];\r\n }\r\n }\r\n\r\n OnAddToCart() {\r\n if (this.State.ShoppingCartItemsExisted) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('titleReplace');\r\n this.messageDialog.Prompt = this.RC('promptReplaceShoppingCartItems');\r\n this.messageDialog.ShowDialogShort(() => { this.CloseDialog(); });\r\n } else {\r\n this.CloseDialog();\r\n }\r\n }\r\n\r\n OnClose() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, false);\r\n return true;\r\n }\r\n\r\n CloseDialog() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, false);\r\n this.CloseDialogWithSuccess(this.State.SelectedDocuments);\r\n }\r\n\r\n IsSelected(entryID: number): boolean {\r\n return this.State.SelectedDocuments.some(d => d.EntryID === entryID);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Currency }} {{ cell.data.TotalAfterVat | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblNoDocumentTypeSelected' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { BaseDocumentDialogComponent } from '@dino-pages/product-catalogue2/components/base-document/base-document-dialog/base-document-dialog.component';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { BaseDocumentView } from '@dino-proxy/views/basedocument.view';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n IsAllowUseBaseDocument: boolean = false;\r\n ShoppingCartDescription: ShoppingCartDescriptionResult;\r\n ShoppingCartItems: ShoppingCartItemView[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-use-base-document-button',\r\n templateUrl: './use-base-document-button.component.html'\r\n})\r\nexport class UseBaseDocumentButtonComponent extends BaseComponent {\r\n @Input() HideButton: boolean = false;\r\n\r\n @ViewChild('messageDialogBaseDocument') messageDialogBaseDocument: MessageBoxDialogComponent;\r\n @ViewChild(BaseDocumentDialogComponent) baseDocumentDialog: BaseDocumentDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService,\r\n public documentEndpoint: DocumentEndpoint,\r\n public uiComponentService: UiComponentService) {\r\n super(A, 'DisplayOptionsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n const description$Subscription = this.shoppingCartService.description$\r\n .subscribe(r => {\r\n this.State.ShoppingCartDescription = r;\r\n if (!!r) {\r\n this.State.IsAllowUseBaseDocument = this.customerService.GetIsAllowedBaseDocument(r.DocumentType)\r\n && !this.State.ShoppingCartDescription.DisableShoppingCartChange\r\n && !r.DisableShoppingCartChange;\r\n }\r\n });\r\n\r\n this.RegisterSubscription(description$Subscription);\r\n\r\n const baseDocClick$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG)\r\n )\r\n .subscribe((r) => {\r\n const open = r.Payload;\r\n if (open) {\r\n this.HandleBaseDocument();\r\n }\r\n });\r\n\r\n this.RegisterSubscription(baseDocClick$Subscription);\r\n }\r\n\r\n HandleBaseDocument() {\r\n this.documentEndpoint.GetAvailableBaseDocuments(this.State.ShoppingCartDescription?.DocumentType)\r\n .subscribe(response => {\r\n const documents = response.Data || [];\r\n if (documents.length > 0) {\r\n this.baseDocumentDialog.SetupData(documents, this.State.ShoppingCartDescription.Length > 0);\r\n\r\n this.baseDocumentDialog.ShowDialogShort((documents: BaseDocumentView[]) => {\r\n const documentIDs = documents.map(d => d.EntryID);\r\n this.shoppingCartService.useBaseDocuments(documentIDs, documents[0].DocumentType);\r\n });\r\n } else {\r\n this.messageDialogBaseDocument.Type = EnumMessageBoxTypes.OK;\r\n this.messageDialogBaseDocument.Title = this.RC('titleInformation');\r\n this.messageDialogBaseDocument.IsHideCancel = true;\r\n this.messageDialogBaseDocument.Prompt = this.RC('promptNoBaseDocuments');\r\n this.messageDialogBaseDocument.ShowDialogShort(() => { });\r\n }\r\n })\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { CategoryView } from '@dino-proxy/views/category.view';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { Brand } from '@dino-proxy/entities/brand.entity';\r\nimport { Vendor } from '@dino-proxy/entities/vendor.entity';\r\nimport { Manufacturer } from '@dino-proxy/entities/manufacturer.entity';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\n\r\nclass State extends BaseOptionState {\r\n Items: CategoryView[] = [];\r\n ProcessNumber: number = 0;\r\n Brands: Brand[] = [];\r\n Vendors: Vendor[] = [];\r\n Manufacturers: Manufacturer[] = [];\r\n ClassificationInfo: string = '';\r\n}\r\n\r\n@Component({\r\n selector: 'app-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n})\r\nexport class BreadcrumbComponent extends BaseComponent {\r\n private findRawNodeByCategoryID$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService,\r\n private categoriesService: CategoriesService) {\r\n super(A, 'BreadcrumbComponent', State);\r\n }\r\n\r\n\r\n\r\n override OnInitState() {\r\n this.State.ProcessNumber = 0;\r\n\r\n this.DS('Brands').GetItemsAsync()\r\n .subscribe((brands: Brand[]) => {\r\n this.State.Brands = brands;\r\n });\r\n\r\n this.DS('Vendors').GetItemsAsync()\r\n .subscribe((vendors: Vendor[]) => this.State.Vendors = vendors);\r\n\r\n this.DS('Manufacturers').GetItemsAsync()\r\n .subscribe((manufacturers: Manufacturer[]) => this.State.Manufacturers = manufacturers);\r\n }\r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n this.State.ProcessNumber++;\r\n this.State.Items.length = 0;\r\n if (filter.CategoryID) {\r\n this.FillBreadCrumbItems(filter.CategoryID, this.State.ProcessNumber);\r\n }\r\n\r\n this.ShowClassification(filter);\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.findRawNodeByCategoryID$Subscription\r\n && !this.findRawNodeByCategoryID$Subscription.closed\r\n && this.findRawNodeByCategoryID$Subscription.unsubscribe();\r\n }\r\n\r\n FillBreadCrumbItems(categoryID: number, proccessNumber: number) {\r\n if (proccessNumber !== this.State.ProcessNumber) return;\r\n if (!categoryID) return;\r\n\r\n this.findRawNodeByCategoryID$Subscription = this.categoriesService.findRawNodeByCategoryID(categoryID)\r\n .subscribe(c => {\r\n //\r\n this.findRawNodeByCategoryID$Subscription\r\n && !this.findRawNodeByCategoryID$Subscription.closed\r\n && this.findRawNodeByCategoryID$Subscription.unsubscribe();\r\n //\r\n if (c) {\r\n if (proccessNumber !== this.State.ProcessNumber) return;\r\n this.State.Items.push(c);\r\n this.FillBreadCrumbItems(c.ParentCategoryID, proccessNumber);\r\n }\r\n });\r\n }\r\n\r\n ShowClassification(filter: ItemsFilter) {\r\n this.State.ClassificationInfo = '';\r\n if (!filter.BrandIDs && !filter.VendorIDs && !filter.ManufacturerIDs) {\r\n return;\r\n }\r\n\r\n const getNames = (listName, ids: number[]) => {\r\n if (!ids || !ids.length) {\r\n return '';\r\n }\r\n\r\n const list = this.State[listName] as { EntryID: number, Name: string }[];\r\n const names = ids\r\n .map(x => {\r\n const item = list.find(i => i.EntryID === x);\r\n return item ? item.Name : null;\r\n })\r\n .filter(x => !!x)\r\n .join('; ');\r\n\r\n return names;\r\n };\r\n\r\n const classificationInfo = [\r\n getNames('Brands', filter.BrandIDs),\r\n getNames('Vendors', filter.VendorIDs),\r\n getNames('Manufacturers', filter.ManufacturerIDs)];\r\n\r\n this.State.ClassificationInfo = ` (${classificationInfo.filter(x => !!x).join('; ')})`;\r\n }\r\n\r\n OnCategoryClicked(categoryID) {\r\n this.itemsFilterService.apply({ CategoryID: categoryID }, ItemsFilterApplyTypes.Extend);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{item.Name}}\\r\\n
\\r\\n
\\r\\n {{'titleAllCategories' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n {{'titleAllCategories' | RC:THIS}}\\r\\n {{State.ClassificationInfo}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { DxTreeViewComponent } from \"devextreme-angular\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from \"@dino-services/items-filter.service\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { CategoriesService, CategoryTreeNode } from \"@dino-services/categories.service\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { take } from \"rxjs/operators\";\r\nimport { SidebarService } from \"@m4u-angular/core/framework/sidebar.service\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { ItemsFilter } from \"@dino-classes/items-filter\";\r\nimport { EnumCategoryPaneBehaviour, EnumShoppingCartItemViewOptions, EnumShoppingCartModeOptions } from \"@dino-proxy/enums\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\n\r\nclass State extends BaseOptionState {\r\n Categories: CategoryTreeNode[];\r\n SelectedNode: CategoryTreeNode;\r\n IsMobile: boolean;\r\n HasShoppingCart: boolean;\r\n SerializedFilter: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-categoriespanel',\r\n templateUrl: './categories-panel.component.html',\r\n styleUrls: ['./categories-panel.component.scss'],\r\n})\r\nexport class CategoriesPanelComponent extends BaseCustomerComponent {\r\n @Input() Mode: 'applyFilter' | 'navigate' = 'applyFilter';\r\n private findNodeByCategoryID$Subscription: Subscription;\r\n\r\n @ViewChild(DxTreeViewComponent) treeView: DxTreeViewComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n public itemsFilterService: ItemsFilterService,\r\n public sidebarService: SidebarService,\r\n public categoriesService: CategoriesService,\r\n public customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'CategoriesPanelComponent', State, customerService);\r\n }\r\n\r\n public get IsCatalogueEnabled() { return this.HasCustomer && this.State.HasShoppingCart; }\r\n public get HasCustomer() { return !!this.CustomerID; }\r\n public get HasShoppingCart() { return this.State?.HasShoppingCart; }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n const description$Subscription = this.shoppingCartService.description$\r\n .subscribe(r => {\r\n this.State.HasShoppingCart = !!r;\r\n });\r\n\r\n this.RegisterSubscription(description$Subscription);\r\n\r\n const getCategoriesTree$Subscription = this.categoriesService\r\n .getCategoriesTree()\r\n .subscribe(x => this.SetCategoryTree(x));\r\n\r\n this.RegisterSubscription(getCategoriesTree$Subscription);\r\n }\r\n\r\n override OnCustomerChanged() { }\r\n\r\n override OnInitState() {\r\n this.State.Categories = [this.categoriesService.getRootCategoryNode()];\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n if (!filter.CategoryID) {\r\n this.State.SelectedNode = this.State.Categories[0];\r\n setTimeout(() => {\r\n this.treeView.instance.selectItem(this.State.SelectedNode);\r\n }, 200);\r\n } else if (!this.State.SelectedNode || filter.CategoryID !== this.State.SelectedNode.EntryID) {\r\n this.SetNode(filter.CategoryID);\r\n }\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.findNodeByCategoryID$Subscription\r\n && !this.findNodeByCategoryID$Subscription.closed\r\n && this.findNodeByCategoryID$Subscription.unsubscribe();\r\n }\r\n\r\n\r\n\r\n OnSelectCategory(e) {\r\n if (this.Mode === 'applyFilter') {\r\n e.node.expanded ? e.component.collapseItem(e.node.key) : e.component.expandItem(e.node.key);\r\n const oldNode = this.State.SelectedNode;\r\n this.State.SelectedNode = e.itemData;\r\n\r\n setTimeout(() => {\r\n this.treeView.instance.selectItem(this.State.SelectedNode);\r\n }, 300);\r\n\r\n if (oldNode && oldNode.EntryID !== this.State.SelectedNode.EntryID) {\r\n this.itemsFilterService.apply({\r\n CategoryID: this.State.SelectedNode.EntryID\r\n }, ItemsFilterApplyTypes.Extend);\r\n }\r\n\r\n const catalogueOption = this.State.CustomerOption.CatalogueOption;\r\n if (this.screenService.IsMobile()) {\r\n this.sidebarService.Close('CategoriesPanelComponent');\r\n } else if (catalogueOption.CategoryPaneBehaviour === EnumCategoryPaneBehaviour.HideOnClick && catalogueOption.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Floating) {\r\n this.A.SysEvents.SetPageSidePanelState('ProductCatalogue2Component', false);\r\n } else if (catalogueOption.CategoryPaneBehaviour === EnumCategoryPaneBehaviour.HideOnClick && catalogueOption.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Fixed) {\r\n this.sidebarService.Close('CategoriesPanelComponent');\r\n }\r\n } else {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route], { CategoryID: e.itemData.EntryID })\r\n );\r\n }\r\n }\r\n\r\n OnExpandCollapse(e, node) {\r\n e.stopPropagation();\r\n setTimeout(() => {\r\n node.expanded ? this.treeView.instance.collapseItem(node) : this.treeView.instance.expandItem(node);\r\n }, 200);\r\n }\r\n\r\n protected SetNode(categoryID: number) {\r\n this.findNodeByCategoryID$Subscription\r\n && !this.findNodeByCategoryID$Subscription.closed\r\n && this.findNodeByCategoryID$Subscription.unsubscribe();\r\n\r\n this.findNodeByCategoryID$Subscription = this.categoriesService.findNodeByCategoryID(categoryID)\r\n .pipe(take(1))\r\n .subscribe(node => {\r\n if (node) {\r\n this.State.SelectedNode = node;\r\n setTimeout(() => {\r\n this.treeView.instance.expandItem(node);\r\n this.treeView.instance.selectItem(node);\r\n }, 200);\r\n }\r\n });\r\n }\r\n\r\n protected SetCategoryTree(categories: CategoryTreeNode[]) {\r\n this.State.Categories = [...categories];\r\n const queryParams = this.A.Navigator.GetQueryParams(false);\r\n if (Object.entries(queryParams).length > 0 && queryParams.CategoryID) {\r\n this.SetNode(+queryParams.CategoryID);\r\n } else {\r\n const firstCategory = categories[0];\r\n this.State.SelectedNode = firstCategory;\r\n setTimeout(() => {\r\n this.treeView.instance.expandItem(firstCategory);\r\n this.treeView.instance.selectItem(firstCategory);\r\n }, 200);\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
{{item.Name}}
\\r\\n
\\r\\n ({{item.ItemCount}})\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { CategoriesService, CategoryTreeNode } from '@dino-services/categories.service';\r\n\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumCatalogueViewOptions } from '@dino-proxy/enums';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n IsDisplayCategories = false;\r\n Categories: CategoryTreeNode[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-category-selector',\r\n templateUrl: './category-selector.component.html',\r\n styleUrls: ['./category-selector.component.scss'],\r\n})\r\nexport class CategorySelectorComponent extends BaseComponent {\r\n private findNodeByCategoryID$Subscription: Subscription;\r\n private hasChildCategories$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService,\r\n private categoriesService: CategoriesService) {\r\n super(A, 'CategorySelectorComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n let catalogueOption = this.State.CustomerOption?.CatalogueOption || {} as CatalogueOption;\r\n\r\n if (this.hasChildCategories$Subscription && !this.hasChildCategories$Subscription.closed) this.hasChildCategories$Subscription.unsubscribe();\r\n\r\n this.hasChildCategories$Subscription = this.categoriesService.hasChildCategories(filter.CategoryID)\r\n .subscribe(has => {\r\n if ((catalogueOption.IsShowSubCatagoriesInGrid && filter.CatalogueView === EnumCatalogueViewOptions.Grid\r\n || catalogueOption.IsShowSubCatagoriesInList && filter.CatalogueView === EnumCatalogueViewOptions.List)\r\n && has) {\r\n this.State.IsDisplayCategories = true;\r\n this.LoadCategories(filter.CategoryID);\r\n } else {\r\n this.State.IsDisplayCategories = false;\r\n }\r\n });\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n if (this.findNodeByCategoryID$Subscription && !this.findNodeByCategoryID$Subscription.closed) this.findNodeByCategoryID$Subscription.unsubscribe();\r\n if (this.hasChildCategories$Subscription && !this.hasChildCategories$Subscription.closed) this.hasChildCategories$Subscription.unsubscribe();\r\n }\r\n\r\n \r\n\r\n protected LoadCategories(categoryID: number) {\r\n\r\n if (this.findNodeByCategoryID$Subscription && !this.findNodeByCategoryID$Subscription.closed) this.findNodeByCategoryID$Subscription.unsubscribe();\r\n\r\n this.findNodeByCategoryID$Subscription = this.categoriesService.findNodeByCategoryID(categoryID)\r\n .subscribe(category => {\r\n this.State.Categories = category ? [...category.items] : [];\r\n });\r\n }\r\n\r\n OnCategoryClick(category: CategoryTreeNode) {\r\n this.itemsFilterService.apply({\r\n CategoryID: category.EntryID\r\n }, ItemsFilterApplyTypes.Extend);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{category.Name}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Brand } from '@dino-proxy/entities/brand.entity';\r\nimport { Category } from '@dino-proxy/entities/category.entity';\r\nimport { Manufacturer } from '@dino-proxy/entities/manufacturer.entity';\r\nimport { Vendor } from '@dino-proxy/entities/vendor.entity';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DxDropDownButtonComponent } from 'devextreme-angular';\r\nimport { Subscription, Subject, takeUntil } from 'rxjs';\r\nimport { ImageRequest } from '@dino-components/image/image.component';\r\nimport { ImageSizeEnums, ImageTypeEnums } from '@dino-proxy/enums';\r\nimport { BrandView } from '@dino-proxy/views/brand.view';\r\nimport { CategoryView } from '@dino-proxy/views/category.view';\r\nimport { ManufacturerView } from '@dino-proxy/views/manufacturer.view';\r\nimport { VendorView } from '@dino-proxy/views/vendor.view';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\n\r\ntype ClassificatorType = 'category' | 'brand' | 'vendor' | 'manufacturer'\r\nexport type ClassificationDataType = BrandView[] | CategoryView[] | ManufacturerView[] | VendorView[];\r\n\r\nclass State extends BaseOptionState {\r\n Categories: Category[];\r\n Brands: Brand[];\r\n Vendors: Vendor[];\r\n Manufacturers: Manufacturer[];\r\n IsDesktop: boolean;\r\n SelectedID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification',\r\n templateUrl: './classification.component.html',\r\n styleUrls: ['./classification.component.scss'],\r\n})\r\nexport class ClassificationComponent extends BaseCustomerComponent {\r\n @Input() Type: ClassificatorType;\r\n @ViewChild(DxDropDownButtonComponent) ddbutton: DxDropDownButtonComponent;\r\n private categoriesList$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService,\r\n private categoriesService: CategoriesService,\r\n public screenService: ScreenService,\r\n public customerService: CustomerService) {\r\n super(A, 'ClassificationComponent', State, customerService);\r\n\r\n this.State.IsDesktop = this.screenService.IsDesktop();\r\n }\r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n const filterFieldName = this.GetFieldNameByType();\r\n const filterValue = filter[filterFieldName];\r\n\r\n if (filterValue == null || (Array.isArray(filterValue) && (!filterValue.length || filterValue.length > 1))) {\r\n this.State.SelectedID = null;\r\n } else {\r\n this.State.SelectedID = Array.isArray(filterValue) ? filterValue[0] : filterValue;\r\n }\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadData();\r\n }\r\n\r\n LoadData() {\r\n switch (this.Type) {\r\n case 'category': this.LoadCategories(); break;\r\n case 'brand': this.LoadBrands(); break;\r\n case 'vendor': this.LoadVendors(); break;\r\n case 'manufacturer': this.LoadManufacturers(); break;\r\n }\r\n }\r\n\r\n LoadCategories() {\r\n if (!this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuCategories) return;\r\n\r\n if (this.categoriesList$Subscription && !this.categoriesList$Subscription.closed) this.categoriesList$Subscription.unsubscribe();\r\n\r\n this.categoriesList$Subscription = this.categoriesService.getCategoriesListUnfiltered()\r\n .subscribe(categories => {\r\n this.State.Categories = categories.filter(x => x.IsShowInTopMenu);\r\n this.InitializeImages(this.State.Categories as ClassificationDataType, ImageTypeEnums.Category);\r\n });\r\n }\r\n\r\n LoadBrands() {\r\n if (!this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuBrands) return;\r\n this.DS('Brands').GetItemsAsync()\r\n .subscribe((brands: Brand[]) => {\r\n this.State.Brands = brands.filter(x => x.IsShowInTopMenu);\r\n this.InitializeImages(this.State.Brands as ClassificationDataType, ImageTypeEnums.Brand);\r\n });\r\n }\r\n\r\n LoadVendors() {\r\n if (!this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuVendors) return;\r\n this.DS('Vendors').GetItemsAsync()\r\n .subscribe((vendors: Vendor[]) => {\r\n this.State.Vendors = vendors.filter(x => x.IsShowInTopMenu);\r\n this.InitializeImages(this.State.Vendors as ClassificationDataType, ImageTypeEnums.Vendor);\r\n });\r\n }\r\n\r\n LoadManufacturers() {\r\n if (!this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuManufacturers) return;\r\n this.DS('Manufacturers').GetItemsAsync()\r\n .subscribe((manufacturers: Manufacturer[]) => {\r\n this.State.Manufacturers = manufacturers.filter(x => x.IsShowInTopMenu);\r\n this.InitializeImages(this.State.Manufacturers as ClassificationDataType, ImageTypeEnums.Manufacturer);\r\n });\r\n }\r\n\r\n GetFieldNameByType(): string {\r\n switch (this.Type) {\r\n case 'category': return 'CategoryID';\r\n case 'brand': return 'BrandIDs';\r\n case 'vendor': return 'VendorIDs';\r\n case 'manufacturer': return 'ManufacturerIDs';\r\n }\r\n }\r\n\r\n OnItemChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (!this.State.IsDesktop && this.ddbutton) {\r\n this.ddbutton.instance.close();\r\n }\r\n\r\n const catalogueOption = this.State.CustomerOption?.CatalogueOption || {} as CatalogueOption;\r\n const defaultPageSize = !this.State.IsDesktop ? catalogueOption.MobileItemListPageSize : catalogueOption.DesktopItemListPageSize;\r\n\r\n let filter = new ItemsFilter(0, defaultPageSize, false);\r\n const fieldName = this.GetFieldNameByType();\r\n filter[this.GetFieldNameByType()] = (fieldName === 'CategoryID')\r\n ? this.State.SelectedID\r\n : this.State.SelectedID !== null\r\n ? [this.State.SelectedID]\r\n : null;\r\n this.itemsFilterService.apply(filter, ItemsFilterApplyTypes.Extend);\r\n }\r\n //\r\n protected InitializeImages(data: ClassificationDataType, imageType: ImageTypeEnums) {\r\n data.forEach(item => {\r\n (item as any).ImageRequest = {\r\n EntryID: item.EntryID,\r\n ImageSize: ImageSizeEnums.Medium,\r\n ImageType: imageType,\r\n Index: 0,\r\n Version: item.ImageVersion\r\n } as ImageRequest;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
{{data.Name}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumCatalogueViewOptions, Enums } from '@dino-proxy/enums';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseOptionState {\r\n CatalogueViewOption: EnumCatalogueViewOptions;\r\n IsMobile: boolean;\r\n ShowCompactView: boolean;\r\n ShowBaseDocumentButton: boolean = false;\r\n MenuItemsLength: number = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'app-display-options',\r\n templateUrl: './display-options.component.html',\r\n styleUrls: ['./display-options.component.scss']\r\n})\r\nexport class DisplayOptionsComponent extends BaseComponent implements IBottomSheetComponent {\r\n // IsMediumScreen: boolean;\r\n Context: BottomSheetDialogComponent;\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private itemsFilterService: ItemsFilterService,\r\n private customerService: CustomerService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'DisplayOptionsComponent', State);\r\n }\r\n\r\n IsEnableListView: boolean;\r\n IsEnableGridView: boolean;\r\n IsEnableCompactView: boolean;\r\n CatalogueItemDisplayTypeStorageKey: string;\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.CatalogueItemDisplayTypeStorageKey = `CatalogueItemDisplayType_${this.State.IsMobile ? 'mobile' : 'desktop'}`;\r\n\r\n this.State.ShowCompactView = true;\r\n\r\n this.DefineAllowedViews();\r\n\r\n if (this.IsEnableListView) {\r\n\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => {\r\n this.HandleChangeView(Enums.EnumCatalogueViewOptions.List);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n if (this.IsEnableGridView) {\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewGrid2'), icon: 'mdi mdi-view-grid', command: () => {\r\n this.HandleChangeView(Enums.EnumCatalogueViewOptions.Grid);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n if (this.IsEnableCompactView && this.State.ShowCompactView) {\r\n this.ContextMenuItems.push({\r\n label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => {\r\n this.HandleChangeView(Enums.EnumCatalogueViewOptions.Compact);\r\n }\r\n });\r\n this.State.MenuItemsLength += 1;\r\n }\r\n\r\n // const description$Subscription = this.shoppingCartService.description$\r\n // .subscribe(description => {\r\n // if (!!description\r\n // && !!description.DocumentType\r\n // && this.customerService.GetIsAllowedBaseDocument(description.DocumentType)\r\n // && !this.ContextMenuItems.some(m => m.icon === 'mdi mdi-file-document-multiple-outline')\r\n // && !description.DisableShoppingCartChange) {\r\n\r\n // this.State.ShowBaseDocumentButton = true;\r\n\r\n // this.ContextMenuItems.push({\r\n // separator: true\r\n // });\r\n // this.ContextMenuItems.push({\r\n // label: this.RC('lblBaseDocumentBtnHint'),\r\n // icon: 'mdi mdi-file-document-multiple-outline',\r\n // command: () => {\r\n // this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, true);\r\n // }\r\n // });\r\n // this.State.MenuItemsLength += 1;\r\n // }\r\n // });\r\n\r\n // this.RegisterSubscription(description$Subscription);\r\n\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n this.State.CatalogueViewOption = filter.CatalogueView;\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n DefineAllowedViews() {\r\n const defaultItemOption = this.State.CustomerOption?.DefaultItemOption;\r\n const isDesktop = !this.screenService.IsMobile();\r\n this.IsEnableListView = isDesktop \r\n ? !!defaultItemOption?.CatalogueListItemDesktopOption \r\n : !!defaultItemOption?.CatalogueListItemMobileOption;\r\n\r\n this.IsEnableGridView = isDesktop\r\n ? !!defaultItemOption?.GridViewDesktopOption\r\n : !!defaultItemOption?.GridViewMobileOption;\r\n\r\n this.IsEnableCompactView = isDesktop\r\n ? !!defaultItemOption?.CatalogueCompactItemDesktopOption\r\n : !!defaultItemOption?.CatalogueCompactItemMobileOption;\r\n }\r\n\r\n HandleChangeView(view: EnumCatalogueViewOptions) {\r\n this.State.CatalogueViewOption = view;\r\n this.localStorageService.SetItem(this.CatalogueItemDisplayTypeStorageKey, view);\r\n this.ApplyView();\r\n }\r\n\r\n HandleSelectViewMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n HandleSelectViewClick() { }\r\n\r\n ApplyView() {\r\n this.itemsFilterService.apply({\r\n CatalogueView: this.State.CatalogueViewOption\r\n }, ItemsFilterApplyTypes.Extend);\r\n\r\n if (this.screenService.IsMobile()) {\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n }\r\n\r\n OnBaseDocumentClick() {\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, true);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n = 3\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblViewList2' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblViewGrid2' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{'lblViewCompact' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumAttributeDisplayOptions } from '@dino-proxy/enums';\r\nimport { FilterAttributeGroupView } from '@dino-proxy/views/filterattributegroup.view';\r\nimport { SpecificationAttribute } from '@dino-proxy/entities/specificationattribute.entity';\r\nimport { Dimension } from '@dino-proxy/entities/dimension.entity';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { FilterAttribute } from '@dino-proxy/entities/filterattribute.entity';\r\n\r\nclass State extends BaseState {\r\n AttributesFilter: any = {};\r\n}\r\n\r\nconst ATTR_EMPTY_VALUE_ID = '____EMPTY_VALUE____';\r\n\r\n@Component({\r\n selector: 'app-filter-attributes2',\r\n templateUrl: './filter-attributes2.component.html',\r\n styleUrls: ['./filter-attributes2.component.scss']\r\n})\r\nexport class FilterAttributes2Component extends BaseComponent {\r\n @Input() set Data(value: FilterAttributeGroupView[]) {\r\n let values = this.ProcessFilterAttributeGroups(value);\r\n if (values && this.data) {\r\n const newValuesAsString = JSON.stringify(values);\r\n const oldValuesAsString = JSON.stringify(this.data);\r\n if (newValuesAsString !== oldValuesAsString) {\r\n this.data = values;\r\n }\r\n } else {\r\n this.data = values;\r\n }\r\n }\r\n get Data() { return this.data; }\r\n @Output() OnFilterChanged = new EventEmitter();\r\n\r\n // @ViewChild('numberRangeSelector') numberRangeSelector: DxRangeSelectorComponent;\r\n // @ViewChild('dateRangeSelector') dateRangeSelector: DxRangeSelectorComponent;\r\n\r\n Today = new Date();\r\n\r\n LabelCnfg = {\r\n visible: true,\r\n format: (value) => value,\r\n position: 'top',\r\n };\r\n\r\n private data: FilterAttributeGroupView[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService) {\r\n super(A, 'FilterAttributes2Component', State);\r\n }\r\n\r\n \r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe((filter: ItemsFilter) => {\r\n if (filter.Attributes && Object.keys(filter.Attributes).length !== 0) {\r\n //\r\n } else {\r\n this.State.AttributesFilter = {};\r\n }\r\n });\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n RerenderRange() {\r\n // setTimeout(() => {\r\n // if (this.numberRangeSelector) this.numberRangeSelector.instance.render();\r\n // if (this.dateRangeSelector) this.dateRangeSelector.instance.render();\r\n // }, 100);\r\n }\r\n\r\n GetNumberValueByIndex(attribute: FilterAttribute, index: number) {\r\n let value = this.State.AttributesFilter[attribute.EntryID] && this.State.AttributesFilter[attribute.EntryID][index];\r\n if (value == null\r\n || (index === 0 && value === attribute.NumberMinValue\r\n || (index === 1 && value === attribute.NumberMaxValue))) return this.RC('lblNumberRangeValueNotSelected');\r\n\r\n return value;\r\n }\r\n\r\n OnAttributeValueChanged(attribute: FilterAttribute, e, type: 'text' | 'list' | 'color' | 'number-range') {\r\n if (type === 'text') {\r\n if (this.CheckAreEqual(e)) return;\r\n if (this.CleanupFilterAttributePathValue(attribute, e)) {\r\n this.State.AttributesFilter[attribute.EntryID] = [e.value];\r\n }\r\n } else if (type === 'list' || type === 'color') {\r\n if (this.CheckAreEqual(e)) return;\r\n if (this.CleanupFilterAttributePathValue(attribute, e)) {\r\n this.State.AttributesFilter[attribute.EntryID] = e.value;\r\n }\r\n } else if (type === 'number-range') {\r\n let values: number[] = e.value;\r\n\r\n if (this.State.AttributesFilter[attribute.EntryID]) {\r\n const valueAsString = values ? JSON.stringify(values) : '';\r\n const previousValueAsString = JSON.stringify(this.State.AttributesFilter[attribute.EntryID]);\r\n if (valueAsString === previousValueAsString) return true;\r\n }\r\n\r\n let attributesPatch = Utils.CloneObject(this.State.AttributesFilter);\r\n if (values[0] === attribute.NumberMinValue && values[1] === attribute.NumberMaxValue) {\r\n values = [attribute.NumberMinValue, attribute.NumberMaxValue];\r\n delete attributesPatch[attribute.EntryID];\r\n } else {\r\n attributesPatch[attribute.EntryID] = values;\r\n }\r\n this.State.AttributesFilter[attribute.EntryID] = values;\r\n\r\n const filterPatch = { Attributes: attributesPatch } as ItemsFilter;\r\n this.OnFilterChanged.emit(filterPatch);\r\n return;\r\n }\r\n\r\n const filterPatch = { Attributes: Utils.CloneObject(this.State.AttributesFilter) } as ItemsFilter;\r\n this.OnFilterChanged.emit(filterPatch);\r\n }\r\n\r\n OnAttributeDateChange(attribute: FilterAttribute, e, type: 'from' | 'to') {\r\n if (this.CheckAreEqual(e)) return;\r\n\r\n let value = e.value;\r\n if (value == null || value === '') {\r\n value = (type === 'from') ? attribute.DateMinValue : attribute.DateMaxValue;\r\n }\r\n\r\n if (!this.State.AttributesFilter[attribute.EntryID]) {\r\n this.State.AttributesFilter[attribute.EntryID] = [attribute.DateMinValue, attribute.DateMaxValue];\r\n }\r\n let attributesPatch = Utils.CloneObject(this.State.AttributesFilter);\r\n\r\n if (type === 'from') {\r\n this.State.AttributesFilter[attribute.EntryID][0] = attributesPatch[attribute.EntryID][0] = value;\r\n } else {\r\n this.State.AttributesFilter[attribute.EntryID][1] = attributesPatch[attribute.EntryID][1] = value;\r\n }\r\n\r\n if (attributesPatch[attribute.EntryID][0].getTime() === attribute.DateMinValue.getTime() && attributesPatch[attribute.EntryID][1].getTime() === attribute.DateMaxValue.getTime()) {\r\n delete attributesPatch[attribute.EntryID];\r\n }\r\n\r\n const filterPatch = { Attributes: attributesPatch } as ItemsFilter;\r\n this.OnFilterChanged.emit(filterPatch);\r\n return;\r\n }\r\n\r\n CheckAreEqual(e) {\r\n if (!e || !e.hasOwnProperty('previousValue')) return false;\r\n\r\n let valueAsString = e.value ? JSON.stringify(e.value) : '';\r\n let previousValueAsString = e.previousValue ? JSON.stringify(e.previousValue) : '';\r\n if (valueAsString === previousValueAsString) return true;\r\n return false;\r\n }\r\n\r\n CleanupFilterAttributePathValue(attribute: FilterAttribute, e) {\r\n if (!e.hasOwnProperty('value') || e.value == null || e.value === '') {\r\n delete this.State.AttributesFilter[attribute.EntryID];\r\n return false;\r\n }\r\n\r\n if (Array.isArray(e.value)) {\r\n e.value = (e.value as []).filter(x => x != null && x !== '');\r\n if ((e.value as []).length === 0) {\r\n delete this.State.AttributesFilter[attribute.EntryID];\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n ProcessFilterAttributeGroups(values: FilterAttributeGroupView[]) {\r\n if (!values || !values.length) return;\r\n\r\n values.forEach(g => {\r\n g.Attributes.forEach(a => {\r\n let attr: SpecificationAttribute | Dimension;\r\n if (a.hasOwnProperty('IsPredefinedValue')) {\r\n attr = a as unknown as SpecificationAttribute;\r\n } else {\r\n attr = a as unknown as Dimension;\r\n }\r\n\r\n attr.Values && attr.Values.forEach(v => {\r\n if (attr.AttributeDisplayOption === EnumAttributeDisplayOptions.Date && (v as any).Value) {\r\n v.Name = formatDate(new Date((v as any).Value), this.F.DateFormatLong);\r\n }\r\n\r\n if (attr.AttributeDisplayOption === EnumAttributeDisplayOptions.Number && (v as any).Value) {\r\n v.Name = formatNumber(+(v as any).Value, this.F.NumberQuantity);\r\n }\r\n\r\n // if (!v.Name) v.Name = this.RC('lblNoListItemData');\r\n // if (!(v as any).Value) (v as any).Value = ATTR_EMPTY_VALUE_ID;\r\n });\r\n\r\n });\r\n });\r\n\r\n return values;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{color.Name}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{tagData.Name}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n {{GetNumberValueByIndex(attribute, 0)}} - {{GetNumberValueByIndex(attribute, 1)}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class State extends BaseState {\r\n Opened: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-filter-group-container',\r\n templateUrl: './filter-group-container.component.html',\r\n styleUrls: ['./filter-group-container.component.scss']\r\n})\r\nexport class FilterGroupContainerComponent extends BaseComponent {\r\n @Input() Title: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FilterGroupContainerComponent', State);\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{Title}}
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class State extends BaseState {\r\n SelectedItems = new Set();\r\n}\r\n\r\n@Component({\r\n selector: 'app-filter-list-group',\r\n templateUrl: './filter-list-group.component.html',\r\n styleUrls: ['./filter-list-group.component.scss']\r\n})\r\nexport class FilterListGroupComponent extends BaseComponent {\r\n @Input() Title: string;\r\n @Input() Data: any[];\r\n @Input() FieldName: string;\r\n @Output() OnFilterChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService) {\r\n super(A, 'FilterListGroupComponent', State);\r\n }\r\n\r\n \r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n let filterProp = filter[this.FieldName] as [];\r\n this.State.SelectedItems.clear();\r\n if (filterProp) {\r\n filterProp.forEach(entryID => {\r\n const item = this.Data.find(d => d.EntryID === entryID);\r\n if (item) {\r\n item.selectedByFilter = true;\r\n this.State.SelectedItems.add(entryID);\r\n }\r\n });\r\n }\r\n });\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['Data']) {\r\n if (!this.Data || !this.Data.length) return;\r\n\r\n this.State.SelectedItems.forEach(x => {\r\n const item = this.Data.find(d => d.EntryID === x)\r\n if (item) {\r\n item.selectedByFilter = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n HandleItemSelected(e, item) {\r\n if (e.value) {\r\n this.State.SelectedItems.add(item.EntryID);\r\n } else {\r\n this.State.SelectedItems.delete(item.EntryID);\r\n }\r\n\r\n if (!this.FieldName) return;\r\n\r\n const filterPatch = { [this.FieldName]: Array.from(this.State.SelectedItems) } as ItemsFilter;\r\n this.OnFilterChanged.emit(filterPatch);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { ItemsFilter } from \"@dino-classes/items-filter\";\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from \"@dino-services/items-filter.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { Brand } from \"@dino-proxy/entities/brand.entity\";\r\nimport { FilterClarificationResult } from \"@dino-proxy/entities/filterclarificationresult.entity\";\r\nimport { Manufacturer } from \"@dino-proxy/entities/manufacturer.entity\";\r\nimport { Vendor } from \"@dino-proxy/entities/vendor.entity\";\r\nimport { FilterAttributeGroupView } from \"@dino-proxy/views/filterattributegroup.view\";\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Utils } from \"@m4u-angular/core/helpers/Utils\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { EnumFilterPanelActions, EnumSidebarStates } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { SysEventsService } from \"@m4u-angular/core/framework/sysevents.service\";\r\nimport { ItemsService } from \"@dino-services/items.service\";\r\nimport { SidebarService } from \"@m4u-angular/core/framework/sidebar.service\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { CatalogueOption } from \"@dino-proxy/entities/catalogueoption.entity\";\r\n\r\nclass State extends BaseOptionState {\r\n Brands: Brand[];\r\n Vendors: Vendor[];\r\n Manufacturers: Manufacturer[];\r\n FilterAttributeGroups: FilterAttributeGroupView[];\r\n ItemsFilter: ItemsFilter;\r\n IsMobile: boolean;\r\n SidebarState: EnumSidebarStates;\r\n IsNewFilter: boolean = true;\r\n ItemsFilterPatch: ItemsFilter;\r\n}\r\n\r\n@Component({\r\n selector: 'app-filter-panel2',\r\n templateUrl: './filter-panel2.component.html',\r\n styleUrls: ['./filter-panel2.component.scss'],\r\n})\r\nexport class FiltersPanel2Component extends BaseCustomerComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private itemsFilterService: ItemsFilterService,\r\n public sidebarService: SidebarService,\r\n private itemsService: ItemsService,\r\n public customerService: CustomerService) {\r\n super(A, 'FiltersPanel2Component', State, customerService);\r\n }\r\n\r\n \r\n\r\n override OnCustomerChanged(oldID: number, newID: number) {\r\n if (!!oldID && oldID !== newID) {\r\n this.HandleClearFilter();\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.ItemsFilterPatch = {};\r\n\r\n this.Load();\r\n\r\n // const catalogueOption = this.State.CustomerOption.CatalogueOption;\r\n // const defaultPageSize = this.State.IsMobile ? catalogueOption.MobileItemListPageSize : catalogueOption.DesktopItemListPageSize;\r\n\r\n const filterPanel$Subscription = (this.A.SysEvents as SysEventsService).FilterPanel\r\n .subscribe(action => {\r\n (action === EnumFilterPanelActions.Apply) && this.HandleApplyFilter();\r\n (action === EnumFilterPanelActions.Clear) && this.HandleClearFilter();\r\n });\r\n\r\n this.RegisterSubscription(filterPanel$Subscription);\r\n\r\n const sidebarStateChanged$Subscription = this.sidebarService.SidebarState\r\n .subscribe(x => {\r\n if (x.SidebarName !== 'Filters') return;\r\n this.State.SidebarState = x.State;\r\n // if (this.State.SidebarState === EnumSidebarStates.Opened && this.State.IsNewFilter) {\r\n // this.State.IsNewFilter = false;\r\n // this.itemsService.getFilterClarification(ItemsFilter.GetItemListParams(this.State.ItemsFilter, defaultPageSize))\r\n // .subscribe((response: BaseEntityResponse) => {\r\n // this.Load(response.Entity);\r\n // });\r\n // }\r\n });\r\n\r\n this.RegisterSubscription(sidebarStateChanged$Subscription);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (this.State.CustomerOption && !this.State.CustomerOption?.CatalogueOption?.IsShowFilterPane) return;\r\n\r\n const catalogueOption = this.State.CustomerOption?.CatalogueOption || {} as CatalogueOption;\r\n const defaultPageSize = this.screenService.IsMobile()\r\n ? catalogueOption.MobileItemListPageSize\r\n : catalogueOption.DesktopItemListPageSize;\r\n\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n // Optimize server requests\r\n // Save items filter without display options\r\n const newItemsFilter = ItemsFilter.GetRawFilter(filter);\r\n\r\n // If filter has been changed -> load clarification data\r\n if (Utils.IsEquals(this.State.ItemsFilter, newItemsFilter)) return;\r\n\r\n this.State.ItemsFilter = newItemsFilter;\r\n this.State.IsNewFilter = true;\r\n\r\n // release the current thread for some period of time cuz core functionality will close filter sidebar automatically \r\n setTimeout(() => {\r\n this.State.SidebarState = this.sidebarService.GetState('Filters');\r\n\r\n // if (this.State.SidebarState === EnumSidebarStates.Opened) {\r\n this.State.IsNewFilter = false;\r\n this.itemsService.getFilterClarification(ItemsFilter.GetItemListParams(filter, defaultPageSize))\r\n .subscribe((response: BaseEntityResponse) => {\r\n this.Load(response.Entity);\r\n });\r\n // }\r\n }, 1000);\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n HandleClearFilter() {\r\n this.State.ItemsFilterPatch = {};\r\n this.itemsFilterService.clear();\r\n }\r\n\r\n HandleApplyFilter() {\r\n\r\n const catalogueOption = this.State.CustomerOption?.CatalogueOption || {} as CatalogueOption;\r\n const defaultPageSize = this.screenService.IsMobile()\r\n ? catalogueOption.MobileItemListPageSize\r\n : catalogueOption.DesktopItemListPageSize;\r\n\r\n let filter = new ItemsFilter(0, defaultPageSize, false);\r\n filter = { ...filter, ...this.State.ItemsFilterPatch };\r\n\r\n this.itemsFilterService.apply(filter, ItemsFilterApplyTypes.Extend);\r\n }\r\n\r\n Load(result?: FilterClarificationResult) {\r\n const funcsDone = [];\r\n const done = (name: string) => {\r\n if (funcsDone.findIndex(x => x === name) === -1) funcsDone.push(name);\r\n if (funcsDone.length === 4) {\r\n // this.scrollView && this.scrollView.instance.update();\r\n // TO DO REPAINT\r\n }\r\n };\r\n\r\n this.LoadMainEntities('Brands',\r\n this.State.CustomerOption?.FilterOption?.IsShowFilterBrands,\r\n done,\r\n result ? result.BrandIDs.length && result.BrandIDs || this.State.ItemsFilterPatch.BrandIDs : null);\r\n\r\n this.LoadMainEntities('Vendors',\r\n this.State.CustomerOption?.FilterOption?.IsShowFilterVendors,\r\n done,\r\n result ? result.VendorIDs.length && result.VendorIDs || this.State.ItemsFilterPatch.VendorIDs : null);\r\n\r\n this.LoadMainEntities('Manufacturers',\r\n this.State.CustomerOption?.FilterOption?.IsShowFilterManufactures,\r\n done,\r\n result ? result.ManufacturerIDs.length && result.ManufacturerIDs || this.State.ItemsFilterPatch.ManufacturerIDs : null);\r\n\r\n let attributeIDs = null;\r\n if (result) {\r\n attributeIDs = [];\r\n if (result.SpecificationAttributeIDs.length) attributeIDs = attributeIDs.concat(result.SpecificationAttributeIDs);\r\n if (result.DimensionIDs.length) attributeIDs = attributeIDs.concat(result.DimensionIDs);\r\n\r\n // ????\r\n // const attributesFilter = this.attributesFilter.GetFilter();\r\n // Object.keys(attributesFilter).forEach(key => {\r\n // if (attributesFilter[key] && attributeIDs.indexOf(key) < 0) attributeIDs.push(+key);\r\n // });\r\n\r\n const attributesFilter = this.State.ItemsFilter?.Attributes;\r\n if (attributesFilter) {\r\n Object.keys(attributesFilter).forEach(key => {\r\n if (attributesFilter[key] && attributeIDs.indexOf(key) < 0) attributeIDs.push(+key);\r\n });\r\n }\r\n }\r\n\r\n this.LoadAttributeGroups(done, attributeIDs);\r\n }\r\n\r\n HandleFilterChanged(filterPatch: ItemsFilter) {\r\n const filterOption = this.State.CustomerOption?.FilterOption;\r\n if ((filterOption.IsShowFilterBrands && filterPatch.BrandIDs)\r\n || (filterOption.IsShowFilterVendors && filterPatch.VendorIDs)\r\n || (filterOption.IsShowFilterManufactures && filterPatch.ManufacturerIDs)) {\r\n this.State.ItemsFilterPatch = { ...this.State.ItemsFilterPatch, ...filterPatch };\r\n }\r\n\r\n if (filterPatch.hasOwnProperty('AssortmentID')\r\n || filterPatch.hasOwnProperty('GroupBy')\r\n || filterPatch.hasOwnProperty('SortBy')) {\r\n this.State.ItemsFilterPatch = { ...this.State.ItemsFilterPatch, ...filterPatch };\r\n }\r\n\r\n if (filterPatch.Attributes) {\r\n this.State.ItemsFilterPatch = { ...this.State.ItemsFilterPatch, ...filterPatch };\r\n }\r\n\r\n //\r\n console.log(this.State.ItemsFilterPatch);\r\n //\r\n }\r\n\r\n private LoadMainEntities(entityName: string, optionToShow: boolean, done: (entityName: string) => void, activeEntryIDs?: number[]) {\r\n if (!optionToShow) {\r\n done(entityName);\r\n return;\r\n }\r\n\r\n const sortFn = (a: { Name: string }, b: { Name: string }) => {\r\n const nameA = (a.Name || '').toUpperCase();\r\n const nameB = (b.Name || '').toUpperCase();\r\n if (nameA < nameB) return -1;\r\n if (nameA > nameB) return 1;\r\n return 0;\r\n };\r\n\r\n this.DS(entityName).GetItemsAsync()\r\n .subscribe(items => {\r\n this.State[entityName] = Utils.CloneObject(items);\r\n\r\n if (activeEntryIDs && activeEntryIDs.length) {\r\n this.State[entityName].forEach(x => {\r\n if (!(activeEntryIDs.indexOf(x.EntryID) >= 0)) {\r\n (x as { disabled: boolean }).disabled = true;\r\n }\r\n });\r\n } else {\r\n this.State[entityName].forEach(x => {\r\n (x as { disabled: boolean }).disabled = true;\r\n });\r\n }\r\n\r\n this.State[entityName].sort(sortFn);\r\n done(entityName);\r\n });\r\n }\r\n\r\n private LoadAttributeGroups(done: (entityName: string) => void, attributeIDs?: number[]) {\r\n this.DS('FilterAttributeGroups').GetItemsAsync()\r\n .subscribe(items => {\r\n this.State.FilterAttributeGroups = Utils.CloneObject(items);\r\n\r\n if (attributeIDs) {\r\n this.State.FilterAttributeGroups.forEach(x => {\r\n x.Attributes = x.Attributes.filter(item => attributeIDs.indexOf(item.EntryID) >= 0);\r\n });\r\n }\r\n this.State.FilterAttributeGroups = this.State.FilterAttributeGroups.filter(x => x.Attributes.length);\r\n\r\n done('LoadAttributeGroups');\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumDisplayGroupingOptions } from '@dino-proxy/enums';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n GroupingOption: EnumDisplayGroupingOptions;\r\n GroupingItems: GenericListEntity[] = [];\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-group-options',\r\n templateUrl: './group-options.component.html',\r\n styleUrls: ['./group-options.component.scss']\r\n})\r\nexport class GroupOptionsComponent extends BaseComponent {\r\n @Input() Mode: 'apply' | 'event' = 'apply';\r\n @Input() View: 'normal' | 'flat' = 'normal';\r\n @Output() OnGroupingChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private itemsFilterService: ItemsFilterService) {\r\n super(A, 'GroupOptionsComponent', State);\r\n }\r\n\r\n \r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.GroupingOption = this.State.CustomerOption?.CatalogueOption?.DefaultDisplayGroupingOption;\r\n this.State.GroupingItems = this.GetGroupingItems();\r\n\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n this.State.GroupingOption = filter.GroupBy;\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n HandleGroupingOptionChanged() {\r\n const filterPatch = { GroupBy: this.State.GroupingOption, Skip: 0 } as ItemsFilter;\r\n\r\n if (this.Mode === 'apply') {\r\n this.itemsFilterService.apply(filterPatch, ItemsFilterApplyTypes.Extend);\r\n } else {\r\n this.OnGroupingChanged.emit(filterPatch);\r\n }\r\n }\r\n\r\n SetValue(value: EnumDisplayGroupingOptions) {\r\n this.State.GroupingOption = value;\r\n this.HandleGroupingOptionChanged();\r\n }\r\n\r\n GetGroupingItems() {\r\n let list = this.LIST('EnumDisplayGroupingOptions');\r\n const catalogueOption = this.State.CustomerOption.CatalogueOption || {} as CatalogueOption;\r\n if (!catalogueOption.IsShowGroupSortByBrand) list = list.filter(x => x.Value !== EnumDisplayGroupingOptions.Brands);\r\n if (!catalogueOption.IsShowGroupSortByVendor) list = list.filter(x => x.Value !== EnumDisplayGroupingOptions.Vendors);\r\n if (!catalogueOption.IsShowGroupSortByManufacturer) list = list.filter(x => x.Value !== EnumDisplayGroupingOptions.Manufacturers);\r\n if (!catalogueOption.IsShowGroupSortByCategory) list = list.filter(x => x.Value !== EnumDisplayGroupingOptions.Categories);\r\n return list;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{item.Text}}
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ItemSearchEndpoint } from '@dino-proxy/endpoints/itemsearch.endpoint';\r\nimport { ItemSearch } from '@dino-proxy/entities/itemsearch.entity';\r\n\r\nclass State extends BaseOptionState {\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-searchbar',\r\n templateUrl: './search-bar.component.html',\r\n styleUrls: ['./search-bar.component.scss'],\r\n})\r\nexport class SearchBarComponent extends BaseComponent {\r\n @Input() Mode: 'normal' | 'expand' = 'normal';\r\n @Input() DebounceTime: number = 500;\r\n @Input() DisableShoppingCartChange: boolean = false;d\r\n @Output() OnSearch = new EventEmitter();\r\n @Output() OnBarcodeValueChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsFilterService: ItemsFilterService,\r\n private itemSearchEndpoint: ItemSearchEndpoint) {\r\n super(A, 'SearchBarComponent', State);\r\n }\r\n\r\n get BarCodeEnabled(): boolean {\r\n return this.State.CustomerOption?.CatalogueOption?.BarcodeScannerType !== this.Enums.EnumBarcodeScannerTypes.None \r\n && !this.DisableShoppingCartChange;\r\n }\r\n\r\n override OnInitComponent() {\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n this.State.SearchText = filter.SearchText;\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n \r\n\r\n HandleSearchByText(e) {\r\n this.State.SearchText = e;\r\n const newSearch = { Text: e } as ItemSearch;\r\n\r\n if (e.length > 2) {\r\n this.itemSearchEndpoint.Save(newSearch).subscribe(() => { });\r\n }\r\n\r\n this.itemsFilterService.apply({ SearchText: this.State.SearchText }, ItemsFilterApplyTypes.Extend);\r\n\r\n this.OnSearch.emit(e);\r\n }\r\n\r\n HandleBarcodeChanged(value) {\r\n this.OnBarcodeValueChanged.emit(value);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { AssortmentEndpoint } from '@dino-proxy/endpoints/assortment.endpoint';\r\nimport { Assortment } from '@dino-proxy/entities/assortment.entity';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { EnumAssortmentVisibilityModes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseOptionState {\r\n Assortments: Assortment[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-sort-group-assortment-panel',\r\n templateUrl: './sort-group-assortment-panel.component.html',\r\n styleUrls: ['./sort-group-assortment-panel.component.scss']\r\n})\r\nexport class SortGroupAssortmentPanelComponent extends BaseCustomerComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private assortmentEndpoint: AssortmentEndpoint,\r\n public customerService: CustomerService) {\r\n super(A, 'SortGroupAssortmentPanelComponent', State, customerService); \r\n EnumAssortmentVisibilityModes.Visible\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadAssortment();\r\n }\r\n\r\n LoadAssortment() {\r\n this.assortmentEndpoint.GetCustomerAssortment()\r\n .subscribe(response => {\r\n this.State.Assortments = response.Entities;\r\n });\r\n }\r\n\r\n IsAssortmentExists() {\r\n return this.GetCustomerAssortment().length > 0;\r\n }\r\n\r\n GetCustomerAssortment() {\r\n return this.State.Assortments.filter(item => !!item.CustomerID);\r\n }\r\n\r\n \r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumDisplaySortingOptions } from '@dino-proxy/enums';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseOptionState {\r\n SortingOption: EnumDisplaySortingOptions;\r\n SortingItems: GenericListEntity[] = [];\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-sort-options',\r\n templateUrl: './sort-options.component.html',\r\n styleUrls: ['./sort-options.component.scss']\r\n})\r\nexport class SortOptionsComponent extends BaseComponent {\r\n @Input() Mode: 'apply' | 'event' = 'apply';\r\n @Input() View: 'normal' | 'flat' = 'normal';\r\n @Output() OnSortingChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private itemsFilterService: ItemsFilterService) {\r\n super(A, 'SortOptionsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.SortingOption = this.State.CustomerOption?.CatalogueOption?.DefaultDisplaySortingOption;\r\n this.State.SortingItems = this.GetSortingItems();\r\n\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n this.State.SortingOption = filter.SortBy;\r\n });\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n }\r\n\r\n HandleSortingOptionChanged() {\r\n const filterPatch = { SortBy: this.State.SortingOption, Skip: 0 } as ItemsFilter;\r\n\r\n if (this.Mode === 'apply') {\r\n this.itemsFilterService.apply(filterPatch, ItemsFilterApplyTypes.Extend);\r\n } else {\r\n this.OnSortingChanged.emit(filterPatch);\r\n }\r\n }\r\n\r\n SetValue(value: EnumDisplaySortingOptions) {\r\n this.State.SortingOption = value;\r\n this.HandleSortingOptionChanged();\r\n }\r\n\r\n GetSortingItems() {\r\n let list = Utils.CloneObject(this.LIST('EnumDisplaySortingOptions')) as GenericListEntity[];\r\n const catalogueOption = this.State.CustomerOption.CatalogueOption || {} as CatalogueOption;\r\n if (!catalogueOption.IsShowGroupSortByBrand) list = list.filter(x => x.Value !== EnumDisplaySortingOptions.Brand);\r\n if (!catalogueOption.IsShowGroupSortByVendor) list = list.filter(x => x.Value !== EnumDisplaySortingOptions.Vendor);\r\n if (!catalogueOption.IsShowGroupSortByManufacturer) list = list.filter(x => x.Value !== EnumDisplaySortingOptions.Manufacturer);\r\n if (!catalogueOption.IsCustomSortEnabled) {\r\n list = list.filter(x => x.Value !== EnumDisplaySortingOptions.Custom);\r\n } else {\r\n const custom = list.find(x => x.Value === EnumDisplaySortingOptions.Custom);\r\n custom && (custom.Text = catalogueOption.CustomSortTitle);\r\n }\r\n return list;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{item.Text}}
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, ViewChild, TemplateRef } from '@angular/core';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { EnumCategoryPaneBehaviour, EnumDocumentTypes, EnumShoppingCartModeOptions } from '@dino-proxy/enums';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ItemsFilterApplyTypes, ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumMessageBoxTypes, EnumScreenSizes, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\n\r\nexport class BaseProductCatalogueState extends BaseOptionState {\r\n IsShowTopPanel: boolean;\r\n HideScrollLoading: boolean = true;\r\n HasShoppingCart: boolean;\r\n HideSidePanel: boolean;\r\n ShoppingCartDescription: ShoppingCartDescriptionResult;\r\n ShoppingCartItems: ShoppingCartItemView[] = [];\r\n IsAllowUseBaseDocument: boolean = false;\r\n DisableShoppingCartChange: boolean = false;\r\n CreateShoppingCartOnInitIfneed: boolean = true;\r\n SidePanelPageComponentName: string;\r\n AdditionalClass: string = '';\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'base-product-catalogue',\r\n template: '
'\r\n})\r\nexport class BaseProductCatalogueComponent extends BaseCustomerPageComponent {\r\n @ViewChild('page') page: PageLayoutComponent;\r\n @ViewChild('startOver') startOver: TemplateRef;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n PageClass: string;\r\n catalogueInitialized = false;\r\n shoppingCartFirstChanged = false;\r\n IsEnableListView: boolean;\r\n IsEnableGridView: boolean;\r\n IsEnableCompactView: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n public screenService: ScreenService,\r\n public categoriesService: CategoriesService,\r\n public itemsFilterService: ItemsFilterService,\r\n public state: typeof BaseProductCatalogueState,\r\n public customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService) {\r\n super(A, componentName, BaseEntity, state, customerService);\r\n }\r\n\r\n public get IsCatalogueEnabled() { return this.HasCustomer && this.State.HasShoppingCart; }\r\n public get IsCategoriesPanelEnabled() { return this.State.CustomerOption?.CatalogueOption?.CategoryPaneBehaviour !== EnumCategoryPaneBehaviour.Hidden && this.IsCatalogueEnabled }\r\n public get IsShoppingCartPanelEnabled() { return this.State.CustomerOption?.BusinessOption?.IsEnableShoppingCart && this.IsCatalogueEnabled }\r\n public get HasCustomer() { return !!this.CustomerID; }\r\n public get HasShoppingCart() { return this.State?.HasShoppingCart; }\r\n public get DisableShoppingCartChange() { return this.State?.DisableShoppingCartChange; }\r\n public get HasStartOver() {\r\n return this.HasShoppingCart && !this.DisableShoppingCartChange || (this.IsSalesPerson && this.HasCustomer && !this.HasShoppingCart)\r\n }\r\n\r\n DefineAllowedViews() {\r\n const defaultItemOption = this.State.CustomerOption?.DefaultItemOption;\r\n const isDesktop = !this.screenService.IsMobile();\r\n this.IsEnableListView = isDesktop \r\n ? !!defaultItemOption?.CatalogueListItemDesktopOption \r\n : !!defaultItemOption?.CatalogueListItemMobileOption;\r\n\r\n this.IsEnableGridView = isDesktop\r\n ? !!defaultItemOption?.GridViewDesktopOption\r\n : !!defaultItemOption?.GridViewMobileOption;\r\n\r\n this.IsEnableCompactView = isDesktop\r\n ? !!defaultItemOption?.CatalogueCompactItemDesktopOption\r\n : !!defaultItemOption?.CatalogueCompactItemMobileOption;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.State.CustomerOption.FeatureOption.IsEnableCatalogue) return;\r\n this.InitializeCatalog();\r\n\r\n this.DefineAllowedViews();\r\n\r\n const description$Subscription = this.shoppingCartService.description$\r\n .subscribe(r => {\r\n this.State.HasShoppingCart = !!r;\r\n this.State.ShoppingCartDescription = r;\r\n\r\n if (!r && this.State.CustomerOption?.BusinessOption?.DefaultDocumentType != EnumDocumentTypes.None && this.State.CreateShoppingCartOnInitIfneed) {\r\n this.shoppingCartService.load(true, true);\r\n this.State.CreateShoppingCartOnInitIfneed = false;\r\n }\r\n\r\n if (this.State.HasShoppingCart) {\r\n this.State.IsAllowUseBaseDocument = this.customerService.GetIsAllowedBaseDocument(this.State.ShoppingCartDescription.DocumentType);\r\n this.State.DisableShoppingCartChange = this.State.ShoppingCartDescription.DisableShoppingCartChange;\r\n this.State.CreateShoppingCartOnInitIfneed = false;\r\n }\r\n\r\n this.ReloadToolbar();\r\n\r\n //712034\r\n if (!this.shoppingCartFirstChanged) {\r\n this.shoppingCartFirstChanged = true;\r\n this.A.SysEvents.SetPageSidePanelState(this.ComponentName, !!r);\r\n }\r\n\r\n if (!r) {\r\n this.A.SysEvents.SetPageSidePanelState(this.ComponentName, false);\r\n }\r\n });\r\n\r\n this.RegisterSubscription(description$Subscription);\r\n\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n if (!!r && !!r.shoppingCart) {\r\n this.State.ShoppingCartItems = r.shoppingCart.ShoppingCartItemViews;\r\n }\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n\r\n const pageSidePanelState$Subscription = this.A.SysEvents.PageSidePanelState\r\n .subscribe(s => {\r\n this.State.SidePanelPageComponentName = s.pageComponentName;\r\n });\r\n\r\n this.RegisterSubscription(pageSidePanelState$Subscription);\r\n\r\n this.SetPageClass();\r\n }\r\n\r\n override OnInitState() {\r\n this.State.IsShowTopPanel =\r\n this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuCategories\r\n || this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuBrands\r\n || this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuManufacturers\r\n || this.State.CustomerOption?.CatalogueOption?.IsShowTopMenuVendors;\r\n }\r\n\r\n OnCanLoadNextChanged(e: boolean) {\r\n this.State.HideScrollLoading = !e;\r\n this.SetPageClass();\r\n }\r\n\r\n OnSetAdditionalClass(e: string) {\r\n this.State.AdditionalClass = e;\r\n this.SetPageClass();\r\n }\r\n\r\n SetPageClass() { }\r\n\r\n override GetTitle() {\r\n return this.A.Screen.IsMobile() ? null : this.GetDocumentTitle();\r\n }\r\n\r\n GetDocumentTitle() {\r\n return (!this.HasCustomer || !this.HasShoppingCart)\r\n ? (this.IsSalesPerson ? this.RC('lblProductCatalogueSalesPersonName') : this.RC('Pages.ProductCatalogue2Component'))\r\n : !this.State.ShoppingCartDescription.DocumentNumber \r\n ? this.LISTITEM('EnumNewDocumentTitles', this.State.ShoppingCartDescription?.DocumentType)\r\n : (`${this.LISTITEM('EnumEditDocumentTitles', this.State.ShoppingCartDescription?.DocumentType)} - ${this.State.ShoppingCartDescription.DocumentNumber}`);\r\n }\r\n // override OnInitTitle() {\r\n // return '';\r\n\r\n // // return (!this.HasCustomer || !this.HasShoppingCart)\r\n // // ? (this.IsSalesPerson ? this.RC('lblProductCatalogueSalesPersonName') : this.RC('Pages.ProductCatalogue2Component'))\r\n // // : (`${this.RC('lblNew')} ${this.LISTITEM('EnumDocumentTypes', this.State.ShoppingCartDescription?.DocumentType)}`);\r\n // }\r\n\r\n protected InitializeCatalog() {\r\n this.categoriesService.ready()\r\n .subscribe(() => {\r\n if (this.catalogueInitialized) return;\r\n this.catalogueInitialized = true;\r\n\r\n if (Object.entries(this.QueryParams).length > 0) {\r\n if (this.QueryParams.CategoryID) {\r\n this.itemsFilterService.apply({ CategoryID: +this.QueryParams.CategoryID }, ItemsFilterApplyTypes.Overwrite);\r\n } else if (this.QueryParams.SearchText) {\r\n this.itemsFilterService.apply({\r\n CategoryID: null,\r\n SearchText: this.QueryParams.SearchText\r\n }, ItemsFilterApplyTypes.Overwrite);\r\n } else if (this.QueryParams.Filter) {\r\n const filter = JSON.parse(this.itemsFilterService.b64_to_utf8(this.QueryParams.Filter)) as ItemsFilter;\r\n this.itemsFilterService.apply(filter, ItemsFilterApplyTypes.Extend);\r\n } else if (this.QueryParams.ClearFilter) {\r\n this.itemsFilterService.clear();\r\n } else {\r\n this.itemsFilterService.apply({ CategoryID: null }, ItemsFilterApplyTypes.Overwrite);\r\n }\r\n }\r\n });\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = this.State.CustomerOption?.CatalogueOption?.IsShowFilterPane && this.IsCatalogueEnabled;\r\n settings.ShowButtonsText = this.screenService.IsTablet() && this.screenService.Orientation() === 'landscape';\r\n settings.ShowBackButton = false;\r\n settings.SubtitleTemplate = !this.A.Screen.IsMobile() ? this.startOver : null;\r\n\r\n const screenSize = this.A.Screen.GetScreenSize();\r\n settings.FilterPanelWidth = (screenSize === EnumScreenSizes.ScreenXSmall || screenSize === EnumScreenSizes.ScreenSmall)\r\n ? EnumWindowSizes.WindowXLarge\r\n : (screenSize === EnumScreenSizes.ScreenMedium) ? EnumWindowSizes.WindowLarge : EnumWindowSizes.WindowMedium;\r\n return settings;\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.shoppingCartService.loadShoppingCartDescription();\r\n this.ReloadToolbar();\r\n if (this.CustomerID \r\n && this.State.CustomerOption?.CatalogueOption?.CategoryPaneBehaviour === EnumCategoryPaneBehaviour.Permanent\r\n && this.State.CustomerOption?.CatalogueOption?.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Floating) {\r\n this.A.SysEvents.SetPageSidePanelState(this.State.SidePanelPageComponentName, true);\r\n this.A.SysEvents.SetPageSidePanelState('ProductCatalogue2Component', true);\r\n }\r\n }\r\n\r\n HandleStartOver() {\r\n if (this.IsSalesPerson && this.HasCustomer && !this.HasShoppingCart) {\r\n this.customerService.SetCustomer(null);\r\n return;\r\n }\r\n\r\n const closeCataloguePanels = () => {\r\n this.A.SysEvents.SetPageSidePanelState(this.State.SidePanelPageComponentName, false);\r\n this.A.SysEvents.SetPageSidePanelState('ProductCatalogue2Component', false);\r\n }\r\n\r\n if (this.State.ShoppingCartDescription?.Length) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.State.CustomerOption?.ShipmentOption?.IsEnableDistributionCycles ? this.RC('lblStartOverChangeCategory') : this.RC('lblStartOver');\r\n this.messageDialog.Prompt = this.RC('lblSalesPersonStartOverPrompt');\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.shoppingCartService.removeCurrentShoppingCart();\r\n closeCataloguePanels();\r\n });\r\n } else {\r\n this.shoppingCartService.removeCurrentShoppingCart();\r\n closeCataloguePanels();\r\n }\r\n }\r\n\r\n onBarcodeChanged(value) {\r\n if (value) {\r\n \r\n this.itemsFilterService.apply({ SearchText: value }, ItemsFilterApplyTypes.Overwrite);\r\n }\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Orientation, ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseProductCatalogueComponent, BaseProductCatalogueState } from '../base/base-product-catalogue';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { CategoriesPanelComponent } from '../components/categories-panel/categories-panel.component';\r\nimport { SortGroupAssortmentPanelComponent } from '../components/sort-group-assortment-panel/sort-group-assortment-panel.component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\n\r\nclass FixedCatalogueState extends BaseProductCatalogueState {\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-fixed-catalogue',\r\n templateUrl: './fixed-catalogue.component.html',\r\n styleUrls: ['./fixed-catalogue.component.scss']\r\n})\r\nexport class FixedCatalogueComponent extends BaseProductCatalogueComponent {\r\n IsShowSearchPanel: boolean;\r\n IsLandscape: boolean = true;\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n categoriesService: CategoriesService,\r\n itemsFilterService: ItemsFilterService,\r\n private sidebarService: SidebarService,\r\n customerService: CustomerService,\r\n shoppingCartService: ShoppingCartService) {\r\n super(A, 'ProductCatalogue2Component', screenService, categoriesService, itemsFilterService, FixedCatalogueState, customerService, shoppingCartService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.A.SysEvents.SetPageSidePanelState(this.ComponentName, false);\r\n this.IsLandscape = this.A.Screen.Orientation() === 'landscape';\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n HandleToggleCategories() {\r\n this.sidebarService.Show('CategoriesPanelComponent',\r\n this.RC('lblProductMenu'),\r\n CategoriesPanelComponent,\r\n null,\r\n null,\r\n this.A.Screen.IsRTL() ? 'right' : 'left',\r\n 'fixed-categories-sidebar');\r\n }\r\n\r\n HandleSortGroupAssortmentPanel() {\r\n this.sidebarService.Show('SortGroupAssortment',\r\n this.RC('lblSortGroupAssortment'),\r\n SortGroupAssortmentPanelComponent,\r\n null,\r\n null,\r\n null,\r\n 'fixed-sort-group-assortment-sidebar');\r\n }\r\n\r\n HandleSwipe(side: 'left' | 'right') {\r\n if (this.screenService.IsRTL() && side === 'right') this.HandleToggleCategories();\r\n if (!this.screenService.IsRTL() && side === 'left') this.HandleToggleCategories();\r\n }\r\n\r\n override SetPageClass() {\r\n this.PageClass = 'fixed-catalogue-page no-bottom-padding no-top-padding no-left-padding no-right-padding '\r\n + (this.State.HideScrollLoading ? 'hide-scroll-loading' : '');\r\n }\r\n\r\n override OnApplyFilter() {\r\n //console.log('OnApplyFilter');\r\n }\r\n\r\n override OnClearFilter() {\r\n //console.log('OnClearFilters');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
{{(State.CustomerOption?.ShipmentOption?.IsEnableDistributionCycles ? 'lblStartOverChangeCategory' : 'lblStartOver') | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemView } from './../views/item.view';\r\nexport class ItemGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemGroup';\r\n }\r\n \r\n public GroupID: number; \r\n public GroupName: string; \r\n public Items: ItemView[] = []; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { PageLayoutComponent } from \"@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component\";\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ItemGroup } from '@dino-proxy/entities/itemgroup.entity';\r\nimport { ItemsFilter } from '@dino-classes/items-filter';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemsResult } from '@dino-proxy/entities/itemsresult.entity';\r\nimport { EnumCatalogueViewOptions, EnumDisplayGroupingOptions, EnumItemDisplayTypes } from '@dino-proxy/enums';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\n\r\nclass State extends BaseOptionState {\r\n ItemGroups: ItemGroup[] = [];\r\n Page: number;\r\n Filter: ItemsFilter;\r\n VariationsVisibleFor: any = {};\r\n ViewModeCssName: string;\r\n ShowNoDataMessage: boolean = false;\r\n CollapsedGroups = new Set();\r\n PageSize: number;\r\n DisableShoppingCartChange: boolean = false;\r\n //\r\n SerializedFilter: string;\r\n LastLoadData: number;\r\n}\r\n\r\nconst REFRESH_LOAD_DATA_INTERVAL: number = 1000;\r\n\r\n@Component({\r\n selector: 'base-list',\r\n template: '
'\r\n})\r\nexport abstract class BaseListComponent extends BaseCustomerComponent {\r\n @Input() Page: PageLayoutComponent;\r\n @Output() CanLoadNextChanged = new EventEmitter();\r\n @Output() OnSetAdditionalClass = new EventEmitter();\r\n EnumDisplayTypes = DisplayType;\r\n\r\n set CanLoadNext(value: boolean) {\r\n this.canLoadNext = value;\r\n this.CanLoadNextChanged.emit(this.canLoadNext);\r\n }\r\n\r\n get CanLoadNext() {\r\n return this.canLoadNext;\r\n }\r\n\r\n get PageScroll() {\r\n return this.Page.scroll;\r\n }\r\n\r\n private getItems$Subscription: Subscription;\r\n private canLoadNext = false;\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n private screenService: ScreenService,\r\n private itemsService: ItemsService,\r\n private itemsFilterService: ItemsFilterService,\r\n customerService: CustomerService,\r\n private shoppingCartService: ShoppingCartService,\r\n private categoryService: CategoriesService) {\r\n super(A, componentName, State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.PageSize = this.screenService.IsMobile()\r\n ? this.State.CustomerOption.CatalogueOption.MobileItemListPageSize\r\n : this.State.CustomerOption.CatalogueOption.DesktopItemListPageSize;\r\n\r\n const filter$Subscription = this.itemsFilterService.filter$\r\n .subscribe(filter => {\r\n // When we change categories - no need to reload them\r\n const isNeedReloadCategories = this.State.Filter?.CategoryID === filter.CategoryID;\r\n\r\n this.State.Filter = filter;\r\n this.State.Page = 0;\r\n this.State.CollapsedGroups.clear();\r\n\r\n this.SetViewModeCssName();\r\n\r\n this.LoadData(true, () => {\r\n setTimeout(() => {\r\n //\r\n //console.log('filter$Subscription/this.PageScroll:', this.PageScroll);\r\n //\r\n this.PageScroll && this.PageScroll.instance.scrollTo(0);\r\n }, 500);\r\n if (isNeedReloadCategories) this.categoryService.loadCategories(filter);\r\n });\r\n });\r\n\r\n const shoppingCartDescription$Subscription = this.shoppingCartService.description$.subscribe(r => {\r\n if (!!r) {\r\n this.State.DisableShoppingCartChange = r.DisableShoppingCartChange;\r\n }\r\n })\r\n\r\n this.RegisterSubscription(filter$Subscription);\r\n //\r\n this.A.Screen.LogDeviceInfo();\r\n //console.log(this.A.Screen.Orientation()); \r\n this.RegisterSubscription(shoppingCartDescription$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n if (this.getItems$Subscription && !this.getItems$Subscription.closed) this.getItems$Subscription.unsubscribe();\r\n }\r\n\r\n override IsUseFinishCycleChangeDetection(): boolean {\r\n return false;\r\n }\r\n\r\n OnGroupToggle(group) {\r\n group.collapsed = !group.collapsed;\r\n if (!this.CanLoadNext || !group.collapsed) return;\r\n if (this.State.CollapsedGroups.has((group as any).GroupID)) return;\r\n this.State.CollapsedGroups.add((group as any).GroupID);\r\n this.State.Page++;\r\n this.LoadData(false, () => {\r\n //\r\n //console.log('OnGroupToggle/this.PageScroll:', this.PageScroll);\r\n //\r\n this.PageScroll && this.PageScroll.instance.release(false);\r\n });\r\n }\r\n\r\n public OnCustomerChanged() {\r\n this.State.ItemGroups = [];\r\n this.InitializePaging();\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n // this trick is related to scrolling. DON'T REMOVE\r\n setTimeout(() => {\r\n this.InitializePaging();\r\n }, 500);\r\n }\r\n\r\n InitializePaging() {\r\n this.PageScroll && this.PageScroll.instance.option({\r\n onReachBottom: (options) => {\r\n if (!this.CanLoadNext) {\r\n // options.component.release(false);\r\n // ???????????????????????????????????\r\n options.component.release(false);\r\n // this.Page.scroll && this.Page.scroll.instance.release(false);\r\n return;\r\n }\r\n\r\n this.State.Page++;\r\n this.LoadData(false, () => {\r\n //\r\n //console.log('InitializePaging/onReachBottom/this.PageScroll:', this.PageScroll);\r\n //\r\n options.component.release(false);\r\n // this.scrollView && this.scrollView.instance.release(false);\r\n });\r\n }\r\n } as any);\r\n }\r\n\r\n abstract SetViewModeCssName();\r\n\r\n protected LoadData(refresh: boolean, postLoad?: () => void) {\r\n const filter = Object.assign({}, this.State.Filter, {\r\n Skip: (this.State.Page * (this.State.PageSize || this.State.Filter.Take)),\r\n Take: this.State.PageSize\r\n } as ItemsFilter);\r\n\r\n this.CanLoadNext = false;\r\n\r\n const fullQueryFilter = ItemsFilter.GetItemListParams(filter, this.State.PageSize);\r\n\r\n // experimantal func 2 / Visual context of loading for skipping unnecessary data loading\r\n fullQueryFilter.ItemDisplayType = this.GetItemDisplayType();\r\n fullQueryFilter.IsMobile = this.A.Screen.IsMobile();\r\n //\r\n\r\n // experimantal func\r\n const fullQueryFilterSerialized = JSON.stringify(fullQueryFilter);\r\n const now = Date.now();\r\n\r\n if (this.getItems$Subscription && !this.getItems$Subscription.closed) {\r\n if (this.State.LastLoadData && this.State.SerializedFilter) {\r\n if ((now - this.State.LastLoadData) > REFRESH_LOAD_DATA_INTERVAL || this.State.SerializedFilter !== fullQueryFilterSerialized) {\r\n this.getItems$Subscription.unsubscribe();\r\n } else {\r\n this.State.LastLoadData = now;\r\n this.State.SerializedFilter = fullQueryFilterSerialized;\r\n return;\r\n }\r\n } else {\r\n this.getItems$Subscription.unsubscribe();\r\n }\r\n }\r\n\r\n this.State.LastLoadData = now;\r\n this.State.SerializedFilter = fullQueryFilterSerialized;\r\n //\r\n\r\n this.getItems$Subscription = this.itemsService\r\n .getItems(fullQueryFilter)\r\n .subscribe((response: BaseEntityResponse) => {\r\n if (refresh) {\r\n this.CanLoadNext = true;\r\n this.State.ItemGroups = [new ItemGroup()];\r\n }\r\n\r\n this.ProcessItemsResult(response.Entity, postLoad);\r\n\r\n this.State.ShowNoDataMessage = !this.State.ItemGroups || !this.State.ItemGroups.length\r\n || (this.State.ItemGroups.length === 1 && !this.State.ItemGroups[0].Items.length);\r\n });\r\n }\r\n\r\n protected ProcessItemsResult(itemsResult: ItemsResult, postLoad?: () => void) {\r\n\r\n if (!this.State.Filter.GroupBy || this.State.Filter.GroupBy === EnumDisplayGroupingOptions.None) {\r\n // check if no data\r\n if (!itemsResult || !itemsResult.Groups.length) {\r\n this.CanLoadNext = false;\r\n postLoad && postLoad();\r\n return;\r\n }\r\n\r\n // take a single group \r\n const items = itemsResult.Groups[0].Items;\r\n // add items to the end of the list\r\n if (items && items.length) {\r\n this.State.ItemGroups[0].Items.push(...this.AttachFakeData(items));\r\n }\r\n\r\n this.CanLoadNext = items && items.length && items.length >= this.State.PageSize;\r\n } else {\r\n let totalItems = 0;\r\n\r\n itemsResult.Groups.forEach(group => {\r\n // find group in local list\r\n const currentItemGroup = this.State.ItemGroups.find(g => g.GroupID === group.GroupID);\r\n // in case of existing add items to the end of the list of this group. Insted add whole group\r\n if (currentItemGroup) {\r\n currentItemGroup.Items.push(...this.AttachFakeData(group.Items));\r\n } else {\r\n this.State.ItemGroups.push(group);\r\n }\r\n totalItems += group.Items.length;\r\n });\r\n\r\n this.CanLoadNext = itemsResult.Groups.length && totalItems >= this.State.PageSize;\r\n }\r\n\r\n postLoad && postLoad();\r\n }\r\n\r\n protected GetItemDisplayType() {\r\n const catalogueView = this.State?.Filter?.CatalogueView;\r\n return catalogueView === EnumCatalogueViewOptions.Compact \r\n ? EnumItemDisplayTypes.CatalogueCompact\r\n : catalogueView === EnumCatalogueViewOptions.Grid ? EnumItemDisplayTypes.Grid : EnumItemDisplayTypes.CatalogueList;\r\n }\r\n\r\n // DEBUG\r\n protected AttachFakeData(items: ItemView[]) {\r\n items.forEach(x => {\r\n // x.Badge1Data = 'xxx 1';\r\n // x.Badge1Type = EnumItemBadgeTypes.Text;\r\n // x.Badge2Data = 'xxx 2';\r\n // x.Badge2Type = EnumItemBadgeTypes.Text;\r\n // x.Badge3Data = 'xxx 3';\r\n // x.Badge3Type = EnumItemBadgeTypes.Text;\r\n // //\r\n // x.Dimension1Name = 'Red';\r\n // x.DimensionValue1ID = 444;\r\n // x.Dimension2Name = '3XL';\r\n // x.DimensionValue2ID = 555;\r\n // x.Dimension3Name = 'wool';\r\n // x.DimensionValue3ID = 666;\r\n // //\r\n // x.PriceDetails.Discount = 25.5;\r\n // x.PriceDetails.Price = 3332.23;\r\n // x.PriceDetails.FinalPrice = 3332.23;\r\n // // x.PriceDetails.PriceComments = ['werwer werwer'];\r\n // x.IsPromotionAvailable = true;\r\n // x.PromotionID = 444;\r\n // x.PromotionText = 'Buy and Die';\r\n });\r\n return items;\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { BaseListComponent } from '@dino-pages/product-catalogue2/base/base-list';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\n\r\n@Component({\r\n selector: 'app-desktop-list',\r\n templateUrl: './desktop-list.component.html',\r\n styleUrls: ['./desktop-list.component.scss'],\r\n})\r\nexport class DesktopListComponent extends BaseListComponent {\r\n private scrollTopOffset = 0;\r\n private scrollTopOffsetDelta = 0;\r\n private scrollActionHandler;\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n itemsService: ItemsService,\r\n itemsFilterService: ItemsFilterService,\r\n customerService: CustomerService,\r\n shoppingCartService: ShoppingCartService,\r\n cateoryService: CategoriesService) {\r\n super(A, 'DesktopListComponent', screenService, itemsService, itemsFilterService, customerService, shoppingCartService, cateoryService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n override SetViewModeCssName() {\r\n this.State.ViewModeCssName = (this.State.Filter.CatalogueView === this.Enums.EnumCatalogueViewOptions.Grid)\r\n ? 'grid-view'\r\n : (this.State.Filter.CatalogueView === this.Enums.EnumCatalogueViewOptions.Compact)\r\n ? 'compact-view'\r\n : 'list-view';\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.PageScroll?.onScroll\r\n .subscribe((e) => {\r\n const minActionDelta = 0;\r\n const clearActionHandler = () => {\r\n if (this.scrollActionHandler) {\r\n clearTimeout(this.scrollActionHandler);\r\n this.scrollActionHandler = null;\r\n }\r\n };\r\n\r\n if (e.event?.type === 'scroll') {\r\n\r\n clearActionHandler();\r\n\r\n this.scrollActionHandler = setTimeout(() => {\r\n const scrollTopOffset = e.scrollOffset?.top || 0;\r\n this.scrollTopOffsetDelta = scrollTopOffset - this.scrollTopOffset;\r\n this.scrollTopOffset = scrollTopOffset;\r\n\r\n clearActionHandler(); \r\n \r\n this.OnSetAdditionalClass.emit((this.scrollTopOffset === 0) ? '' : 'items-scrolled');\r\n\r\n if (this.scrollTopOffset === 0) {\r\n this.Page.IsHeaderCollapsed = false;\r\n return;\r\n }\r\n\r\n if (this.scrollTopOffsetDelta === 0) return;\r\n this.Page.IsHeaderCollapsed = (this.scrollTopOffsetDelta > minActionDelta);\r\n }, 500);\r\n }\r\n });\r\n }, 1000);\r\n\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{group.GroupID | LookupCategory | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Brands'):'Name' | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Vendors'):'Name' | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Manufacturers'):'Name' | async}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblNoItems' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { BaseProductCatalogueComponent, BaseProductCatalogueState } from '../base/base-product-catalogue';\r\nimport { EnumMenuPositions, EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { SortGroupAssortmentPanelComponent } from '../components/sort-group-assortment-panel/sort-group-assortment-panel.component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-floating-catalogue',\r\n templateUrl: './floating-catalogue.component.html',\r\n styleUrls: ['./floating-catalogue.component.scss']\r\n})\r\nexport class FloatingCatalogueComponent extends BaseProductCatalogueComponent {\r\n private IsMediumScreen: boolean;\r\n\r\n private sidePanelState: boolean;\r\n private menuPositon: EnumMenuPositions;\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n categoriesService: CategoriesService,\r\n itemsFilterService: ItemsFilterService,\r\n private sidebarService: SidebarService,\r\n customerService: CustomerService,\r\n shoppingCartService: ShoppingCartService) {\r\n super(A, 'ProductCatalogue2Component', screenService, categoriesService, itemsFilterService, BaseProductCatalogueState, customerService, shoppingCartService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n this.SetPageClass();\r\n\r\n const screenSize$Subscription = this.screenService.ScreenSize$\r\n .subscribe(r => {\r\n this.IsMediumScreen = (r === EnumScreenSizes.ScreenSmall || r === EnumScreenSizes.ScreenXSmall || r === EnumScreenSizes.ScreenMedium);\r\n this.RefreshMenuSidePanelVisibility();\r\n });\r\n\r\n const pageSidePanelStateSubscription = this.A.SysEvents.PageSidePanelState\r\n .subscribe(r => {\r\n this.RefreshMenuSidePanelVisibility(null, r.state);\r\n });\r\n\r\n const menuPositonSubscription = this.A.SysEvents.MenuPositon\r\n .subscribe(r => {\r\n if (r == null) return;\r\n this.RefreshMenuSidePanelVisibility(r, null);\r\n });\r\n\r\n this.RegisterSubscription(screenSize$Subscription);\r\n this.RegisterSubscription(pageSidePanelStateSubscription);\r\n this.RegisterSubscription(menuPositonSubscription);\r\n \r\n if (!this.screenService.IsMobile() && this.screenService.Orientation() === 'portrait') {\r\n setTimeout(() => {\r\n this.A.SysEvents.SetPageSidePanelState(this.ComponentName, false);\r\n }, 500);\r\n }\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n HandleSortGroupAssortmentPanel() {\r\n this.sidebarService.Show('SortGroupAssortment',\r\n this.RC('lblSortGroupAssortment'),\r\n SortGroupAssortmentPanelComponent,\r\n null,\r\n null,\r\n null,\r\n 'floating-sort-group-assortment-sidebar');\r\n }\r\n\r\n protected RefreshMenuSidePanelVisibility(newMenuPositon?: EnumMenuPositions, newSidePanelState?: boolean) {\r\n if (!this.IsMediumScreen) return;\r\n\r\n if (newMenuPositon === EnumMenuPositions.Open && this.sidePanelState) {\r\n this.menuPositon = newMenuPositon;\r\n this.A.SysEvents.SetPageSidePanelState(this.ComponentName, false);\r\n }\r\n\r\n if (newSidePanelState && this.menuPositon === EnumMenuPositions.Open) {\r\n this.sidePanelState = newSidePanelState;\r\n this.A.SysEvents.SetMenuPositon(EnumMenuPositions.Close);\r\n }\r\n\r\n if (newMenuPositon != null) this.menuPositon = newMenuPositon;\r\n if (newSidePanelState != null) this.sidePanelState = newSidePanelState;\r\n }\r\n\r\n override SetPageClass() {\r\n this.PageClass = 'floating-catalogue-page no-bottom-padding no-top-padding no-left-padding no-right-padding '\r\n + (this.State.HideScrollLoading ? 'hide-scroll-loading' : '') + ` ${this.State.AdditionalClass}`;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
{{(State.CustomerOption?.ShipmentOption?.IsEnableDistributionCycles ? 'lblStartOverChangeCategory' : 'lblStartOver') | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumPriceInfoDisplayTypes } from './../enums';\r\nexport class PriceDisplayOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PriceDisplayOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsRenderPrice: boolean; \r\n public IsRenderPricePer100G: boolean; \r\n public IsRenderCurrencySymbol: boolean; \r\n public IsRenderAddToCart: boolean; \r\n public IsRenderMinQuantity: boolean; \r\n public IsRenderPriceChangeWhenZero: boolean; \r\n public IsRenderTotalPerItem: boolean; \r\n public IsRenderQuantityOutOfStock: boolean; \r\n public IsRenderQuantityInStock: boolean; \r\n public PriceInfoDisplayType: EnumPriceInfoDisplayTypes; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { PriceDisplayOption } from './../entities/pricedisplayoption.entity';\r\nexport class ItemDisplayElementOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemDisplayElementOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsRenderImages: boolean; \r\n public IsRenderDescription: boolean; \r\n public IsRenderItemCode: boolean; \r\n public IsRenderBarcode: boolean; \r\n public IsRenderWeight: boolean; \r\n public IsRenderPackageInfo: boolean; \r\n public IsRenderCategory: boolean; \r\n public IsRenderBrand: boolean; \r\n public IsRenderManufacturer: boolean; \r\n public IsRenderVendor: boolean; \r\n public IsRenderBadges: boolean; \r\n public IsRenderDimensionValues: boolean; \r\n public IsRenderName: boolean; \r\n public IsRenderSuppCatNum: boolean; \r\n public IsShowRemoveItemConfirmation: boolean; \r\n public IsRenderPromotions: boolean; \r\n public PriceDisplayOptionID: number; \r\n public IsRenderNotes: boolean; \r\n public IsRenderWarehouse: boolean; \r\n public IsRenderCustomFields: boolean; \r\n public IsShowLastSalePrice: boolean; \r\n public PriceDisplayOption: PriceDisplayOption = new PriceDisplayOption; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { EnumKitTypes, EnumQuantityActiveErrorPlace, EnumShoppingCartItemType, EnumShoppingCartModeOptions } from '@dino-proxy/enums';\r\nimport { DocumentLineDataParams } from '@dino-proxy/params/documentlinedata.param';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { BaseItemExtendedInformationAddonName, BaseListQuantityAddonName, AddonData, AddonEventTypes, AddonService } from '@dino-services/addon.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ActionResultEvent, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { filter } from 'rxjs';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\n\r\nexport class BaseListItemState2 extends BaseOptionState {\r\n ElementOption = new ItemDisplayElementOption;\r\n DocumentOption = new DocumentOption;\r\n Addons: { [key: string]: AddonData } = {};\r\n IsPickout: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'base-list-item',\r\n template: '
'\r\n})\r\nexport abstract class BaseListItemComponent extends BaseComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @Input() Item: ItemView;\r\n @Input() ShoppingCartMode: 'shopping-cart' | 'checkout' = 'shopping-cart';\r\n @Input() SearchText: string = null;\r\n @Input() EnableNavigate = true;\r\n @Input() EnableDelete = false;\r\n @Input() EnableEdit = false;\r\n @Input() IsShowDimensions: boolean = true;\r\n @Input() IsShowQuantityDirectlyFromItem: boolean = false;\r\n @Input() AdditionalData: string;\r\n @Input() IgnoreItemUpdate: boolean = false;\r\n @Input() abstract DisplayType: DisplayType;\r\n @Input() IsReadOnly: boolean = false;\r\n @Input() Mode: 'catalogue' | 'shopping-cart' = 'catalogue';\r\n @Input() UniqueItemID: number;\r\n @Input() IsNumberSelectionEnabledByBaseDocType: boolean;\r\n @Input() DisableEdit: boolean = false;\r\n @Input() DocumentLineData: DocumentLineDataParams;\r\n @Input() CustomerID: number = -999;\r\n @Input() CurrentPageForQuiantityError: EnumQuantityActiveErrorPlace;\r\n @Input() CompactShoppingCartOpened: boolean;\r\n @Output() OnDelete = new EventEmitter();\r\n @Output() OnEdit = new EventEmitter();\r\n @Output() OnDuplicate = new EventEmitter();\r\n @Output() OnQuantityValidation = new EventEmitter();\r\n @Output() OnMultipleClick = new EventEmitter();\r\n @Output() OnAddKitClick = new EventEmitter();\r\n EnumDisplayTypes = DisplayType;\r\n IsVirtualPromotionItem: boolean;\r\n IsShowSalesKitParentLabel: boolean;\r\n IsShowAppItemQuantityComponent: boolean;\r\n ItemKitChildrenQuantity: number;\r\n IsKitCollapsed: boolean;\r\n ShoppingCartDisplayMode: EnumShoppingCartModeOptions;\r\n\r\n private addonEvent$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n private addonService: AddonService,\r\n private itemOptionService: ItemOptionService,\r\n private customerOptionService: CustomerOptionService,\r\n private uiComponentService: UiComponentService,\r\n public componentName: string,\r\n public restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, componentName, BaseListItemState2);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.ElementOption = \r\n this.itemOptionService.GetItemOption(this.Item.ItemOptionID, this.DisplayType) || new ItemDisplayElementOption;\r\n\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n const shoppingCart = r.shoppingCart as ShoppingCartView;\r\n\r\n if (r.shoppingCart) {\r\n this.ItemKitChildrenQuantity = this.GetItemKitChildrenQuantity(r.shoppingCart);\r\n this.IsKitCollapsed = this.GetItemKitVisibility(r.shoppingCart);\r\n }\r\n\r\n this.State.DocumentOption = shoppingCart?.DocumentOption;\r\n this.processShoppingCart(shoppingCart);\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n\r\n // in pipe->filter -> add addons which are related to Item component or remove all\r\n this.addonEvent$Subscription = this.addonService.event$\r\n .pipe(filter(x => x.addonName === BaseItemExtendedInformationAddonName || x.addonName === BaseListQuantityAddonName))\r\n .subscribe(event => {\r\n if (event.EventType === AddonEventTypes.Ready) {\r\n const ItemAddonData = this.State.Addons[event.addonName] || {};\r\n this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, storageKey: event.storageKey || event.addonName });\r\n this.addonService.parseAdditionalDataAndSendToAddons(this.Item.EntryID, this.Item.AdditionalData, this.State.Addons, event.addonName, true);\r\n }\r\n });\r\n this.IsVirtualPromotionItem = this.Item.Quantity < 0 && this.Item.IsPromotionPrice;\r\n this.IsShowSalesKitParentLabel = this.Item.KitType === EnumKitTypes.Sales \r\n && (this.Item.IsKitItem || this.Item.PriceDetails.FinalPrice === 0);\r\n this.IsShowAppItemQuantityComponent = this.State.ElementOption?.PriceDisplayOption?.IsRenderAddToCart \r\n && this.Item?.VariationRelation !== this.Enums.EnumVariationRelations.Parent;\r\n if (this.Item.ItemActionPermissions) {\r\n this.EnableDelete = this.EnableDelete && this.Item.ItemActionPermissions.IsAllowItemDeleting;\r\n }\r\n\r\n this.DefineShoppingCartDisplayMode();\r\n // // COMBINE TO ONE EVENT\r\n\r\n // //\r\n // this.addonDataChanged$Subscription = this.itemsService.addonDataChanged$\r\n // .subscribe(event => this.ProcessShoppingCartEvents(event));\r\n\r\n // this.addonEvent$Subscription = this.addonService.event$\r\n // .subscribe(event => {\r\n // if (event.EventType === AddonEventTypes.Ready) {\r\n // let ItemAddonData = this.State.Addons[event.addonName] || {};\r\n // this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, storageKey: event.storageKey || event.addonName });\r\n\r\n // this.addonService.parseAdditionalDataAndSendToAddons(this.Item.EntryID, this.AdditionalData, this.State.Addons, event.addonName);\r\n // }\r\n\r\n // // THIS IS CRITICAL POINT -> \r\n // // All addons might return the data which has been used to apply/override currentelement props. \r\n // if (event.EventType === AddonEventTypes.ItemUpdateFromAddon) {\r\n // if (event.data) {\r\n // Object.assign(this, event.data);\r\n // }\r\n // }\r\n // });\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.addonEvent$Subscription && this.addonEvent$Subscription.unsubscribe();\r\n }\r\n\r\n HandleNavigate(item: ItemView, e) {\r\n if (e && e.stopPropagation) e.stopPropagation();\r\n if (!this.EnableNavigate) {\r\n return;\r\n }\r\n\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, item.EntryID], {\r\n UniqueItemID: this.UniqueItemID,\r\n DocumentLineData: JSON.stringify(this.DocumentLineData),\r\n CustomerID: this.CustomerID\r\n })\r\n );\r\n }\r\n\r\n\r\n GetItemKitChildrenQuantity(shoppingCart): number {\r\n if (!this.UniqueItemID || this.Item.KitType === EnumKitTypes.None) return 0;\r\n\r\n const items = shoppingCart.ShoppingCartItemViews;\r\n const parentItemUniqueItemID = this.UniqueItemID;\r\n\r\n const childrenQuantity = items.filter(function (item) {\r\n return item.ParentUniqueItemID === parentItemUniqueItemID;\r\n }).length;\r\n\r\n return childrenQuantity;\r\n }\r\n\r\n DefineShoppingCartDisplayMode() {\r\n const catalogueOption = this.customerOptionService.GetCustomerOption().CatalogueOption;\r\n this.ShoppingCartDisplayMode = catalogueOption.DefaultShoppingCartModeOption;\r\n }\r\n\r\n GetItemKitVisibility(shoppingCart): boolean {\r\n if (!this.UniqueItemID || this.Item.KitType === EnumKitTypes.None) return true;\r\n const items = shoppingCart.ShoppingCartItemViews;\r\n const parentItemUniqueItemID = this.UniqueItemID;\r\n\r\n const children = items.filter(function (item) {\r\n return (item.ParentUniqueItemID === parentItemUniqueItemID);\r\n });\r\n\r\n const hiddenChildrenQuantity = children.filter(function (child) {\r\n return (child.IsItemHiddenOnUI);\r\n }).length;\r\n\r\n return children.length === hiddenChildrenQuantity;\r\n }\r\n\r\n HandleDelete(e) {\r\n (e && e.stopPropagation) && e.stopPropagation();\r\n\r\n const resolve = () => this.EnableDelete && this.OnDelete.emit();\r\n\r\n if (this.State.ElementOption.IsShowRemoveItemConfirmation) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('lblDeleteItemConfirmationTitle');\r\n this.messageDialog.Prompt = this.RC('lblDeleteItemConfirmationPrompt');\r\n this.messageDialog.ShowDialogShort(() => resolve());\r\n } else {\r\n resolve();\r\n }\r\n }\r\n\r\n HandleEdit(e, isDuplucate: boolean = false) {\r\n (e && e.stopPropagation) && e.stopPropagation();\r\n this.EnableEdit && (isDuplucate ? this.OnDuplicate.emit() : this.OnEdit.emit());\r\n }\r\n\r\n HandlePromotionDisable(e) {\r\n this.shoppingCartService.disablePromotionInShoppingCart(\r\n this.Item.EffectPromotionID\r\n );\r\n }\r\n\r\n HandleQuantityValidation(valid: boolean) {\r\n this.OnQuantityValidation.emit(valid);\r\n }\r\n\r\n HandleMultipleClick() {\r\n if (this.Mode === 'catalogue') {\r\n this.shoppingCartService.pickoutItem(this.Item?.EntryID);\r\n this.OnMultipleClick.emit();\r\n }\r\n }\r\n\r\n HandleAddKitClick() {\r\n this.shoppingCartService.addKit(this.Item.EntryID, this.Item.WarehouseID).subscribe((r: ActionResultEvent) => {\r\n (r.error) && this.uiComponentService.ProcessAlerts(r.error);\r\n });\r\n }\r\n\r\n IsCurrentItemDocumentItem() {\r\n return this.DisplayType === DisplayType.FinalizedOrderList ||\r\n this.DisplayType === DisplayType.FinalizedOrderCompact || this.DisplayType === DisplayType.FinalizedOrderLine;\r\n }\r\n\r\n protected processShoppingCart(shoppingCart: ShoppingCartView) {\r\n if (!shoppingCart || !this.Item || this.Item.EntryID <= 0 || this.IsShowQuantityDirectlyFromItem) return;\r\n\r\n if (this.IsCurrentItemDocumentItem() || this.DisplayType == DisplayType.ReturnRequest) return;\r\n\r\n\r\n const itemID = this.Item.EntryID;\r\n const items = shoppingCart.ShoppingCartItemViews.filter(x =>\r\n x.ItemID === itemID\r\n && x.WarehouseID === this.Item.WarehouseID\r\n && x.ItemType !== EnumShoppingCartItemType.Virtual\r\n && !x.IsFree);\r\n\r\n if (this.Item.KitType !== EnumKitTypes.None && this.Item.IsKitSeparate // If current card is Kit Parent card\r\n && this.Mode === 'catalogue' && !this.Item.IsKitItem) { // In the catalogue, not ShoppingCart\r\n this.Item = Object.assign({}, this.Item, {\r\n Quantity: this.Item.Quantity,\r\n IsBlockedKitSeparate: true,\r\n } as ItemView);\r\n return;\r\n }\r\n\r\n if (items.length === 0) {\r\n this.Item.CustomFieldValues = null;\r\n this.Item = Object.assign({}, this.Item, {\r\n Quantity: 0,\r\n IsMultipleQuantity: false,\r\n } as ItemView);\r\n return;\r\n }\r\n\r\n if (items.length === 1 && !this.IgnoreItemUpdate && this.Mode === 'catalogue') {\r\n const shoppingCartItem = items.find(x => x.WarehouseID === this.Item.WarehouseID) as ShoppingCartItemView;\r\n this.Item = Object.assign({}, this.Item, {\r\n Quantity: shoppingCartItem ? shoppingCartItem.Quantity : 0,\r\n IsMultipleQuantity: false,\r\n } as ItemView);\r\n let customFieldValues = shoppingCart.ItemCustomFieldsView?.length > 0 \r\n && shoppingCart.ItemCustomFieldsView.some(fv => fv.UniqueItemID === items[0].UniqueItemID)\r\n ? {}\r\n : null; \r\n if (customFieldValues) {\r\n shoppingCart.ItemCustomFieldsView.filter(fv => fv.UniqueItemID === items[0].UniqueItemID).forEach(i => {\r\n customFieldValues[i.CustomFieldID] = i.Value;\r\n })\r\n }\r\n this.Item.CustomFieldValues = customFieldValues as any;\r\n return;\r\n }\r\n\r\n if (items.length > 1 && this.Mode === 'catalogue') {\r\n this.Item.CustomFieldValues = null;\r\n this.Item = Object.assign({}, this.Item, {\r\n IsMultipleQuantity: true,\r\n } as ItemView);\r\n return;\r\n }\r\n }\r\n\r\n // protected ProcessShoppingCartEvents(event: ShoppingCartEvent) {\r\n // // Item Quantity changed from another component\r\n // if (event.eventType === ShoppingCartEventTypes.AddonDataChanged) {\r\n // // this.Item = Object.assign({}, this.Item, {\r\n // // AdditionalData: event.data\r\n // // } as ItemView);\r\n // this.AdditionalData = event.data;\r\n // this.addonService.parseAdditionalDataAndSendToAddons(this.Item.EntryID, this.AdditionalData, this.State.Addons);\r\n // return;\r\n // }\r\n // }\r\n}","import { Component, Input } from '@angular/core';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseListItemComponent, } from '../base/base-list-item.component';\r\nimport { EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PriceViewMode } from '../components/item-price2/item-price2.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n@Component({\r\n providers: [AddonService],\r\n selector: 'app-compact-item',\r\n templateUrl: './compact-item.component.html',\r\n styleUrls: ['./compact-item.component.scss'],\r\n})\r\nexport class CompactItemComponent extends BaseListItemComponent {\r\n @Input() DisplayType = DisplayType.CatalogueList;\r\n @Input() PriceViewMode: PriceViewMode = 'short';\r\n @Input() BaseEntryID = 0;\r\n screenSize: EnumScreenSizes;\r\n EnumScreenSizes = EnumScreenSizes;\r\n\r\n constructor(A: ServiceBagService,\r\n shoppingCartService: ShoppingCartService,\r\n addonService: AddonService,\r\n itemOptionService: ItemOptionService,\r\n customerOptionService: CustomerOptionService,\r\n uiComponentService: UiComponentService,\r\n restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'CompactItemComponent', restrictedNavigationService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n 0\\\"\\r\\n class=\\\"kit-visibility-toggle\\\"\\r\\n [Item]=\\\"Item\\\"\\r\\n [UniqueItemID]=\\\"UniqueItemID\\\"\\r\\n [ItemKitChildrenQuantity]=\\\"ItemKitChildrenQuantity\\\"\\r\\n [IsCollapsed]=\\\"IsKitCollapsed\\\">\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n / \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\" class=\\\"base-icon mdi mdi-file-document-outline\\\">\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n {{Item.AssortmentComment}}\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-actions',\r\n templateUrl: './item-actions.component.html',\r\n styleUrls: ['./item-actions.component.scss'],\r\n})\r\nexport class ItemActionsComponent extends BaseComponent {\r\n @Input() EnableDelete = false;\r\n @Input() EnableEdit = false;\r\n @Input() EnablePromotionDisable = false;\r\n @Output() OnDelete = new EventEmitter();\r\n @Output() OnEdit = new EventEmitter();\r\n @Output() OnDuplicate = new EventEmitter();\r\n @Output() OnPromotionDisable = new EventEmitter();\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ItemActionsComponent', State);\r\n }\r\n\r\n \r\n\r\n override OnInitComponent() {\r\n if (this.EnablePromotionDisable) {\r\n this.ContextMenuItems = [\r\n {\r\n label: this.RC(\"lblDisablePromotion\"),\r\n icon: \"mdi mdi-currency-usd-off\",\r\n command: () => {\r\n this.HandlePromotionDisable(null);\r\n },\r\n }\r\n ];\r\n return;\r\n }\r\n\r\n this.ContextMenuItems = [\r\n {\r\n label: this.RC(\"lblShoppingCartItemEdit\"),\r\n icon: \"mdi mdi-pencil\",\r\n command: () => {\r\n this.HandleEdit(null);\r\n },\r\n },\r\n {\r\n label: this.RC(\"lblShoppingCartItemDuplicate\"),\r\n icon: \"mdi mdi-content-copy\",\r\n command: () => {\r\n this.HandleEdit(null, true);\r\n },\r\n }\r\n ];\r\n\r\n if (this.EnableDelete) {\r\n this.ContextMenuItems.push(\r\n {\r\n separator: true,\r\n },\r\n {\r\n label: this.RC('lblShoppingCartItemDelete'),\r\n icon: 'mdi mdi-delete-forever',\r\n command: () => {\r\n this.HandleDelete(null);\r\n },\r\n },);\r\n }\r\n }\r\n\r\n HandlePromotionDisable(e) {\r\n e && e.stopPropagation && e.stopPropagation();\r\n this.EnablePromotionDisable && this.OnPromotionDisable.emit(e);\r\n }\r\n\r\n HandleDelete(e) {\r\n (e && e.stopPropagation) && e.stopPropagation();\r\n this.EnableDelete && this.OnDelete.emit(e);\r\n }\r\n\r\n HandleEdit(e, isDuplicate: boolean = false) {\r\n (e && e.stopPropagation) && e.stopPropagation();\r\n this.EnableEdit && (isDuplicate ? this.OnDuplicate.emit(e) : this.OnEdit.emit(e));\r\n }\r\n\r\n HandleAction(event, cm) {\r\n this.uiComponentService.ShowItemActionContextMenu(event, cm);\r\n return false;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { EnumAttributeDisplayOptions } from '@dino-proxy/enums';\r\nimport { ItemAttributeView } from '@dino-proxy/views/itemattribute.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\n\r\nexport class ItemAttributeGroupViewExt {\r\n public Name: string;\r\n public TextAttributes: ItemAttributeView[] = [];\r\n public ColorAttributes: ItemAttributeView[] = [];\r\n public TagAttributes: ItemAttributeView[] = [];\r\n public LinkAttributes: ItemAttributeView[] = [];\r\n //\r\n public CombinedTextAttributes?: ItemAttributeView[] = [];\r\n}\r\n\r\nclass State extends BaseState {\r\n AttributeGroups: ItemAttributeGroupViewExt[];\r\n AttrsTooltipVisibility = new Set();\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-attributes2',\r\n templateUrl: './item-attributes2.component.html',\r\n styleUrls: ['./item-attributes2.component.scss']\r\n})\r\nexport class ItemAttributes2Component extends BaseComponent {\r\n @Input() set AttributeGroups(value: ItemAttributeGroupViewExt[]) {\r\n this.State.AttributeGroups = value;\r\n this.processAttributeGroups();\r\n }\r\n\r\n get AttributeGroups() { return this.State.AttributeGroups; }\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'ItemAttributes2Component', State);\r\n }\r\n\r\n \r\n\r\n processAttributeGroups() {\r\n if (!this.State.AttributeGroups) return;\r\n\r\n const groupBy = function (xs, key) {\r\n return xs.reduce(function (rv, x) {\r\n (rv[x[key]] = rv[x[key]] || []).push(x);\r\n return rv;\r\n }, {});\r\n };\r\n\r\n const sortGroupsFn = (a: ItemAttributeGroupViewExt, b: ItemAttributeGroupViewExt) => {\r\n const nameA = (a.Name || '').toUpperCase();\r\n const nameB = (b.Name || '').toUpperCase();\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n return 0;\r\n };\r\n\r\n this.State.AttributeGroups.forEach(g => {\r\n if (!g.TextAttributes || !g.TextAttributes.length) return;\r\n\r\n let groups = groupBy(g.TextAttributes, 'Name');\r\n g.CombinedTextAttributes = [];\r\n\r\n Object.keys(groups).forEach(key => {\r\n const values = groups[key] as [];\r\n\r\n const getText = (value: ItemAttributeView) => {\r\n try {\r\n if (value.AttributeDisplayOption === EnumAttributeDisplayOptions.Date) {\r\n const date = formatDate(new Date(value.Value), this.F.DateFormatLong);\r\n return date;\r\n }\r\n\r\n if (value.AttributeDisplayOption === EnumAttributeDisplayOptions.Number) {\r\n return formatNumber(+value.Value, this.F.NumberQuantity);\r\n }\r\n\r\n return value.Value;\r\n }\r\n catch { return ''; }\r\n };\r\n\r\n const sortAttributesFn = (a: ItemAttributeView, b: ItemAttributeView) => {\r\n return ((a.SortOrder || 0) - ((b.SortOrder || 0)));\r\n };\r\n\r\n const combineValues = values.filter((x: ItemAttributeView) => x.IsCombineByName) as ItemAttributeView[];\r\n const separateValues = values.filter((x: ItemAttributeView) => !x.IsCombineByName) as ItemAttributeView[];\r\n\r\n const combineTexts = combineValues.map(getText);\r\n\r\n if (combineTexts.length) {\r\n\r\n g.CombinedTextAttributes.push({\r\n Name: (key === 'undefined') ? '' : key,\r\n Value: combineTexts.join('; '),\r\n AttributeDisplayOption: EnumAttributeDisplayOptions.Text,\r\n IsShowDescription: combineValues.length ? combineValues[0].IsShowDescription : false,\r\n Description: combineValues.length ? combineValues[0].Description : null,\r\n SortOrder: combineValues.length ? combineValues[0].SortOrder : null\r\n } as ItemAttributeView);\r\n\r\n g.CombinedTextAttributes.sort(sortAttributesFn);\r\n }\r\n\r\n separateValues.forEach(x => {\r\n const text = getText(x);\r\n\r\n g.CombinedTextAttributes.push({\r\n Name: (key === 'undefined') ? '' : key,\r\n Value: text,\r\n AttributeDisplayOption: EnumAttributeDisplayOptions.Text,\r\n IsShowDescription: x.IsShowDescription,\r\n Description: x.Description,\r\n SortOrder: x.SortOrder\r\n } as ItemAttributeView);\r\n\r\n g.CombinedTextAttributes.sort(sortAttributesFn);\r\n });\r\n });\r\n });\r\n\r\n this.State.AttributeGroups.sort(sortGroupsFn);\r\n }\r\n\r\n getAttrDescriptionElementID(entryID) {\r\n return `attr-description-${entryID}`;\r\n }\r\n\r\n toggleDescriptionVisible(entryID: number) {\r\n if (this.State.AttrsTooltipVisibility.has(entryID)) {\r\n this.State.AttrsTooltipVisibility.delete(entryID);\r\n } else {\r\n this.State.AttrsTooltipVisibility.add(entryID);\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{group.Name || ('lblOthers' | RC:THIS)}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{attribute.Name}}\\r\\n
\\r\\n
\\r\\n {{attribute.Value}}\\r\\n
\\r\\n
\\r\\n {{attribute.Value | formatNumberGeneral}}\\r\\n
\\r\\n
\\r\\n {{attribute.Value | formatDate}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{attribute.Name}}\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n {{attribute.Value}}\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { EnumItemBadgeTypes } from \"@dino-proxy/enums\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { UI_EVENTS, UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\ntype BadgeData = { Type: EnumItemBadgeTypes, Data: string, SafeHTML?: SafeHtml };\r\n\r\nclass State extends BaseState {\r\n IsAnyBadges: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-badges',\r\n templateUrl: './item-badges.component.html',\r\n styleUrls: ['./item-badges.component.scss'],\r\n})\r\nexport class ItemBadgesComponent extends BaseComponent {\r\n @Input() UniqueItemID: number;\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.RefreshState();\r\n }\r\n get Item() { return this.item; }\r\n\r\n @Input() set ElementOption(value: ItemDisplayPopupOption | ItemDisplayElementOption) {\r\n this.elementOption = value;\r\n this.RefreshState();\r\n }\r\n get ElementOption() { return this.elementOption; }\r\n @Input() Mode: 'horizontal' | 'vertical' = 'horizontal';\r\n badges: BadgeData[];\r\n private item: ItemView;\r\n private elementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'ItemBadgesComponent', State);\r\n }\r\n \r\n RefreshState() {\r\n if (this.Item && !!this.ElementOption && this.ElementOption.IsRenderBadges) {\r\n this.badges = this.getBadges();\r\n this.badges.forEach(x => x.Type === EnumItemBadgeTypes.CssClass && (x.SafeHTML = x.Data));\r\n this.State.IsAnyBadges = (this.badges.length !== 0);\r\n } else {\r\n this.badges = [];\r\n this.State.IsAnyBadges = false;\r\n }\r\n }\r\n\r\n getBadges() {\r\n return [1, 2, 3].map(x => this.getBadge(this.Item?.EntryID, x))\r\n .filter(x => !!x && x.Type !== this.Enums.EnumItemBadgeTypes.None && x.Data !== undefined && x.Data !== null);\r\n }\r\n\r\n getBadge(entryID: number, index: number) {\r\n if (!this.Item) return null;\r\n\r\n const fieldPrefix = `Badge${index}`;\r\n const typeFieldName = `${fieldPrefix}Type`;\r\n const dataFieldName = `${fieldPrefix}Data`;\r\n if (entryID === this.Item.EntryID) return { Type: this.Item[typeFieldName], Data: this.Item[dataFieldName] };\r\n\r\n const variation = this.Item.Variations?.find(x => x.EntryID === entryID);\r\n if (!variation) return null;\r\n return { Type: variation[typeFieldName], Data: variation[dataFieldName] };\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{badge.Data}}
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Output, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n selector: 'app-kit-children-toggle',\r\n templateUrl: './item-children-visibility-toggle.component.html',\r\n styleUrls: ['./item-children-visibility-toggle.component.scss']\r\n})\r\nexport class ItemChildrenVisibilityToggleComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() UniqueItemID: number;\r\n @Input() ItemKitChildrenQuantity: number;\r\n @Input() IsCollapsed: boolean = false;\r\n ToggleButtonText: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ItemChildrenVisibilityToggleComponent', BaseOptionState);\r\n }\r\n\r\n override OnInitComponent(): void {\r\n this.DefineInitialButtonState();\r\n }\r\n\r\n OnClick(e) {\r\n this.IsCollapsed = !this.IsCollapsed;\r\n const params = \r\n {\r\n 'ParentUniqueItemID': this.UniqueItemID,\r\n 'IsCollapsed': this.IsCollapsed\r\n };\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.KIT_CHILDREN_VISIBILITY_TOGGLE, params);\r\n this.ToggleButtonCaption();\r\n }\r\n\r\n ToggleButtonCaption() {\r\n const quantity = this.ItemKitChildrenQuantity;\r\n const translationItemQuantity = quantity > 1 ? 'Items' : 'Item';\r\n\r\n this.ToggleButtonText = this.IsCollapsed \r\n ? this.RC(`lblKitChildShow${translationItemQuantity}`, this.ItemKitChildrenQuantity) \r\n : this.RC(`lblKitChildHide${translationItemQuantity}`, this.ItemKitChildrenQuantity);\r\n }\r\n\r\n DefineInitialButtonState() {\r\n this.ToggleButtonCaption();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n {{ToggleButtonText}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n selector: 'app-item-delete',\r\n templateUrl: './item-delete.component.html',\r\n styleUrls: ['./item-delete.component.scss']\r\n})\r\nexport class ItemDeleteComponent extends BaseComponent {\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemDeleteComponent', BaseOptionState);\r\n }\r\n\r\n \r\n\r\n OnClickHandler(e) {\r\n if (e && e.stopPropagation) e.stopPropagation();\r\n if (e && e.event) e.event.stopPropagation();\r\n this.OnClick.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { EnumItemSaleMethods } from \"@dino-proxy/enums\";\r\nimport { DocumentLineDataParams } from \"@dino-proxy/params/documentlinedata.param\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-description',\r\n templateUrl: './item-description.component.html',\r\n styleUrls: ['./item-description.component.scss'],\r\n})\r\nexport class ItemDescriptionComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() SearchText: string;\r\n @Input() ElementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n @Input() Mode: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() Size: 'normal' | 'big' = 'normal';\r\n @Input() DocumentLineData: DocumentLineDataParams;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemDescriptionComponent', State);\r\n }\r\n \r\n IsAnySaleInfo() {\r\n return (this.Item.SaleMethod === EnumItemSaleMethods.Units && this.Item.StockUnitName)\r\n || (this.Item.SaleMethod === EnumItemSaleMethods.Packages && this.Item.SalePackageName && this.Item.StockUnitsInPackage && this.Item.StockUnitName)\r\n || this.Item.SaleMethod === EnumItemSaleMethods.Kilograms\r\n || this.Item.SaleMethod === EnumItemSaleMethods.Grams\r\n || this.Item.SaleMethod === EnumItemSaleMethods.Liters;\r\n }\r\n\r\n IsShowPer100Gr() {\r\n return this.ElementOption?.PriceDisplayOption?.IsRenderPricePer100G \r\n && this.Item?.PriceDetails?.PricePer100G && this.Item?.PriceDetails?.PricePer100G !== 0;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item.AssortmentComment}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item.MainCategoryID | LookupCategory | async}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item.BrandName}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item.VendorName}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item.ManufacturerName}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
1\\\" class=\\\"element\\\">\\r\\n
\\r\\n
{{'lblMinQuantityTitle' | RC:THIS}} {{Item.MinOrderQuantity}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblUnitOfSale' | RC:THIS}}\\r\\n \\r\\n {{Item.StockUnitName}}\\r\\n \\r\\n \\r\\n {{RC('lblPackageInfo', Item.SalePackageName, Item.StockUnitsInPackage, Item.StockUnitName)}}\\r\\n \\r\\n \\r\\n {{'lblKilograms' | RC:THIS}}\\r\\n \\r\\n \\r\\n {{'lblGrams' | RC:THIS}}\\r\\n \\r\\n \\r\\n {{'lblLiters' | RC:THIS}}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{RC('lblUnitWeight', Item.SalePackageWeight)}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{DocumentLineData.Notes}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{DocumentLineData.WarehouseName}}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{'lblLastSaleInfoPriceTitle' | RC:THIS}}: {{Item.LastItemSale?.PriceAfterDiscount | formatPriceWithCurrency:Item.LastItemSale?.Currency:true}}
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-dimensions',\r\n templateUrl: './item-dimensions.component.html',\r\n styleUrls: ['./item-dimensions.component.scss'],\r\n})\r\nexport class ItemDimensionsComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() ElementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n @Input() Mode: 'horizontal' | 'vertical' = 'horizontal';\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'ItemDimensionsComponent', State);\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
{{Item.Dimension1Name}}: {{Item.DimensionValue1ID | Lookup:DS('DimensionValues'):'Name' | async}}
\\r\\n
{{Item.Dimension2Name}}: {{Item.DimensionValue2ID | Lookup:DS('DimensionValues'):'Name' | async}}
\\r\\n
{{Item.Dimension3Name}}: {{Item.DimensionValue3ID | Lookup:DS('DimensionValues'):'Name' | async}}
\\r\\n
\";","import { Component, EventEmitter, Output, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'app-promotion-item-disable',\r\n templateUrl: './item-disable-promotion.html',\r\n styleUrls: ['./item-disable-promotion.scss']\r\n})\r\nexport class ItemDisableFromPromotion extends BaseComponent {\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private screenService: ScreenService,) {\r\n super(A, 'ItemDisableFromPromotion', BaseOptionState);\r\n }\r\n\r\n IsDesktop: boolean;\r\n\r\n override OnInitComponent(): void {\r\n this.IsDesktop = this.screenService.IsDesktop();\r\n }\r\n\r\n OnClickHandler(e) {\r\n if (e && e.stopPropagation) e.stopPropagation();\r\n if (e && e.event) e.event.stopPropagation();\r\n this.OnClick.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n
{{'lblDisablePromotion' | RC:THIS}}
\\r\\n \\r\\n
\";","import { Component, EventEmitter, Output, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n@Component({\r\n selector: 'app-item-edit',\r\n templateUrl: './item-edit.component.html',\r\n styleUrls: ['./item-edit.component.scss']\r\n})\r\nexport class ItemEditComponent extends BaseComponent {\r\n @Input() Mode: 'edit' | 'duplicate' = 'edit';\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemEditComponent', BaseOptionState);\r\n }\r\n\r\n \r\n\r\n OnClickHandler(e) {\r\n if (e && e.stopPropagation) e.stopPropagation();\r\n if (e && e.event) e.event.stopPropagation();\r\n this.OnClick.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { ItemFile } from '@dino-proxy/entities/item.entity';\r\nimport { GetFileParams } from '@dino-proxy/params/getfile.param';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\n\r\n@Component({\r\n selector: 'app-item-files2',\r\n templateUrl: './item-files2.component.html',\r\n styleUrls: ['./item-files2.component.scss']\r\n})\r\nexport class ItemFiles2Component extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() ElementOption: ItemDisplayPopupOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n public screen: ScreenService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ItemFiles2Component', BaseState);\r\n }\r\n\r\n \r\n\r\n Download(file: ItemFile) {\r\n const params = {\r\n FileName: file.FileName\r\n } as GetFileParams;\r\n\r\n this.itemsEndpoint.GetItemFile(params)\r\n .subscribe(response => { \r\n if (!response.IsSuccess) {\r\n \r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n return;\r\n }\r\n\r\n if (!response.Data || !response.Data.length) { return; };\r\n const donwloadLink = document.createElement('a');\r\n donwloadLink.href = `data:text/plain;base64,${response.Data}`;\r\n donwloadLink.download = file.FileName;\r\n donwloadLink.click();\r\n });\r\n }\r\n\r\n GetFileIcon(file: ItemFile) {\r\n return Utils.GetIconStyle('.' + file.FileName?.split('.').pop());\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
{{file.FileName}}
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml, SafeUrl } from \"@angular/platform-browser\";\r\nimport { ImageRequest } from \"@dino-components/image/image.component\";\r\nimport { ItemVideo } from \"@dino-proxy/entities/item.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ImageSizeEnums, ImageTypeEnums } from \"@dino-proxy/enums\";\r\nimport { ImageVersionView } from \"@dino-proxy/views/imageversion.view\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { CustomerOptionService } from \"@dino-services/customer-option.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { DxGalleryComponent, DxScrollViewComponent } from \"devextreme-angular\";\r\n\r\ntype MediaTypes = 'image' | 'video';\r\n\r\nclass MediaItem {\r\n type: MediaTypes;\r\n index: number;\r\n data: ImageVersionView | ItemVideo;\r\n videoSafeUrl: SafeUrl;\r\n smallImageRequest: ImageRequest;\r\n imageRequest: ImageRequest;\r\n}\r\n\r\nclass State extends BaseState {\r\n DisablePrevious: boolean;\r\n DisableNext: boolean;\r\n MediaItems: MediaItem[] = [];\r\n MediaItemsSoloImages: MediaItem[] = [];\r\n IsShowThumbnailsArea: boolean;\r\n IsMobile: boolean;\r\n IsShowVideoLoading: boolean;\r\n IsAllowImageEnlargement: boolean;\r\n ImageBackgroundColor: string;\r\n IsRTL: boolean;\r\n // \r\n IsImagePopupVisible: boolean = false;\r\n ImagePopupWidth: string = \"800px\";\r\n ImagePopupHeight: string = \"800px\";\r\n InternalImageHeight: string = \"auto\"\r\n InternalImageWidth: string = \"auto\"\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-media',\r\n templateUrl: './item-media.component.html',\r\n styleUrls: ['./item-media.component.scss'],\r\n})\r\nexport class ItemMediaComponent extends BaseComponent {\r\n @ViewChild(DxScrollViewComponent) thumbnailsScrollView: DxScrollViewComponent;\r\n @ViewChild(\"itemsGallery\") itemsGallery: DxGalleryComponent;\r\n\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.InitializeMediaItems();\r\n }\r\n get Item() { return this.item; }\r\n\r\n @Input() set PopupOption(value: ItemDisplayPopupOption) {\r\n this.popupOption = value;\r\n this.InitializeMediaItems();\r\n }\r\n get PopupOption() { return this.popupOption; }\r\n @Input() IsShowThumbnailsArea: boolean = true;\r\n\r\n private item: ItemView;\r\n private popupOption: ItemDisplayPopupOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private screenService: ScreenService,\r\n private sanitizer: DomSanitizer,\r\n private customerOptionService: CustomerOptionService) {\r\n super(A, 'ItemMediaComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.IsRTL = this.screenService.IsRTL();\r\n\r\n const catalogueOption = this.customerOptionService.GetCustomerOption().CatalogueOption;\r\n this.State.IsAllowImageEnlargement = catalogueOption.IsAllowImageEnlargement;\r\n this.State.ImageBackgroundColor = catalogueOption.ImageBackgroundColor;\r\n\r\n this.InitImagePopupSize();\r\n }\r\n\r\n override OnInitState() {\r\n this.InitializeMediaItems();\r\n }\r\n\r\n InitImagePopupSize() {\r\n if (this.screenService.IsMobile()) {\r\n this.State.ImagePopupWidth = this.State.ImagePopupHeight = \"100%\";\r\n return;\r\n }\r\n\r\n if (!this.screenService.IsMobile()) {\r\n if (this.screenService.IsWideScreen()) {\r\n this.State.ImagePopupWidth = \"70dvh\";\r\n this.State.ImagePopupHeight = \"70dvh\";\r\n } else {\r\n this.State.ImagePopupWidth = \"90dvh\";\r\n this.State.ImagePopupHeight = \"90dvh\";\r\n }\r\n }\r\n\r\n // if (this.screenService.IsMobile()) {\r\n // this.State.ImagePopupHeight = \"60dvh\";\r\n // this.State.InternalImageHeight = \"43dvh\";\r\n // this.State.InternalImageWidth = \"81vw\";\r\n // } else if (this.screenService.IsTablet()) {\r\n // this.State.ImagePopupHeight = \"65%\";\r\n // this.State.InternalImageHeight = \"660px\";\r\n // this.State.InternalImageWidth = \"790px\";\r\n // } else if (this.screenService.IsDesktop()) {\r\n // this.State.ImagePopupHeight = \"800px\";\r\n // this.State.ImagePopupWidth = \"800px\";\r\n // this.State.InternalImageWidth = this.State.ImagePopupWidth;\r\n // this.State.InternalImageHeight = \"720px\";\r\n // }\r\n }\r\n\r\n OnImageClick() {\r\n if (!this.State.IsAllowImageEnlargement) return;\r\n this.ToggleImagePopup();\r\n }\r\n\r\n ToggleImagePopup() {\r\n this.State.IsImagePopupVisible = !this.State.IsImagePopupVisible;\r\n }\r\n\r\n InitializeMediaItems() {\r\n if (this.Item && this.PopupOption) {\r\n\r\n this.State.MediaItems = [];\r\n this.State.MediaItemsSoloImages = [];\r\n const mediaItemsCombiner = (arr: (ImageVersionView | ItemVideo)[], type: MediaTypes) => {\r\n if (!arr) return;\r\n this.State.MediaItems = [...this.State.MediaItems, ...arr.map(x => {\r\n const mediaItem = {\r\n type: type,\r\n data: x,\r\n } as MediaItem;\r\n\r\n if (type === 'image') {\r\n mediaItem.smallImageRequest = this.GetImageRequest(mediaItem.data as ImageVersionView, ImageSizeEnums.Small);\r\n //--\r\n mediaItem.imageRequest = this.GetImageRequest(mediaItem.data as ImageVersionView, ImageSizeEnums.Large);\r\n } else {\r\n mediaItem.videoSafeUrl = ((mediaItem.data) as ItemVideo)?.VideoLink;\r\n }\r\n\r\n return mediaItem;\r\n })];\r\n }\r\n\r\n if ((!this.Item.ImageVersions || !this.Item.ImageVersions.length) && (!this.Item.ItemVideos || !this.Item.ItemVideos.length)) {\r\n this.State.MediaItems = [{\r\n type: 'image',\r\n imageRequest: {\r\n EntryID: this.Item.EntryID,\r\n ImageSize: ImageSizeEnums.Large,\r\n ImageType: ImageTypeEnums.Empty,\r\n Index: 0,\r\n Version: 0\r\n } as ImageRequest\r\n } as MediaItem];\r\n }\r\n\r\n this.PopupOption.IsRenderImages && mediaItemsCombiner(this.Item.ImageVersions, 'image');\r\n this.PopupOption.IsRenderVideos && mediaItemsCombiner(this.Item.ItemVideos, 'video');\r\n this.State.MediaItems.forEach((x, idx) => x.index = idx);\r\n\r\n this.State.IsShowThumbnailsArea = this.IsShowThumbnailsArea && this.PopupOption.IsRenderThumbnails && this.State.MediaItems && this.State.MediaItems.length > 1;\r\n\r\n this.State.MediaItemsSoloImages = this.State.MediaItems.filter(x => x.type === 'image');\r\n this.State.MediaItemsSoloImages.forEach(x => x.imageRequest.ImageSize = ImageSizeEnums.Large);\r\n\r\n setTimeout(() => {\r\n this.itemsGallery.instance.repaint();\r\n }, 200);\r\n }\r\n }\r\n\r\n GetImageRequest(image: ImageVersionView, size: ImageSizeEnums) {\r\n return {\r\n EntryID: image.AlternativeEntryID ? image.AlternativeEntryID : (image.EntryID || this.Item.EntryID),\r\n ImageSize: size,\r\n ImageType: image.AlternativeEntryID ? image.AlternativeImageType : ImageTypeEnums.Item,\r\n Index: image.Index,\r\n Version: image.ImageVersion\r\n } as ImageRequest;\r\n }\r\n\r\n HandleItemRendered() {\r\n this.ChangeThumbnailsAreaItem();\r\n }\r\n\r\n HandleSelectionChanged() {\r\n if (this.itemsGallery && this.itemsGallery.selectedIndex != null) {\r\n let currentItem = this.State.MediaItems[this.itemsGallery.selectedIndex];\r\n this.State.IsShowVideoLoading = (currentItem.type === 'video');\r\n }\r\n\r\n this.ChangeThumbnailsAreaItem();\r\n }\r\n\r\n ChangeThumbnailsAreaItem() {\r\n if (this.itemsGallery && this.itemsGallery.selectedIndex != null && this.IsShowThumbnailsArea) {\r\n let currentItem = this.State.MediaItems[this.itemsGallery.selectedIndex];\r\n this.thumbnailsScrollView?.instance?.scrollToElement(document.getElementById(this.GetItemId(currentItem)));\r\n }\r\n }\r\n\r\n SetMediaItem(mediaItem: MediaItem) {\r\n this.itemsGallery.selectedIndex = mediaItem.index;\r\n }\r\n\r\n GetItemId(item: MediaItem) {\r\n return `madia_item_${item.data.EntryID}_${item.index.toString()}`;\r\n }\r\n\r\n HandleVideoLoad() {\r\n //console.log('...HandleVideoLoad');\r\n //\r\n this.State.IsShowVideoLoading = false;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\";","export default \"
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
{{State?.PriceDetails?.CurrencySymbol}}
\\r\\n
{{State.GetInvertedPromotionPriceMainPart ? '-' : ''}}{{State.GetInvertedPromotionPriceMainPart ?? State.GetFinalPriceMainPart}}
\\r\\n
\\r\\n .{{State.GetInvertedPromotionPriceChangePart ?? State.GetFinalPriceChangePart}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{'lblSalesKitParentPrice' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n
{{State?.PriceDetails?.OriginalCurrency ?? State?.PriceDetails?.CurrencySymbol}}
\\r\\n
{{State.GetPriceMainPart}}
\\r\\n
\\r\\n .{{State.GetPriceChangePart}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{State?.PriceDetails?.Discount}}%
\\r\\n
{{'lblDiscount' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{State.PriceComments}} \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{'lblPromotionPriceText' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n ({{State?.PriceDetails?.CurrencySymbol}}{{State.GetPricePer100MainPart}}.{{State.GetPricePer100ChangePart}} {{'lblPricePer100g' | RC:THIS}})\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblFreeItem' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n {{State.AlternativePriceTitle}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
{{State?.PriceDetails?.CurrencySymbol}}
\\r\\n
{{State.GetInvertedPromotionPriceMainPart ?? State.GetFinalPriceMainPart}}
\\r\\n
\\r\\n .{{State.GetInvertedPromotionPriceChangePart ?? State.GetFinalPriceChangePart}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ViewChild, TemplateRef } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n IsPromotionTextVisible: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-promotions',\r\n templateUrl: './item-promotions.component.html',\r\n styleUrls: ['./item-promotions.component.scss']\r\n})\r\nexport class ItemPromotionsComponent extends BaseComponent {\r\n @ViewChild('promotionTextTemplate') promotionTextTemplate: TemplateRef;\r\n\r\n @Input() Item: ItemView;\r\n @Input() ElementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private bottomSheetService: BottomSheetService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'ItemPromotionsComponent', State);\r\n }\r\n\r\n GetPromotionLabel() {\r\n const screenSize = this.A.Screen.GetScreenSize();\r\n if (screenSize === EnumScreenSizes.ScreenSmall || screenSize === EnumScreenSizes.ScreenXSmall || this.A.Screen.IsMobile()) {\r\n return this.RC('lblPromo');\r\n // } else if (screenSize === EnumScreenSizes.ScreenXSmall) {\r\n // return '';\r\n } else return this.RC('lblPromotions');\r\n }\r\n\r\n OnGotoPromotions(e) {\r\n e && e.stopPropagation();\r\n //\r\n if (this.Item.PromotionID) {\r\n if (!this.A.Screen.IsMobile()) {\r\n // show promo (already done on UI) \r\n } else {\r\n //show BottomSheet\r\n\r\n const params = {\r\n Title: this.RC('lblPromotions'),\r\n Content: this.promotionTextTemplate\r\n } as any as BottomSheetContentParams;\r\n this.bottomSheetService.Show(params);\r\n }\r\n } else if (this.Item.IsPromotionAvailable) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, this.Item?.EntryID], { Tab: 'PromotionsTab' })\r\n );\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { EnumItemStockManagementTypes, EnumQuantityActiveErrorPlace } from '@dino-proxy/enums';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ActionResultEvent, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Quantity: number = 0;\r\n QuantityBefore: number;\r\n MaxQuantity: number;\r\n MinQuantity: number = 0;\r\n MinOrderQuantity: number = 0;\r\n Format: string = '#,##0';\r\n Step: number = 1;\r\n IsEnabled = true;\r\n DisableDecrease = false;\r\n DisableIncrease = false;\r\n ElementID: string;\r\n IsShowValidationMessage: boolean;\r\n ValidationMessage: string;\r\n Invalid: boolean;\r\n TotalPerItem: number;\r\n TotalPerItemMain: string;\r\n TotalPerItemChange: string;\r\n SaleMultipleOf: number;\r\n IsPromotionPrice: boolean;\r\n IsFree: boolean = false;\r\n IsMultipleQuantity: boolean = false;\r\n IsAllowNegativeQuantity: boolean = false;\r\n IsFocused: boolean;\r\n}\r\n\r\nexport type OnClickHandlerFn = (direction: 'minus' | 'plus', prevQuantity: number) => boolean;\r\n// this variable applies as NO min quantity(undefined/null)\r\nconst DEFAULT_NEGATIVE_MIN_QUANTITY = -9999999;\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-quantity',\r\n templateUrl: './item-quantity.component.html',\r\n styleUrls: ['./item-quantity.component.scss'],\r\n})\r\nexport class ItemQuantityComponent extends BaseComponent {\r\n // @ViewChild(MessageBoxDialogComponent) quantityChangeDialog: MessageBoxDialogComponent;\r\n\r\n // only for testing\r\n // private testDataSetted: boolean = false;\r\n @Input() CurrentPageForQuiantityError: EnumQuantityActiveErrorPlace = EnumQuantityActiveErrorPlace.Catalogue;\r\n\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.RefreshState();\r\n }\r\n get Item() {\r\n return this.item;\r\n }\r\n\r\n @Input() set ElementOption(value: ItemDisplayPopupOption | ItemDisplayElementOption) {\r\n this.elementOption = value;\r\n this.RefreshState();\r\n }\r\n get ElementOption() {\r\n return this.elementOption;\r\n }\r\n\r\n @Input() IsShowTitle: boolean = false;\r\n @Input() IsReturnRequest: boolean = false;\r\n @Input() IsReadOnly: boolean = false;\r\n @Input() ViewMode: 'normal' | 'short' = 'normal';\r\n @Input() OnClickHandler: OnClickHandlerFn = () => true;\r\n @Input() LabelOnly: boolean = false;\r\n @Input() UniqueItemID: number;\r\n @Input() IsNumberSelectionEnabledByBaseDocType: boolean = false;\r\n @Input() IgnoreMultipleQuantity: boolean = false;\r\n @Input() CompactShoppingCartOpened: boolean = false;\r\n @Output() OnQuantityValidation = new EventEmitter();\r\n @Output() OnMultipleClick = new EventEmitter();\r\n @Output() OnAddKitClick = new EventEmitter();\r\n DebounceTime = 10;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n private item: ItemView;\r\n private elementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'ItemQuantityComponent', State);\r\n }\r\n\r\n RefreshState() {\r\n if (!this.ElementOption || !this.Item?.EntryID) return;\r\n if ((this.State.Quantity === null || this.State.Quantity === undefined) && this.State.IsFocused) return ;\r\n\r\n this.State.Quantity = this.State.QuantityBefore = this.Item.Quantity;\r\n this.State.MaxQuantity = this.Item.MaxOrderQuantity ? this.Item.MaxOrderQuantity : undefined;\r\n\r\n const minOrderQuantity = this.Item.MinOrderQuantity || 0;\r\n const minQuantity = this.Item.MinQuantity || (this.Item.IsAllowNegativeQuantity ? DEFAULT_NEGATIVE_MIN_QUANTITY : 0);\r\n //\r\n this.State.MinOrderQuantity = minOrderQuantity;\r\n this.State.MinQuantity = (minOrderQuantity > minQuantity) ? minOrderQuantity : minQuantity;\r\n this.State.IsFree = this.Item.IsFree;\r\n this.State.IsPromotionPrice = this.Item.IsPromotionPrice;\r\n this.State.IsMultipleQuantity = this.Item.IsMultipleQuantity;\r\n\r\n if (this.IsReturnRequest) {\r\n this.State.MaxQuantity = this.Item?.Quantity;\r\n this.State.Quantity = this.State.QuantityBefore = 0;\r\n }\r\n\r\n if (this.ElementOption.PriceDisplayOption?.IsRenderTotalPerItem) {\r\n const finalPrice = this.Item.IsPromotionPrice\r\n ? this.Item.PriceDetails.InvertedPromotionPrice ?? this.Item.PriceDetails.FinalPrice\r\n : this.Item.PriceDetails.FinalPrice;\r\n\r\n this.State.TotalPerItem = +((finalPrice * this.Item.Quantity).toFixed(2));\r\n this.State.TotalPerItemMain = Helper.GetPriceMainPart(this.State.TotalPerItem, this.F);\r\n this.State.TotalPerItemChange = Helper.GetPriceChangePart(this.State.TotalPerItem, this.F);\r\n }\r\n\r\n this.State.Step = this.Item.QuantityIncrement || 1;\r\n this.State.SaleMultipleOf = this.Item.SaleMultipleOf || 1;\r\n this.State.IsAllowNegativeQuantity = this.Item.IsAllowNegativeQuantity;\r\n\r\n // for test\r\n //this.UseTestParams(this.State.Quantity, this.State.QuantityBefore);\r\n\r\n const incrementStepFraction = (this.State.Step * 1000) % (this.State.SaleMultipleOf * 1000);\r\n if (incrementStepFraction !== 0) {\r\n this.State.Step = this.State.SaleMultipleOf;\r\n }\r\n\r\n const minStepFraction = (this.State.MinQuantity * 1000) % (this.State.SaleMultipleOf * 1000);\r\n if (minStepFraction !== 0 && (this.State.SaleMultipleOf < this.State.MinQuantity)) {\r\n this.State.MinQuantity = (((Math.trunc(this.State.MinQuantity / this.State.SaleMultipleOf) + 1) * 1000) * (this.State.SaleMultipleOf * 1000)) / 1000000;\r\n }\r\n\r\n this.State.IsEnabled = ((this.Item.IsAllowOrder && !this.IsReadOnly) \r\n || this.IsReturnRequest);\r\n\r\n if (this.Item.ItemActionPermissions) {\r\n this.State.IsEnabled = this.State.IsEnabled && this.Item.ItemActionPermissions.IsAllowQuantityEditing;\r\n }\r\n\r\n this.State.Format = (!this.Item.SaleMethod || this.Item.SaleMethod === this.Enums.EnumItemSaleMethods.Units\r\n || this.Item?.SaleMethod === this.Enums.EnumItemSaleMethods.Packages)\r\n ? '#,##0'\r\n : '#,##0.000';\r\n\r\n if (!this.State.ElementID) {\r\n const nameSuffix = Math.random().toString();\r\n this.State.ElementID = `item-quantity-${this.Item.EntryID}-${nameSuffix.substring(nameSuffix.length - 4)}`;\r\n }\r\n \r\n this.HandleQuantityChanged(true);\r\n }\r\n\r\n ngOnChanges(/*changes: SimpleChanges*/) {\r\n this.RefreshState();\r\n // if (changes['IsReadOnly']) { }\r\n }\r\n\r\n OnDecreaseQuantity(e) {\r\n if (this.State.IsMultipleQuantity && !this.IgnoreMultipleQuantity) return;\r\n\r\n this.stopPropagation(e);\r\n\r\n if (!this.State.IsEnabled || this.State.Quantity <= 0) return;\r\n if (this.OnClickHandler && !this.OnClickHandler('minus', this.State.Quantity)) return;\r\n\r\n const divisionFraction = (this.State.Quantity * 1000) % (this.State.SaleMultipleOf * 1000);\r\n const step = (((divisionFraction !== 0) ? (divisionFraction / 1000) : this.State.Step) * 1000);\r\n const quantityAfterMinusStep = ((this.State.Quantity * 1000) - step) / 1000;\r\n this.State.Quantity = quantityAfterMinusStep;\r\n let showMinError = false, showMaxError = false;\r\n\r\n if (this.State.Quantity > this.State.MaxQuantity) {\r\n showMaxError = true;\r\n this.State.Quantity = this.State.MaxQuantity;\r\n }\r\n\r\n if (this.State.Quantity < this.State.MinQuantity) {\r\n this.State.Quantity = 0;\r\n }\r\n\r\n if (!this.IsQuantityCorrect(showMinError, showMaxError)) return;\r\n }\r\n\r\n OnIncreaseQuantity(e) {\r\n if (this.State.IsMultipleQuantity && !this.IgnoreMultipleQuantity && !this.Item.IsSeparate) return;\r\n\r\n this.stopPropagation(e);\r\n\r\n if (!this.State.IsEnabled || this.State.Quantity < 0) return;\r\n if (this.OnClickHandler && !this.OnClickHandler('plus', this.State.Quantity)) return;\r\n\r\n let showMinError = false, showMaxError = false;\r\n\r\n if (this.State.Quantity === 0 && this.State.MinQuantity > 0) {\r\n this.State.Quantity = (this.State.Step > this.State.MinQuantity) ? this.State.Step : this.State.MinQuantity;\r\n } else {\r\n const divisionFraction = (this.State.Quantity * 1000) % (this.State.SaleMultipleOf * 1000);\r\n const step = (((divisionFraction !== 0) ? ((this.State.SaleMultipleOf * 1000 - divisionFraction) / 1000) : this.State.Step) * 1000);\r\n const quantityAfterPlusStep = ((this.State.Quantity * 1000) + step) / 1000;\r\n if (quantityAfterPlusStep !== 0 && quantityAfterPlusStep < this.State.MinQuantity) {\r\n showMinError = true;\r\n this.State.Quantity = this.State.MinQuantity;\r\n } else {\r\n this.State.Quantity = quantityAfterPlusStep;\r\n }\r\n\r\n if (this.State.Quantity > this.State.MaxQuantity) {\r\n showMaxError = true;\r\n this.State.Quantity -= step / 1000;\r\n }\r\n }\r\n\r\n if (!this.IsQuantityCorrect(showMinError, showMaxError)) return;\r\n }\r\n\r\n HandleDomClick(e) {\r\n this.stopPropagation(e);\r\n //\r\n // console.log('HandleDomClick');\r\n }\r\n\r\n OnItemQuantityInputFocus(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.State.Quantity === 0) this.State.Quantity = null;\r\n\r\n this.IsQuantityCorrect();\r\n }\r\n\r\n Fout() {\r\n this.State.IsFocused = false;\r\n }\r\n\r\n Fin() {\r\n this.State.IsFocused = true;\r\n }\r\n\r\n HandleQuantityChanged(checkValidation: boolean = false) {\r\n if (this.State.IsMultipleQuantity && !this.IgnoreMultipleQuantity && !this.Item.IsSeparate) return;\r\n\r\n if (this.State.Quantity === undefined || this.State.Quantity === null) {\r\n this.State.Quantity = 0;\r\n }\r\n\r\n if (checkValidation) {\r\n this.IsQuantityCorrect();\r\n }\r\n\r\n this.State.DisableDecrease = this.State.Quantity <= 0 || !this.State.IsEnabled;\r\n this.State.DisableIncrease = this.State.Quantity >= this.State.MaxQuantity || !this.State.IsEnabled || this.State.Quantity < 0;\r\n\r\n if (this.State.Quantity !== this.State.QuantityBefore) {\r\n //const quantityBefore = this.State.QuantityBefore;\r\n this.State.QuantityBefore = this.State.Quantity;\r\n if (!this.IsReturnRequest) {\r\n this.shoppingCartService.changeItemQuantity3(this.Item.EntryID, this.UniqueItemID, this.State.Quantity, '', this.Item.WarehouseID)\r\n .subscribe((r: ActionResultEvent) => {\r\n if (r.success) {\r\n this.State.QuantityBefore = this.State.Quantity;\r\n } else if (r.cancelled) {\r\n //\r\n } else if (r.error) {\r\n const currentQuantity = this.shoppingCartService.restoreQuantity(this.Item.EntryID, this.UniqueItemID, this.Item.WarehouseID);\r\n\r\n this.State.Quantity = this.State.QuantityBefore = currentQuantity.quantity;\r\n this.State.IsMultipleQuantity = !!currentQuantity.multiply;\r\n //this.State.Quantity = this.State.QuantityBefore = quantityBefore;\r\n this.uiComponentService.ProcessAlerts(r.error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n IsQuantityCorrect(showMinError: boolean = false, showMaxError: boolean = false): boolean {\r\n if (this.IsReadOnly) return true;\r\n\r\n const showHideValidationMessage = (message: string, route: string, compactOpened: boolean) => {\r\n if (this.uiComponentService.IsShowQuantityError(this.CurrentPageForQuiantityError, route, compactOpened)) {\r\n setTimeout(() => {\r\n this.State.ValidationMessage = message;\r\n this.State.IsShowValidationMessage = true;\r\n \r\n setTimeout(() => {\r\n this.State.IsShowValidationMessage = false;\r\n }, 2000);\r\n }, 250);\r\n } \r\n };\r\n\r\n const getRoute = (): string => {\r\n return this.A.Navigator.GetCurrentRoute().toLowerCase();\r\n }\r\n\r\n const raiseValidationEvent = (valid: boolean) => {\r\n this.OnQuantityValidation.emit(valid);\r\n return valid;\r\n };\r\n\r\n if (showMinError) {\r\n showHideValidationMessage(this.RC('lblQuantityMinAmount', this.State.MinQuantity), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n\r\n if (showMaxError) {\r\n showHideValidationMessage(this.RC('lblQuantityMaxAmount', this.State.MaxQuantity), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n\r\n const totalQuantity = this.shoppingCartService.getTotalItemQuantity(this.Item.ItemCode, true);\r\n\r\n if (totalQuantity !== 0 && totalQuantity < this.State.MinOrderQuantity) {\r\n\r\n if (totalQuantity > 0) {\r\n this.State.Invalid = true;\r\n\r\n showHideValidationMessage(this.RC('lblQuantityMinAmount', this.State.MinOrderQuantity), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n } else {\r\n if (!this.State.IsAllowNegativeQuantity) {\r\n this.State.Quantity = 0;\r\n }\r\n return raiseValidationEvent(true);\r\n }\r\n }\r\n\r\n if (totalQuantity > this.State.MaxQuantity) {\r\n this.State.Invalid = true;\r\n\r\n showHideValidationMessage(this.RC('lblQuantityMaxAmount', this.State.MaxQuantity), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n\r\n if ((totalQuantity * 1000) % (this.State.SaleMultipleOf * 1000) !== 0 \r\n && !this.Item.IsPromotionPrice && !this.Item.IsKitItem) {\r\n this.State.Invalid = true;\r\n\r\n showHideValidationMessage(this.RC('lblQuantityMultipleOf', this.State.SaleMultipleOf), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n\r\n if (this.UniqueItemID && this.shoppingCartService.getIsNeedToCheckBatchesSerials(this.IsNumberSelectionEnabledByBaseDocType)) {\r\n if (this.Item.ItemStockManagementType === EnumItemStockManagementTypes.Batch) {\r\n const batchesQuantity = this.shoppingCartService.getItemBatchesQuantity(this.UniqueItemID);\r\n if (batchesQuantity != this.State.Quantity) {\r\n this.State.Invalid = true;\r\n showHideValidationMessage(this.RC('lblQuantityNotMatchBatch'), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n }\r\n\r\n if (this.Item.ItemStockManagementType === EnumItemStockManagementTypes.Serial) {\r\n const serialQuantity = this.shoppingCartService.getItemSerialNumbersQuantity(this.UniqueItemID);\r\n if (serialQuantity != this.State.Quantity) {\r\n this.State.Invalid = true;\r\n showHideValidationMessage(this.RC('lblQuantityNotMatchSerial'), getRoute(), this.CompactShoppingCartOpened);\r\n return raiseValidationEvent(false);\r\n }\r\n }\r\n }\r\n\r\n this.State.Invalid = false;\r\n return raiseValidationEvent(true);\r\n }\r\n\r\n HandleMultipleQuantity(e) {\r\n this.stopPropagation(e);\r\n\r\n (this.State.IsMultipleQuantity && !this.IgnoreMultipleQuantity) && this.OnMultipleClick.emit();\r\n }\r\n\r\n HandleAddKit(e) {\r\n this.stopPropagation(e);\r\n\r\n (this.Item.IsBlockedKitSeparate) && this.OnAddKitClick.emit();\r\n }\r\n\r\n protected stopPropagation(e) {\r\n if (e && e.stopPropagation) {\r\n e.stopPropagation();\r\n } else if (e && e.event && e.event.stopPropagation) {\r\n e.event.stopPropagation();\r\n }\r\n }\r\n\r\n // Only for testing\r\n /*UseTestParams(quanitytFromAPI: number, quantityBeforeFromAPI: number) {\r\n this.State.Step = 1;\r\n this.State.SaleMultipleOf = 0.7;\r\n\r\n this.State.MinQuantity = 4;\r\n this.State.MaxQuantity = 20;\r\n\r\n\r\n if (this.testDataSetted) {\r\n this.State.Quantity = quanitytFromAPI;\r\n this.State.QuantityBefore = quantityBeforeFromAPI;\r\n } else {\r\n this.State.Quantity = 1;\r\n this.State.QuantityBefore = 1;\r\n }\r\n \r\n this.State.IsFree = false;\r\n this.State.IsMultipleQuantity = false;\r\n this.testDataSetted = true;\r\n }*/\r\n}","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{State.ValidationMessage}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotal' | RC:THIS}}:
\\r\\n
\\r\\n
{{Item?.PriceDetails?.CurrencySymbol}}
\\r\\n
{{State.TotalPerItemMain}}
\\r\\n
.{{State.TotalPerItemChange}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{'lblMultipleQuantity' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{'lblAddOnMultipleQuantity' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{'lblAddKit' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{State.Quantity | formatNumberQuantity}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { EnumVariationRelations } from \"@dino-proxy/enums\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { DisplayType } from \"@dino-services/item-option.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\n\r\nclass State extends BaseOptionState {\r\n IsShowInStock: boolean;\r\n IsShowOutStock: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-stock',\r\n templateUrl: './item-stock.component.html',\r\n styleUrls: ['./item-stock.component.scss'],\r\n})\r\nexport class ItemStockComponent extends BaseComponent {\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.RefreshState();\r\n }\r\n get Item() { return this.item; }\r\n\r\n @Input() set ElementOption(value: ItemDisplayPopupOption | ItemDisplayElementOption) {\r\n this.elementOption = value;\r\n this.RefreshState();\r\n }\r\n get ElementOption() { return this.elementOption; }\r\n @Input() DisplayType = DisplayType.CatalogueList;\r\n\r\n private item: ItemView;\r\n private elementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemStockComponent', State);\r\n }\r\n\r\n IsCurrentItemDocumentItem() {\r\n return this.DisplayType === DisplayType.FinalizedOrderList ||\r\n this.DisplayType === DisplayType.FinalizedOrderCompact || this.DisplayType === DisplayType.FinalizedOrderLine;\r\n } \r\n\r\n get IsVisible() {\r\n return (this.State.IsShowInStock || this.State.IsShowOutStock || this.Item?.StockCustomStatus) \r\n && this.Item?.VariationRelation !== EnumVariationRelations.Parent\r\n && !this.IsCurrentItemDocumentItem()\r\n && !(this.Item?.IsInStock == null && this.Item?.QuantityInStockValue == null && this.Item?.StockCustomStatus == null);\r\n }\r\n\r\n RefreshState() {\r\n if (this.Item && this.ElementOption) {\r\n this.State.IsShowInStock = this.IsShowInStock();\r\n this.State.IsShowOutStock = this.IsShowOutStock();\r\n } else {\r\n this.State.IsShowInStock = false;\r\n this.State.IsShowOutStock = false;\r\n }\r\n }\r\n\r\n IsShowInStock() {\r\n return this.ElementOption?.PriceDisplayOption?.IsRenderQuantityInStock\r\n && (!!this.Item?.IsInStock || (this.Item?.QuantityInStockValue > 0) || !!this.Item?.StockCustomStatus);\r\n }\r\n\r\n IsShowOutStock() {\r\n return this.ElementOption?.PriceDisplayOption?.IsRenderQuantityOutOfStock\r\n && ((!this.Item?.QuantityInStockValue || this.Item?.QuantityInStockValue <= 0) && !this.Item?.IsInStock);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{'lblInStock' | RC:THIS}}\\r\\n {{'lblOutOfStock' | RC:THIS}}\\r\\n {{Item?.QuantityInStockValue | formatNumberQuantity}} {{'lblUnitsInStock' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
{{Item?.StockCustomStatus}}
\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-variation-button',\r\n templateUrl: './item-variation-button.component.html',\r\n styleUrls: ['./item-variation-button.component.scss'],\r\n})\r\nexport class ItemVariationButtonComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() ElementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'ItemVariationButtonComponent', State);\r\n } \r\n\r\n HandleShowVariations() {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, this.Item.EntryID], { Tab: 'VariationsTab' })\r\n );\r\n }\r\n}","export default \"
\\r\\n\\r\\n
\\r\\n {{'lblShowVariations' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { WishlistEndpoint } from '@dino-proxy/endpoints/wishlist.endpoint';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\n\r\n@Component({\r\n selector: 'app-item-wishlist',\r\n templateUrl: './item-wishlist.component.html',\r\n styleUrls: ['./item-wishlist.component.scss']\r\n})\r\nexport class ItemWishlistComponent extends BaseCustomerComponent {\r\n @Input() Item: ItemView;\r\n @Input() ElementOption: ItemDisplayPopupOption | ItemDisplayElementOption;\r\n private wishlistItemUpdated$Subscription: Subscription;\r\n private wishlistCleaned$Subscription: Subscription;\r\n\r\n get RenderWishlist() {\r\n return this.customerOptionService.GetCustomerOption().BusinessOption.IsEnableWishlist\r\n && !!this.CustomerID && !this.Item.IsPromotionPrice;\r\n }\r\n\r\n CustomerID: number = undefined;\r\n\r\n constructor(A: ServiceBagService,\r\n private wishlistEndpoint: WishlistEndpoint,\r\n private itemsService: ItemsService,\r\n customerService: CustomerService,\r\n private customerOptionService: CustomerOptionService) {\r\n super(A, 'ItemWishlistComponent', BaseOptionState, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.wishlistItemUpdated$Subscription = this.itemsService.wishlistItemUpdated$\r\n .subscribe(event => {\r\n if (event.itemID === this.Item?.EntryID) {\r\n this.Item.IsInWishlist = event.data as boolean;\r\n }\r\n });\r\n\r\n this.wishlistCleaned$Subscription = this.itemsService.wishlistCleaned$\r\n .subscribe(() => {\r\n this.Item.IsInWishlist = false;\r\n });\r\n }\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) {\r\n this.CustomerID = currentCustomerID;\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.wishlistItemUpdated$Subscription && this.wishlistItemUpdated$Subscription.unsubscribe();\r\n this.wishlistCleaned$Subscription && this.wishlistCleaned$Subscription.unsubscribe();\r\n }\r\n\r\n OnUpdateItemWishlist(e) {\r\n if (e && e.event) e.event.stopPropagation();\r\n\r\n this.wishlistEndpoint.UpdateItemInWishlist(this.Item.EntryID)\r\n .subscribe(response => {\r\n const wishlist = response.Entity;\r\n this.Item.IsInWishlist = wishlist.Items.findIndex(x => x.ItemID === this.Item?.EntryID) !== -1;\r\n this.itemsService.notifyWishlistItemUpdated(this.Item.EntryID, this.Item.IsInWishlist);\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ImageRequest } from \"@dino-components/image/image.component\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { ItemDisplayElementOption } from \"@dino-proxy/entities/itemdisplayelementoption.entity\";\r\nimport { ImageSizeEnums, ImageTypeEnums } from \"@dino-proxy/enums\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { CustomerOptionService } from \"@dino-services/customer-option.service\";\r\n\r\nclass State extends BaseOptionState {\r\n ImageBackgroundColor: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-list-item-image2',\r\n templateUrl: './list-item-image2.component.html',\r\n styleUrls: ['./list-item-image2.component.scss'],\r\n})\r\nexport class ListItemImageComponent2 extends BaseComponent {\r\n @Input() set Item(value: ItemView) {\r\n this.item = value;\r\n this.InitImageRequest();\r\n }\r\n get Item(): ItemView { return this.item; }\r\n\r\n @Input() set ImageSize(value: ImageSizeEnums) {\r\n this.imageSize = value;\r\n this.InitImageRequest();\r\n }\r\n get ImageSize(): ImageSizeEnums { return this.imageSize; }\r\n\r\n @Input() ElementOption: ItemDisplayElementOption;\r\n @Output() OnClick = new EventEmitter();\r\n ImageRequest: ImageRequest;\r\n\r\n private item: ItemView;\r\n private imageSize: ImageSizeEnums;\r\n\r\n constructor(A: ServiceBagService, private customerOptionService: CustomerOptionService) {\r\n super(A, 'ListItemImageComponent2', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.ImageBackgroundColor = this.customerOptionService.GetCustomerOption().CatalogueOption.ImageBackgroundColor;\r\n }\r\n \r\n InitImageRequest() {\r\n if (!this.Item || !this.ImageSize) {\r\n this.ImageRequest = null;\r\n return;\r\n };\r\n\r\n const firstImageVersion = (this.Item.ImageVersions && this.Item.ImageVersions.length) ? this.Item.ImageVersions[0] : null;\r\n\r\n this.ImageRequest = {\r\n EntryID: (firstImageVersion && firstImageVersion.AlternativeEntryID)\r\n ? firstImageVersion.AlternativeEntryID\r\n : (firstImageVersion && firstImageVersion.EntryID) ? firstImageVersion.EntryID : this.Item.EntryID,\r\n ImageSize: this.ImageSize,\r\n ImageType: (firstImageVersion && firstImageVersion.AlternativeEntryID) ? firstImageVersion.AlternativeImageType : ImageTypeEnums.Item,\r\n Index: 0,\r\n Version: firstImageVersion?.ImageVersion\r\n } as ImageRequest;\r\n }\r\n\r\n HandleImageClick() {\r\n this.OnClick.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseListItemComponent } from '../base/base-list-item.component';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n@Component({ \r\n providers: [AddonService],\r\n selector: 'app-grid-item2',\r\n templateUrl: './grid-item2.component.html',\r\n styleUrls: ['./grid-item2.component.scss'],\r\n})\r\nexport class GridItemComponent2 extends BaseListItemComponent {\r\n @Input() DisplayType = DisplayType.Grid;\r\n\r\n constructor(A: ServiceBagService,\r\n shoppingCartService: ShoppingCartService,\r\n addonService: AddonService,\r\n itemOptionService: ItemOptionService,\r\n customerOptionService: CustomerOptionService,\r\n uiComponentService: UiComponentService,\r\n restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'GridItemComponent2', restrictedNavigationService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseListItemComponent, } from '../base/base-list-item.component';\r\nimport { EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n@Component({\r\n providers: [AddonService], \r\n selector: 'app-list-item2',\r\n templateUrl: './list-item2.component.html',\r\n styleUrls: ['./list-item2.component.scss'],\r\n})\r\nexport class ListItemComponent2 extends BaseListItemComponent {\r\n @Input() DisplayType = DisplayType.CatalogueList;\r\n @Input() ForceScreenSize: EnumScreenSizes;\r\n @Input() BaseEntryID = 0;\r\n screenSize: EnumScreenSizes;\r\n EnumScreenSizes = EnumScreenSizes;\r\n\r\n constructor(A: ServiceBagService,\r\n shoppingCartService: ShoppingCartService,\r\n addonService: AddonService,\r\n itemOptionService: ItemOptionService,\r\n private screenService: ScreenService,\r\n customerOptionService: CustomerOptionService,\r\n uiComponentService: UiComponentService,\r\n restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'ListItemComponent2', restrictedNavigationService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n const screenSize$Subscription = this.screenService.ScreenSize$\r\n .subscribe(r => {\r\n if (this.ForceScreenSize) {\r\n this.screenSize = this.ForceScreenSize;\r\n return;\r\n }\r\n\r\n if (r !== this.screenSize) {\r\n this.screenSize = r;\r\n }\r\n });\r\n\r\n this.RegisterSubscription(screenSize$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n } \r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n 0\\\" class=\\\"base-icon mdi mdi-file-document-outline\\\">\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n 0\\\"\\r\\n class=\\\"kit-visibility-toggle\\\"\\r\\n [Item]=\\\"Item\\\"\\r\\n [UniqueItemID]=\\\"UniqueItemID\\\"\\r\\n [ItemKitChildrenQuantity]=\\\"ItemKitChildrenQuantity\\\"\\r\\n [IsCollapsed]=\\\"IsKitCollapsed\\\">\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{Item.AssortmentComment}}\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseListItemComponent, } from '../base/base-list-item.component';\r\nimport { EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n@Component({\r\n providers: [AddonService],\r\n selector: 'app-ultra-compact-item',\r\n templateUrl: './ultra-compact-item.component.html',\r\n styleUrls: ['./ultra-compact-item.component.scss'],\r\n})\r\nexport class UltraCompactItemComponent extends BaseListItemComponent {\r\n @Input() DisplayType = DisplayType.CatalogueList;\r\n @Input() BaseEntryID = 0;\r\n screenSize: EnumScreenSizes;\r\n EnumScreenSizes = EnumScreenSizes;\r\n ContextMenuItems: any[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n shoppingCartService: ShoppingCartService,\r\n addonService: AddonService,\r\n itemOptionService: ItemOptionService,\r\n customerOptionService: CustomerOptionService,\r\n uiComponentService: UiComponentService,\r\n restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'UltraCompactItemComponent', restrictedNavigationService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n / \\r\\n \\r\\n 0\\\" class=\\\"base-icon mdi mdi-file-document-outline\\\">\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
X
\\r\\n \\r\\n \\r\\n
\\r\\n {{'lblSalesKitParentPrice' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n 0\\\"\\r\\n class=\\\"kit-visibility-toggle\\\"\\r\\n [Item]=\\\"Item\\\"\\r\\n [UniqueItemID]=\\\"UniqueItemID\\\"\\r\\n [ItemKitChildrenQuantity]=\\\"ItemKitChildrenQuantity\\\"\\r\\n [IsCollapsed]=\\\"IsKitCollapsed\\\">\\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { ItemAttributeGroupViewExt } from \"@dino-pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-general-tab-mobile',\r\n templateUrl: './general-tab-mobile.component.html',\r\n styleUrls: ['./general-tab-mobile.component.scss'],\r\n})\r\nexport class GeneralTabMobileComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() PopupOption: ItemDisplayPopupOption;\r\n @Input() AttributeGroups: ItemAttributeGroupViewExt[] = [];\r\n @Input() UniqueItemID: number;\r\n @Input() DisableEdit: boolean = false;\r\n \r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'GeneralTabMobileComponent', State);\r\n }\r\n\r\n \r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{Item.ItemDescription}}\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { ItemAttributeGroupViewExt } from \"@dino-pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component\";\r\nimport { ItemPriceRenderDetails } from \"@dino-pages/product-catalogue2/item-list/components/item-price2/item-price2.component\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n ItemPriceHasCommentBlock: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-general-tab',\r\n templateUrl: './general-tab.component.html',\r\n styleUrls: ['./general-tab.component.scss'],\r\n})\r\nexport class GeneralTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() PopupOption: ItemDisplayPopupOption; \r\n @Input() AttributeGroups: ItemAttributeGroupViewExt[] = [];\r\n @Input() UniqueItemID: number;\r\n @Input() DisableEdit: boolean = false;\r\n\r\n constructor(A: ServiceBagService, \r\n private sanitizer: DomSanitizer) {\r\n super(A, 'GeneralTabComponent', State);\r\n }\r\n\r\n HandleItemPriceRenderEvent(e: ItemPriceRenderDetails) {\r\n this.State.ItemPriceHasCommentBlock = (e === ItemPriceRenderDetails.WithCommentBlock);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n {{Item.ItemDescription}}\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Item } from './../entities/item.entity';\r\nimport { Warehouse } from './../entities/warehouse.entity';\r\nexport class ItemAvailability extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemAvailability';\r\n }\r\n \r\n public ItemID: number; \r\n public WarehouseID: number; \r\n public InStock: number; \r\n public PendingSalesOrders: number; \r\n public PendingPurchaseOrders: number; \r\n public Item: Item = new Item; \r\n public Warehouse: Warehouse = new Warehouse; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemAvailability } from '@dino-proxy/entities/itemavailability.entity';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-availability-grid',\r\n templateUrl: './item-availability-grid.component.html',\r\n styleUrls: ['./item-availability-grid.component.scss'],\r\n})\r\nexport class ItemAvailabilityGridComponent extends BaseGridComponent {\r\n @Input() Item: ItemView;\r\n @Input() ItemAvailabilities: ItemAvailability[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemAvailabilityGridComponent', ItemAvailability, State);\r\n }\r\n\r\n IsColumnWarehouseSelectedAsDefault(rowData) {\r\n return rowData?.data?.WarehouseID === this.Item.WarehouseID;\r\n }\r\n\r\n AvailableCellValue(rowData: ItemAvailability){ \r\n return rowData.InStock + rowData.PendingSalesOrders - rowData.PendingPurchaseOrders; \r\n } \r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemAvailability } from '@dino-proxy/entities/itemavailability.entity';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-item-availability-list',\r\n\ttemplateUrl: './item-availability-list.component.html',\r\n\tstyleUrls: ['./item-availability-list.component.scss']\r\n})\r\nexport class ItemAvailabilityListComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() ItemAvailabilities: ItemAvailability[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemAvailabilityListComponent', State);\r\n }\r\n\r\n AvailableCellValue(rowData: ItemAvailability){ \r\n return this.FormatQuantity(rowData.InStock + rowData.PendingSalesOrders - rowData.PendingPurchaseOrders); \r\n } \r\n\r\n FormatQuantity(quantity) {\r\n return formatNumber(quantity, this.F.NumberQuantity);\r\n }\r\n\r\n IsCardWarehouseSelectedAsDefault(rowData) {\r\n return rowData?.WarehouseID === this.Item.WarehouseID;\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\r\\n\\t\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { ItemAvailability } from '@dino-proxy/entities/itemavailability.entity';\r\n\r\nclass State extends BaseState {\r\n ItemAvailabilities: ItemAvailability[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-item-availability-tab',\r\n templateUrl: './item-availability-tab.component.html',\r\n styleUrls: ['./item-availability-tab.component.scss']\r\n})\r\nexport class ItemAvailabilityTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n\r\n IsMobile: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint) {\r\n super(A, 'ItemAvailabilityTabComponent', State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.itemsEndpoint.GetItemAvailabilities(this.Item.EntryID)\r\n .subscribe(response => {\r\n this.State.ItemAvailabilities = response.Entities;\r\n });\r\n this.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntitiesResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumRelatedItemRelationTypes } from '@dino-proxy/enums';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { Promotion } from '@dino-proxy/entities/promotion.entity';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\n\r\nclass State extends BaseState {\r\n Promotions: Promotion[];\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-item-promotions-tab',\r\n templateUrl: './item-promotions-tab.component.html',\r\n styleUrls: ['./item-promotions-tab.component.scss']\r\n})\r\nexport class ItemsPromotionsTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint) {\r\n super(A, 'ItemsPromotionsTabComponent', State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.Do(this.itemsEndpoint.GetPromotionsForItem(this.Item.EntryID), false, (response : BaseEntitiesResponse) => {\r\n this.State.Promotions = response.Entities;\r\n });\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { DimensionValue } from '@dino-proxy/entities/dimensionvalue.entity';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { Item } from '@dino-proxy/entities/item.entity';\r\nimport { EnumKitTypes, EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { filter } from 'rxjs';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseState { \r\n KitItems: Item[];\r\n KitItemsViewOption: EnumShoppingCartItemViewOptions;\r\n}\r\n\r\n@Component({\r\n selector: 'app-kit-items-tab',\r\n templateUrl: './kit-items-tab.component.html',\r\n styleUrls: ['./kit-items-tab.component.scss']\r\n})\r\nexport class KitItemsTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() RouteCustomerID: number;\r\n DisplayType = DisplayType;\r\n SelectedKitTypeText: string;\r\n\r\n constructor(A: ServiceBagService, \r\n private itemsEndpoint: ItemsEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'KitItemsTabComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitEvents();\r\n this.LoadData();\r\n this.InitDefaultValues();\r\n }\r\n\r\n LoadData() {\r\n this.itemsEndpoint.GetItemKitItems(this.Item.EntryID, this.RouteCustomerID || -999)\r\n .subscribe(response => { \r\n if (response.IsSuccess) {\r\n this.State.KitItems = response.Entities;\r\n }\r\n });\r\n }\r\n\r\n private InitEvents() {\r\n const itemViewChanged$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.KIT_ITEMS_VIEW_MODE_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.State.KitItemsViewOption = event.Payload;\r\n });\r\n\r\n this.RegisterSubscription(itemViewChanged$Subscription);\r\n }\r\n\r\n InitDefaultValues() {\r\n this.SelectedKitTypeText = this.Item.KitType === EnumKitTypes.Sales \r\n ? this.RC('lblKitTypeSales') \r\n : this.RC('lblKitTypeTemplate');\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{'lblKitType' | RC:THIS}}\\r\\n {{ SelectedKitTypeText }}\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { EnumDocumentStatuses } from './../enums';\r\nexport class ItemSale extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemSale';\r\n }\r\n \r\n public ItemID: number; \r\n public DocumentNumber: number; \r\n public DocDate: Date; \r\n public CreateDate: Date; \r\n public Quantity: number; \r\n public Price: number; \r\n public PriceAfterDiscount: number; \r\n public DiscountPercent: number; \r\n public CustomerID: number; \r\n public CustomerName: string; \r\n public Currency: string; \r\n public DocumentType: EnumDocumentTypes; \r\n public Status: EnumDocumentStatuses; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemSale } from '@dino-proxy/entities/itemsale.entity';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n Customers: Customer[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-sales-grid',\r\n templateUrl: './item-sales-grid.component.html'\r\n})\r\nexport class ItemSalesGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemSalesGridComponent', ItemSale, State);\r\n }\r\n\r\n protected OnInitComponent() {\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e?.data?.EntryID) this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.EntryID, DocumentType: e.data.DocumentType });\r\n }\r\n\r\n CustomerTitleCode(rowData: Customer) {\r\n return rowData.CardName + \" - \" + rowData.CardCode;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Price | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{d.value | formatNumberPercent}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.PriceAfterDiscount | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemSaleView } from './../views/itemsale.view';\r\nimport { ItemSale } from './../entities/itemsale.entity';\r\n@Injectable()\r\nexport class ItemSaleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemSale\", api);}\r\n\t\r\n\r\n public GetItemSales(itemId: number, currentCustomerOnly: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemSales', {itemId: itemId, currentCustomerOnly: currentCustomerOnly, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public GetLastItemSale(itemId: number, currentCustomerOnly: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLastItemSale', {itemId: itemId, currentCustomerOnly: currentCustomerOnly} );\r\n }\r\n}\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemSale } from '@dino-proxy/entities/itemsale.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ItemSaleEndpoint } from '@dino-proxy/endpoints/itemsale.endpoint';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n Tabs: any[] = [];\r\n CurrentTabIndex: number = 0;\r\n ItemSales: ItemSale[] = [];\r\n CurrentCustomerItemSales: ItemSale[] = [];\r\n CustomerID: number;\r\n IsSalesPerson: boolean = false;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-last-sales-tab',\r\n templateUrl: './last-sales-tab.component.html',\r\n styleUrls: ['./last-sales-tab.component.scss']\r\n})\r\nexport class LastSalesTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemSaleEndpoint: ItemSaleEndpoint,\r\n private customerService: CustomerService) {\r\n super(A, 'LastSalesTabComponent', State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.State.IsSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n\r\n if (this.State.IsSalesPerson) {\r\n this.State.Tabs = this.LIST(\"ItemSalesTabs\");\r\n }\r\n\r\n this.State.CustomerID = this.customerService.GetCustomerID();\r\n this.DataSources[\"CurrentCustomerItemSales\"]\r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.itemSaleEndpoint.GetItemSales(this.Item.EntryID, true, options), undefined, undefined, false);\r\n\r\n if (this.State.IsSalesPerson) {\r\n this.DataSources[\"ItemSales\"]\r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.itemSaleEndpoint.GetItemSales(this.Item.EntryID, false, options), undefined, undefined, false);\r\n }\r\n\r\n\r\n // this.itemsEndpoint.GetItemSales(this.Item.EntryID).subscribe(response => {\r\n // this.State.ItemSales = response.Entities;\r\n // this.State.CurrentCustomerItemSales = this.State.ItemSales.filter(x => x.CustomerID == this.State.CustomerID);\r\n // });\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Item } from './../entities/item.entity';\r\nexport class ItemPurchaseOrder extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemPurchaseOrder';\r\n }\r\n \r\n public ItemID: number; \r\n public DocumentNumber: number; \r\n public DocDate: Date; \r\n public Quantity: number; \r\n public Price: number; \r\n public DiscountPercent: number; \r\n public Currency: string; \r\n public PlannedDate: Date; \r\n public PriceAfterDiscount: number; \r\n public Item: Item = new Item; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemPurchaseOrder } from '@dino-proxy/entities/itempurchaseorder.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-purchase-orders-grid',\r\n templateUrl: './purchase-orders-grid.component.html'\r\n})\r\nexport class PurchaseOrdersGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PurchaseOrdersGridComponent', ItemPurchaseOrder, State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Price | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{d.value | formatNumberPercent}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.PriceAfterDiscount | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ItemPurchaseOrder } from '@dino-proxy/entities/itempurchaseorder.entity';\r\n\r\nclass State extends BaseState {\r\n PurchaseOrders: ItemPurchaseOrder[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-purchase-orders-tab',\r\n templateUrl: './purchase-orders-tab.component.html',\r\n styleUrls: ['./purchase-orders-tab.component.scss']\r\n})\r\nexport class PurchaseOrdersTabComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint) {\r\n super(A, 'LastSalesTabComponent', State);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.itemsEndpoint.GetItemPurchaseOrders(this.Item.EntryID).subscribe(response => {\r\n this.State.PurchaseOrders = response.Entities;\r\n });\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n}\r\n","export default \"\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumRelatedItemRelationTypes, EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { filter } from 'rxjs';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseState {\r\n Items: ItemView[];\r\n SelectedRelationType: EnumRelatedItemRelationTypes;\r\n RelationTypesOptions: RelationTypesOption[] = [];\r\n RelatedItemsViewOption: EnumShoppingCartItemViewOptions;\r\n}\r\n\r\nclass RelationTypesOption {\r\n Type: EnumRelatedItemRelationTypes;\r\n Name: string;\r\n}\r\n\r\nexport class AdditionalItemsData {\r\n AdditionalItems: ItemView[];\r\n Alternatives: ItemView[];\r\n AlsoBought: ItemView[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-similar-items',\r\n templateUrl: './similar-items.component.html',\r\n styleUrls: ['./similar-items.component.scss']\r\n})\r\nexport class SimilarItemsComponent extends BaseComponent {\r\n @Input() set RelatedItemRelationTypes(value: EnumRelatedItemRelationTypes) {\r\n this.State.SelectedRelationType = value;\r\n }\r\n\r\n @Input() set Data(value: AdditionalItemsData) {\r\n this.data = value;\r\n }\r\n\r\n get Data() { return this.data; }\r\n\r\n @Input() PopupOption: ItemDisplayPopupOption;\r\n @Input() DisableEdit: boolean = false;\r\n @Input() RouteCustomerID: number = -999;\r\n DisplayType = DisplayType;\r\n private data: AdditionalItemsData;\r\n\r\n constructor(A: ServiceBagService,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n\t\tprivate uiComponentService: UiComponentService) {\r\n super(A, 'SimilarItemsComponent', State);\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n override OnInitComponent() {\r\n this.InitializeFilter();\r\n this.InitEvents();\r\n }\r\n\r\n private InitEvents() {\r\n const itemViewChanged$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.RELATED_ITEM_VIEW_MODE_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n console.log(event.Payload);\r\n this.State.RelatedItemsViewOption = event.Payload;\r\n });\r\n\r\n this.RegisterSubscription(itemViewChanged$Subscription);\r\n }\r\n\r\n InitializeFilter() {\r\n if (!this.Data) {\r\n this.State.Items = [];\r\n return;\r\n }\r\n\r\n const strategies = {\r\n [EnumRelatedItemRelationTypes.Additional]: () => this.Data.AdditionalItems,\r\n [EnumRelatedItemRelationTypes.Alternative]: () => this.Data.Alternatives,\r\n [EnumRelatedItemRelationTypes.AlsoBought]: () => this.Data.AlsoBought\r\n };\r\n\r\n const retrieveItems = strategies[this.State.SelectedRelationType];\r\n\r\n this.State.Items = (retrieveItems && retrieveItems()) || [];\r\n console.log(this.State.Items);\r\n }\r\n\r\n OnNavigate(e: ItemView) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, e.EntryID], { CustomerID: this.RouteCustomerID })\r\n );\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { DimensionValue } from '@dino-proxy/entities/dimensionvalue.entity';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n DimensionValue1ID: number;\r\n DimensionValue2ID: number;\r\n DimensionValue3ID: number;\r\n VariationsVisible: number[] = [];\r\n\r\n DimensionValues1: DimensionValue[] = [];\r\n DimensionValues2: DimensionValue[] = [];\r\n DimensionValues3: DimensionValue[] = [];\r\n SingleVariationViewOption: EnumShoppingCartItemViewOptions;\r\n}\r\n\r\n@Component({\r\n selector: 'app-variations-by-dimension',\r\n templateUrl: './variations-by-dimension.component.html',\r\n styleUrls: ['./variations-by-dimension.component.scss']\r\n})\r\nexport class VariationsByDimensionComponent extends BaseComponent {\r\n @Input() set Item(value: ItemView) {\r\n if (!value) return;\r\n this.item = value;\r\n this.InitVariations();\r\n this.ReloadDimensionValues();\r\n }\r\n get Item() { return this.item; }\r\n\r\n @Input() PopupOption: ItemDisplayPopupOption;\r\n @Input() IsHideFilter: boolean;\r\n @Input() DisableEdit: boolean = false;\r\n DisplayType = DisplayType;\r\n private item: ItemView;\r\n\r\n constructor(A: ServiceBagService,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'VariationsByDimensionComponent', State);\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n override OnInitComponent() {\r\n this.InitEvents();\r\n this.ReloadDimensionValues();\r\n }\r\n\r\n InitVariations() {\r\n this.State.VariationsVisible = this.Item.Variations.map(x => x.EntryID);\r\n }\r\n \r\n private InitEvents() {\r\n const itemViewChanged$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.SINGLE_VARIATION_VIEW_MODE_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.State.SingleVariationViewOption = event.Payload;\r\n });\r\n\r\n this.RegisterSubscription(itemViewChanged$Subscription);\r\n }\r\n\r\n ReloadDimensionValues(afterFn?: () => void) {\r\n this.DS('DimensionValues').GetItemsAsync()\r\n .subscribe(items => {\r\n const dimensionValue1IDs = this.Item.Variations.map(x => x.DimensionValue1ID)\r\n .filter((value, index, self) => self.indexOf(value) == index);\r\n this.State.DimensionValues1 = items.filter(x => dimensionValue1IDs.indexOf(x.EntryID) >= 0);\r\n\r\n const dimensionValue2IDs = this.Item.Variations\r\n .filter(x => !!this.State.DimensionValue1ID ? x.DimensionValue1ID === this.State.DimensionValue1ID : true)\r\n .map(x => x.DimensionValue2ID).filter((value, index, self) => self.indexOf(value) == index);\r\n this.State.DimensionValues2 = items.filter(x => dimensionValue2IDs.indexOf(x.EntryID) >= 0);\r\n\r\n const dimensionValue3IDs = this.Item.Variations\r\n .filter(x => !!this.State.DimensionValue1ID ? x.DimensionValue1ID === this.State.DimensionValue1ID : true)\r\n .filter(x => !!this.State.DimensionValue2ID ? x.DimensionValue2ID === this.State.DimensionValue2ID : true)\r\n .map(x => x.DimensionValue3ID).filter((value, index, self) => self.indexOf(value) == index);\r\n this.State.DimensionValues3 = items.filter(x => dimensionValue3IDs.indexOf(x.EntryID) >= 0);\r\n\r\n if (afterFn) afterFn();\r\n });\r\n }\r\n\r\n OnDimensionValue1IDChanged() {\r\n this.State.DimensionValue2ID = this.State.DimensionValue3ID = undefined;\r\n this.ReloadDimensionValues(() => this.ReloadVariations());\r\n }\r\n\r\n OnDimensionValue2IDChanged() {\r\n this.State.DimensionValue3ID = undefined;\r\n this.ReloadDimensionValues(() => this.ReloadVariations());\r\n }\r\n\r\n ReloadVariations() {\r\n let variationsToAdd = null;\r\n\r\n if (!this.State.DimensionValue1ID && !this.State.DimensionValue2ID && !this.State.DimensionValue3ID) {\r\n this.State.VariationsVisible = this.Item.Variations.map(x => x.EntryID);\r\n return;\r\n }\r\n\r\n if (this.State.DimensionValue1ID) variationsToAdd = this.Item.Variations\r\n .filter(x => x.DimensionValue1ID === this.State.DimensionValue1ID);\r\n if (this.State.DimensionValue2ID) variationsToAdd = (variationsToAdd || this.Item.Variations)\r\n .filter(x => x.DimensionValue2ID === this.State.DimensionValue2ID);\r\n if (this.State.DimensionValue3ID) variationsToAdd = (variationsToAdd || this.Item.Variations)\r\n .filter(x => x.DimensionValue3ID === this.State.DimensionValue3ID);\r\n\r\n this.State.VariationsVisible = (variationsToAdd && variationsToAdd.length)\r\n ? variationsToAdd.map(x => x.EntryID)\r\n : [];\r\n }\r\n\r\n IsItemVariationVisible(variation: ItemView) {\r\n return this.State.VariationsVisible.some(x => x === variation.EntryID);\r\n }\r\n\r\n OnNavigate(e: ItemView) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, e.EntryID], { PreviousEntryID: this.Item.EntryID })\r\n );\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemAttributeGroupView } from './../views/itemattributegroup.view';\r\nimport { ItemAttributeGroupParams } from './../params/itemattributegroup.param';\r\n@Injectable()\r\nexport class ItemAttributesEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemAttributes\", api);}\r\n\t\r\n\r\n public GetItemAttributes(Params: ItemAttributeGroupParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetItemAttributes', Params, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { PriceDisplayOption } from './../entities/pricedisplayoption.entity';\r\nexport class ItemDisplayPopupOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemDisplayPopupOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsRenderImages: boolean; \r\n public IsRenderVideos: boolean; \r\n public IsRenderFiles: boolean; \r\n public IsRenderTextAttributes: boolean; \r\n public IsRenderSpecificationAttributes: boolean; \r\n public IsRenderRelatedItems: boolean; \r\n public IsRenderDescription: boolean; \r\n public IsRenderItemCode: boolean; \r\n public IsRenderBarcode: boolean; \r\n public IsRenderWeight: boolean; \r\n public IsRenderPackageInfo: boolean; \r\n public IsRenderCategory: boolean; \r\n public IsRenderBrand: boolean; \r\n public IsRenderManufacturer: boolean; \r\n public IsRenderVendor: boolean; \r\n public IsRenderDimensions: boolean; \r\n public IsRenderThumbnails: boolean; \r\n public IsRenderBadges: boolean; \r\n public IsRenderDimensionValues: boolean; \r\n public IsRenderName: boolean; \r\n public IsRenderSuppCatNum: boolean; \r\n public IsRenderLastSales: boolean; \r\n public IsRenderAvailability: boolean; \r\n public IsRenderPlannedPurchases: boolean; \r\n public IsRenderKitItems: boolean; \r\n public IsRenderPromotions: boolean; \r\n public PriceDisplayOptionID: number; \r\n public IsShowLastSaleInfo: boolean; \r\n public PriceDisplayOption: PriceDisplayOption = new PriceDisplayOption; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ItemPriceDetailsView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemPriceDetailsView';\r\n }\r\n \r\n public CurrencySymbol: string; \r\n public Price: number; \r\n public OriginalPrice: number; \r\n public OriginalCurrency: string; \r\n public PricePer100G: number; \r\n public Discount: number; \r\n public CustomerDiscount: number; \r\n public FinalPrice: number; \r\n public PriceComments: string[]; \r\n public InvertedPromotionPrice: number; \r\n public VatPercent: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Item } from './../entities/item.entity';\r\nimport { ItemPriceDetailsView } from './../views/itempricedetails.view';\r\nimport { ImageVersionView } from './../views/imageversion.view';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { ItemActionPermissions } from './../entities/itemactionpermissions.entity';\r\nimport { CustomFieldset } from './../entities/customfieldset.entity';\r\nimport { ItemSale } from './../entities/itemsale.entity';\r\nexport class ItemView extends Item {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemView';\r\n }\r\n \r\n public PriceDetails: ItemPriceDetailsView = new ItemPriceDetailsView; \r\n public MinOrderQuantity: number; \r\n public MaxOrderQuantity: number; \r\n public QuantityInStockValue: number; \r\n public IsInStock: boolean; \r\n public ImageVersions: ImageVersionView[] = []; \r\n public IsInWishlist: boolean; \r\n public Quantity: number; \r\n public Variations: ItemView[] = []; \r\n public DimensionValue1ID: number; \r\n public DimensionValue2ID: number; \r\n public DimensionValue3ID: number; \r\n public IsPopulateVariationsList: boolean; \r\n public IsShowSeparateDimensions: boolean; \r\n public Dimension1Name: string; \r\n public Dimension2Name: string; \r\n public Dimension3Name: string; \r\n public IsAllowOrder: boolean; \r\n public AdditionalData: string; \r\n public IsFree: boolean; \r\n public IsPromotionPrice: boolean; \r\n public IsPromotionAvailable: boolean; \r\n public PromotionID: number; \r\n public EffectPromotionID: number; \r\n public PromotionText: string; \r\n public IsMultipleQuantity: boolean; \r\n public IsBlockedKitSeparate: boolean; \r\n public Opened: boolean; \r\n public IsAllowNegativeQuantity: boolean; \r\n public IsShowStockAmountInAllWarehouses: boolean; \r\n public IsKitItem: boolean; \r\n public IsKitChild: boolean; \r\n public IsKitParent: boolean; \r\n public ValidationResult: ValidationResult = new ValidationResult; \r\n public AlternativePriceDetails: ItemPriceDetailsView = new ItemPriceDetailsView; \r\n public WarehouseID: number; \r\n public ItemActionPermissions: ItemActionPermissions = new ItemActionPermissions; \r\n public CustomFieldValues: string[]; \r\n public CustomFieldset: CustomFieldset = new CustomFieldset; \r\n public AssortmentComment: string; \r\n public LastItemSale: ItemSale = new ItemSale; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ItemAttributeGroupParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemAttributeGroupParams';\r\n }\r\n \r\n public ItemEntryID: number; \r\n public IsLoadTextAttributes: boolean; \r\n public IsLoadSpecificationAttributes: boolean; \r\n public IsLoadDimensionValues: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { BasePageCRUDComponent } from \"@m4u-angular/base/component/BasePageCRUDComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ItemAttributesEndpoint } from \"@dino-proxy/endpoints/itemattributes.endpoint\";\r\nimport { ItemsEndpoint } from \"@dino-proxy/endpoints/items.endpoint\";\r\nimport { ItemDisplayPopupOption } from \"@dino-proxy/entities/itemdisplaypopupoption.entity\";\r\nimport { ItemView } from \"@dino-proxy/views/item.view\";\r\nimport { AddonDataDescriptor, AddonData, AddonEventTypes, AddonService, BaseQuantityAddonName } from \"@dino-services/addon.service\";\r\nimport { DisplayType, ItemOptionService } from \"@dino-services/item-option.service\";\r\nimport { Subscription, forkJoin, filter, finalize } from \"rxjs\";\r\nimport { EnumAttributeDisplayOptions, EnumAttributesDisplayTabs, EnumKitTypes, EnumRelatedItemRelationTypes, Enums, EnumShoppingCartItemType, EnumValidationStatus, EnumVariationRelations } from \"@dino-proxy/enums\";\r\nimport { ItemAttributeGroupView } from \"@dino-proxy/views/itemattributegroup.view\";\r\nimport { ItemAttributeGroupParams } from \"@dino-proxy/params/itemattributegroup.param\";\r\nimport { ShoppingCartView } from \"@dino-proxy/views/shoppingcart.view\";\r\nimport { ItemAttributeGroupViewExt } from \"@dino-pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component\";\r\nimport { AdditionalItemsData } from \"../components/similar-items/similar-items.component\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { ShoppingCartItemView } from \"@dino-proxy/views/shoppingcartitem.view\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { DocumentOption } from \"@dino-proxy/entities/documentoption.entity\";\r\nimport { DocumentLineDataParams } from \"@dino-proxy/params/documentlinedata.param\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\n\r\nclass State extends BaseOptionState {\r\n Tabs: any[] = [];\r\n VirtualTabs: any[] = new Array(5);\r\n CurrentTabIndex: number = 0;\r\n CurrentTabName: string = 'GeneralTab';\r\n PopupOption = new ItemDisplayPopupOption;\r\n AttributeGroupsAttrTab: ItemAttributeGroupViewExt[] = [];\r\n AttributeGroupsMainTab: ItemAttributeGroupViewExt[] = [];\r\n AdditionalItemsData: AdditionalItemsData;\r\n Addons: { [key: string]: AddonData } = {};\r\n GotoTabName: string;\r\n UniqueItemID: number;\r\n ShoppingCart: ShoppingCartView;\r\n DisableShoppingCartChange: boolean = false;\r\n DocumentOption: DocumentOption;\r\n RouteCustomerID: number;\r\n}\r\n\r\n@Component({\r\n selector: 'base-item-popup',\r\n template: '
'\r\n})\r\nexport abstract class BaseItemPopupComponent extends BasePageCRUDComponent {\r\n @Input() AdditionalData: string;\r\n private addonEvent$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private itemOptionService: ItemOptionService,\r\n private itemAttributeEndpoint: ItemAttributesEndpoint,\r\n protected addonService: AddonService,\r\n private shoppingCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, componentName, ItemView, State, itemsEndpoint);\r\n }\r\n\r\n public RelatedItemRelationTypes = EnumRelatedItemRelationTypes;\r\n public override OnIsDirtyDisabled(): boolean { return true; }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n override OnInitTitle() {\r\n if (this.A.Screen.IsMobile()) return `${this.GetDefaultTitle()} - ${this.Entity.ItemCode}`;\r\n return `${this.GetDefaultTitle()} - ${this.Entity.ItemName}`;\r\n }\r\n\r\n override OnInitComponentInternal() {\r\n if (this.QueryParams.CustomerID) {\r\n this.State.RouteCustomerID = this.QueryParams.CustomerID as number;\r\n }\r\n super.OnInitComponentInternal();\r\n }\r\n\r\n protected override LoadEntity(iEntryID: number) {\r\n this.QueryParams.UniqueItemID && (this.State.UniqueItemID = +this.QueryParams.UniqueItemID);\r\n\r\n // TODO pass whole object (part of different popup opening modes functionality)\r\n const documentLineData = (this.QueryParams?.DocumentLineData && JSON.parse(this.QueryParams.DocumentLineData)) as DocumentLineDataParams;\r\n\r\n this.InitEntity();\r\n this.SetEntity(\r\n this.EntityType,\r\n this.itemsEndpoint.GetItem(iEntryID, this.State.UniqueItemID, documentLineData?.WarehouseID, this.State.RouteCustomerID || -999)\r\n .pipe(\r\n finalize(() => this.IsLoading = false)\r\n ),\r\n false,\r\n () => this.ReflectEntityLoaded());\r\n }\r\n\r\n override OnInitComponent() {\r\n // const tab = this.LIST(\"ItemDetailsTabs\").find(x => (x as any).Name === 'GeneralTab');\r\n // this.State.Tabs.push(tab);\r\n this.QueryParams.Tab && (this.State.GotoTabName = this.QueryParams.Tab);\r\n\r\n this.AddTab('GeneralTab', 0);\r\n\r\n var changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n this.State.ShoppingCart = r.shoppingCart as ShoppingCartView;\r\n this.State.DocumentOption = r.shoppingCart?.DocumentOption;\r\n this.processShoppingCart();\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.addonEvent$Subscription && this.addonEvent$Subscription.unsubscribe();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.State.PopupOption = this.itemOptionService.GetItemOption(this.Entity.ItemOptionID, DisplayType.Popup);\r\n\r\n this.processShoppingCart();\r\n\r\n this.State.Tabs.length = 1;\r\n\r\n if (this.State.PopupOption.IsRenderKitItems\r\n && this.Entity?.VariationRelation !== EnumVariationRelations.Parent\r\n && this.Entity.KitType !== EnumKitTypes.None) {\r\n this.AddTab('KitItemsTab', 1);\r\n }\r\n\r\n if (this.Entity.VariationRelation === Enums.EnumVariationRelations.Parent && this.State.PopupOption.IsRenderDimensions) {\r\n this.AddTab('VariationsTab', 3);\r\n }\r\n\r\n this.LoadItemAttributes();\r\n this.LoadItemRelatedItems();\r\n\r\n if (this.Entity.IsPromotionAvailable\r\n && this.State.PopupOption?.IsRenderPromotions\r\n && this.Entity?.VariationRelation !== EnumVariationRelations.Parent\r\n && this.State?.DocumentOption?.IsEnablePromotions) {\r\n this.AddTab('PromotionsTab', 7);\r\n }\r\n\r\n if (this.State.PopupOption.IsRenderLastSales && this.Entity?.VariationRelation !== EnumVariationRelations.Parent) {\r\n this.AddTab('LastSalesTab', 8);\r\n }\r\n\r\n if (this.State.PopupOption.IsRenderAvailability && this.Entity?.VariationRelation !== EnumVariationRelations.Parent) {\r\n this.AddTab('AvailabilityTab', 9);\r\n }\r\n\r\n if (this.State.PopupOption.IsRenderPlannedPurchases && this.Entity?.VariationRelation !== EnumVariationRelations.Parent) {\r\n this.AddTab('PlannedPurchasesTab', 10);\r\n }\r\n\r\n this.addonEvent$Subscription = this.addonService.event$\r\n .pipe(filter(x => x.addonName === BaseQuantityAddonName)) // add addons which are related to Item component or remove all\r\n .subscribe(event => {\r\n if (event.EventType === AddonEventTypes.Ready) {\r\n let ItemAddonData = this.State.Addons[event.addonName] || {};\r\n this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, storageKey: event.storageKey || event.addonName });\r\n this.addonService.parseAdditionalDataAndSendToAddons(this.Entity.EntryID, this.Entity.AdditionalData, this.State.Addons, event.addonName);\r\n }\r\n\r\n if (event.EventType === AddonEventTypes.SendFromAddon) {\r\n let ItemAddonData = this.State.Addons[event.addonName] || {};\r\n this.State.Addons[event.addonName] =\r\n this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, data: event.data, storageKey: event.storageKey || event.addonName });\r\n\r\n const addonData = {\r\n AddonName: event.storageKey || event.addonName,\r\n SerializedData: event.data\r\n } as AddonDataDescriptor;\r\n\r\n this.shoppingCartService.changeItemAddonData3(this.Entity.EntryID, this.State.UniqueItemID, addonData.AddonName, JSON.stringify(addonData));\r\n }\r\n });\r\n\r\n this.uiComponentService.ProcessAlerts(this.Entity.ValidationResult?.ValidationMessage);\r\n // DEBUG\r\n // this.State.PopupOption.IsRenderDescription = true;\r\n // this.Entity.ItemDescription = 'Hello! Need some icons? Have a look below. The orange icons are from the community.';\r\n // this.Entity.ItemFiles = [...this.Entity.ItemFiles, ...this.Entity.ItemFiles, ...this.Entity.ItemFiles];\r\n //\r\n }\r\n\r\n protected processShoppingCart() {\r\n if (!this.State.ShoppingCart || !this.Entity?.EntryID) return;\r\n\r\n const itemID = this.Entity.EntryID;\r\n let items: ShoppingCartItemView[];\r\n if (this.State.UniqueItemID) {\r\n items = this.State.ShoppingCart.ShoppingCartItemViews.filter(x => x.UniqueItemID === this.State.UniqueItemID);\r\n } else {\r\n items = this.State.ShoppingCart.ShoppingCartItemViews.filter(x =>\r\n x.ItemID === itemID\r\n && x.WarehouseID == this.Entity.WarehouseID\r\n && x.ItemType !== EnumShoppingCartItemType.Virtual\r\n && !x.IsFree);\r\n if (items.length === 1) this.State.UniqueItemID = (items[0] as ShoppingCartItemView).UniqueItemID;\r\n }\r\n\r\n if (items.length === 0) {\r\n this.Entity = Object.assign({}, this.Entity, {\r\n Quantity: 0,\r\n } as ItemView);\r\n return;\r\n }\r\n\r\n if (items.length === 1) {\r\n const shoppingCartItem = items[0] as ShoppingCartItemView;\r\n // Temp fix. this case is relevant if ONLY PriceComments are static for item in product catalogue and shopping cart!\r\n // If it is posibility to change PriceComments in shopping cart -> remove and reimplement\r\n const priceComments = this.Entity?.PriceDetails?.PriceComments;\r\n const alternativePriceComments = this.Entity?.AlternativePriceDetails?.PriceComments;\r\n //\r\n this.Entity = Object.assign({}, this.Entity, {\r\n Quantity: shoppingCartItem.Quantity,\r\n PriceDetails: shoppingCartItem.ItemView?.PriceDetails,\r\n IsMultipleQuantity: false,\r\n } as ItemView);\r\n //\r\n this.Entity.PriceDetails && (this.Entity.PriceDetails.PriceComments = priceComments);\r\n this.Entity.AlternativePriceDetails && (this.Entity.AlternativePriceDetails.PriceComments = alternativePriceComments);\r\n // \r\n return;\r\n }\r\n\r\n if (items.length > 1) {\r\n this.Entity = Object.assign({}, this.Entity, {\r\n IsMultipleQuantity: true,\r\n } as ItemView);\r\n return;\r\n }\r\n }\r\n\r\n LoadItemAttributes() {\r\n if (!this.State.PopupOption.IsRenderTextAttributes && !this.State.PopupOption.IsRenderSpecificationAttributes\r\n && !this.State.PopupOption.IsRenderDimensionValues) return;\r\n\r\n var params = new ItemAttributeGroupParams();\r\n params.ItemEntryID = this.Entity.EntryID;\r\n params.IsLoadSpecificationAttributes = this.State.PopupOption.IsRenderSpecificationAttributes;\r\n params.IsLoadTextAttributes = this.State.PopupOption.IsRenderTextAttributes;\r\n params.IsLoadDimensionValues = this.State.PopupOption.IsRenderDimensions && this.State.PopupOption.IsRenderDimensionValues;\r\n\r\n const argAttrFn = (attrGroup: ItemAttributeGroupView) => {\r\n const result = {\r\n Name: attrGroup.Name,\r\n TextAttributes: attrGroup.Attributes.filter(y => y.AttributeDisplayOption === EnumAttributeDisplayOptions.Text\r\n || y.AttributeDisplayOption === EnumAttributeDisplayOptions.Number\r\n || y.AttributeDisplayOption === EnumAttributeDisplayOptions.Date),\r\n ColorAttributes: attrGroup.Attributes.filter(y => y.AttributeDisplayOption === EnumAttributeDisplayOptions.ColorCircles),\r\n TagAttributes: attrGroup.Attributes.filter(y => y.AttributeDisplayOption === EnumAttributeDisplayOptions.Tag),\r\n LinkAttributes: attrGroup.Attributes.filter(y => y.AttributeDisplayOption === EnumAttributeDisplayOptions.Link)\r\n } as ItemAttributeGroupViewExt;\r\n\r\n // BLOCK 2\r\n\r\n return result;\r\n };\r\n\r\n this.itemAttributeEndpoint.GetItemAttributes(params)\r\n .subscribe(response => {\r\n if (!response.IsSuccess) {\r\n this.uiComponentService.ProcessAlerts(response.ResponseMessage);\r\n return;\r\n }\r\n\r\n this.State.AttributeGroupsMainTab = response.Entities\r\n .filter(x => x.DisplayTab === EnumAttributesDisplayTabs.Main)\r\n .map(argAttrFn);\r\n\r\n this.State.AttributeGroupsAttrTab = response.Entities\r\n .filter(x => x.DisplayTab === EnumAttributesDisplayTabs.Attributes)\r\n .map(argAttrFn);\r\n\r\n if (this.State.AttributeGroupsAttrTab.length\r\n && (this.State.PopupOption.IsRenderTextAttributes\r\n || this.State.PopupOption.IsRenderSpecificationAttributes\r\n || this.State.PopupOption.IsRenderDimensionValues)) {\r\n this.AddTab('AttributesTab', 2);\r\n }\r\n });\r\n }\r\n\r\n LoadItemRelatedItems() {\r\n if (!this.State.PopupOption.IsRenderRelatedItems) return;\r\n\r\n forkJoin([this.itemsEndpoint.GetItemAdditionalItems(this.Entity.EntryID, EnumRelatedItemRelationTypes.Additional, this.State.UniqueItemID, this.State.RouteCustomerID || -999),\r\n this.itemsEndpoint.GetItemAdditionalItems(this.Entity.EntryID, EnumRelatedItemRelationTypes.Alternative, this.State.UniqueItemID, this.State.RouteCustomerID || -999),\r\n this.itemsEndpoint.GetItemAdditionalItems(this.Entity.EntryID, EnumRelatedItemRelationTypes.AlsoBought, this.State.UniqueItemID, this.State.RouteCustomerID || -999)])\r\n .subscribe(result => {\r\n this.State.AdditionalItemsData = {\r\n AdditionalItems: result[0].Entities,\r\n Alternatives: result[1].Entities,\r\n AlsoBought: result[2].Entities\r\n };\r\n\r\n if (this.State.PopupOption.IsRenderRelatedItems) {\r\n let tabIndex = 4;\r\n (this.State.AdditionalItemsData?.AdditionalItems.length) && this.AddTab('AdditionalItemsTab', tabIndex++);\r\n (this.State.AdditionalItemsData?.Alternatives.length) && this.AddTab('AlternativeItemsTab', tabIndex++);\r\n (this.State.AdditionalItemsData?.AlsoBought.length) && this.AddTab('AlsoBoughtItemsTab', tabIndex++);\r\n }\r\n });\r\n }\r\n\r\n OnTabClick(event) {\r\n this.State.CurrentTabName = event.itemData.Name;\r\n }\r\n\r\n SetTabByName() {\r\n if (!this.State.GotoTabName) return;\r\n const idx = this.State.Tabs.findIndex(x => x.Name === this.State.GotoTabName);\r\n if (idx !== -1) {\r\n this.State.CurrentTabIndex = idx;\r\n this.State.CurrentTabName = this.State.Tabs[idx].Name;\r\n }\r\n }\r\n\r\n AddTab(tabName: string, position: number) {\r\n const tab = this.LIST(\"ItemDetailsTabs\").find(x => (x as any).Name === tabName);\r\n this.State.VirtualTabs[position] = tab;\r\n this.State.Tabs = this.State.VirtualTabs.filter(x => !!x);\r\n\r\n this.SetTabByName();\r\n }\r\n}\r\n\r\n// BLOCK 1\r\n// REFACTOR\r\n// this.event$Subscription = this.addonService.event$\r\n// .pipe(filter(x => x.addonName === QuantityAddonName || x.addonName === ItemExtendedInformationAddonName)) // add addons which are related to Item component or remove all\r\n// .subscribe(event => {\r\n// if (event.AddonEventType === AddonEventTypes.Ready) {\r\n// let ItemAddonData = this.State.Addons[event.addonName] || {};\r\n// this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, storageKey: event.storageKey || event.addonName });\r\n\r\n// this.setDataToAddon(event.addonName);\r\n// }\r\n\r\n// if (event.AddonEventType === AddonEventTypes.SendFromAddon) {\r\n// let ItemAddonData = this.State.Addons[event.addonName] || {};\r\n// this.State.Addons[event.addonName] =\r\n// this.State.Addons[event.addonName] = Object.assign({}, ItemAddonData, { loaded: true, data: event.data, storageKey: event.storageKey || event.addonName });\r\n\r\n// const addonData = {\r\n// AddonName: event.storageKey || event.addonName,\r\n// SerializedData: event.data\r\n// } as AddonDescriptor;\r\n// this.itemsService.notifyShoppingCartItemAddonDataUpdate(this.Entity.EntryID, addonData.AddonName, JSON.stringify(addonData));\r\n// }\r\n// });\r\n\r\n\r\n// BLOCK 2\r\n// DEBUG\r\n// result.ColorAttributes = [...result.ColorAttributes, ...result.ColorAttributes, ...result.ColorAttributes, ...result.ColorAttributes];\r\n\r\n// result.TagAttributes = [\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Tag,\r\n// Name: 'tag1',\r\n// Value: 'tag1'\r\n// } as ItemAttributeView,\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Tag,\r\n// Name: 'tag2',\r\n// Value: 'tag2'\r\n// } as ItemAttributeView,\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Tag,\r\n// Name: 'tag3 ',\r\n// Value: 'tag3'\r\n// } as ItemAttributeView,\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Tag,\r\n// Name: 'African',\r\n// Value: 'African'\r\n// } as ItemAttributeView,\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Tag,\r\n// Name: 'African 2',\r\n// Value: 'African 2'\r\n// } as ItemAttributeView\r\n// ];\r\n\r\n// result.LinkAttributes = [\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Link,\r\n// Name: 'text',\r\n// Value: 'https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxTooltip/'\r\n// } as ItemAttributeView,\r\n// {\r\n// AttributeDisplayOption: EnumAttributeDisplayOptions.Link,\r\n// Name: 'text 2',\r\n// Value: 'https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxTooltip/'\r\n// } as ItemAttributeView\r\n// ];","import { Component } from '@angular/core';\r\nimport { ItemAttributesEndpoint } from '@dino-proxy/endpoints/itemattributes.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseItemPopupComponent } from '../base/base-item-popup.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\n\r\n@Component({\r\n providers: [...ServiceBagServices, AddonService],\r\n selector: 'app-desktop-item-popup',\r\n templateUrl: './desktop-item-popup.component.html',\r\n styleUrls: ['./desktop-item-popup.component.scss']\r\n})\r\nexport class DesktopItemPopupComponent extends BaseItemPopupComponent {\r\n constructor(A: ServiceBagService,\r\n itemsEndpoint: ItemsEndpoint,\r\n itemOptionService: ItemOptionService,\r\n addonService: AddonService,\r\n itemAttributeEndpoint: ItemAttributesEndpoint,\r\n shoppingCartService: ShoppingCartService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'DesktopItemPopupComponent', itemsEndpoint, itemOptionService, itemAttributeEndpoint, addonService, \r\n shoppingCartService, uiComponentService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ItemAttributesEndpoint } from '@dino-proxy/endpoints/itemattributes.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseItemPopupComponent } from '../base/base-item-popup.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\n\r\n@Component({\r\n providers: [...ServiceBagServices, AddonService],\r\n selector: 'app-mobile-item-popup',\r\n templateUrl: './mobile-item-popup.component.html',\r\n styleUrls: ['./mobile-item-popup.component.scss']\r\n})\r\nexport class MobileItemPopupComponent extends BaseItemPopupComponent {\r\n constructor(A: ServiceBagService,\r\n itemsEndpoint: ItemsEndpoint,\r\n itemOptionService: ItemOptionService,\r\n addonService: AddonService,\r\n itemAttributeEndpoint: ItemAttributesEndpoint,\r\n shoppingCartService: ShoppingCartService,\r\n uiComponentService: UiComponentService) {\r\n super(A, 'MobileItemPopupComponent', itemsEndpoint, itemOptionService, itemAttributeEndpoint, addonService, \r\n shoppingCartService, uiComponentService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n override get ShowAsWindowOnMobile(): boolean { return false; }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { BaseListComponent } from '@dino-pages/product-catalogue2/base/base-list';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DxScrollViewComponent } from 'devextreme-angular';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\n\r\n@Component({\r\n selector: 'app-mobile-list',\r\n templateUrl: './mobile-list.component.html',\r\n styleUrls: ['./mobile-list.component.scss'],\r\n})\r\nexport class MobileListComponent extends BaseListComponent {\r\n @Input() Mode: 'mobile-mode' | 'tablet-mode' = 'mobile-mode';\r\n @ViewChild('mobileCatalogueScroll') mobileCatalogueScroll: DxScrollViewComponent;\r\n override get PageScroll() { return this.mobileCatalogueScroll; }\r\n //\r\n private scrollTopOffset = 0;\r\n private scrollTopOffsetDelta = 0;\r\n private scrollActionHandler;\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n itemsService: ItemsService,\r\n itemsFilterService: ItemsFilterService,\r\n customerService: CustomerService,\r\n shoppingCartService: ShoppingCartService,\r\n cateoryService: CategoriesService) {\r\n super(A, 'MobileListComponent', screenService, itemsService, itemsFilterService, customerService, shoppingCartService, cateoryService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n override SetViewModeCssName() {\r\n this.State.ViewModeCssName = (this.State.Filter.CatalogueView === this.Enums.EnumCatalogueViewOptions.Grid)\r\n ? 'grid-view'\r\n : (this.State.Filter.CatalogueView === this.Enums.EnumCatalogueViewOptions.Compact)\r\n ? 'compact-view'\r\n : 'list-view';\r\n }\r\n\r\n\r\n OnScroll(e) {\r\n //\r\n // console.log(e);\r\n //\r\n if (!this.State.CustomerOption?.CatalogueOption?.IsEnableAutoHideHeaderOnMobile) return;\r\n\r\n const minActionDelta = 5; // px\r\n const clearActionHandler = () => {\r\n if (this.scrollActionHandler) {\r\n clearTimeout(this.scrollActionHandler);\r\n this.scrollActionHandler = null;\r\n }\r\n };\r\n\r\n if (e.event?.type === 'scroll') {\r\n\r\n clearActionHandler();\r\n\r\n this.scrollActionHandler = setTimeout(() => {\r\n const scrollTopOffset = e.scrollOffset?.top || 0;\r\n this.scrollTopOffsetDelta = scrollTopOffset - this.scrollTopOffset;\r\n this.scrollTopOffset = scrollTopOffset;\r\n\r\n clearActionHandler();\r\n\r\n if (e.reachedBottom) { return; }\r\n\r\n if (this.scrollTopOffset === 0) {\r\n this.Page.IsHeaderCollapsed = false;\r\n return;\r\n }\r\n\r\n if (this.scrollTopOffsetDelta === 0) return;\r\n this.Page.IsHeaderCollapsed = (this.scrollTopOffsetDelta > minActionDelta);\r\n // //\r\n // console.log(this.Page.IsHeaderCollapsed);\r\n // //\r\n }, 500);\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{group.GroupID | LookupCategory | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Brands'):'Name' | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Vendors'):'Name' | async}}\\r\\n \\r\\n \\r\\n {{group.GroupID | Lookup:DS('Manufacturers'):'Name' | async}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblNoItems' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseProductCatalogueComponent, BaseProductCatalogueState } from '../base/base-product-catalogue';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { ItemsFilterService } from '@dino-services/items-filter.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { CategoriesPanelComponent } from '../components/categories-panel/categories-panel.component';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { DisplayOptionsComponent } from '../components/display-options/display-options.component';\r\nimport { SortGroupAssortmentPanelComponent } from '../components/sort-group-assortment-panel/sort-group-assortment-panel.component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\n\r\nclass MobileCatalogueState extends BaseProductCatalogueState {\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-mobile-catalogue',\r\n templateUrl: './mobile-catalogue.component.html',\r\n styleUrls: ['./mobile-catalogue.component.scss']\r\n})\r\nexport class MobileCatalogueComponent extends BaseProductCatalogueComponent {\r\n IsShowSearchPanel: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n categoriesService: CategoriesService,\r\n itemsFilterService: ItemsFilterService,\r\n private sidebarService: SidebarService,\r\n private bottomSheetService: BottomSheetService,\r\n customerService: CustomerService,\r\n shoppingCartService: ShoppingCartService) {\r\n super(A, 'ProductCatalogue2Component', screenService, categoriesService, itemsFilterService, MobileCatalogueState, customerService, shoppingCartService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n }\r\n\r\n override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n }\r\n\r\n HandleToggleCategories() {\r\n this.sidebarService.Show('CategoriesPanelComponent',\r\n this.RC('lblProductMenu'),\r\n CategoriesPanelComponent,\r\n null,\r\n null,\r\n this.A.Screen.IsRTL() ? 'right' : 'left',\r\n 'mobile-categories-sidebar');\r\n }\r\n\r\n HandleSortGroupAssortmentPanel() {\r\n this.sidebarService.Show(\"SortGroupAssortment\",\r\n this.RC('lblSortGroupAssortment'),\r\n SortGroupAssortmentPanelComponent,\r\n null,\r\n null,\r\n null,\r\n 'mobile-sort-group-assortment-sidebar');\r\n }\r\n\r\n HandleToggleSearch(state: boolean) {\r\n this.IsShowSearchPanel = state;\r\n }\r\n\r\n HandleDisplayMode() {\r\n const params = {\r\n Title: this.RC('lblMobileListDisplay'),\r\n Content: DisplayOptionsComponent,\r\n } as any as BottomSheetContentParams;\r\n this.bottomSheetService.Show(params);\r\n }\r\n\r\n HandleSwipe(side: 'left' | 'right') {\r\n if (this.screenService.IsRTL() && side === 'right') this.HandleToggleCategories();\r\n if (!this.screenService.IsRTL() && side === 'left') this.HandleToggleCategories();\r\n }\r\n\r\n override OnApplyFilter() {\r\n //console.log('OnApplyFilter');\r\n }\r\n\r\n override OnClearFilter() {\r\n //console.log('OnClearFilters');\r\n }\r\n\r\n override SetPageClass() { \r\n this.PageClass = 'mobile-catalogue-page no-bottom-padding no-top-padding no-left-padding no-right-padding ' + (this.State.HideScrollLoading ? 'hide-scroll-loading' : '');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
{{GetDocumentTitle()}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { EnumShoppingCartModeOptions } from '@dino-proxy/enums';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Orientation, ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nexport const ShoppingCartModeStorageKey = 'ShoppingCartMode';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-product-catalogue2',\r\n templateUrl: './product-catalogue2.component.html',\r\n styleUrls: ['./product-catalogue2.component.scss']\r\n})\r\nexport class ProductCatalogue2Component {\r\n IsMobile: boolean;\r\n IsDesktop: boolean;\r\n IsTablet: boolean;\r\n Orientation: Orientation;\r\n ShoppingCartMode: EnumShoppingCartModeOptions = EnumShoppingCartModeOptions.Floating;\r\n\r\n constructor(public screenService: ScreenService,\r\n private customerOptionService: CustomerOptionService) { }\r\n\r\n ngOnInit() {\r\n const customerOption = this.customerOptionService.GetCustomerOption();\r\n if (!customerOption) {\r\n console.log('Customer Option = NULL');\r\n return;\r\n }\r\n\r\n this.IsMobile = this.screenService.IsMobile();\r\n this.IsDesktop = this.screenService.IsDesktop();\r\n this.IsTablet = this.screenService.IsTablet();\r\n this.Orientation = this.screenService.Orientation();\r\n\r\n this.ShoppingCartMode = customerOption.CatalogueOption?.DefaultShoppingCartModeOption \r\n || (this.IsDesktop ? EnumShoppingCartModeOptions.Floating : EnumShoppingCartModeOptions.Fixed);\r\n\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Globals } from 'projects/dino/_globals';\r\nimport { filter } from 'rxjs';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { ReceiptFilterActionPayload } from '@dino-pages/receipts/receipts.component';\r\nimport { EnumDocumentFilterBySubjects } from '@dino-proxy/enums';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\n\r\nexport class ReceiptFilterValues {\r\n DateFrom: Date;\r\n DateTo: Date;\r\n CustomerID: number;\r\n Subject: EnumDocumentFilterBySubjects = EnumDocumentFilterBySubjects.All;\r\n SalesPersonIDs: number[] = [];\r\n DoInitialize?: boolean = false;\r\n}\r\n\r\nclass State extends BaseState {\r\n SalesPersons: SalesPerson[] = [];\r\n Subjects = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-filter',\r\n templateUrl: './receipt-filter.component.html',\r\n styleUrls: ['./receipt-filter.component.scss']\r\n})\r\nexport class ReceiptFilterComponent extends BaseCustomerComponent {\r\n @Input() Filter: ReceiptFilterValues = new ReceiptFilterValues();\r\n @Output() OnFilterValuesChanged = new EventEmitter();\r\n\r\n ReportDateRangesSortedList: any[];\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private uiComponentService: UiComponentService,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DocumentFilterComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.IsSalesPerson) {\r\n this.salesPersonEndpoint.GetListShallow()\r\n .subscribe(response => this.State.SalesPersons = response.Entities);\r\n }\r\n this.DataSources['Customers'] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n\r\n this.SetDefaultDateFilterValues();\r\n this.ReportDateRangesSortedList = this.SortDateRangesList();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(e => e.EventName === UI_EVENTS.RECEIPT_FILTER_ACTION)\r\n )\r\n .subscribe(e => {\r\n const payload = e.Payload as ReceiptFilterActionPayload;\r\n if (payload.ReceiptFilterAction === 'apply') {\r\n this.HandleFilterChanged(true);\r\n } else if (payload.ReceiptFilterAction === 'clear') {\r\n this.Filter.DoInitialize = true;\r\n this.SetDefaultDateFilterValues();\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n private SetDefaultDateFilterValues() {\r\n this.Filter.DateFrom = Globals.OneYearAgoDate; \r\n this.Filter.DateTo = Globals.Today; \r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n SortDateRangesList() {\r\n const list = this.LIST('ReportDateRanges');\r\n const sortedList = [...list].sort((a, b) => a['Order'] - b['Order']);\r\n return sortedList;\r\n }\r\n\r\n HandleFilterChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n if (this.Filter.Subject === EnumDocumentFilterBySubjects.Customer) {\r\n this.Filter.CustomerID = 0;\r\n }\r\n if (this.Filter.Subject === EnumDocumentFilterBySubjects.Mine) {\r\n this.Filter.SalesPersonIDs = [];\r\n }\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n HandleSalesPersonChange(e) {\r\n // mobile e.event is Always undefined, no need to check UI event.\r\n if (!this.A.Screen.IsMobile()) {\r\n return this.HandleFilterChanged(e);\r\n } else {\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n }\r\n\r\n HandleDateFromChanged(event: any) {\r\n if (!event?.value) return;\r\n this.Filter.DateFrom = new Date(event.value.setHours(0, 0, 0));\r\n }\r\n\r\n HandleDateToChanged(event: any) {\r\n if (!event?.value) return;\r\n this.Filter.DateTo = new Date(event.value.setHours(23, 59, 59, 999));\r\n }\r\n\r\n OnDateRangeChanged(event: any) {\r\n if (!event?.itemData) return;\r\n \r\n this.Filter.DateFrom = event.itemData.DateFrom;\r\n this.Filter.DateTo = event.itemData.DateTo;\r\n }\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number): void {\r\n this.State.Subjects = this.LIST('EnumDocumentFilterBySubjects');\r\n if (!currentCustomerID || currentCustomerID <= 0) {\r\n this.State.Subjects = this.State.Subjects.filter(x => x.Value !== EnumDocumentFilterBySubjects.Customer);\r\n }\r\n }\r\n\r\n private cloneFilter() {\r\n return { ...this.Filter } as ReceiptFilterValues;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentSource } from './../enums';\r\nimport { EnumPaymentMeans } from './../enums';\r\nexport class Receipt extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Receipt';\r\n }\r\n \r\n public DocumentNumber: string; \r\n public CustomerID: number; \r\n public DocumentDate: Date; \r\n public Notes: string; \r\n public TotalLocal: number; \r\n public TotalForeign: number; \r\n public Currency: string; \r\n public IsCheque: boolean; \r\n public IsCash: boolean; \r\n public IsCreditCard: boolean; \r\n public IsWire: boolean; \r\n public CustomerCode: string; \r\n public CustomerName: string; \r\n public ContactPersonID: number; \r\n public SalesPersonID: number; \r\n public DocumentRemarks: string; \r\n public Source: EnumDocumentSource; \r\n public PaidDocuments: ReceiptPaidDocument[] = []; \r\n public PaymentMeans: ReceiptPaymentMean[] = []; \r\n\t\r\n}\r\n\r\nexport class ReceiptPaidDocument extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReceiptPaidDocument';\r\n }\r\n \r\n public SBODocumentType: number; \r\n public DocumentID: number; \r\n public JournalEntryID: number; \r\n public ClosingSumLocal: number; \r\n public ClosingSumForeign: number; \r\n public LineID: number;\r\n}\r\nexport class ReceiptPaymentMean extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReceiptPaymentMean';\r\n }\r\n \r\n public AccountCode: string; \r\n public PaymentDate: Date; \r\n public PaidAmount: number; \r\n public Currency: string; \r\n public PaymentType: EnumPaymentMeans; \r\n public NumberOfPayments: number; \r\n public BankCode: string; \r\n public BankBranch: string; \r\n public ChequeNumber: number; \r\n public BankAccountNumber: string; \r\n public Refference: string; \r\n public CreditCardNumber: string; \r\n public AccountName: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Receipt } from './../entities/receipt.entity';\r\nimport { ReceiptPaidDocument } from './../entities/receipt.entity';\r\nimport { ReceiptPaymentMean } from './../entities/receipt.entity';\r\nexport class ReceiptView extends Receipt {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReceiptView';\r\n }\r\n \r\n public ReceiptPaidDocuments: ReceiptPaidDocument[] = []; \r\n public ReceiptPaymentMeans: ReceiptPaymentMean[] = []; \r\n public CustomerTitleCode: string; \r\n public IsAllowShare: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { ReceiptView } from '@dino-proxy/views/receipt.view';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-grid',\r\n templateUrl: './receipt-grid.component.html',\r\n styleUrls: ['./receipt-grid.component.scss']\r\n})\r\nexport class ReceiptGridComponent extends BaseGridComponent {\r\n PaymentTypes = this.LIST('EnumPaymentMeans');\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptGridComponent', ReceiptView, State);\r\n }\r\n\r\n protected OnInitComponent() {\r\n }\r\n\r\n GetPaymentType(receipt: ReceiptView): string {\r\n let paymentTypesCount = 0;\r\n let paymentType = '';\r\n\r\n if (receipt.IsCash) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.Cash).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (receipt.IsCheque) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.Cheque).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (receipt.IsWire) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.WireTransfer).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (receipt.IsCreditCard) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.CreditCard).Text;\r\n paymentTypesCount += 1;\r\n }\r\n\r\n if (paymentTypesCount > 1) {\r\n paymentType = this.RC('lblMultiple');\r\n }\r\n\r\n return paymentType;\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e?.data?.EntryID) this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: e.data.EntryID });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t
\\r\\n\\t\\t\\t{{ (cell.data.TotalForeign > 0 ? cell.data.TotalForeign : cell.data.TotalLocal) | formatNumberSum }} {{ cell.data.Currency }}\\r\\n\\t\\t
\\r\\n\\t
\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t
\\r\\n\\t\\t\\t{{GetPaymentType(cell.data)}}\\r\\n\\t\\t
\\r\\n\\t
\\r\\n\\r\\n
\";","\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ReceiptView } from '@dino-proxy/views/receipt.view';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n Menu: ContextMenuElement[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-list-item',\r\n templateUrl: './receipt-list-item.component.html',\r\n styleUrls: ['./receipt-list-item.component.scss']\r\n})\r\nexport class ReceiptListItemComponent extends BaseComponent {\r\n\r\n @Input() Entity: ReceiptView;\r\n @Input() SearchText: string = null;\r\n @Input() PaymentTypes: GenericListEntity[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptListItemComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Menu = [\r\n {\r\n text: this.RC('mnuView'),\r\n icon: 'mdi mdi-text-box-search-outline',\r\n onClick: () => this.OnNavigate()\r\n }\r\n ];\r\n }\r\n\r\n GetPaymentType(): string {\r\n let paymentTypesCount = 0;\r\n let paymentType = '';\r\n\r\n if (this.Entity.IsCash) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.Cash).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (this.Entity.IsCheque) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.Cheque).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (this.Entity.IsWire) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.WireTransfer).Text;\r\n paymentTypesCount += 1;\r\n }\r\n if (this.Entity.IsCreditCard) {\r\n paymentType = this.PaymentTypes.find(l => l.Value === EnumPaymentMeans.CreditCard).Text;\r\n paymentTypesCount += 1;\r\n }\r\n\r\n if (paymentTypesCount > 1) {\r\n paymentType = this.RC('lblMultiple');\r\n }\r\n\r\n return paymentType;\r\n }\r\n\r\n OnNavigate() {\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: this.Entity.EntryID });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0 ? Entity.TotalForeign : Entity.TotalLocal) | formatNumberSum }} {{ Entity.Currency }}\\\"\\r\\n [IsHideLabel]=\\\"false\\\"\\r\\n Label=\\\"{{'lblAmount' | RC:THIS}}\\\">\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\n\r\nclass State extends BaseState {\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-list',\r\n templateUrl: './receipt-list.component.html',\r\n styleUrls: ['./receipt-list.component.scss']\r\n})\r\nexport class ReceiptListComponent extends BaseComponent {\r\n PaymentTypes = this.LIST('EnumPaymentMeans');\r\n\r\n @Input() DataSource: DataSourceCustomAction;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptListComponent', State);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\t
\\r\\n\\t\\t\\r\\n \\r\\n\\t
\\r\\n
\";","import { Component, Input, EventEmitter, Output } from '@angular/core';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-create-receipt-amounts-button',\r\n templateUrl: './create-receipt-amounts-button.component.html',\r\n styleUrls: ['./create-receipt-amounts-button.component.scss']\r\n})\r\nexport class CreateReceiptAmountsButtonComponent extends BaseComponent {\r\n @Input() Expanded: boolean;\r\n @Input() Currency: string;\r\n @Input() PaymentDifference: number = 0;\r\n @Output() OnToggle = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CreateReceiptAmountsButtonComponent', State);\r\n }\r\n\r\n override OnInitComponent() { }\r\n\r\n HandleToggle() {\r\n this.Expanded = !this.Expanded;\r\n this.OnToggle.emit(this.Expanded);\r\n }\r\n\r\n GetPriceMainPart(value: number) {\r\n return Helper.GetPriceMainPart(value || 0, this.F);\r\n }\r\n\r\n GetPriceChangePart(value: number) {\r\n return Helper.GetPriceChangePart(value || 0, this.F);\r\n }\r\n}\r\n\r\n\r\n","export default \"
\\r\\n
\\r\\n
{{'lblPaymentDifference' | RC:THIS}}
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(PaymentDifference)}}
\\r\\n
.{{GetPriceChangePart(PaymentDifference)}}
\\r\\n
\\r\\n
\";","\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { PaymentAmountDialogComponent } from '../payment-amount-dialog/payment-amount-dialog.component';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nexport interface SelectedLedger {\r\n IsSelected: boolean;\r\n Ledger: LedgerView;\r\n}\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-create-receipt-ledger-list-item',\r\n templateUrl: './create-receipt-ledger-list-item.component.html',\r\n styleUrls: ['./create-receipt-ledger-list-item.component.scss']\r\n})\r\nexport class CreateReceiptLedgerListItemComponent extends BaseComponent {\r\n @Input() Currency: string;\r\n @Input() Entity: LedgerView;\r\n @Input() IsEditMode:boolean = false;\r\n @Input() IsSelected: boolean = false;\r\n\r\n @Output() OnSelectionChange = new EventEmitter();\r\n @Output() OnEditableTotalChange = new EventEmitter();\r\n\r\n @ViewChild('paymentAmountDialog') paymentAmountDialog: PaymentAmountDialogComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CreateReceiptLedgerListItemComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n }\r\n\r\n OnNavigate() {\r\n if (this.Entity.TransTypeString === EnumDocumentTypes.Invoice \r\n || this.Entity.TransTypeString === EnumDocumentTypes.Refund) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: this.Entity.SBODocumentEntry, DocumentType: this.Entity.TransTypeString });\r\n } else if (this.Entity.TransType === 24) {\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: this.Entity.SBODocumentEntry });\r\n }\r\n }\r\n\r\n OnEditAmount() {\r\n this.paymentAmountDialog.Entity = this.Entity;\r\n this.paymentAmountDialog.ShowDialogShort((ledger) => { \r\n this.OnEditableTotalChange.emit(ledger);\r\n }, () => { return }, false, this.Entity);\r\n }\r\n\r\n OnSelectChange(event: any) {\r\n if (event && !event.event) {\r\n return;\r\n }\r\n this.OnSelectionChange.emit({IsSelected: event.value, Ledger: this.Entity} as SelectedLedger);\r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}\r\n","export default \"
\\r\\n\\t
\\r\\n\\t\\t\\r\\n\\t
\\r\\n\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t
{{ GetDocumentTypeTranslation(Entity.TransTypeString) }} {{ Entity.DocumentNumber }}
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t
{{ ('lblDate' | RC:THIS) }}: {{ Entity.RefDate | formatDateShort }}
\\r\\n\\t\\t\\t\\t
\\r\\n\\t\\t\\t\\t
{{ ('lblTotal' | RC:THIS) }}: {{ Entity.DocumentCurrency }}\\r\\n\\t\\t\\t\\t\\t{{ Entity.OpenSum | formatNumberSum }}\\r\\n\\t\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t
{{ Currency }} {{ Entity.Balance | formatNumberSum }}
\\r\\n\\t\\t\\t
{{ ('mnuEdit' | RC:THIS) }}
\\r\\n\\t\\t
\\r\\n\\t
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-create-receipt-navigator',\r\n templateUrl: './create-receipt-navigator.component.html',\r\n styleUrls: ['./create-receipt-navigator.component.scss'],\r\n})\r\nexport class CreateReceiptNavigatorComponent extends BaseComponent {\r\n @Input() SelectedPageIndex: number = 0;\r\n @Input() EnablePayment: boolean = false;\r\n @Output() OnPageIndexChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CreateReceiptNavigatorComponent', State);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n }\r\n\r\n SetTab(index: number) {\r\n if (!this.EnablePayment && index === 1) {\r\n return;\r\n }\r\n\r\n this.OnPageIndexChanged.emit(index);\r\n }\r\n}\r\n","export default \"
\\r\\n
=0}\\\" (click)=\\\"SetTab(0)\\\">\\r\\n
\\r\\n
\\r\\n {{'lblOutstandingDocuments' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
=1, 'disabled': !EnablePayment}\\\"\\r\\n (click)=\\\"SetTab(1)\\\">\\r\\n
\\r\\n
\\r\\n {{'lblCheckoutPaymentTabTitle' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Ledger } from './../entities/ledger.entity';\r\nimport { BaseTransDocument } from './../entities/basetransdocument.entity';\r\nexport class LedgerView extends Ledger {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LedgerView';\r\n }\r\n \r\n public Balance: number; \r\n public OpenBalance: number; \r\n public PreviousBalance: number; \r\n public PreviousOpenBalance: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-amount-dialog',\r\n templateUrl: './payment-amount-dialog.component.html',\r\n styleUrls: ['./payment-amount-dialog.component.scss'],\r\n})\r\nexport class PaymentAmountDialogComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentAmountDialogComponent', LedgerView, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.Entity ? `${this.GetDocumentTypeTranslation(this.Entity.TransTypeString)} ${this.Entity.DocumentNumber}` : '' ;\r\n }\r\n\r\n SaveAmount() {\r\n this.CloseDialogWithSuccess(this.Entity);\r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseState {\r\n SelectedLedgersIDs: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-documents-to-select-grid',\r\n templateUrl: './receipt-documents-to-select-grid.component.html',\r\n styleUrls: ['./receipt-documents-to-select-grid.component.scss'],\r\n})\r\nexport class ReceiptDocumentToSelectGridComponent extends BaseGridComponent {\r\n @Input() Currency: string = null;\r\n @Input() set SelectedLedgers(value : LedgerView[]) {\r\n if (!value) return;\r\n let ids = value.map(l => l.EntryID);\r\n this.State.SelectedLedgersIDs = ids;\r\n };\r\n\r\n @Output() OnSelectedRowsChange = new EventEmitter();\r\n @Output() OnTotalCellChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptDocumentToSelectGridComponent', BaseEntity, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.data.TransTypeString === EnumDocumentTypes.Invoice \r\n || e.data.TransTypeString === EnumDocumentTypes.Refund) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.SBODocumentEntry, DocumentType: e.data.TransTypeString });\r\n } else if (e.data.TransType === 24) {\r\n this.Navigate([ROUTE_PATHS.RECEIPT], { ReceiptID: e.data.SBODocumentEntry });\r\n }\r\n }\r\n\r\n OnEditableTotalChange(cellInfo: any, value: number) {\r\n cellInfo.setValue(value);\r\n this.OnTotalCellChange.emit({SBODocumentEntry: cellInfo.data.SBODocumentEntry, TransType: cellInfo.data.TransType, Balance: value});\r\n }\r\n\r\n OnSelectionChanged(event) {\r\n if (!event) {\r\n return;\r\n }\r\n this.OnSelectedRowsChange.emit(event.selectedRowsData);\r\n }\r\n\r\n GetMaxValue(originalSum: number): number {\r\n return originalSum > 0 ? originalSum : -0.01;\r\n }\r\n\r\n GetMinValue(originalSum: number): number {\r\n return originalSum > 0 ? 0.01 : originalSum;\r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{GetDocumentTypeTranslation(cell.data.TransTypeString)}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ Currency }} {{ cell.data.Balance | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.DocumentCurrency }} {{ cell.data.OpenSum | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { SelectedLedger } from '../create-receipt-ledger-list-item/create-receipt-ledger-list-item.component';\r\n\r\nclass State extends BaseState {\r\n SearchText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-documents-to-select-list',\r\n templateUrl: './receipt-documents-to-select-list.component.html',\r\n styleUrls: ['./receipt-documents-to-select-list.component.scss'],\r\n})\r\nexport class ReceiptDocumentToSelectListComponent extends BaseComponent {\r\n @Input() Currency: string = null;\r\n @Input() SelectedLedgers: LedgerView[] = [];\r\n @Input() Documents: LedgerView[] = [];\r\n\r\n @Output() OnSelectedRowsChange = new EventEmitter();\r\n @Output() OnTotalChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptDocumentToSelectListComponent', State);\r\n }\r\n\r\n OnEditableTotalChange(ledger: LedgerView) {\r\n if (!ledger) {\r\n return;\r\n }\r\n this.OnTotalChange.emit(ledger);\r\n }\r\n\r\n OnSelectionChange(selectedLedger: SelectedLedger) {\r\n if (!selectedLedger || !selectedLedger.Ledger) {\r\n return;\r\n }\r\n\r\n const ledger = this.SelectedLedgers.find(sl => sl.EntryID === selectedLedger.Ledger.EntryID);\r\n if ((selectedLedger.IsSelected && !!ledger) || (!selectedLedger.IsSelected && !ledger)) {\r\n return;\r\n }\r\n\r\n let ledgers = this.SelectedLedgers;\r\n if (selectedLedger.IsSelected) {\r\n ledgers.push(selectedLedger.Ledger);\r\n } else {\r\n ledgers = ledgers.filter(l => l.EntryID != selectedLedger.Ledger.EntryID);\r\n }\r\n\r\n this.OnSelectedRowsChange.emit(ledgers);\r\n }\r\n\r\n IsLedgerSelected(ledgerEntryID: number): boolean {\r\n return this.SelectedLedgers.some(sl => sl.EntryID === ledgerEntryID);\r\n }\r\n}","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-selected-receipt-documents-grid',\r\n templateUrl: './selected-receipt-documents-grid.component.html',\r\n styleUrls: ['./selected-receipt-documents-grid.component.scss'],\r\n})\r\nexport class SelectedReceiptDocumentsGridComponent extends BaseGridComponent {\r\n @Input() Currency: string = null;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectedReceiptDocumentsGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.data.TransTypeString === EnumDocumentTypes.Invoice \r\n || e.data.TransTypeString === EnumDocumentTypes.Refund) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.SBODocumentEntry, DocumentType: e.data.TransTypeString });\r\n }\r\n }\r\n\r\n GetDocumentTypeTranslation(typeString: string) {\r\n if (typeString === 'Receipt') {\r\n return this.RC('lblReceipt');\r\n }\r\n\r\n let type = typeString;\r\n if (type === 'Credit Memo') {\r\n type = EnumDocumentTypes.Refund;\r\n } \r\n\r\n return this.LISTITEM('EnumDocumentTypes', type);\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{GetDocumentTypeTranslation(cell.data.TransTypeString)}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ Currency }} {{ cell.data.Balance | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-selected-receipt-documents-list',\r\n templateUrl: './selected-receipt-documents-list.component.html',\r\n styleUrls: ['./selected-receipt-documents-list.component.scss'],\r\n})\r\nexport class SelectedReceiptDocumentsListComponent extends BaseComponent {\r\n @Input() Currency: string = null;\r\n @Input() Documents: LedgerView[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectedReceiptDocumentsListComponent', BaseState);\r\n }\r\n}","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\nimport { CreateReceiptParams } from '@dino-proxy/params/createreceipt.param';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { concat, tap } from 'rxjs';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingPaymentView } from '@dino-proxy/views/shoppingpayment.view';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseState {\r\n CurrentTabIndex: number = 0;\r\n EnablePayment: boolean = false;\r\n SelectedLedgers: LedgerView[] = [];\r\n ShoppingPaymentID: number = 0;\r\n PaidAmount: number = 0;\r\n TotalAfterVat: number = 0;\r\n Currency: string;\r\n AllLedgers: LedgerView[];\r\n PaymentToAccountAmount: number = 0;\r\n ReceiptSaved: boolean = false;\r\n ShoppingPaymentViewEntity: ShoppingPaymentView = null;\r\n DocumentRemarks: string;\r\n Delay: number = 2000;\r\n TimerId: any;\r\n AllowSelectorCallback: boolean = false;\r\n IsWideScreen: boolean = false;\r\n IsShortScreen: boolean = false;\r\n AmountsExpanded: boolean;\r\n IsSalesPerson: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'base-create-receipt',\r\n template: '
',\r\n})\r\nexport abstract class BaseCreateReceiptComponent extends BasePageComponent {\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n private receiptEndpoint: ReceiptEndpoint,\r\n private shoppingPaymentEndpoint: ShoppingPaymentEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private customerService: CustomerService) {\r\n super(A, componentName, BaseEntity, State);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n this.State.IsShortScreen = !this.A.Screen.IsMediumScreen() && !this.State.IsWideScreen;\r\n this.State.IsSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n }\r\n\r\n public get DisableDocumentSelection() {\r\n return this.State.PaidAmount > 0;\r\n }\r\n\r\n public get TotalAmount() {\r\n return Utils.Round(this.State.PaymentToAccountAmount + this.State.TotalAfterVat);\r\n }\r\n\r\n public get PaymentDifference() {\r\n return Utils.Round(this.TotalAmount - this.State.PaidAmount);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('lblDocumentReceiptPayment');\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.customerService.HasCustomer) {\r\n this.Navigate([ROUTE_PATHS.RECEIPTS]);\r\n return;\r\n }\r\n\r\n this.State.CurrentTabIndex = 0;\r\n this.customerEndpoint.GetCurrentCustomer()\r\n .subscribe(response => {\r\n if (response.Entity.Currency === '##') {\r\n this.State.Currency = '₪';\r\n } else {\r\n this.State.Currency = response.Entity.Currency;\r\n }\r\n });\r\n\r\n // Recet state before next creation in a row\r\n this.State.ShoppingPaymentID = 0;\r\n this.State.PaidAmount = 0;\r\n this.State.TotalAfterVat = 0;\r\n this.State.PaymentToAccountAmount = 0;\r\n this.State.ReceiptSaved = false;\r\n this.State.ShoppingPaymentViewEntity = null;\r\n\r\n const getLedgers = this.receiptEndpoint.GetLedgersForPayment().pipe(tap(result => {\r\n result.Entities.forEach(l => {\r\n l.Balance = l.OpenSum;\r\n // if Credit Memo - rename to refund\r\n l.TransTypeString = l.TransType === 14 ? EnumDocumentTypes.Refund : l.TransTypeString;\r\n return;\r\n });\r\n this.State.AllLedgers = result.Entities || [];\r\n }));\r\n const gerDraftPayment = this.shoppingPaymentEndpoint.GetDraft(this.customerService.GetCustomerID()).pipe(tap(result => {\r\n if (result.Entity != null) {\r\n if (result.Entity.PaymentOnAccount > 0) {\r\n this.State.PaymentToAccountAmount = result.Entity.PaymentOnAccount;\r\n this.State.EnablePayment = true;\r\n }\r\n\r\n this.State.PaidAmount = result.Entity.TotalAmount;\r\n\r\n this.State.AllLedgers.forEach(l => {\r\n const selectedLedger = result.Entity.ShoppingPaymentDocumentItemViews.find(p => \r\n p.DocEntry === l.SBODocumentEntry && ((p.DocumentType === EnumDocumentTypes.None && (l.TransType === 30 || l.TransType === 24)) || p.DocumentType === l.TransTypeString));\r\n if (selectedLedger) {\r\n l.Balance = selectedLedger.SumApplied;\r\n }\r\n });\r\n\r\n this.State.SelectedLedgers = this.State.AllLedgers.filter(l =>\r\n result.Entity.ShoppingPaymentDocumentItemViews.findIndex(d => \r\n d.DocEntry === l.SBODocumentEntry \r\n && ((d.DocumentType === EnumDocumentTypes.None && (l.TransType === 30 || l.TransType === 24)) \r\n || d.DocumentType === l.TransTypeString)\r\n ) != -1) || [];\r\n\r\n this.State.ShoppingPaymentID = result.Entity.EntryID;\r\n this.State.ShoppingPaymentViewEntity = result.Entity;\r\n \r\n this.State.DocumentRemarks = result.Entity.DocumentRemarks;\r\n this.UpdateStateForPayments();\r\n }\r\n this.State.AllowSelectorCallback = true;\r\n }));\r\n\r\n concat(getLedgers, gerDraftPayment).subscribe();\r\n }\r\n\r\n OnTabClick(event) {\r\n this.State.CurrentTabIndex = event;\r\n }\r\n\r\n OnNotesChange(e: any) {\r\n if (!e?.event) return;\r\n\r\n if (this.State.TimerId) \r\n clearTimeout(this.State.TimerId);\r\n this.State.TimerId = setTimeout(() => { \r\n this.State.DocumentRemarks = e.value;\r\n this.UpdateShoppingPayment();\r\n }, this.State.Delay);\r\n }\r\n\r\n OnSelectionChanged(selectedRowsData: LedgerView[]) {\r\n if (this.State.AllowSelectorCallback) {\r\n this.State.SelectedLedgers = selectedRowsData || [];\r\n this.UpdateStateForPayments(); \r\n this.UpdateShoppingPayment();\r\n }\r\n }\r\n\r\n UpdateStateForPayments(){\r\n this.State.TotalAfterVat = Utils.Round(this.State.SelectedLedgers.reduce((accumulator, ledger) => {\r\n return accumulator + ledger.Balance;\r\n }, 0));\r\n if (this.State.SelectedLedgers.length > 0) {\r\n this.State.EnablePayment = true;\r\n }\r\n\r\n if (this.State.PaymentToAccountAmount === 0 && this.State.SelectedLedgers.length === 0) {\r\n this.State.EnablePayment = false;\r\n }\r\n }\r\n\r\n OnEditableTotalChange(cellInfo: {SBODocumentEntry: number, TransType: number, Balance: number}) {\r\n let selectedLedger = this.State.SelectedLedgers.find(l => cellInfo.SBODocumentEntry === l.SBODocumentEntry && cellInfo.TransType === l.TransType);\r\n if (!!selectedLedger) {\r\n selectedLedger.Balance = cellInfo.Balance;\r\n this.State.SelectedLedgers = [...this.State.SelectedLedgers.filter(sl => sl.EntryID != selectedLedger.EntryID), selectedLedger];\r\n this.UpdateStateForPayments(); \r\n this.UpdateShoppingPayment();\r\n return;\r\n }\r\n\r\n let newSelectedLedger = this.State.AllLedgers.find(l => cellInfo.SBODocumentEntry === l.SBODocumentEntry && cellInfo.TransType === l.TransType);\r\n newSelectedLedger.Balance = cellInfo.Balance;\r\n this.State.SelectedLedgers = [...this.State.SelectedLedgers.filter(sl => sl.EntryID != newSelectedLedger.EntryID), newSelectedLedger];\r\n }\r\n\r\n UpdateShoppingPayment() {\r\n const params = {\r\n Ledgers: this.State.SelectedLedgers || [],\r\n ShoppingPaymentID: this.State.ShoppingPaymentID,\r\n PaymentToAccountAmount: this.State.PaymentToAccountAmount || 0,\r\n DocumentRemarks: this.State.DocumentRemarks\r\n } as CreateReceiptParams;\r\n this.receiptEndpoint.UpdateDraftShoppingPayment(params).subscribe(result => {\r\n if (result.IsSuccess && result.Entity) {\r\n this.State.ShoppingPaymentID = result.Entity.EntryID;\r\n this.State.ShoppingPaymentViewEntity = result.Entity;\r\n }\r\n });\r\n }\r\n\r\n HandleAccountPaymentChange(e) {\r\n if (!e?.event) return;\r\n\r\n if (this.State.PaymentToAccountAmount > 0) {\r\n this.State.EnablePayment = true;\r\n }\r\n\r\n if (this.State.PaymentToAccountAmount === 0 && this.State.SelectedLedgers.length === 0) {\r\n this.State.EnablePayment = false;\r\n }\r\n\r\n this.UpdateShoppingPayment();\r\n }\r\n\r\n SetIsPaymentComplete(result: { PaymentDone: boolean, ShoppingPaymentID: number, PaidAmount: number, PaidAmountWithLater: number, ExceededAmount: number, OnlyLaterPayment: boolean, ShoppingPaymentView: ShoppingPaymentView }) {\r\n if (this.State.PaidAmount != result.PaidAmount) {\r\n if (result.ShoppingPaymentID) {\r\n this.State.ShoppingPaymentID = result.ShoppingPaymentID;\r\n }\r\n \r\n this.State.PaidAmount = result.PaidAmount || 0;\r\n \r\n this.State.ShoppingPaymentViewEntity = result.ShoppingPaymentView;\r\n \r\n if (result.ExceededAmount > 0) {\r\n this.State.PaymentToAccountAmount += result.ExceededAmount;\r\n \r\n }\r\n \r\n let isSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n \r\n if (result.PaymentDone && !isSalesPerson) {\r\n this.OnComplete();\r\n } else if (result.ExceededAmount > 0) {\r\n this.UpdateShoppingPayment();\r\n }\r\n }\r\n }\r\n\r\n OnComplete(): void {\r\n if (this.TotalAmount === 0 || !this.TotalAmount) {\r\n return;\r\n }\r\n\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.State.CurrentTabIndex = 1;\r\n }\r\n\r\n if (this.PaymentDifference === 0) {\r\n\r\n const params = {\r\n Ledgers: this.State.SelectedLedgers || [],\r\n ShoppingPaymentID: this.State.ShoppingPaymentID,\r\n PaymentToAccountAmount: this.State.PaymentToAccountAmount || 0\r\n } as CreateReceiptParams;\r\n\r\n this.receiptEndpoint.SaveReceipt(params).subscribe(result => {\r\n if (result.IsSuccess) {\r\n this.State.ReceiptSaved = true;\r\n this.UI.InfoMessage(this.RC('msgReceiptSuccessCreation'));\r\n this.Navigate([ROUTE_PATHS.RECEIPTS]);\r\n } else {\r\n this.UI.StopMessage(result.ResponseMessage);\r\n }\r\n });\r\n }\r\n }\r\n\r\n onCellPrepared(e: any) {\r\n if (e.rowType === 'data' && e.column.command === 'select') {\r\n const instance = e.cellElement.find('.dx-select-checkbox').dxCheckBox('instance');\r\n if (this.State.PaidAmount > 0) {\r\n instance.option('disabled', true);\r\n e.cellElement.off();\r\n }\r\n instance.option('disabled', false);\r\n e.cellElement.off();\r\n }\r\n }\r\n\r\n GetPriceMainPart(value: number) {\r\n if (Math.abs(value) < 0.01) {\r\n value = 0;\r\n }\r\n if (value < 0) {\r\n value *= -1;\r\n return `-${Helper.GetPriceMainPart(value, this.F)}`;\r\n }\r\n\r\n return Helper.GetPriceMainPart(value, this.F);\r\n }\r\n\r\n GetPriceChangePart(value: number) {\r\n if (Math.abs(value) < 0.01) {\r\n value = 0;\r\n }\r\n if (value < 0) {\r\n value *= -1;\r\n }\r\n return Helper.GetPriceChangePart(value, this.F);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.data.TransTypeString === EnumDocumentTypes.Invoice \r\n || e.data.TransTypeString === EnumDocumentTypes.Refund) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.SBODocumentEntry, DocumentType: e.data.TransTypeString });\r\n }\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCreateReceiptComponent } from '../base/base-create-receipt.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-create-receipt-desktop',\r\n templateUrl: './create-receipt-desktop.component.html',\r\n styleUrls: ['./create-receipt-desktop.component.scss'],\r\n})\r\nexport class CreateReceiptDesktopComponent extends BaseCreateReceiptComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n receiptEndpoint: ReceiptEndpoint,\r\n shoppingPaymentEndpoint: ShoppingPaymentEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'CreateReceiptDesktopComponent', receiptEndpoint, shoppingPaymentEndpoint, customerEndpoint, customerService);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n 0) || State.ShoppingPaymentViewEntity?.AnyPaymentDone\\\">\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblTotalAmount' | RC:THIS}}
\\r\\n
\\r\\n
{{State.Currency}}
\\r\\n
{{GetPriceMainPart(TotalAmount)}}
\\r\\n
.{{GetPriceChangePart(TotalAmount)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblPaidAmount' | RC:THIS}}
\\r\\n
\\r\\n
{{State.Currency}}
\\r\\n
{{GetPriceMainPart(State.PaidAmount)}}
\\r\\n
.{{GetPriceChangePart(State.PaidAmount)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblPaymentDifference' | RC:THIS}}
\\r\\n
\\r\\n
{{State.Currency}}
\\r\\n
{{GetPriceMainPart(PaymentDifference)}}
\\r\\n
.{{GetPriceChangePart(PaymentDifference)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCreateReceiptComponent } from '../base/base-create-receipt.component';\r\nimport { LedgerView } from '@dino-proxy/views/ledger.view';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-create-receipt-mobile',\r\n templateUrl: './create-receipt-mobile.component.html',\r\n styleUrls: ['./create-receipt-mobile.component.scss'],\r\n})\r\nexport class CreateReceiptMobileComponent extends BaseCreateReceiptComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n receiptEndpoint: ReceiptEndpoint,\r\n shoppingPaymentEndpoint: ShoppingPaymentEndpoint,\r\n customerEndpoint: CustomerEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'CreateReceiptMobileComponent', receiptEndpoint, shoppingPaymentEndpoint, customerEndpoint, customerService);\r\n }\r\n\r\n HandleClickError(e) {\r\n e && e.stopPropagation();\r\n }\r\n\r\n HandleToggleAmounts() {\r\n this.State.AmountsExpanded = !this.State.AmountsExpanded;\r\n }\r\n\r\n HandleSwipeAmounts(dest: 'up' | 'down') {\r\n if (dest === 'up') this.State.AmountsExpanded = true;\r\n if (dest === 'down') this.State.AmountsExpanded = false;\r\n }\r\n\r\n OnMobileComplete() {\r\n this.State.AmountsExpanded = false;\r\n this.OnComplete();\r\n }\r\n\r\n OnTotalChange(ledger: LedgerView) {\r\n let selectedLedger = this.State.SelectedLedgers.find(l => ledger.SBODocumentEntry === l.SBODocumentEntry && ledger.TransType === l.TransType);\r\n if (!!selectedLedger) {\r\n selectedLedger.Balance = ledger.Balance;\r\n this.State.SelectedLedgers = [...this.State.SelectedLedgers.filter(sl => sl.EntryID != selectedLedger.EntryID), selectedLedger];\r\n this.UpdateStateForPayments(); \r\n this.UpdateShoppingPayment();\r\n return;\r\n }\r\n\r\n let newSelectedLedger = this.State.AllLedgers.find(l => ledger.SBODocumentEntry === l.SBODocumentEntry && ledger.TransType === l.TransType);\r\n newSelectedLedger.Balance = ledger.Balance;\r\n this.State.SelectedLedgers = [...this.State.SelectedLedgers.filter(sl => sl.EntryID != newSelectedLedger.EntryID), newSelectedLedger];\r\n this.UpdateStateForPayments(); \r\n this.UpdateShoppingPayment();\r\n }\r\n}","export default \"\\r\\n \\r\\n 0) || State.ShoppingPaymentViewEntity?.AnyPaymentDone\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
{{'lblTotalAmount' | RC:THIS}}
\\r\\n
\\r\\n
{{State.Currency}}
\\r\\n
{{GetPriceMainPart(TotalAmount)}}
\\r\\n
.{{GetPriceChangePart(TotalAmount)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblPaidAmount' | RC:THIS}}
\\r\\n
\\r\\n
{{State.Currency}}
\\r\\n
{{GetPriceMainPart(State.PaidAmount)}}
\\r\\n
.{{GetPriceChangePart(State.PaidAmount)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ReceiptPaymentMean } from '@dino-proxy/entities/receipt.entity';\r\nimport { EnumPaymentMeans } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n IsMobile: boolean = false;\r\n IsWideScreen: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-payments',\r\n templateUrl: './receipt-payments.component.html',\r\n styleUrls: ['./receipt-payments.component.scss']\r\n})\r\nexport class ReceiptPaymentsComponent extends BaseComponent {\r\n @Input() Payments: ReceiptPaymentMean[];\r\n @Input() PaymentType: EnumPaymentMeans;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReceiptPaymentsComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.PaidAmount | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{cell.data.BankCode}}-{{cell.data.BankBranch}}-{{cell.data.BankAccountNumber}}-{{cell.data.ChequeNumber}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ReceiptPaidDocument } from '@dino-proxy/entities/receipt.entity';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { Breakpoints } from '@angular/cdk/layout';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseState {\r\n IsMobile: boolean = false;\r\n LocalCurrency: string;\r\n IsWideScreen: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt-related-documents',\r\n templateUrl: './receipt-related-documents.component.html',\r\n styleUrls: ['./receipt-related-documents.component.scss']\r\n})\r\nexport class ReceiptRelatedDocumentsComponent extends BaseComponent {\r\n @Input() PaidDocuments: ReceiptPaidDocument[];\r\n\r\n constructor(A: ServiceBagService, private framework: FrameworkService) {\r\n super(A, 'ReceiptRelatedDocumentsComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.LocalCurrency = this.framework.CompanyInfo.CurrencyLocal;\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n }\r\n \r\n GetDocumentTypeString(relatedDocument: ReceiptPaidDocument): string {\r\n let documentType = '';\r\n switch (relatedDocument.SBODocumentType) {\r\n case 13: {\r\n documentType = this.RC('lblDocumentInvoice');\r\n break;\r\n }\r\n case 14: {\r\n documentType = this.RC('lblDocumentRefund');\r\n break;\r\n }\r\n case 24: {\r\n documentType = this.RC('lblDocumentReceiptPayment');\r\n break;\r\n }\r\n case 46: {\r\n documentType = this.RC('lblCheckoutPaymentTabTitle');\r\n break;\r\n }\r\n case 30: {\r\n documentType = this.RC('lblJournalEntry');\r\n break;\r\n }\r\n }\r\n\r\n return documentType;\r\n }\r\n\r\n GetMenu(relatedDocument: ReceiptPaidDocument): any {\r\n return [\r\n {\r\n text: this.RC('mnuView'),\r\n icon: 'mdi mdi-text-box-search-outline',\r\n onClick: () => this.OnNavigate(relatedDocument)\r\n }\r\n ];\r\n\r\n }\r\n\r\n GetTitle(relatedDocument: ReceiptPaidDocument): string {\r\n let title = this.GetDocumentTypeString(relatedDocument) + ' # ' + (relatedDocument.DocumentID || relatedDocument.JournalEntryID);\r\n return title;\r\n }\r\n\r\n OnNavigate(document) {\r\n let documentType = null;\r\n switch (document.SBODocumentType) {\r\n case 13: {\r\n documentType = EnumDocumentTypes.Invoice;\r\n break;\r\n }\r\n case 14: {\r\n documentType = EnumDocumentTypes.Refund;\r\n break;\r\n }\r\n }\r\n if (documentType) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: document.DocumentID, DocumentType: documentType });\r\n }\r\n \r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{cell.data.SBODocumentType === 14 ? '-' : ''}}{{ (cell.data.ClosingSumForeign > 0 ?\\r\\n cell.data.ClosingSumForeign :\\r\\n cell.data.ClosingSumLocal) | formatNumberSum }} {{ cell.data.ClosingSumForeign > 0 ?\\r\\n Entity.Currency : State.LocalCurrency }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{GetDocumentTypeString(cell.data)}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n 0 ?\\r\\n document.ClosingSumForeign :\\r\\n document.ClosingSumLocal) | formatNumberSum }} {{ document.ClosingSumForeign > 0 ?\\r\\n document.Currency : State.LocalCurrency }}\\\"\\r\\n [IsHideLabel]=\\\"false\\\" \\r\\n Label=\\\"{{'lblPaidAmount' | RC:THIS}}\\\">\\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { ReceiptPaymentMean, ReceiptPaidDocument } from '@dino-proxy/entities/receipt.entity';\r\nimport { ReceiptView } from '@dino-proxy/views/receipt.view';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { EnumDocumentTypes, EnumPaymentMeans } from '@dino-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ShareDocumentDialogComponent } from '@dino-pages/documents/components/share-document-dialog/share-document-dialog.component';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\n\r\nclass State extends BaseOptionState {\r\n Tabs: any[] = [];\r\n CurrentTabName: string = 'GeneralTab';\r\n CurrentTabIndex: number = 0;\r\n ReceiptID: number;\r\n IsMobile: boolean;\r\n PaidDocuments: ReceiptPaidDocument[] = [];\r\n AccountPayment: ReceiptPaidDocument;\r\n LocalCurrency: string;\r\n CashPayments: ReceiptPaymentMean[] = [];\r\n WirePayments: ReceiptPaymentMean[] = [];\r\n CreditCardPayments: ReceiptPaymentMean[] = [];\r\n ChequePayments: ReceiptPaymentMean[] = [];\r\n IsWideScreen: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipt',\r\n templateUrl: './receipt.component.html',\r\n styleUrls: ['./receipt.component.scss'],\r\n})\r\nexport class ReceiptComponent extends BasePageComponent {\r\n @ViewChild('shareDocumentDialog') shareDocumentDialog: ShareDocumentDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private receiptEndpoint: ReceiptEndpoint,\r\n private screenService: ScreenService,\r\n private customerService: CustomerService,\r\n private framework: FrameworkService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'ReceiptComponent', ReceiptView, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n public get IsLocalCurrency(): boolean {\r\n return this.Entity && this.Entity.EntryID > 0 && this.State.LocalCurrency === this.Entity.Currency;\r\n }\r\n\r\n GetReceiptTotalAmount(): string {\r\n if (!this.Entity || this.Entity.EntryID <= 0) {\r\n return '0';\r\n }\r\n\r\n let amount = '';\r\n\r\n if (this.State.LocalCurrency === this.Entity.Currency) {\r\n amount = `${this.Entity.TotalLocal}`;\r\n } else {\r\n amount = `${this.Entity.TotalForeign}`;\r\n }\r\n\r\n return amount + ` ${this.Entity.Currency}`;\r\n }\r\n \r\n GetReceiptDocumentsAmount(): string {\r\n if (!this.Entity || !this.Entity.Currency) {\r\n return null;\r\n }\r\n\r\n let amount = '';\r\n\r\n if (this.State.LocalCurrency === this.Entity.Currency) {\r\n amount = !this.State.AccountPayment ? this.Entity.TotalLocal.toString() : `${Utils.Round(this.Entity.TotalLocal - this.State.AccountPayment.ClosingSumLocal)}`;\r\n } else {\r\n amount = !this.State.AccountPayment ? this.Entity.TotalForeign.toString() : `${Utils.Round(this.Entity.TotalForeign - this.State.AccountPayment.ClosingSumForeign)}`;\r\n }\r\n\r\n return amount + ` ${this.Entity.Currency}`;\r\n }\r\n\r\n GetReceiptAccountAmount(): string {\r\n let amount = '';\r\n\r\n if (this.State.LocalCurrency === this.Entity.Currency) {\r\n amount = `${this.State.AccountPayment.ClosingSumLocal}`;\r\n } else {\r\n amount = `${this.State.AccountPayment.ClosingSumForeign}`;\r\n }\r\n\r\n return amount + ` ${this.Entity.Currency}`;\r\n }\r\n\r\n HandleShare() {\r\n this.shareDocumentDialog.DocumentID = this.Entity?.EntryID;\r\n this.shareDocumentDialog.DocumentType = EnumDocumentTypes.None;\r\n this.shareDocumentDialog.IsReceipt = true;\r\n this.shareDocumentDialog.ShowDialogShort(() => {});\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('lblDocumentReceiptPayment') + ' ' + this.Entity?.DocumentNumber;\r\n }\r\n\r\n override OnInitSubtitle() {\r\n if (this.customerService.IsCurrentUserSalesPerson()) {\r\n return this.Entity.CustomerTitleCode;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n override OnInitComponentInternal() {\r\n if (this.QueryParams.ReceiptID) this.State.ReceiptID = +this.QueryParams.ReceiptID;\r\n if (!this.State.ReceiptID ) this.Navigate([ROUTE_PATHS.RECEIPTS]);\r\n\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.State.IsWideScreen = this.screenService.IsWideScreen();\r\n\r\n const allowView = this.State.CustomerOption?.PaymentOption?.IsAllowReceiptView;\r\n if (!allowView) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n } \r\n\r\n super.OnInitComponentInternal();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Tabs = (this.LIST('ReceiptTabs') as any[]).filter(t => t.Name != 'PaidDocuments');\r\n this.State.CurrentTabName = 'GeneralTab';\r\n this.State.CurrentTabIndex = 0;\r\n this.State.LocalCurrency = this.framework.CompanyInfo.CurrencyLocal;\r\n this.receiptEndpoint.GetFullReceipt(this.State.ReceiptID)\r\n .subscribe(response => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n return;\r\n }\r\n\r\n this.Entity = response.Entity;\r\n this.State.PaidDocuments = this.Entity.ReceiptPaidDocuments.filter(d => d.SBODocumentType != 0) || [];\r\n this.State.AccountPayment = this.Entity.ReceiptPaidDocuments.filter(d => d.SBODocumentType === 0)[0];\r\n this.State.CashPayments = this.Entity.ReceiptPaymentMeans.filter(p => p.PaymentType === EnumPaymentMeans.Cash) || [];\r\n this.State.WirePayments = this.Entity.ReceiptPaymentMeans.filter(p => p.PaymentType === EnumPaymentMeans.WireTransfer) || [];\r\n this.State.CreditCardPayments = this.Entity.ReceiptPaymentMeans.filter(p => p.PaymentType === EnumPaymentMeans.CreditCard) || [];\r\n this.State.ChequePayments = this.Entity.ReceiptPaymentMeans.filter(p => p.PaymentType === EnumPaymentMeans.Cheque) || [];\r\n if (this.State.PaidDocuments.length > 0) {\r\n this.State.Tabs = this.LIST('ReceiptTabs');\r\n }\r\n this.ReloadToolbar();\r\n });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n settings.IsAllowPrint = false;\r\n settings.ShowBackButton = true;\r\n settings.IsSupportHistory = true;\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n const menu = [];\r\n if (this.Entity && this.Entity.EntryID !== -1 && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n menu.push({\r\n text: this.RC('btnViewCustomer'),\r\n icon: 'mdi mdi-card-account-details-star-outline',\r\n onClick: () => this.Navigate([ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW, this.Entity.CustomerID])\r\n });\r\n }\r\n\r\n return menu;\r\n }\r\n\r\n OnTabClick(event) {\r\n this.State.CurrentTabName = event.itemData.Name;\r\n }\r\n\r\n GetSourceText() {\r\n return this.LIST('EnumDocumentSource').find(s => s.Value === this.Entity.Source).Text;\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n 0\\\" [Component]=\\\"THIS\\\"\\r\\n Name=\\\"lblDocumentsPaidAmount\\\" [Label]=\\\"'lblDocumentsPaidAmount' | RC:THIS\\\"\\r\\n [Value]=\\\"GetReceiptDocumentsAmount()\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { ReceiptGridComponent } from './components/receipt-grid/receipt-grid.component';\r\nimport { ReceiptFilterValues } from './components/receipt-filter/receipt-filter.component';\r\nimport { ReceiptListParams } from '@dino-proxy/params/receiptlist.param';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nexport type ReceiptFilterActionPayload = { ReceiptFilterAction: 'apply' | 'clear' };\r\n\r\nclass State extends BaseState {\r\n AllowAdd: boolean = true;\r\n Filter: ReceiptFilterValues;\r\n IsWideScreen: boolean;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-receipts',\r\n templateUrl: './receipts.component.html',\r\n styleUrls: ['./receipts.component.scss'],\r\n})\r\nexport class ReceiptsComponent extends BaseCustomerPageComponent {\r\n @ViewChild(ReceiptGridComponent) grid: ReceiptGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n customerService: CustomerService,\r\n private customerOptionService: CustomerOptionService,\r\n private uiComponentService: UiComponentService,\r\n private receiptEndpoint: ReceiptEndpoint,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'ReceiptsComponent', BaseEntity, State, customerService);\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public get HasCustomer() {\r\n return !!this.CustomerID;\r\n }\r\n\r\n get GetAddButtonNavPath(): string {\r\n return this.restrictedNavigationService.CheckDeviceSpesificRoute(ROUTE_PATHS.CREATE_RECEIPT);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('lblDocumentReceiptPayments');\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitFilter();\r\n this.LoadDataSource();\r\n }\r\n\r\n HandleFilterValuesChanged(e: ReceiptFilterValues) {\r\n this.State.Filter = e;\r\n this.State.Filter.DoInitialize && this.InitFilter();\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.RECEIPT_FILTER_ACTION, this.State.Filter as ReceiptListParams);\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n const paymentOption = this.customerOptionService.GetCustomerOption()?.PaymentOption;\r\n if (!paymentOption || !paymentOption.IsAllowReceiptView) {\r\n this.State.AllowAdd = false;\r\n this.DataSources['Receipts'] = null;\r\n return;\r\n }\r\n this.State.AllowAdd = paymentOption.IsAllowReceiptAdd\r\n && (paymentOption.IsAllowCashPayment\r\n || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowWirePayment\r\n || paymentOption.IsAllowGoCreditPayment\r\n || paymentOption.IsAllowLaterPayment);\r\n this.DataSources['Receipts'] = null;\r\n const dataSource = this.GetDataSource();\r\n this.DataSources['Receipts'] = dataSource;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowExport: !this.A.Screen.IsMobile(),\r\n GridExtender: this.grid?.G,\r\n IsAllowFilter: !this.State.IsWideScreen,\r\n ShowButtonsText: false,\r\n ShowBackButton: false\r\n } as ToolbarSettings;\r\n }\r\n\r\n private GetDataSource(): DataSourceCustomAction {\r\n const params = this.State.Filter as ReceiptListParams;\r\n\r\n const ds = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.receiptEndpoint.GetListByParams(params, options),\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n\r\n return ds;\r\n }\r\n\r\n private InitFilter() {\r\n this.State.Filter = new ReceiptFilterValues();\r\n if (this.QueryParams.CustomerID) {\r\n this.State.Filter.CustomerID = +this.QueryParams.CustomerID;\r\n }\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.RECEIPT_FILTER_ACTION, { ReceiptFilterAction: 'apply' } as ReceiptFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.RECEIPT_FILTER_ACTION, { ReceiptFilterAction: 'clear' } as ReceiptFilterActionPayload);\r\n }\r\n\r\n NavigateAdd() {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CREATE_RECEIPT,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component, Input, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { Customer } from \"@dino-proxy/entities/customer.entity\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { DxDataGridComponent, DxListComponent } from \"devextreme-angular\";\r\nimport { CustomersGridComponent } from \"@dino-pages/customers/customers-grid/customers-grid.component\";\r\nimport { GetNewObjectPath, ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\nclass State extends BaseOptionState {\r\n IsMobile: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'change-customer-confirm-dialog',\r\n templateUrl: './change-customer-confirm-dialog.component.html',\r\n styleUrls: ['./change-customer-confirm-dialog.component.scss']\r\n})\r\nexport class ChangeCustomerConfirmDialogComponent extends BasePageComponent {\r\n @Input() Width: EnumWindowSizes;\r\n @Input() Height: EnumWindowSizes;\r\n constructor(A: ServiceBagService) {\r\n super(A, \"ChangeCustomerConfirmDialogComponent\", BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (!this.Width) {\r\n this.Width = EnumWindowSizes.WindowLarge;\r\n }\r\n if (!this.Height) {\r\n this.Height = EnumWindowSizes.WindowAutoSize;\r\n }\r\n }\r\n\r\n override GetDefaultTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n {{ 'lblShoppingCartAlertTitle' | RC:THIS }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxCustomButton } from '@base/classes/BaseClasses';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { ChangeCustomerConfirmDialogComponent } from \"@dino-pages/sales/components/change-customer-confirm-dialog/change-customer-confirm-dialog.component\";\r\nclass State extends BaseOptionState {\r\n CurrentCustomerID: number;\r\n CustomerID: number;\r\n SidePanelPageComponentName: string;\r\n IsShowAlertForExistingCustomerWithCart: boolean;\r\n ShoppingCartDescription: ShoppingCartDescriptionResult;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-select-customer-dropdown',\r\n templateUrl: './select-customer-dropdown.component.html',\r\n styleUrls: ['./select-customer-dropdown.component.scss']\r\n})\r\nexport class SelectCustomerDropdownComponent extends BaseCustomerComponent {\r\n @Input() IsReadOnly = false;\r\n @ViewChild(ChangeCustomerConfirmDialogComponent) messageDialog: ChangeCustomerConfirmDialogComponent;\r\n\r\n private isInternalChange = false;\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private shoppingCartService: ShoppingCartService,\r\n public customerService: CustomerService) {\r\n super(A, 'SelectCustomerDropdownComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.DataSources['Customers'] = new DataSourceCustomAction(\r\n\t\t\t(opts) => this.customerEndpoint.GetAvailableForSalesPerson(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false\r\n\t\t);\r\n\r\n const pageSidePanelState$Subscription = this.A.SysEvents.PageSidePanelState\r\n .subscribe(s => {\r\n this.State.SidePanelPageComponentName = s.pageComponentName;\r\n });\r\n\r\n this.RegisterSubscription(pageSidePanelState$Subscription);\r\n\r\n const shoppingCartDescription$Subscription = this.shoppingCartService.description$\r\n .subscribe(s => {\r\n this.State.ShoppingCartDescription = (s != null && s.Length > 0) ? s : null;\r\n });\r\n\r\n this.RegisterSubscription(shoppingCartDescription$Subscription);\r\n\r\n // Load the IsShowAlertForExistingCustomerWithCart setting\r\n this.State.IsShowAlertForExistingCustomerWithCart = this.customerService.GetSalesPersonOption().IsShowAlertForExistingCustomerWithCart;\r\n }\r\n\r\n override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) { \r\n this.State.CurrentCustomerID = currentCustomerID;\r\n this.State.CustomerID = currentCustomerID;\r\n }\r\n\r\n private ReturnToPreviousCustomer() {\r\n // Set the flag before changing the value\r\n this.isInternalChange = true;\r\n // Revert to the previous customer\r\n this.State.CustomerID = this.State.CurrentCustomerID;\r\n }\r\n\r\n OnCurrentCustomerChanged() {\r\n if (this.isInternalChange) {\r\n this.isInternalChange = false;\r\n return;\r\n }\r\n\r\n if (this.State.IsShowAlertForExistingCustomerWithCart && this.State.CurrentCustomerID && this.State.ShoppingCartDescription) {\r\n this.messageDialog.ShowDialogShort((result) => {\r\n if (result === 1) {\r\n // Switch customer and clear cart\r\n this.shoppingCartService.removeCurrentShoppingCart().subscribe({\r\n next: () => {\r\n this.ChangeCustomer();\r\n },\r\n error: () => {\r\n this.ReturnToPreviousCustomer();\r\n }\r\n });\r\n } else if (result === 2) {\r\n // Switch customer and keep cart\r\n this.ChangeCustomer();\r\n } else {\r\n this.ReturnToPreviousCustomer();\r\n }\r\n },\r\n () => { \r\n // Cancel handler\r\n this.ReturnToPreviousCustomer();\r\n });\r\n } else {\r\n this.ChangeCustomer();\r\n }\r\n }\r\n\r\n ChangeCustomer() {\r\n this.customerService.SetCustomer(this.State.CustomerID);\r\n if (!this.State.CustomerID) {\r\n this.A.SysEvents.SetPageSidePanelState(this.State.SidePanelPageComponentName, false);\r\n this.A.SysEvents.SetPageSidePanelState('ProductCatalogue2Component', false);\r\n }\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.CardCode}}
\\r\\n
{{data.CardName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { Customer } from \"@dino-proxy/entities/customer.entity\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BaseCustomerPageComponent } from \"@dino-classes/base-customer-page-component\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { DxDataGridComponent, DxListComponent } from \"devextreme-angular\";\r\nimport { CustomersGridComponent } from \"@dino-pages/customers/customers-grid/customers-grid.component\";\r\nimport { GetNewObjectPath, ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\nclass State extends BaseOptionState {\r\n Customers: Customer[] = [];\r\n IsMobile: boolean = false;\r\n CustomersForSelection: Customer[] = [];\r\n SearchText: string = '';\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-select-customer-popup',\r\n templateUrl: './select-customer-popup.component.html',\r\n styleUrls: ['./select-customer-popup.component.scss']\r\n})\r\nexport class SelectCustomerPopupComponent extends BaseCustomerPageComponent {\r\n @ViewChild(CustomersGridComponent) grid: CustomersGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\r\n public customerService: CustomerService) {\r\n super(A, \"SelectCustomerPopupComponent\", BaseEntity, State, customerService, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.DataSources[\"Customers\"] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetAvailableForSalesPerson(opts),\r\n null,\r\n null,\r\n false);\r\n }\r\n\r\n OnSelectCustomer(customerEntryID: number) {\r\n this.customerService.SetCustomer(customerEntryID)\r\n .subscribe(() => {\r\n this.ClosePage();\r\n });\r\n }\r\n\r\n onAddCustomer() {\r\n if (!this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n return;\r\n }\r\n this.Navigate([GetNewObjectPath(ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW)], { SelectAfterCreation: true} );\r\n }\r\n\r\n onSearch(value) {\r\n this.State.SearchText = value;\r\n if (!this.State.IsMobile) {\r\n (this.grid.gridAny as DxDataGridComponent).instance.searchByText(value);\r\n }\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'btnNewCustomer' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { SelectCustomerPopupComponent } from \"../select-customer-popup/select-customer-popup.component\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\n\r\nclass State extends BaseOptionState {\r\n IsMobile: boolean = false;\r\n Title: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-select-customer-info',\r\n templateUrl: './select-customer-info.component.html',\r\n styleUrls: ['./select-customer-info.component.scss']\r\n})\r\nexport class SelectCustomerInfoComponent extends BaseCustomerComponent {\r\n @ViewChild(SelectCustomerPopupComponent) selectCustomerPopup: SelectCustomerPopupComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public customerService: CustomerService) {\r\n super(A, \"SelectCustomerInfoComponent\", State, customerService);\r\n }\r\n\r\n HandleSelectCustomer() {\r\n this.selectCustomerPopup.ShowDialogShort(() => { });\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n const hours = (new Date()).getHours();\r\n const userName = this.A.Session.DisplayUserName?.substring(0, 25);\r\n if (hours >= 0 && hours < 11)\r\n this.State.Title = this.RC('lblSalesPersonWelcomeMorning', userName);\r\n else if (hours >= 11 && hours < 16)\r\n this.State.Title = this.RC('lblSalesPersonWelcomeAfternoon', userName);\r\n else if (hours >= 16 && hours < 20)\r\n this.State.Title = this.RC('lblSalesPersonWelcomeEvening', userName);\r\n else\r\n this.State.Title = this.RC('lblSalesPersonWelcomeNight', userName);\r\n }\r\n}","export default \"
\\r\\n \\r\\n
{{State.Title}}
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DxListComponent } from 'devextreme-angular';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-select-customer-mobile-list',\r\n\ttemplateUrl: './select-customer-mobile-list.component.html',\r\n\tstyleUrls: ['./select-customer-mobile-list.component.scss']\r\n})\r\nexport class SelectCustomerMobileListComponent extends BaseComponent {\r\n\t@Input() DataSource: DataSourceCustomAction;\r\n\t@Input()\r\n set SearchText(value: string) {\r\n if (this.customersList) {\r\n\t\t\tthis.customersList.searchValue = value;\r\n }\r\n };\r\n\r\n @Output() OnCustomerSelect = new EventEmitter();\r\n\r\n\t@ViewChild('customersList') customersList: DxListComponent;\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tprivate restrictedNavigationService: RestrictedNavigationService) {\r\n\t\tsuper(A, 'SelectCustomerMobileListComponent', State);\r\n\t}\r\n\r\n OnRowClick(entryID: number) {\r\n this.OnCustomerSelect.emit(entryID);\r\n }\r\n\r\n\tOnNavigate(event: any, entryID: number) {\r\n\t\tif (event && event.stopPropagation) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\r\n\t\tthis.restrictedNavigationService.RestrictedNavigate(\r\n\t\t\tROUTE_PATHS.CUSTOMER_DETAILS_WINDOW,\r\n\t\t\t(route) => this.Navigate([route, entryID])\r\n\t\t);\r\n\t}\r\n}\r\n","export default \"\\r\\n\\r\\n\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{customer.CardName}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{customer.CardCode}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{'lblTradeLicenseNumber' | RC:THIS}}: {{customer.TradeLicenseNumber || '–'}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t
\\r\\n\\t\\t\\t\\t
\\r\\n\\t\\t\\t\\t\\t{{'lblViewDetails' | RC:THIS}}\\r\\n\\t\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{customer.Email}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{customer.SearchKeywords}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t
\\r\\n\\t\\t\\t\\t{{customer.PhoneNumber1}}\\r\\n\\t\\t\\t
\\r\\n\\r\\n\\t\\t
\\r\\n\\t
\\r\\n\\r\\n
\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BaseCustomerComponent } from \"@dino-classes/base-customer-component\";\r\nimport { GenericListEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { SalesPersonEndpoint } from \"@dino-proxy/endpoints/salesperson.endpoint\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { DocumentService } from \"@dino-services/document.service\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\nclass State extends BaseOptionState {\r\n CreateDocumentButtons: GenericListEntity[] = [];\r\n IsMobile: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-select-document-type',\r\n templateUrl: './select-document-type.component.html',\r\n styleUrls: ['./select-document-type.component.scss']\r\n})\r\nexport class SelectDocumentTypeComponent extends BaseCustomerComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n public customerService: CustomerService,\r\n public documentService: DocumentService,\r\n public salesPersonEndpoint: SalesPersonEndpoint,\r\n public shoppingCartService: ShoppingCartService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, \"SelectDocumentTypeComponent\", State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.State.CustomerOption.FeatureOption.IsEnableCatalogue) return;\r\n\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.CreateDocumentButtons = this.LIST('EnumDocumentTypes');\r\n this.State.CreateDocumentButtons = this.State.CreateDocumentButtons.filter(x => this.documentService.IsDocumentTypeAvailable(x.Value as EnumDocumentTypes).IsAllowNew);\r\n\r\n if (this.State.CustomerOption?.PaymentOption?.IsAllowReceiptAdd) {\r\n this.State.CreateDocumentButtons.push({\r\n Text: this.RC('btnReceipt'),\r\n Value: 'receipt',\r\n SortOrder: 8\r\n } as GenericListEntity);\r\n }\r\n }\r\n\r\n HandleDocumentType(type: EnumDocumentTypes | 'receipt') {\r\n if (type === 'receipt') {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CREATE_RECEIPT,\r\n (route) => this.Navigate([route])\r\n );\r\n return;\r\n }\r\n\r\n this.shoppingCartService.createShoppingCartByDocumentType(type);\r\n }\r\n}","export default \"
\\r\\n \\r\\n
{{'lblChooseDocumentType' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SalesObjectBase extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesObjectBase';\r\n }\r\n \r\n public CustomerCode: string; \r\n public CustomerName: string; \r\n public CustomerID: number; \r\n public ItemCode: string; \r\n public ItemName: string; \r\n public ItemID: number; \r\n public CategoryID: number; \r\n public CategoryName: string; \r\n public CustomerGroupID: number; \r\n public CustomerGroupName: string; \r\n public SaleQuantity: number; \r\n public SaleTotal: number; \r\n public SalesPersonID: number; \r\n public SalesPersonName: string; \r\n public SalePeriodPartID: number; \r\n public SalePeriodPartName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SalesObjectBase } from './../entities/salesobjectbase.entity';\r\nimport { EnumDocumentTypes } from './../enums';\r\nexport class SalesDataBase extends SalesObjectBase {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesDataBase';\r\n }\r\n \r\n public DocumentNumber: string; \r\n public DocumentType: EnumDocumentTypes; \r\n public DocDate: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { SalesDataBase } from '@dino-proxy/entities/salesdatabase.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-data-grid',\r\n templateUrl: './sales-data-grid.component.html'\r\n})\r\nexport class SalesDataGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private customerService: CustomerService) {\r\n super(A, 'SalesDataGridComponent', SalesDataBase, State);\r\n }\r\n \r\n OnNavigate(e) {\r\n if (this.customerService.IsCurrentUserAdmin()) return;\r\n \r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.EntryID, DocumentType: e.data.DocumentType });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.CustomerCode }} - {{ cell.data.CustomerName }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.ItemCode }} - {{ cell.data.ItemName }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.data.SaleTotal | formatNumberSum }} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerGroup } from './../entities/customergroup.entity';\r\n@Injectable()\r\nexport class CustomerGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomerGroup\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { DataSourceCustomAction, DataSourceEndpointCRUD, ServerSideDataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs/internal/operators/filter';\r\nimport { SalePeriodEndpoint } from '@dino-proxy/endpoints/saleperiod.endpoint';\r\nimport { SalePeriod, SalePeriodPart } from '@dino-proxy/entities/saleperiod.entity';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { CustomerGroupEndpoint } from '@dino-proxy/endpoints/customergroup.endpoint';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumSaleTargetDimensions } from '@dino-proxy/enums';\r\nimport { SalesTargetReportType } from '../../base/base-sale-targets';\r\nimport { Item } from '@dino-proxy/entities/item.entity';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\n\r\nexport class SalesTargetFilterValues {\r\n SalePeriodID: number;\r\n SalePeriodPartUniqueIDs: number[] = [];\r\n SalesPersonIDs: number[] = [];\r\n CustomerGroupIDs: number[] = [];\r\n CustomerIDs: number[] = [];\r\n CategoryIDs: number[] = [];\r\n ItemIDs: number[] = [];\r\n SaleTargetDimensions: EnumSaleTargetDimensions[] = [];\r\n IsGroupBySalePeriod: boolean;\r\n //\r\n Action?: SalesTargetFilterAction;\r\n SalePeriodParts: SalePeriodPart[] = [];\r\n Mode: SalesTargetFilterMode;\r\n}\r\n\r\nexport type SalesTargetFilterAction = 'apply' | 'clear';\r\nexport type SalesTargetFilterActionPayload = { Action: SalesTargetFilterAction };\r\nexport type SalesTargetFilterMode = 'general' | 'quick';\r\n\r\nclass State extends BaseState {\r\n SalesPersons: SalesPerson[] = [];\r\n SalePeriods: SalePeriod[] = [];\r\n SaleTargetDimensions: GenericListEntity[] = [];\r\n IsDesktop: boolean;\r\n IsCurrentUserAdmin: boolean;\r\n IsCurrentUserSalesPerson: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-target-filter',\r\n templateUrl: './sales-target-filter.component.html',\r\n styleUrls: ['./sales-target-filter.component.scss']\r\n})\r\nexport class SalesTargetFilterComponent extends BaseCustomerComponent {\r\n @Input() Filter: SalesTargetFilterValues;\r\n @Input() Mode: SalesTargetFilterMode = 'general';\r\n @Input() Type: SalesTargetReportType = 'summary';\r\n @Output() OnFilterValuesChanged = new EventEmitter();\r\n @Output() OnIsGroupBySalePeriodChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private uiComponentService: UiComponentService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private salePeriodEndpoint: SalePeriodEndpoint,\r\n private categoryEndpoint: CategoryEndpoint,\r\n private customerGroupEndpoint: CustomerGroupEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'SalesTargetFilterComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsDesktop = this.A.Screen.IsDesktop();\r\n this.State.IsCurrentUserAdmin = this.customerService.IsCurrentUserAdmin();\r\n this.State.IsCurrentUserSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n this.LoadOptions();\r\n\r\n const onUiEventFiredSubs = this.uiComponentService.onUiEventFired$\r\n .pipe(filter(e => e.EventName === UI_EVENTS.SALES_SUMMARY_FILTER_ACTION))\r\n .subscribe(e => {\r\n const payload = e.Payload as SalesTargetFilterActionPayload;\r\n if (payload.Action === 'apply') {\r\n // \r\n } else if (payload.Action === 'clear') {\r\n //\r\n }\r\n });\r\n this.RegisterSubscription(onUiEventFiredSubs);\r\n }\r\n\r\n LoadOptions() {\r\n this.State.SaleTargetDimensions = this.LIST('SaleTargetDimensions');\r\n this.State.SaleTargetDimensions.find(x => x.Value === EnumSaleTargetDimensions.All).Text = this.RC('lblSaleTargetFilterDimensionAllSalesPersons');\r\n\r\n this.salePeriodEndpoint.GetList(null)\r\n .subscribe(r => {\r\n this.State.SalePeriods = r.Entities;\r\n if (this.State.SalePeriods?.length === 1) {\r\n this.Filter.SalePeriodID = this.State.SalePeriods[0].EntryID;\r\n } else if (this.State.SalePeriods?.length > 1) {\r\n const now = new Date();\r\n const currentPeriod = this.State.SalePeriods.find(x => now >= x.StartDate && now <= x.EndDate);\r\n if (currentPeriod) this.Filter.SalePeriodID = currentPeriod.EntryID;\r\n }\r\n\r\n if (this.Filter.SalePeriodID) this.HandleSalePeriodChange(true, true);\r\n });\r\n\r\n if (this.State.IsCurrentUserAdmin) {\r\n if (this.State.IsDesktop) {\r\n this.DataSources['SalesPersons'] = new DataSourceCustomAction((options: DataLoadOptions) => this.salesPersonEndpoint.GetList(options),\r\n entryID => this.salesPersonEndpoint.Get(entryID),\r\n null,\r\n false);\r\n } else {\r\n this.salesPersonEndpoint.GetListShallow()\r\n .subscribe(response => this.State.SalesPersons = response.Entities);\r\n }\r\n }\r\n\r\n if (this.State.IsCurrentUserAdmin || this.State.IsCurrentUserSalesPerson) {\r\n this.DataSources[\"Customers\"] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n }\r\n\r\n this.DataSources[\"Items\"] = new DataSourceCustomAction((opts) => this.itemsEndpoint.GetItemsLite(opts),\r\n (value: number) => this.itemsEndpoint.GetItemLiteByID(value),\r\n null,\r\n false);\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction((options: DataLoadOptions) => this.categoryEndpoint.GetAllCategories(options),\r\n entryID => this.categoryEndpoint.GetCategoryByID(entryID),\r\n undefined,\r\n false);\r\n\r\n this.DataSources['CustomerGroups'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerGroupEndpoint.GetList(options),\r\n entryID => this.customerGroupEndpoint.Get(entryID),\r\n undefined,\r\n false);\r\n }\r\n\r\n HandleSalePeriodChange(e?, emitFilterChange = true) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.Filter.SalePeriodPartUniqueIDs = [];\r\n this.Filter.SalePeriodParts = [];\r\n\r\n if (this.Filter.SalePeriodID) {\r\n const salePeriod = this.State.SalePeriods.find(x => x.EntryID === this.Filter.SalePeriodID);\r\n if (salePeriod) {\r\n this.Filter.SalePeriodParts = salePeriod.SalePeriodParts;\r\n }\r\n }\r\n\r\n emitFilterChange && this.HandleFilterChanged(e);\r\n }\r\n\r\n HandleFilterChanged(e?) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.OnFilterValuesChanged.emit(this.cloneFilter());\r\n }\r\n\r\n HandleSalesPersonFilterChanged(e?) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n const saleTargetDimensions = this.LIST('SaleTargetDimensions');\r\n const std = this.State.SaleTargetDimensions?.find(x => x.Value === EnumSaleTargetDimensions.All);\r\n if (std) {\r\n std.Text = this.Filter?.SalesPersonIDs?.length\r\n ? this.RC('lblSaleTargetFilterDimensionAllSalesPersons')\r\n : this.RC('lblSaleTargetFilterDimensionAllSalesPersons');\r\n }\r\n this.State.SaleTargetDimensions = saleTargetDimensions;\r\n\r\n this.HandleFilterChanged(e);\r\n }\r\n\r\n HandleSaleTargetDimensionChanged(e?) {\r\n if (!this.IsUIEvent(e)) return;\r\n if (this.Type !== 'performance') return;\r\n\r\n const singleSaleTargetDimension = (this.Filter.SaleTargetDimensions?.length === 1) ? this.Filter.SaleTargetDimensions[0] : null;\r\n\r\n switch (singleSaleTargetDimension) {\r\n case EnumSaleTargetDimensions.All:\r\n // \r\n break;\r\n case EnumSaleTargetDimensions.CustomerGroup:\r\n this.Filter.CustomerGroupIDs = [];\r\n break;\r\n case EnumSaleTargetDimensions.Customer:\r\n this.Filter.CustomerIDs = [];\r\n break;\r\n case EnumSaleTargetDimensions.Category:\r\n this.Filter.CategoryIDs = [];\r\n break;\r\n case EnumSaleTargetDimensions.Item:\r\n this.Filter.ItemIDs = [];\r\n break;\r\n }\r\n\r\n this.HandleFilterChanged(true);\r\n }\r\n\r\n IsPerformansTargetContolAvailable(dimension: EnumSaleTargetDimensions) {\r\n const singleSaleTargetDimension = (this.Filter.SaleTargetDimensions?.length === 1) ? this.Filter.SaleTargetDimensions[0] : null;\r\n if (!singleSaleTargetDimension) return false;\r\n\r\n return (this.Type === 'performance' && singleSaleTargetDimension === dimension);\r\n }\r\n\r\n HandleIsGroupBySalePeriodChanged(e?) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.OnIsGroupBySalePeriodChanged.emit(this.Filter.IsGroupBySalePeriod);\r\n }\r\n\r\n GetItemDisplayName = (item: Item) => item && `${item.ItemCode} - ${item.ItemName}`;\r\n GetCustomerDisplayName = (customer: Customer) => customer && `${customer.CardCode} - ${customer.CardName}`;\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) { }\r\n\r\n private cloneFilter() {\r\n return { ...this.Filter, Mode: this.Mode } as SalesTargetFilterValues;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
{{data.CardCode}}
\\r\\n
{{data.CardName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSaleTargetDimensions } from './../enums';\r\nimport { EnumSaleTargetMeasures } from './../enums';\r\nexport class SaleTargetPerformanceBase extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaleTargetPerformanceBase';\r\n }\r\n \r\n public SalePeriodID: number; \r\n public TargetID: number; \r\n public SalesPersonID: number; \r\n public SalesPersonName: string; \r\n public SalePeriodPartID: number; \r\n public SalePeriodPartName: string; \r\n public TargetSalesPersonID: number; \r\n public TargetSalesPersonName: string; \r\n public TargetCustomerCardCode: string; \r\n public TargetCustomerCardName: string; \r\n public TargetCustomerID: number; \r\n public TargetItemCode: string; \r\n public TargetItemName: string; \r\n public TargetItemID: number; \r\n public TargetCategoryID: number; \r\n public TargetCategoryName: string; \r\n public TargetCustomerGroupID: number; \r\n public TargetCustomerGroupName: string; \r\n public TargetDimension: EnumSaleTargetDimensions; \r\n public TargetDimensionID: number; \r\n public TargetMeasure: EnumSaleTargetMeasures; \r\n public TargetValue: number; \r\n public ActualValue: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { EnumSaleTargetDimensions } from '@dino-proxy/enums';\r\nimport { CellClickEvent, CellPreparedEvent, RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SaleTargetPerformanceBase } from '@dino-proxy/entities/saletargetperformancebase.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-target-performance-grid',\r\n templateUrl: './target-performance-grid.component.html',\r\n styleUrls: ['./target-performance-grid.component.scss']\r\n})\r\nexport class TargetPerformanceGridComponent extends BaseGridComponent {\r\n @Input() TargetDimensions: EnumSaleTargetDimensions[] = [];\r\n @Input() HidePeriodPartColumn: false;\r\n @Output() RowClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TargetPerformanceGridComponent', SaleTargetPerformanceBase, State);\r\n }\r\n\r\n OnRowClick(e: RowClickEvent) {\r\n if (e.rowType === 'data') {\r\n this.RowClick.emit(e.data);\r\n }\r\n }\r\n\r\n IsColumnAvailable(dimension: EnumSaleTargetDimensions) {\r\n if (!this.TargetDimensions) return false;\r\n return this.TargetDimensions.findIndex(x => x === dimension) !== -1;\r\n }\r\n\r\n CalculateSortValue(rowData: SaleTargetPerformanceBase) {\r\n if (rowData.TargetSalesPersonName)\r\n return rowData.TargetSalesPersonName;\r\n else if (rowData.TargetCustomerGroupName)\r\n return rowData.TargetCustomerGroupName;\r\n else if (rowData.TargetCustomerCardCode)\r\n return rowData.TargetCustomerCardCode;\r\n else if (rowData.TargetCategoryName)\r\n return rowData.TargetCategoryName;\r\n else if (rowData.TargetItemCode)\r\n return rowData.TargetItemCode;\r\n\r\n return '';\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n {{cell.data?.TargetSalesPersonName}}\\r\\n \\r\\n\\r\\n \\r\\n {{cell.data?.TargetCustomerGroupName}}\\r\\n \\r\\n\\r\\n \\r\\n {{cell.data?.TargetCustomerCardCode}} - {{cell.data?.TargetCustomerCardName}}\\r\\n \\r\\n\\r\\n \\r\\n {{cell.data?.TargetCategoryName}}\\r\\n \\r\\n\\r\\n \\r\\n {{cell.data?.TargetItemCode}} - {{cell.data?.TargetItemName}}\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n {{LISTITEM('SaleTargetDimensions', cell.data?.TargetDimension)}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ (cell.value || 0) | formatNumberSum }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ (cell.value || 0) | formatNumberSum }} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ (cell.value || 0) | formatNumberSum }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ (cell.value || 0) | formatNumberSum }} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
= 100}\\\">\\r\\n {{ cell.value }} %\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SaleTarget } from './../entities/saletarget.entity';\r\nimport { SaleTargetsGetSummaryResult } from './../entities/saletargetsgetsummaryresult.entity';\r\nimport { EnumSalesDocumentLayers } from './../enums';\r\nimport { SaleTargetsGetSummaryParams } from './../params/saletargetsgetsummary.param';\r\n@Injectable()\r\nexport class SaleTargetEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SaleTarget\", api);}\r\n\t\r\n\r\n public GetSummary(Params: SaleTargetsGetSummaryParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetSummary', Params, undefined );\r\n }\r\n\r\n public GetSalesDocumentLayer() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSalesDocumentLayer', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SalesDataBase } from './../entities/salesdatabase.entity';\r\nimport { DataParamsDescriptorResult } from './../entities/dataparamsdescriptorresult.entity';\r\nimport { SaleDataTotalsResult } from './../entities/saledatatotalsresult.entity';\r\nimport { SaleTargetsGetDataParams } from './../params/saletargetsgetdata.param';\r\n@Injectable()\r\nexport class SaleDataEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SaleData\", api);}\r\n\t\r\n\r\n public GetData(Params: SaleTargetsGetDataParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetData', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetDataParamsDescriptor(Params: SaleTargetsGetDataParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetDataParamsDescriptor', Params, undefined );\r\n }\r\n\r\n public GetTotals(Params: SaleTargetsGetDataParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTotals', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component } from \"@angular/core\";\r\nimport { BaseCustomerPageComponent } from \"@dino-classes/base-customer-page-component\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { SalesTargetFilterAction, SalesTargetFilterActionPayload, SalesTargetFilterValues } from \"../components/sales-target-filter/sales-target-filter.component\";\r\nimport { SalePeriod } from \"@dino-proxy/entities/saleperiod.entity\";\r\nimport { EnumSaleTargetDimensions, EnumSalesDocumentLayers } from \"@dino-proxy/enums\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { SaleTargetEndpoint } from \"@dino-proxy/endpoints/saletarget.endpoint\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { SaleDataEndpoint } from \"@dino-proxy/endpoints/saledata.endpoint\";\r\nimport { ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { SalesSummaryBase } from \"@dino-proxy/entities/salessummarybase.entity\";\r\nimport { SaleTargetPerformanceBase } from \"@dino-proxy/entities/saletargetperformancebase.entity\";\r\n\r\n\r\nclass State extends BaseOptionState {\r\n Filter: SalesTargetFilterValues;\r\n DisableFilterApply: boolean = true;\r\n Entities: SalesSummaryBase[] | SaleTargetPerformanceBase[] = [];\r\n SalePeriod: SalePeriod;\r\n SalesDocumentLayer: EnumSalesDocumentLayers;\r\n SaleTargetDimensions: EnumSaleTargetDimensions[] = [];\r\n SaleTargetPerformanceEntitiesRaw: SaleTargetPerformanceBase[] = [];\r\n SaleTargetPerformanceEntitiesGrouped: SaleTargetPerformanceBase[] = [];\r\n IsMobile: boolean;\r\n}\r\n\r\nexport type SalesTargetReportType = 'summary' | 'performance';\r\n\r\nexport function groupSaleTargetPerformanceEntitiesByPeriodPart(arr: SaleTargetPerformanceBase[]) {\r\n const helper = {};\r\n const result = arr.reduce(function (r, o) {\r\n const key = `${o.SalePeriodID}-${o.SalesPersonID}-${o.TargetCustomerGroupID}-\"${o.TargetCustomerID}-${o.TargetCategoryID}-${o.TargetItemID}-\"${o.TargetMeasure}`;\r\n\r\n if (!helper[key]) {\r\n helper[key] = Object.assign({}, o);\r\n r.push(helper[key]);\r\n } else {\r\n if (!helper[key].ActualValue) helper[key].ActualValue = 0;\r\n if (!helper[key].TargetValue) helper[key].TargetValue = 0;\r\n\r\n helper[key].ActualValue += o.ActualValue || 0;\r\n helper[key].TargetValue += o.TargetValue || 0;\r\n }\r\n\r\n return r;\r\n }, []);\r\n //\r\n //console.log(result);\r\n //\r\n return result;\r\n}\r\n\r\n@Component({\r\n selector: 'base-product-catalogue',\r\n template: '
'\r\n})\r\nexport abstract class BaseSalesTargetComponent extends BaseCustomerPageComponent {\r\n\r\n private FILTER_EVENT;\r\n\r\n constructor(A: ServiceBagService,\r\n public componentName: string,\r\n public saleDataEndpoint: SaleDataEndpoint,\r\n public uiComponentService: UiComponentService,\r\n public saleTargetEndpoint: SaleTargetEndpoint,\r\n customerService: CustomerService) {\r\n super(A, componentName, BaseEntity, State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.InitFilter(); \r\n\r\n this.saleTargetEndpoint.GetSalesDocumentLayer()\r\n .subscribe(r => {\r\n this.State.SalesDocumentLayer = r.Data;\r\n this.ReloadToolbar();\r\n });\r\n }\r\n\r\n private InitFilter() {\r\n this.State.Filter = new SalesTargetFilterValues();\r\n this.State.Filter.SaleTargetDimensions = (this.ReportType() !== 'performance' ) ? [EnumSaleTargetDimensions.All as any] : [];\r\n this.State.DisableFilterApply = !this.State.Filter?.SalePeriodID;\r\n }\r\n\r\n HandleFilterValuesChanged(e: SalesTargetFilterValues) {\r\n //\r\n console.log(e);\r\n //\r\n this.State.Filter = e;\r\n this.State.DisableFilterApply = !this.State.Filter?.SalePeriodID;\r\n\r\n if (!this.State.Filter?.SalePeriodID) return;\r\n\r\n if (this.State.Filter.Mode === 'quick') {\r\n this.OnApplyFilter();\r\n }\r\n }\r\n\r\n HandleFilterActionButton(action: SalesTargetFilterAction) {\r\n if (action === 'apply') {\r\n this.LoadDataSource();\r\n } else if (action === 'clear') {\r\n this.InitFilter();\r\n this.CleanupData();\r\n }\r\n }\r\n\r\n public abstract LoadDataSource();\r\n public abstract BaseTitle();\r\n public abstract ReportType(): SalesTargetReportType;\r\n\r\n protected CleanupData() {\r\n this.State.SalePeriod = null;\r\n this.State.Entities = [];\r\n this.State.SaleTargetDimensions = [];\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.HandleFilterActionButton('apply');\r\n this.uiComponentService.TriggerUiEvent(this.FILTER_EVENT, { Action: 'apply' } as SalesTargetFilterActionPayload);\r\n }\r\n\r\n override OnClearFilter() {\r\n this.HandleFilterActionButton('clear');\r\n this.uiComponentService.TriggerUiEvent(this.FILTER_EVENT, { Action: 'clear' } as SalesTargetFilterActionPayload);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true\r\n } as ToolbarSettings;\r\n }\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) { }\r\n\r\n override GetTitle() {\r\n let title = this.BaseTitle();\r\n if (this.State.SalesDocumentLayer) {\r\n const docTypes = this.LIST('SalesDocumentLayers');\r\n const docType = docTypes.find(x => x.Value === this.State.SalesDocumentLayer);\r\n title = `${title} / ${docType.Text}`;\r\n }\r\n return title;\r\n }\r\n\r\n protected customerCodeNameFn = (data: SalesSummaryBase | SaleTargetPerformanceBase) => {\r\n if (this.ReportType() === 'summary')\r\n return `${(data as SalesSummaryBase).CustomerCode} - ${(data as SalesSummaryBase).CustomerName}`;\r\n else\r\n return `${(data as SaleTargetPerformanceBase).TargetCustomerCardCode} - ${(data as SaleTargetPerformanceBase).TargetCustomerCardName}`;\r\n }\r\n\r\n protected itemCodeNameFn = (data: SalesSummaryBase | SaleTargetPerformanceBase) => {\r\n if (this.ReportType() === 'summary')\r\n return `${(data as SalesSummaryBase).ItemCode} - ${(data as SalesSummaryBase).ItemName}`;\r\n else\r\n return `${(data as SaleTargetPerformanceBase).TargetItemCode} - ${(data as SaleTargetPerformanceBase).TargetItemName}`;\r\n }\r\n}","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SaleTargetPerformanceBase } from './../entities/saletargetperformancebase.entity';\r\nimport { SaleTargetsGetSaleTargetPerformanceParams } from './../params/saletargetsgetsaletargetperformance.param';\r\n@Injectable()\r\nexport class SaleTargetPerformanceEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SaleTargetPerformance\", api);}\r\n\t\r\n\r\n public GetSaleTargetPerformance(Params: SaleTargetsGetSaleTargetPerformanceParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetSaleTargetPerformance', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { SaleTargetEndpoint } from '@dino-proxy/endpoints/saletarget.endpoint';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SaleTargetsGetDataParams } from '@dino-proxy/params/saletargetsgetdata.param';\r\nimport { SaleDataEndpoint } from '@dino-proxy/endpoints/saledata.endpoint';\r\nimport { BaseSalesTargetComponent, SalesTargetReportType, groupSaleTargetPerformanceEntitiesByPeriodPart } from '../base/base-sale-targets';\r\nimport { SaleTargetPerformanceEndpoint } from '@dino-proxy/endpoints/saletargetperformance.endpoint';\r\nimport { SaleTargetsGetSaleTargetPerformanceParams } from '@dino-proxy/params/saletargetsgetsaletargetperformance.param';\r\nimport { EnumSaleTargetDimensions } from '@dino-proxy/enums';\r\n\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SaleTargetPerformanceBase } from '@dino-proxy/entities/saletargetperformancebase.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-target-performance',\r\n templateUrl: './sale-target-performance.component.html',\r\n styleUrls: ['./sale-target-performance.component.scss']\r\n})\r\nexport class SaleTargetPerformanceComponent extends BaseSalesTargetComponent {\r\n constructor(A: ServiceBagService,\r\n saleDataEndpoint: SaleDataEndpoint,\r\n uiComponentService: UiComponentService,\r\n customerService: CustomerService,\r\n saleTargetEndpoint: SaleTargetEndpoint,\r\n private targetPerformanceEndpoint: SaleTargetPerformanceEndpoint) {\r\n super(A, 'SaleTargetPerformanceComponent', saleDataEndpoint, uiComponentService, saleTargetEndpoint, customerService);\r\n }\r\n\r\n BaseTitle() {\r\n return this.RC('Pages.SaleTargetPerformanceComponent');\r\n }\r\n\r\n ReportType(): SalesTargetReportType { return 'performance'; }\r\n\r\n protected override CleanupData() {\r\n super.CleanupData();\r\n\r\n this.State.SaleTargetPerformanceEntitiesRaw = [];\r\n this.State.SaleTargetPerformanceEntitiesGrouped = [];\r\n //this.DataSources['SaleTargetPerformance'] = null;\r\n }\r\n\r\n LoadDataSource() {\r\n this.CleanupData();\r\n\r\n const params = {\r\n SalePeriodID: this.State.Filter.SalePeriodID,\r\n SalePeriodPartUniqueIDs: this.State.Filter.SalePeriodPartUniqueIDs,\r\n SaleTargetDimensions: this.State.Filter.SaleTargetDimensions,\r\n SalesPersonIDs: this.State.Filter.SalesPersonIDs,\r\n IsGroupBySalePeriod: this.State.Filter.IsGroupBySalePeriod\r\n } as SaleTargetsGetSaleTargetPerformanceParams;\r\n\r\n const singleSaleTargetDimensions = (params.SaleTargetDimensions?.length === 1) ? params.SaleTargetDimensions[0] : null;\r\n\r\n switch (singleSaleTargetDimensions) {\r\n case EnumSaleTargetDimensions.All:\r\n\r\n break;\r\n case EnumSaleTargetDimensions.CustomerGroup:\r\n params.CustomerGroupIDs = this.State.Filter.CustomerGroupIDs;\r\n break;\r\n case EnumSaleTargetDimensions.Customer:\r\n params.CustomerIDs = this.State.Filter.CustomerIDs;\r\n break;\r\n case EnumSaleTargetDimensions.Category:\r\n params.CategoryIDs = this.State.Filter.CategoryIDs;\r\n break;\r\n case EnumSaleTargetDimensions.Item:\r\n params.ItemIDs = this.State.Filter.ItemIDs;\r\n break;\r\n }\r\n\r\n this.State.SaleTargetDimensions = this.State.Filter.SaleTargetDimensions;\r\n\r\n this.targetPerformanceEndpoint.GetSaleTargetPerformance(params, null)\r\n .subscribe(r => {\r\n this.State.SaleTargetPerformanceEntitiesRaw = r.Entities;\r\n this.ProcessEntities();\r\n });\r\n\r\n // this.DataSources['SaleTargetPerformance'] = new DataSourceCustomAction(\r\n // (options: DataLoadOptions) => this.targetPerformanceEndpoint.GetSaleTargetPerformance(params, options),\r\n // undefined,\r\n // undefined,\r\n // false);\r\n }\r\n\r\n HandleRowClick(data: SaleTargetPerformanceBase) {\r\n\r\n const params = {\r\n SalePeriodPartUniqueIDs: [data.SalePeriodPartID]\r\n } as SaleTargetsGetDataParams;\r\n\r\n switch (data.TargetDimension) {\r\n case EnumSaleTargetDimensions.All:\r\n params.SalesPersonIDs = [data.TargetSalesPersonID];\r\n break;\r\n case EnumSaleTargetDimensions.CustomerGroup:\r\n params.CustomerGroupIDs = [data.TargetCustomerGroupID];\r\n break;\r\n case EnumSaleTargetDimensions.Customer:\r\n params.CustomerIDs = [data.TargetCustomerID];\r\n break;\r\n case EnumSaleTargetDimensions.Category:\r\n params.CategoryIDs = [data.TargetCategoryID];\r\n break;\r\n case EnumSaleTargetDimensions.Item:\r\n params.ItemIDs = [data.TargetItemID];\r\n break;\r\n }\r\n\r\n let paramsStr = Utils.ConvertStringToBase64(JSON.stringify(params));\r\n this.Navigate(['pages/sales-data'], { FilterParams: paramsStr });\r\n\r\n }\r\n\r\n HandleIsGroupBySalePeriodChanged(e: boolean) {\r\n this.ProcessEntities();\r\n }\r\n\r\n ProcessEntities() {\r\n if (!this.State.SaleTargetPerformanceEntitiesRaw?.length) {\r\n this.State.SaleTargetPerformanceEntitiesGrouped = [];\r\n return;\r\n }\r\n\r\n if (!this.State.Filter.IsGroupBySalePeriod) {\r\n this.State.SaleTargetPerformanceEntitiesGrouped = this.State.SaleTargetPerformanceEntitiesRaw;\r\n } else {\r\n const grouped = groupSaleTargetPerformanceEntitiesByPeriodPart(this.State.SaleTargetPerformanceEntitiesRaw);\r\n this.State.SaleTargetPerformanceEntitiesGrouped = grouped;\r\n }\r\n\r\n this.RecalculateTargetExecutionPercent();\r\n }\r\n\r\n protected RecalculateTargetExecutionPercent() {\r\n this.State.SaleTargetPerformanceEntitiesGrouped.forEach(x => {\r\n (x as any).TargetExecutionPercent = this.getTargetExecutionPercent(x);\r\n });\r\n }\r\n\r\n protected getTargetExecutionPercent(data: SaleTargetPerformanceBase) {\r\n let actualValue = data.ActualValue;\r\n if (data.ActualValue == null) actualValue = 0;\r\n if (data.TargetValue === 0) return;\r\n return Utils.Round((actualValue / data.TargetValue) * 100);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SaleDataEndpoint } from '@dino-proxy/endpoints/saledata.endpoint';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SaleTargetsGetDataParams } from '@dino-proxy/params/saletargetsgetdata.param';\r\nimport { DataParamsDescriptorResult } from '@dino-proxy/entities/dataparamsdescriptorresult.entity';\r\nimport { SaleDataTotalsResult } from '@dino-proxy/entities/saledatatotalsresult.entity';\r\n\r\nclass State extends BaseState {\r\n DataParamsDescriptorResult: DataParamsDescriptorResult;\r\n SaleDataTotalsResult: SaleDataTotalsResult;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-summary',\r\n templateUrl: './sales-data.component.html',\r\n styleUrls: ['./sales-data.component.scss']\r\n})\r\nexport class SalesDataComponent extends BaseCustomerPageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private saleDataEndpoint: SaleDataEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'SalesDataComponent', BaseEntity, State, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n if (this.QueryParams.FilterParams) {\r\n const paramsStr = Utils.ConvertBase64ToString(this.QueryParams.FilterParams);\r\n const params = JSON.parse(paramsStr) as SaleTargetsGetDataParams;\r\n\r\n this.saleDataEndpoint.GetDataParamsDescriptor(params)\r\n .subscribe(r => {\r\n this.State.DataParamsDescriptorResult = r.Entity;\r\n this.ReloadToolbar();\r\n });\r\n\r\n this.saleDataEndpoint.GetTotals(params)\r\n .subscribe(r => {\r\n this.State.SaleDataTotalsResult = r.Entity;\r\n this.State.SaleDataTotalsResult.Quantity = Utils.Round(this.State.SaleDataTotalsResult.Quantity);\r\n this.State.SaleDataTotalsResult.Total = Utils.Round(this.State.SaleDataTotalsResult.Total);\r\n });\r\n\r\n this.DataSources['SalesData'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.saleDataEndpoint.GetData(params, options),\r\n undefined,\r\n undefined,\r\n false);\r\n }\r\n }\r\n\r\n override GetTitle() {\r\n let title = this.RC('Pages.SalesDataComponent');\r\n const dpd = this.State.DataParamsDescriptorResult;\r\n if (!dpd) return title;\r\n\r\n const titles: string[] = [];\r\n if (dpd.SalesPersons?.length) dpd.SalesPersons.forEach(x => titles.push(x.Name));\r\n if (dpd.CustomerGroups?.length) dpd.CustomerGroups.forEach(x => titles.push(x.GroupName));\r\n if (dpd.Customers?.length) dpd.Customers.forEach(x => titles.push(`${x.CardCode} - ${x.CardName}`));\r\n if (dpd.Categories) dpd.Categories.forEach(x => titles.push(x.Name));\r\n if (dpd.Items) dpd.Items.forEach(x => titles.push(`${x.ItemCode} - ${x.ItemName}`));\r\n dpd.SalePeriod.SalePeriodParts.forEach(x => titles.push(x.Name));\r\n\r\n title = `${title} / ${titles.join(', ')}`;\r\n return title;\r\n }\r\n\r\n override OnCustomerChanged() { }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{'lblSaleDataTotalsQuantity' | RC:THIS}}\\r\\n {{State?.SaleDataTotalsResult?.Quantity | formatNumberQuantity}}\\r\\n \\r\\n {{'lblSaleDataTotalsTotal' | RC:THIS}}\\r\\n {{State?.SaleDataTotalsResult?.Total}} {{ Framework?.CompanyInfo?.CurrencySystem }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { SaleTargetEndpoint } from '@dino-proxy/endpoints/saletarget.endpoint';\r\nimport { SaleTargetsGetSummaryParams } from '@dino-proxy/params/saletargetsgetsummary.param';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport PivotGridDataSource, { Options as DataSourceConfig, Field } from 'devextreme/ui/pivot_grid/data_source';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { CellClickEvent } from 'devextreme/ui/pivot_grid_types';\r\nimport { SaleTargetsGetDataParams } from '@dino-proxy/params/saletargetsgetdata.param';\r\nimport { SaleDataEndpoint } from '@dino-proxy/endpoints/saledata.endpoint';\r\nimport { BaseSalesTargetComponent, SalesTargetReportType } from '../base/base-sale-targets';\r\nimport { SalePeriod } from '@dino-proxy/entities/saleperiod.entity';\r\nimport { SalesSummaryBase } from '@dino-proxy/entities/salessummarybase.entity';\r\n\r\nclass SalesSummaryProjection {\r\n public SalePeriodName: number | string;\r\n public CustomerName: number | string;\r\n public ItemName: number | string;\r\n public CategoryName: number | string;\r\n public CustomerGroupName: number | string;\r\n public SalesPersonName: number | string;\r\n public SaleQuantity: number;\r\n public SaleTotal: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-summary',\r\n templateUrl: './sales-summary.component.html',\r\n styleUrls: ['./sales-summary.component.scss']\r\n})\r\nexport class SalesSummaryComponent extends BaseSalesTargetComponent {\r\n gridDataSource: PivotGridDataSource;\r\n\r\n constructor(A: ServiceBagService,\r\n saleDataEndpoint: SaleDataEndpoint,\r\n uiComponentService: UiComponentService,\r\n customerService: CustomerService,\r\n saleTargetEndpoint: SaleTargetEndpoint) {\r\n super(A, 'SalesSummaryComponent', saleDataEndpoint, uiComponentService, saleTargetEndpoint, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n this.BuildDataGrid([], {} as SalePeriod);\r\n }\r\n\r\n BaseTitle() {\r\n return this.RC('Pages.SalesSummaryComponent');\r\n }\r\n\r\n ReportType(): SalesTargetReportType { return 'summary'; }\r\n\r\n protected override CleanupData() {\r\n super.CleanupData();\r\n this.gridDataSource = null;\r\n }\r\n\r\n LoadDataSource() {\r\n this.CleanupData();\r\n\r\n const params = {\r\n SalePeriodID: this.State.Filter.SalePeriodID,\r\n SalePeriodPartUniqueIDs: this.State.Filter.SalePeriodPartUniqueIDs,\r\n SalesPersonIDs: this.State.Filter.SalesPersonIDs,\r\n CustomerGroupIDs: this.State.Filter.CustomerGroupIDs,\r\n CustomerIDs: this.State.Filter.CustomerIDs,\r\n CategoryIDs: this.State.Filter.CategoryIDs,\r\n ItemIDs: this.State.Filter.ItemIDs,\r\n } as SaleTargetsGetSummaryParams;\r\n\r\n this.saleTargetEndpoint.GetSummary(params)\r\n .subscribe(r => {\r\n this.BuildDataGrid(r.Entity?.SalesSummaries, r.Entity?.SalePeriod);\r\n });\r\n }\r\n\r\n protected BuildDataGrid(entities: SalesSummaryBase[], salePeriod: SalePeriod) {\r\n if (!entities) return;\r\n\r\n this.State.Entities = entities;\r\n this.State.SalePeriod = salePeriod;\r\n\r\n let fields: Field[] = [];\r\n const _state = this.State;\r\n const _entities = this.State.Entities as SalesSummaryBase[];\r\n const projection = this.GetDataProjection(_entities);\r\n const getNameById = (keyField, nameField: string | ((r: any) => string)) => {\r\n return function (cellInfo) {\r\n if (!cellInfo) return;\r\n const row = _entities.find(x => x[keyField] == cellInfo.value);\r\n if (!row) return '';\r\n\r\n if (typeof nameField === 'string')\r\n return row[nameField];\r\n else if (typeof nameField === 'function')\r\n return nameField(row);\r\n\r\n return '';\r\n }\r\n };\r\n\r\n // this field contains SalePeriodPartUniqueID\r\n fields.push({\r\n name: 'SalePeriodName',\r\n dataField: 'SalePeriodName',\r\n area: 'column',\r\n customizeText: function (cellInfo) {\r\n if (!cellInfo) return;\r\n const part = _state.SalePeriod.SalePeriodParts.find(x => x.SalePeriodPartUniqueID == cellInfo.value);\r\n return part?.Name;\r\n }\r\n });\r\n\r\n if (this.IsSalesPerson) {\r\n\r\n // const salesPersonIDGroups = Utils.GroupBy(this.State.Entities, x => x.SalesPersonID);\r\n // if (salesPersonIDGroups.size > 1) {\r\n fields.push({\r\n name: 'SalesPersonName',\r\n dataField: 'SalesPersonName',\r\n area: 'row',\r\n customizeText: getNameById(this.GetFieldNameByProjectionName('SalesPersonName'), 'SalesPersonName')\r\n });\r\n // }\r\n\r\n // const customerGroupIDGroups = Utils.GroupBy(this.State.Entities, x => x.CustomerGroupID);\r\n // if (customerGroupIDGroups.size > 1) {\r\n fields.push({\r\n name: 'CustomerGroupName',\r\n dataField: 'CustomerGroupName',\r\n area: 'row',\r\n customizeText: getNameById(this.GetFieldNameByProjectionName('CustomerGroupName'), 'CustomerGroupName')\r\n });\r\n // }\r\n\r\n // const customerIDGroups = Utils.GroupBy(this.State.Entities, x => x.CustomerID);\r\n // if (customerIDGroups.size) {\r\n fields.push({\r\n name: 'CustomerName',\r\n dataField: 'CustomerName',\r\n area: 'row',\r\n customizeText: getNameById(this.GetFieldNameByProjectionName('CustomerName'), this.customerCodeNameFn)\r\n });\r\n // }\r\n }\r\n\r\n fields.push({\r\n name: 'CategoryName',\r\n dataField: 'CategoryName',\r\n area: 'row',\r\n customizeText: getNameById(this.GetFieldNameByProjectionName('CategoryName'), 'CategoryName')\r\n });\r\n\r\n fields.push({\r\n name: 'ItemName',\r\n dataField: 'ItemName',\r\n area: 'row',\r\n customizeText: getNameById(this.GetFieldNameByProjectionName('ItemName'), this.itemCodeNameFn)\r\n });\r\n\r\n fields = [...fields, {\r\n caption: this.RC('BL.SaleSummaryBase.SaleQuantity'),\r\n name: 'SaleQuantity',\r\n dataField: 'SaleQuantity',\r\n dataType: 'number',\r\n summaryType: 'sum',\r\n format: 'fixedPoint',\r\n area: 'data',\r\n }, {\r\n caption: this.RC('BL.SaleSummaryBase.SaleTotal'),\r\n name: 'SaleTotal',\r\n dataField: 'SaleTotal',\r\n dataType: 'number',\r\n summaryType: 'sum',\r\n format: (value) => {\r\n return `${formatNumber(value, this.F.NumberPrice).toString()} ${this.F.CurrencySystem}`;\r\n },\r\n area: 'data',\r\n }];\r\n\r\n this.gridDataSource = new PivotGridDataSource({\r\n fields: fields,\r\n store: projection.length ? projection : null //this.State.Entities,\r\n });\r\n }\r\n\r\n HandleSummaryCellClick(e: CellClickEvent) {\r\n if (e.area !== 'data' || !this.State.SalePeriod?.SalePeriodParts) return;\r\n\r\n const params = {\r\n SalesPersonIDs: this.State.Filter.SalesPersonIDs,\r\n CustomerGroupIDs: this.State.Filter.CustomerGroupIDs,\r\n CustomerIDs: this.State.Filter.CustomerIDs,\r\n CategoryIDs: this.State.Filter.CategoryIDs,\r\n ItemIDs: this.State.Filter.ItemIDs,\r\n } as SaleTargetsGetDataParams;\r\n\r\n // IMPLEMENTATION via TEXT approach \r\n // if (e.cell.columnType === 'GT') {\r\n // params.SalePeriodPartUniqueIDs = (this.State.Filter.SalePeriodPartUniqueIDs?.length)\r\n // ? [...this.State.Filter.SalePeriodPartUniqueIDs]\r\n // : this.State.SalePeriod.SalePeriodParts.map(x => x.SalePeriodPartUniqueID);\r\n // } else {\r\n // const columnPathLenght = e.cell.columnPath.length;\r\n // const periodName = e.cell.columnPath[columnPathLenght - 1];\r\n // const period = this.State.SalePeriod.SalePeriodParts.find(x => x.SalePeriodPartUniqueID === periodName);\r\n // if (!period) return;\r\n // params.SalePeriodPartUniqueIDs = [period.SalePeriodPartUniqueID];\r\n // }\r\n\r\n // IMPLEMENTATION via ID approach\r\n // const salePeriodPartPathIdx = e.columnFields.findIndex(x => x.name === 'SalePeriodName');\r\n // if (salePeriodPartPathIdx === -1) { \r\n // this.UI.StopMessage(this.RC('lblSaleDataDetailPartIDRequiredError'));\r\n // return;\r\n // };\r\n\r\n if (e.cell.columnType === 'GT') {\r\n params.SalePeriodPartUniqueIDs = (this.State.Filter.SalePeriodPartUniqueIDs?.length)\r\n ? [...this.State.Filter.SalePeriodPartUniqueIDs]\r\n : this.State.SalePeriod.SalePeriodParts.map(x => x.SalePeriodPartUniqueID);\r\n } else {\r\n for (let idx = 0; idx < e.cell.columnPath.length; idx++) {\r\n const columnPathPart = e.cell.columnPath[idx];\r\n const cField = e.columnFields[idx];\r\n\r\n if (cField.name === 'SalePeriodName') {\r\n params.SalePeriodPartUniqueIDs = [columnPathPart as number];\r\n } else {\r\n const dataFieldId = this.GetFieldNameByProjectionName(cField.name);\r\n params[`${dataFieldId}s`] = [columnPathPart];\r\n }\r\n }\r\n }\r\n\r\n //IMPLEMENTATION via TEXT approach\r\n // for (let idx = 0; idx < e.cell.rowPath.length; idx++) {\r\n // const rowPathPart = e.cell.rowPath[idx];\r\n // const field = e.rowFields[idx];\r\n // const dataField = field.dataField;\r\n // let dataFieldId;\r\n\r\n\r\n\r\n // const firstDataRow = (this.State.Entities as SaleSummaryBase[]).find(x => {\r\n // let data = x[dataField];\r\n // // if (dataField === 'CustomerCode') {\r\n // // data = this.customerCodeNameFn({ CustomerCode: x.CustomerCode, CustomerName: x.CustomerName } as SaleSummaryBase);\r\n // // } else if (dataField === 'ItemCode') {\r\n // // data = this.itemCodeNameFn({ ItemCode: x.ItemCode, ItemName: x.ItemName } as SaleSummaryBase);\r\n // // }\r\n\r\n // return (data == rowPathPart);\r\n // });\r\n\r\n // let dataId;\r\n // if (firstDataRow) {\r\n // dataId = firstDataRow[dataFieldId];\r\n // params[`${dataFieldId}s`] = [dataId];\r\n // // if (!params[dataFieldId]) params[dataFieldId] = dataId;\r\n // }\r\n // }\r\n\r\n // IMPLEMENTATION via ID approach\r\n for (let idx = 0; idx < e.cell.rowPath.length; idx++) {\r\n const rowPathPart = e.cell.rowPath[idx];\r\n const rField = e.rowFields[idx];\r\n if (rField.name === 'SalePeriodName') {\r\n params.SalePeriodPartUniqueIDs = [rowPathPart as number];\r\n } else {\r\n const dataFieldId = this.GetFieldNameByProjectionName(rField.name);\r\n params[`${dataFieldId}s`] = [rowPathPart];\r\n }\r\n }\r\n\r\n if (!params.SalePeriodPartUniqueIDs?.length) {\r\n params.SalePeriodPartUniqueIDs = this.State.SalePeriod.SalePeriodParts.map(x => x.SalePeriodPartUniqueID);\r\n }\r\n\r\n //\r\n console.log(params);\r\n //\r\n\r\n let paramsStr = Utils.ConvertStringToBase64(JSON.stringify(params));\r\n this.Navigate(['pages/sales-data'], { FilterParams: paramsStr });\r\n }\r\n\r\n GetDataProjection(entities: SalesSummaryBase[]) {\r\n return entities.map(x => {\r\n return {\r\n SalePeriodName: x.SalePeriodPartID,\r\n CustomerName: x.CustomerID,\r\n ItemName: x.ItemID,\r\n CategoryName: x.CategoryID,\r\n CustomerGroupName: x.CustomerGroupID,\r\n SalesPersonName: x.SalesPersonID,\r\n SaleQuantity: x.SaleQuantity,\r\n SaleTotal: x.SaleTotal\r\n } as SalesSummaryProjection;\r\n });\r\n }\r\n\r\n GetFieldNameByProjectionName(projName: string) {\r\n switch (projName) {\r\n case 'SalesPeriodName': return 'SalesPeriodPartID';\r\n case 'SalesPersonName': return 'SalesPersonID';\r\n case 'CustomerGroupName': return 'CustomerGroupID';\r\n case 'CustomerName': return 'CustomerID';\r\n case 'CategoryName': return 'CategoryID';\r\n case 'ItemName': return 'ItemID';\r\n }\r\n return '_';\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Admin extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Admin';\r\n }\r\n \r\n public Name: string; \r\n public Email: string; \r\n public Phone: string; \r\n public IsActive: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Admin } from './../entities/admin.entity';\r\n@Injectable()\r\nexport class AdminEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Admin\", api);}\r\n\t\r\n}\r\n\r\n","import { Component } from \"@angular/core\";\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { Admin } from \"@dino-proxy/entities/admin.entity\";\r\nimport { AdminEndpoint } from \"@dino-proxy/endpoints/admin.endpoint\";\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { GetMenuPath, ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin',\r\n templateUrl: './admin.component.html'\r\n})\r\nexport class AdminComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: AdminEndpoint)\r\n {\r\n super(A, 'AdminComponent', Admin, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityInitObjectName()\r\n {\r\n return this.Entity && this.Entity.Name; \r\n }\r\n \r\n override OnEntitySaved()\r\n {\r\n if (!this.IsAddMode)\r\n {\r\n this.NavigateBack();\r\n return;\r\n }\r\n this.OnManageCredentials();\r\n }\r\n\r\n OnManageCredentials() {\r\n this.Navigate([\"/pages/passwordmanage\"], this.GetLinkParams());\r\n }\r\n\r\n GetLinkParams()\r\n {\r\n return { CredentialID: this.Entity.EntryID, Type: 0, ReturnUrl: GetMenuPath(ROUTE_PATHS.ADMINS) };\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Admin } from \"@dino-proxy/entities/admin.entity\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-grid',\r\n templateUrl: './admin-grid.component.html'\r\n})\r\nexport class AdminGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'AdminGridComponent', Admin, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e?.data?.EntryID) this.Navigate([ROUTE_PATHS.ADMIN, e.data.EntryID]);\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, WebAPICredential } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { Admin } from '@dino-proxy/entities/admin.entity';\r\nimport { AdminEndpoint } from '@dino-proxy/endpoints/admin.endpoint';\r\nimport { GetNewObjectPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-list',\r\n templateUrl: './admin-list.component.html'\r\n})\r\nexport class AdminListComponent extends BasePageComponent {\r\n\r\n NewAdminRoute: string = GetNewObjectPath(ROUTE_PATHS.ADMIN);\r\n\r\n constructor(A: ServiceBagService, private endpoint: AdminEndpoint)\r\n {\r\n super(A, 'AdminListComponent', Admin, BaseState);\r\n }\r\n\r\n override OnInitComponent()\r\n {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions)\r\n {\r\n if (ExternalEntityType == Admin || ExternalEntityType == WebAPICredential) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource()\r\n {\r\n this.DataSources['Admins'] = new DataSourceEndpointCRUD(this.endpoint, { sort: 'Name' });\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAttributesDisplayTabs } from './../enums';\r\nexport class AttributeGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AttributeGroup';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public DisplayTab: EnumAttributesDisplayTabs; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AttributeGroup } from '@dino-proxy/entities/attributegroup.entity';\r\n\r\nclass State extends BaseOptionState {\r\n DisplayTabs: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-attribute-groups-grid',\r\n templateUrl: './attribute-groups-grid.component.html'\r\n})\r\nexport class AttributeGroupsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AttributeGroupsGridComponent',AttributeGroup, State);\r\n }\r\n\r\n protected override OnInitComponent() { \r\n this.State.DisplayTabs = this.LIST(\"EnumAttributesDisplayTabs\");\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AttributeGroup } from './../entities/attributegroup.entity';\r\n@Injectable()\r\nexport class AttributeGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AttributeGroup\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServerSideDataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { AttributeGroupEndpoint } from '@dino-proxy/endpoints/attributegroup.endpoint';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-attribute-groups',\r\n templateUrl: './attribute-groups.component.html',\r\n styleUrls: ['./attribute-groups.component.scss']\r\n})\r\nexport class AttributeGroupsComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: AttributeGroupEndpoint) {\r\n super(A, 'AttributeGroupsComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['AttributeGroups'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactUsSubject } from './../entities/contactusoption.entity';\r\nimport { ActivityType } from './../entities/activitytype.entity';\r\nimport { SubjectType } from './../entities/subjecttype.entity';\r\nimport { SBOUser } from './../entities/sbouser.entity';\r\n@Injectable()\r\nexport class ContactUsSubjectEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ContactUsSubject\", api);}\r\n\t\r\n\r\n public GetActivityTypesList() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetActivityTypesList', undefined );\r\n }\r\n\r\n public GetSubjectTypesList() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSubjectTypesList', undefined );\r\n }\r\n\r\n public GetSBOUsersList() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSBOUsersList', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ContactUsSubject extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ContactUsSubject';\r\n }\r\n \r\n public NameHebrew: string; \r\n public NameEnglish: string; \r\n public Description: string; \r\n public ActivityTypeID: number; \r\n public SubjectTypeID: number; \r\n public SBOUserID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ContactUsSubjectEndpoint } from '@dino-proxy/endpoints/contactussubject.endpoint';\r\nimport { ActivityType } from '@dino-proxy/entities/activitytype.entity';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SubjectType } from '@dino-proxy/entities/subjecttype.entity';\r\nimport { SBOUser } from '@dino-proxy/entities/sbouser.entity';\r\nimport { ContactUsSubject } from '@dino-proxy/entities/contactussubject.entity';\r\n\r\nclass State extends BaseOptionState {\r\n ActivityTypes: ActivityType[];\r\n SubjectTypes: SubjectType[];\r\n SBOUsers: SBOUser[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-subjects-grid',\r\n templateUrl: './contact-us-subjects-grid.component.html'\r\n})\r\nexport class ContactUsSubjectsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private contactSubjectEndpoint: ContactUsSubjectEndpoint) {\r\n super(A, 'ContactUsSubjectsGridComponent', ContactUsSubject, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.contactSubjectEndpoint.GetActivityTypesList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.ActivityTypes = response.Entities;\r\n });\r\n this.Do(this.contactSubjectEndpoint.GetSubjectTypesList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.SubjectTypes = response.Entities;\r\n });\r\n this.Do(this.contactSubjectEndpoint.GetSBOUsersList(), false, (response: BaseEntitiesResponse) => {\r\n this.State.SBOUsers = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class HiddenItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'HiddenItem';\r\n }\r\n \r\n public ItemCode: string; \r\n public ItemName: string; \r\n public VatGroupCode: string; \r\n public IsVatLiable: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HiddenItem } from './../entities/hiddenitem.entity';\r\nexport class DepositGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DepositGroup';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public HiddenItemID: number; \r\n public HiddenItem: HiddenItem = new HiddenItem; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DepositGroup } from '@dino-proxy/entities/depositgroup.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-groups-grid',\r\n templateUrl: './deposit-groups-grid.component.html'\r\n})\r\nexport class DepositGroupsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DepositGroupsGridComponent', DepositGroup, State);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DepositGroup } from './../entities/depositgroup.entity';\r\n@Injectable()\r\nexport class DepositGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DepositGroup\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { DepositGroupEndpoint } from '@dino-proxy/endpoints/depositgroup.endpoint';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-groups',\r\n templateUrl: './deposit-groups.component.html',\r\n styleUrls: ['./deposit-groups.component.scss']\r\n})\r\nexport class DepositGroupsComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DepositGroupEndpoint) {\r\n super(A, 'DepositGroupsComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DepositGroups'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ExternalLink extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalLink';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public TitleEN: string; \r\n public TitleHE: string; \r\n public MenuNameEN: string; \r\n public MenuNameHE: string; \r\n public Icon: string; \r\n public Link: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ExternalLink } from '@dino-proxy/entities/externallink.entity';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-external-link-config',\r\n\ttemplateUrl: './external-link-config.component.html',\r\n\tstyleUrls: ['./external-link-config.component.scss']\r\n})\r\nexport class ExternalLinkConfigComponent extends BasePageCRUDComponent {\r\n\r\n\tCustomerOptionPage = 'pages/customer-option';\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: ExternalLinkEndpoint) {\r\n\t\tsuper(A, 'ExternalLinkConfigComponent', ExternalLink, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-link-config-list',\r\n templateUrl: './external-link-config-list.component.html'\r\n})\r\nexport class ExternalLinkConfigsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ExternalLinkEndpoint) {\r\n super(A, 'ExternalLinkConfigsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ExternalLinkConfigsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ExternalLink } from '@dino-proxy/entities/externallink.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-link-config-grid',\r\n templateUrl: './external-link-config-grid.component.html'\r\n})\r\nexport class ExternalLinkConfigsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ExternalLinkConfigsGridComponent', ExternalLink, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/external-link-config\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-query-grid',\r\n templateUrl: './external-query-grid.component.html'\r\n})\r\nexport class ExternalQueriesGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ExternalQueriesGridComponent', ExternalQuery, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/external-query-configs\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-query-list',\r\n templateUrl: './external-query-list.component.html'\r\n})\r\nexport class ExternalQueriesListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ExternalQueryEndpoint) {\r\n super(A, 'ExternalQueriesListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ExternalQueriesAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseOptionState {\r\n\tQueryTypes: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-external-query',\r\n\ttemplateUrl: './external-query.component.html',\r\n\tstyleUrls: ['./external-query.component.scss']\r\n})\r\nexport class ExternalQueryComponent extends BasePageCRUDComponent {\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: ExternalQueryEndpoint) {\r\n\t\tsuper(A, 'ExternalQueryComponent', ExternalQuery, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.State.QueryTypes = this.LIST('EnumExternalQueryTypes')\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumStockDisplayOptions } from './../enums';\r\nimport { EnumPriceDisplayOptions } from './../enums';\r\nimport { EnumPriceCurrencyDisplayOptions } from './../enums';\r\nimport { EnumAvailableItemsCalculationOptions } from './../enums';\r\nimport { EnumDocumentTypes } from './../enums';\r\nimport { Warehouse } from './../entities/warehouse.entity';\r\nexport class BusinessOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BusinessOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public StockDisplayTreshhold: number; \r\n public StockDisplayOptionAbove: EnumStockDisplayOptions; \r\n public StockDisplayOptionBelow: EnumStockDisplayOptions; \r\n public PriceDisplayOption: EnumPriceDisplayOptions; \r\n public PriceCurrencyDisplayOption: EnumPriceCurrencyDisplayOptions; \r\n public DocumentPriceCurrencyDisplayOption: EnumPriceCurrencyDisplayOptions; \r\n public ShoppingCartTotalCurrencyDisplayOption: EnumPriceCurrencyDisplayOptions; \r\n public DocumentTotalCurrencyDisplayOption: EnumPriceCurrencyDisplayOptions; \r\n public AvailableItemsCalculationOption: EnumAvailableItemsCalculationOptions; \r\n public IsEnableShoppingCart: boolean; \r\n public IsEnableWishlist: boolean; \r\n public PriceListNumber: number; \r\n public PriceCustomCurrency: string; \r\n public DocumentPriceCustomCurrency: string; \r\n public ShoppingCartTotalCustomCurrency: string; \r\n public DocumentTotalCustomCurrency: string; \r\n public IsShowStockAmountInAllWarehouses: boolean; \r\n public AlternativePriceDisplayOption: EnumPriceDisplayOptions; \r\n public AlternativePriceListNumber: number; \r\n public AlternativePriceCurrencyDisplayOption: EnumPriceCurrencyDisplayOptions; \r\n public AlternativePriceCustomCurrency: string; \r\n public AlternativePriceTitleOn: string; \r\n public AlternativePriceTitleOff: string; \r\n public IsRoundTotals: boolean; \r\n public IsAutoCreateInvoice: boolean; \r\n public WarehouseID: number; \r\n public DefaultDocumentType: EnumDocumentTypes; \r\n public IsUseAlternativePriceAsDefault: boolean; \r\n public IsShowPriceWithVat: boolean; \r\n public IsShowAlternativePriceWithVat: boolean; \r\n public LastSaleInfoDocumentType: EnumDocumentTypes; \r\n public ReturnsWarehouseID: number; \r\n public Warehouse: Warehouse = new Warehouse; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BusinessOption } from '@dino-proxy/entities/businessoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-option-grid',\r\n templateUrl: './business-option-grid.component.html'\r\n})\r\nexport class BusinessOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BusinessOptionsGridComponent', BusinessOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/business-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-option-list',\r\n templateUrl: './business-option-list.component.html'\r\n})\r\nexport class BusinessOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: BusinessOptionEndpoint) {\r\n super(A, 'BusinessOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['BusinessOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Warehouse } from './../entities/warehouse.entity';\r\n@Injectable()\r\nexport class WarehouseEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Warehouse\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BusinessOption } from '@dino-proxy/entities/businessoption.entity';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { EnumDocumentTypes, EnumPriceCurrencyDisplayOptions } from '@dino-proxy/enums';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { WarehouseEndpoint } from '@dino-proxy/endpoints/warehouse.endpoint';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\n\r\nclass State extends BaseOptionState {\r\n PriceListNumbers: GenericListEntity[] = [];\r\n IsEnabledCustomCurrencies = new Set();\r\n DefaultDocumentTypes: GenericListEntity[] = [];\r\n LastSaleInfoDocumentTypes: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-option',\r\n templateUrl: './business-option.component.html',\r\n styleUrls: ['./business-option.component.scss']\r\n})\r\nexport class BusinessOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: BusinessOptionEndpoint,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private warehouseEndpoint: WarehouseEndpoint) {\r\n super(A, 'BusinessOptionComponent', BusinessOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n get ShowAutoCreate(): boolean {\r\n return this.Entity && this.Entity.DefaultDocumentType\r\n && (this.Entity.DefaultDocumentType === EnumDocumentTypes.Order\r\n || this.Entity.DefaultDocumentType === EnumDocumentTypes.Quote\r\n || this.Entity.DefaultDocumentType === EnumDocumentTypes.DeliveryNote);\r\n }\r\n\r\n get autoCreateInvoiceLabel(): string {\r\n let label = this.RC('lblIsAutoCreateInvoice');\r\n if (this.Entity && this.Entity.DefaultDocumentType) {\r\n label += ` For ${this.LIST('EnumDocumentTypes').find(x => x.Value === this.Entity.DefaultDocumentType).Text}`;\r\n }\r\n return label;\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.DataSources[\"Warehouses\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.warehouseEndpoint.GetList());\r\n this.State.DefaultDocumentTypes = [\r\n {\r\n Text: SysGlobals.Language === 'HE' ? '$$$None' : 'None',\r\n Value: EnumDocumentTypes.None,\r\n SortOrder: 0\r\n } as GenericListEntity,\r\n ...this.LIST('EnumDocumentTypes')];\r\n\r\n this.endpoint.GetPriceListNumbers()\r\n .subscribe(r => this.State.PriceListNumbers =\r\n [\r\n {\r\n EntryID: -1,\r\n Text: this.RC('lblLastPurchasePrice')\r\n } as GenericListEntity,\r\n {\r\n EntryID: -2,\r\n Text: this.RC('lblLastEvaluatedPrice')\r\n } as GenericListEntity,\r\n ...r.Entities\r\n ]);\r\n\r\n this.State.LastSaleInfoDocumentTypes = this.LIST('EnumDocumentTypes').filter(type =>\r\n (type.Value === EnumDocumentTypes.Quote)\r\n || (type.Value === EnumDocumentTypes.Order)\r\n || (type.Value === EnumDocumentTypes.DeliveryNote)\r\n || (type.Value === EnumDocumentTypes.Invoice)\r\n );\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n protected onChangePriceDisplayOption(optionName: string, customName: string) {\r\n if ((this.Entity[optionName] as EnumPriceCurrencyDisplayOptions) === EnumPriceCurrencyDisplayOptions.DisplayInSpecificCurrency) {\r\n this.State.IsEnabledCustomCurrencies.add(customName);\r\n } else {\r\n this.State.IsEnabledCustomCurrencies.delete(customName);\r\n this.Entity[customName] = null;\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n onChangeDefaultDocument() {\r\n if (this.Entity.DefaultDocumentType !== EnumDocumentTypes.Order\r\n && this.Entity.DefaultDocumentType !== EnumDocumentTypes.Quote\r\n && this.Entity.DefaultDocumentType !== EnumDocumentTypes.DeliveryNote) {\r\n this.Entity.IsAutoCreateInvoice = false;\r\n }\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumAssortmentVisibilityModes } from './../enums';\r\nimport { EnumDisplayGroupingOptions } from './../enums';\r\nimport { EnumDisplaySortingOptions } from './../enums';\r\nimport { EnumBarcodeScannerTypes } from './../enums';\r\nimport { EnumShoppingCartModeOptions } from './../enums';\r\nimport { EnumCategoryPaneBehaviour } from './../enums';\r\nimport { EnumShowTotalOnTopOptions } from './../enums';\r\nexport class CatalogueOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CatalogueOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public AssortmentVisibilityMode: EnumAssortmentVisibilityModes; \r\n public DefaultDisplayGroupingOption: EnumDisplayGroupingOptions; \r\n public DefaultDisplaySortingOption: EnumDisplaySortingOptions; \r\n public IsShowFilterPane: boolean; \r\n public IsShowSearchBar: boolean; \r\n public BarcodeScannerType: EnumBarcodeScannerTypes; \r\n public IsShowItemsFromChildCategories: boolean; \r\n public IsShowBreadcrumb: boolean; \r\n public IsShowTopMenuCategories: boolean; \r\n public IsShowTopMenuBrands: boolean; \r\n public IsShowTopMenuVendors: boolean; \r\n public IsShowTopMenuManufacturers: boolean; \r\n public IsShowSubCatagoriesInGrid: boolean; \r\n public IsShowSubCatagoriesInList: boolean; \r\n public IsShowCategoryItemCount: boolean; \r\n public IsShowGrouping: boolean; \r\n public IsShowSorting: boolean; \r\n public IsShowGroupSortByCategory: boolean; \r\n public IsShowGroupSortByVendor: boolean; \r\n public IsShowGroupSortByBrand: boolean; \r\n public IsShowGroupSortByManufacturer: boolean; \r\n public DesktopItemListPageSize: number; \r\n public MobileItemListPageSize: number; \r\n public IsAllowImageEnlargement: boolean; \r\n public ImageBackgroundColor: string; \r\n public DefaultShoppingCartModeOption: EnumShoppingCartModeOptions; \r\n public CategoryPaneBehaviour: EnumCategoryPaneBehaviour; \r\n public ShowTotalOnTopOption: EnumShowTotalOnTopOptions; \r\n public IsCustomSortEnabled: boolean; \r\n public CustomSortTitle: string; \r\n public IsEnableAutoHideHeaderOnMobile: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-catalogue-option-grid',\r\n templateUrl: './catalogue-option-grid.component.html'\r\n})\r\nexport class CatalogueOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CatalogueOptionsGridComponent', CatalogueOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/catalogue-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CatalogueOption } from './../entities/catalogueoption.entity';\r\n@Injectable()\r\nexport class CatalogueOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CatalogueOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CatalogueOptionEndpoint } from '@dino-proxy/endpoints/catalogueoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-catalogue-option-list',\r\n templateUrl: './catalogue-option-list.component.html'\r\n})\r\nexport class CatalogueOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CatalogueOptionEndpoint) {\r\n super(A, 'CatalogueOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CatalogueOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CatalogueOptionEndpoint } from '@dino-proxy/endpoints/catalogueoption.endpoint';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\nimport { EnumDisplayGroupingOptions, EnumDisplaySortingOptions } from '@dino-proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseOptionState {\r\n CurrentTabIndex = 0;\r\n Tabs: any[] = [];\r\n DisplayGroupingOptions: GenericListEntity[] = [];\r\n DisplaySortingOptions: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-catalogue-option',\r\n templateUrl: './catalogue-option.component.html',\r\n styleUrls: ['./catalogue-option.component.scss']\r\n})\r\nexport class CatalogueOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: CatalogueOptionEndpoint) {\r\n super(A, 'CatalogueOptionComponent', CatalogueOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.DisplayGroupingOptions = this.LIST('EnumDisplayGroupingOptions');\r\n this.State.DisplaySortingOptions = this.LIST('EnumDisplaySortingOptions');\r\n\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblGeneralSection'),\r\n Name: \"GeneralSection\"\r\n },\r\n {\r\n index: 1,\r\n text: this.RC('lblTopMenuSection'),\r\n Name: \"TopMenuSection\"\r\n },\r\n {\r\n index: 2,\r\n text: this.RC('lblSortGroupSection'),\r\n Name: \"SortGroupSection\"\r\n },\r\n ];\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.HandleIsShowGroupSortBy();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n HandleIsShowGroupSortBy() {\r\n\r\n this.State.DisplayGroupingOptions = Utils.CloneObject(this.LIST('EnumDisplayGroupingOptions'));\r\n this.State.DisplaySortingOptions = Utils.CloneObject(this.LIST('EnumDisplaySortingOptions'));\r\n\r\n if (!this.Entity.IsShowGroupSortByBrand) {\r\n this.State.DisplaySortingOptions = this.State.DisplaySortingOptions.filter(x => x.Value !== EnumDisplaySortingOptions.Brand);\r\n this.State.DisplayGroupingOptions = this.State.DisplayGroupingOptions.filter(x => x.Value !== EnumDisplayGroupingOptions.Brands);\r\n }\r\n\r\n if (!this.Entity.IsShowGroupSortByVendor) {\r\n this.State.DisplaySortingOptions = this.State.DisplaySortingOptions.filter(x => x.Value !== EnumDisplaySortingOptions.Vendor);\r\n this.State.DisplayGroupingOptions = this.State.DisplayGroupingOptions.filter(x => x.Value !== EnumDisplayGroupingOptions.Vendors);\r\n }\r\n\r\n if (!this.Entity.IsShowGroupSortByManufacturer) {\r\n this.State.DisplaySortingOptions = this.State.DisplaySortingOptions.filter(x => x.Value !== EnumDisplaySortingOptions.Manufacturer);\r\n this.State.DisplayGroupingOptions = this.State.DisplayGroupingOptions.filter(x => x.Value !== EnumDisplayGroupingOptions.Manufacturers);\r\n }\r\n\r\n if (!this.Entity.IsShowGroupSortByCategory) {\r\n this.State.DisplayGroupingOptions = this.State.DisplayGroupingOptions.filter(x => x.Value !== EnumDisplayGroupingOptions.Categories);\r\n }\r\n\r\n if (!this.Entity.IsCustomSortEnabled) {\r\n this.State.DisplaySortingOptions = this.State.DisplaySortingOptions.filter(x => x.Value !== EnumDisplaySortingOptions.Custom);\r\n } else {\r\n const custom = this.State.DisplaySortingOptions.find(x => x.Value === EnumDisplaySortingOptions.Custom);\r\n custom.Text = (this.Entity?.CustomSortTitle)\r\n ? this.Entity?.CustomSortTitle\r\n : this.LIST('EnumDisplaySortingOptions').find(x => x.Value === EnumDisplaySortingOptions.Custom).Text;\r\n }\r\n\r\n if (!this.State.DisplaySortingOptions.find(x => x.Value === this.Entity.DefaultDisplaySortingOption))\r\n this.Entity.DefaultDisplaySortingOption = EnumDisplaySortingOptions.ItemCode;\r\n\r\n if (!this.State.DisplayGroupingOptions.find(x => x.Value === this.Entity.DefaultDisplayGroupingOption))\r\n this.Entity.DefaultDisplayGroupingOption = EnumDisplayGroupingOptions.None;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class ContactUsOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ContactUsOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public MessageEnglish: string; \r\n public MessageHebrew: string; \r\n public MailingAddress: string; \r\n public Email: string; \r\n public Phone: string; \r\n public Whatsapp: string; \r\n public IsCreateActivity: boolean; \r\n public IsSendEmail: boolean; \r\n public Subjects: ContactUsSubject[] = []; \r\n\t\r\n}\r\n\r\nexport class ContactUsSubject extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ContactUsSubject';\r\n }\r\n \r\n public NameHebrew: string; \r\n public NameEnglish: string; \r\n public Description: string; \r\n public ActivityTypeID: number; \r\n public SubjectTypeID: number; \r\n public SBOUserID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ContactUsOption } from '@dino-proxy/entities/contactusoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-option-grid',\r\n templateUrl: './contact-us-option-grid.component.html'\r\n})\r\nexport class ContactUsOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ContactUsOptionsGridComponent', ContactUsOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/contact-us-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactUsOption } from './../entities/contactusoption.entity';\r\n@Injectable()\r\nexport class ContactUsOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ContactUsOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContactUsOptionEndpoint } from '@dino-proxy/endpoints/contactusoption.endpoint';\r\nimport { ContactUsSubjectEndpoint } from '@dino-proxy/endpoints/contactussubject.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-option-list',\r\n templateUrl: './contact-us-option-list.component.html'\r\n})\r\nexport class ContactUsOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private contactUsOptionEndpoint: ContactUsOptionEndpoint,\r\n private contactUsSubjectEndpoint: ContactUsSubjectEndpoint) {\r\n super(A, 'ContactUsOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ContactUsOptionsAdmin'] = new BaseDataStoreCRUDServer(this.contactUsOptionEndpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes, EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ContactUsOption } from '@dino-proxy/entities/contactusoption.entity';\r\nimport { ContactUsOptionEndpoint } from '@dino-proxy/endpoints/contactusoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\tIsXLargeScreen: boolean;\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-contact-us-option',\r\n\ttemplateUrl: './contact-us-option.component.html',\r\n\tstyleUrls: ['./contact-us-option.component.scss']\r\n})\r\nexport class ContactUsOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: ContactUsOptionEndpoint) {\r\n\t\tsuper(A, 'ContactUsOptionComponent', ContactUsOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.State.IsXLargeScreen = this.A.Screen.GetScreenSize() === EnumScreenSizes.ScreenXLarge;\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class CustomerDetailOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerDetailOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsShowMaxBalance: boolean; \r\n public IsShowObligo: boolean; \r\n public IsShowMaxObligo: boolean; \r\n public IsShowContactPersons: boolean; \r\n public IsShowAddresses: boolean; \r\n public IsAllowEditingContacts: boolean; \r\n public IsAllowEditingAddresses: boolean; \r\n public IsShowBankDetails: boolean; \r\n public IsShowCardDetails: boolean; \r\n public IsAllowChangeBankDetails: boolean; \r\n public IsAllowChangeCardDetails: boolean; \r\n public IsShowGeneralDetails: boolean; \r\n public IsShowContactInformation: boolean; \r\n public IsShowPaymentTerms: boolean; \r\n public IsAllowChangeSalesPerson: boolean; \r\n public IsAllowChangePaymentTerms: boolean; \r\n public IsShowBalanceLate: boolean; \r\n public IsShowFutureCheques: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CustomerDetailOption } from '@dino-proxy/entities/customerdetailoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-detail-option-grid',\r\n templateUrl: './customer-detail-option-grid.component.html'\r\n})\r\nexport class CustomerDetailOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CustomerDetailOptionsGridComponent', CustomerDetailOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/customer-detail-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerDetailOption } from './../entities/customerdetailoption.entity';\r\n@Injectable()\r\nexport class CustomerDetailOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomerDetailOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerDetailOptionEndpoint } from '@dino-proxy/endpoints/customerdetailoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-detail-option-list',\r\n templateUrl: './customer-detail-option-list.component.html'\r\n})\r\nexport class CustomerDetailOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CustomerDetailOptionEndpoint) {\r\n super(A, 'CustomerDetailOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CustomerDetailOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomerDetailOption } from '@dino-proxy/entities/customerdetailoption.entity';\r\nimport { CustomerDetailOptionEndpoint } from '@dino-proxy/endpoints/customerdetailoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-customer-detail-option',\r\n\ttemplateUrl: './customer-detail-option.component.html',\r\n\tstyleUrls: ['./customer-detail-option.component.scss']\r\n})\r\nexport class CustomerDetailOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: CustomerDetailOptionEndpoint) {\r\n\t\tsuper(A, 'CustomerDetailOptionComponent', CustomerDetailOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n\t\treturn true;\r\n\t}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumGoCreditTransactionModes } from './../enums';\r\nexport class PaymentOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsAllowLaterPayment: boolean; \r\n public IsAllowGoCreditPayment: boolean; \r\n public IsAllowCreditCardSaving: boolean; \r\n public GoCreditTransactionMode: EnumGoCreditTransactionModes; \r\n public GoCreditPaymentPage: string; \r\n public GoCreditUserName: string; \r\n public GoCreditPassword: string; \r\n public GoCreditTerminalNumber: string; \r\n public IsAllowCashPayment: boolean; \r\n public IsAllowChequePayment: boolean; \r\n public IsAllowWirePayment: boolean; \r\n public IsAllowSplitPayment: boolean; \r\n public IsAllowUsingExistingCreditCard: boolean; \r\n public DefaultCashAccountID: number; \r\n public DefaultChequeAccountID: number; \r\n public DefaultWireAccountID: number; \r\n public IsAllowReceiptAdd: boolean; \r\n public IsAllowReceiptView: boolean; \r\n public IsShowShare: boolean; \r\n public GoCreditPasswordSecure: string; //WRITE ONLY (IgnoreDataMemberRead)\r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { ShipmentMethod } from './../entities/shipmentmethod.entity';\r\nimport { DistributionCycle } from './../entities/distributioncycle.entity';\r\nexport class ShipmentOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShipmentOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsEnabledShipmentNotes: boolean; \r\n public IsEnableShipmentDate: boolean; \r\n public IsEnabledShipment: boolean; \r\n public IsEnableDistributionCycles: boolean; \r\n public Methods: ShipmentOptionMethod[] = []; \r\n public ShipmentDistributionCycles: ShipmentDistributionCycle[] = []; \r\n\t\r\n}\r\n\r\nexport class ShipmentOptionMethod extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShipmentOptionMethod';\r\n }\r\n \r\n public MinOrderAmount: number; \r\n public MaxOrderAmount: number; \r\n public ShipmentMethodID: number; \r\n public ShipmentMethod: ShipmentMethod = new ShipmentMethod; \r\n public IsAvailableForCheckout: boolean; \r\n public LineID: number;\r\n}\r\nexport class ShipmentDistributionCycle extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShipmentDistributionCycle';\r\n }\r\n \r\n public DistributionCycleID: number; \r\n public DistributionCycle: DistributionCycle = new DistributionCycle; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class FilterOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FilterOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsShowFilterDimensions: boolean; \r\n public IsShowFilterBrands: boolean; \r\n public IsShowFilterManufactures: boolean; \r\n public IsShowFilterVendors: boolean; \r\n public IsShowFilterSpecificationAttributes: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumInvoiceOneDocumentTypes } from './../enums';\r\nimport { EnumInvoiceOneNotificationTypes } from './../enums';\r\nexport class NotificationOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsSendCustomerNotificationsAsAttachment: boolean; \r\n public DocumentNotificationEmailAddress: string; \r\n public SenderEmailAddress: string; \r\n public SenderDisplayName: string; \r\n public IsAllowPrinting: boolean; \r\n public IsAllowSharingByEmail: boolean; \r\n public IsAllowSharingBySMS: boolean; \r\n public IsAllowSharingByWhatsapp: boolean; \r\n public IsAllowTemplateSelection: boolean; \r\n public AbandonedCartReminderHours: number; \r\n public IsSendAbandonedCartReminder: boolean; \r\n public IsAddAttachedFiles: boolean; \r\n public NotificationDocuments: NotificationDocumentOption[] = []; \r\n public NotificationTemplates: NotificationTemplateOption[] = []; \r\n\t\r\n}\r\n\r\nexport class NotificationDocumentOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationDocumentOption';\r\n }\r\n \r\n public DocumentType: EnumInvoiceOneDocumentTypes; \r\n public CustomerInvoiceOneNotificationType: EnumInvoiceOneNotificationTypes; \r\n public IsNotifyAdmin: boolean; \r\n public IsNotifySalesPerson: boolean; \r\n public LineID: number;\r\n}\r\nexport class NotificationTemplateOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateOption';\r\n }\r\n \r\n public DocumentType: EnumInvoiceOneDocumentTypes; \r\n public InvoiceOneTemplateID: number; \r\n public InvoiceOneTemplateIDEng: number; \r\n public PrintingDocCode: string; \r\n public PrintingDocCodeEng: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumTitlePositions } from './../enums';\r\nexport class HomePageOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'HomePageOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsEnableHomePageBanner: boolean; \r\n public IsEnableHomePageText: boolean; \r\n public IsShowFeaturedCategories: boolean; \r\n public IsShowFeaturedItems: boolean; \r\n public IsEnableStatusBar: boolean; \r\n public IsEnableSearchBar: boolean; \r\n public TitleTextPosition: EnumTitlePositions; \r\n public TitleTextColor: string; \r\n public ImageBackgroundColor: string; \r\n public Announcement: string; \r\n public HomePageText: string; \r\n public HomePageDescription: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { ExternalQuery } from './../entities/externalquery.entity';\r\nimport { ExternalLink } from './../entities/externallink.entity';\r\nexport class FeatureOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FeatureOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsEnableHomePage: boolean; \r\n public IsEnableCatalogue: boolean; \r\n public IsEnableCheckout: boolean; \r\n public IsEnableMyDetails: boolean; \r\n public IsEnableLedger: boolean; \r\n public IsEnableContactUs: boolean; \r\n public IsEnableDashboard: boolean; \r\n public IsEnableSalesSummary: boolean; \r\n public IsEnableSaleTargetPerformance: boolean; \r\n public IsEnableAging: boolean; \r\n public ExternalQueries: FeatureExternalQuery[] = []; \r\n public ExternalLinks: FeatureExternalLink[] = []; \r\n\t\r\n}\r\n\r\nexport class FeatureExternalQuery extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FeatureExternalQuery';\r\n }\r\n \r\n public ExternalQueryID: number; \r\n public ExternalQuery: ExternalQuery = new ExternalQuery; \r\n public LineID: number;\r\n}\r\nexport class FeatureExternalLink extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FeatureExternalLink';\r\n }\r\n \r\n public ExternalLinkID: number; \r\n public ExternalLink: ExternalLink = new ExternalLink; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class TermsOfUseOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TermsOfUseOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsEnableTOnCheckout: boolean; \r\n public IsEnableInfo: boolean; \r\n public IsEnableOnLogin: boolean; \r\n public Content: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class SeriesOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SeriesOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public QuoteSeriesID: number; \r\n public DeliveryNoteSeriesID: number; \r\n public OrderSeriesID: number; \r\n public InvoiceSeriesID: number; \r\n public ReturnRequestSeriesID: number; \r\n public ReturnSeriesID: number; \r\n public RefundSeriesID: number; \r\n public PaymentDocumentSeriesID: number; \r\n public DefaultCustomerSeriesID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumShoppingCartItemViewOptions } from './../enums';\r\nimport { EnumCatalogueViewOptions } from './../enums';\r\nimport { ItemDisplayElementOption } from './../entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayPopupOption } from './../entities/itemdisplaypopupoption.entity';\r\nexport class ItemOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ItemOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public GridViewMobileOptionID: number; \r\n public GridViewDesktopOptionID: number; \r\n public KitItemsItemListMobileOptionID: number; \r\n public KitItemsItemListDesktopOptionID: number; \r\n public KitItemsItemCompactMobileOptionID: number; \r\n public KitItemsItemCompactDesktopOptionID: number; \r\n public KitItemsItemLineMobileOptionID: number; \r\n public KitItemsItemLineDesktopOptionID: number; \r\n public SingleVariationListMobileOptionID: number; \r\n public SingleVariationListDesktopOptionID: number; \r\n public SingleVariationCompactMobileOptionID: number; \r\n public SingleVariationCompactDesktopOptionID: number; \r\n public SingleVariationLineMobileOptionID: number; \r\n public SingleVariationLineDesktopOptionID: number; \r\n public ShoppingCartListMobileOptionID: number; \r\n public ShoppingCartListDesktopOptionID: number; \r\n public FinalizedDocumentListMobileOptionID: number; \r\n public FinalizedDocumentListDesktopOptionID: number; \r\n public FinalizedDocumentCompactMobileOptionID: number; \r\n public FinalizedDocumentCompactDesktopOptionID: number; \r\n public FinalizedDocumentLineMobileOptionID: number; \r\n public FinalizedDocumentLineDesktopOptionID: number; \r\n public PopupMobileOptionID: number; \r\n public PopupDesktopOptionID: number; \r\n public RelatedItemListMobileOptionID: number; \r\n public RelatedItemListDesktopOptionID: number; \r\n public RelatedItemCompactMobileOptionID: number; \r\n public RelatedItemCompactDesktopOptionID: number; \r\n public RelatedItemLineMobileOptionID: number; \r\n public RelatedItemLineDesktopOptionID: number; \r\n public WishlistListMobileOptionID: number; \r\n public WishlistListDesktopOptionID: number; \r\n public WishlistCompactMobileOptionID: number; \r\n public WishlistCompactDesktopOptionID: number; \r\n public WishlistLineMobileOptionID: number; \r\n public WishlistLineDesktopOptionID: number; \r\n public CatalogueListItemDesktopOptionID: number; \r\n public CatalogueListItemMobileOptionID: number; \r\n public CatalogueCompactItemDesktopOptionID: number; \r\n public CatalogueCompactItemMobileOptionID: number; \r\n public ShoppingCartCompactMobileOptionID: number; \r\n public ShoppingCartCompactDesktopOptionID: number; \r\n public ShoppingCartLineMobileOptionID: number; \r\n public ShoppingCartLineDesktopOptionID: number; \r\n public CheckoutListDesktopOptionID: number; \r\n public CheckoutListMobileOptionID: number; \r\n public CheckoutCompactDesktopOptionID: number; \r\n public CheckoutCompactMobileOptionID: number; \r\n public CheckoutLineDesktopOptionID: number; \r\n public CheckoutLineMobileOptionID: number; \r\n public DefaultCheckoutDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultCheckoutMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultCatalogueDesktopViewOption: EnumCatalogueViewOptions; \r\n public DefaultCatalogueMobileViewOption: EnumCatalogueViewOptions; \r\n public DefaultShoppingCartDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultShoppingCartMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultKitItemsDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultKitItemsMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultFinalizedDocumentDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultFinalizedDocumentMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultRelatedItemsDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultRelatedItemsMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultSingleVariationDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultSingleVariationMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultWishlistDesktopItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultWishlistMobileItemViewOption: EnumShoppingCartItemViewOptions; \r\n public GridViewMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public GridViewDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public KitItemsItemLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedDocumentLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public PopupMobileOption: ItemDisplayPopupOption = new ItemDisplayPopupOption; \r\n public PopupDesktopOption: ItemDisplayPopupOption = new ItemDisplayPopupOption; \r\n public RelatedItemListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CatalogueListItemDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CatalogueListItemMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CatalogueCompactItemDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CatalogueCompactItemMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutListDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutListMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutCompactDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutCompactMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutLineDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public CheckoutLineMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { DocumentOption } from './../entities/documentoption.entity';\r\nimport { PaymentOption } from './../entities/paymentoption.entity';\r\nimport { ShipmentOption } from './../entities/shipmentoption.entity';\r\nimport { CatalogueOption } from './../entities/catalogueoption.entity';\r\nimport { FilterOption } from './../entities/filteroption.entity';\r\nimport { BusinessOption } from './../entities/businessoption.entity';\r\nimport { NotificationOption } from './../entities/notificationoption.entity';\r\nimport { HomePageOption } from './../entities/homepageoption.entity';\r\nimport { CustomerDetailOption } from './../entities/customerdetailoption.entity';\r\nimport { ContactUsOption } from './../entities/contactusoption.entity';\r\nimport { FeatureOption } from './../entities/featureoption.entity';\r\nimport { TermsOfUseOption } from './../entities/termsofuseoption.entity';\r\nimport { SeriesOption } from './../entities/seriesoption.entity';\r\nimport { ItemOption } from './../entities/itemoption.entity';\r\nimport { AddressOption } from './../entities/addressoption.entity';\r\nimport { CustomFieldset } from './../entities/customfieldset.entity';\r\nexport class CustomerOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CustomerOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public PaymentOptionID: number; \r\n public ShipmentOptionID: number; \r\n public CatalogueOptionID: number; \r\n public FilterOptionID: number; \r\n public BusinessOptionID: number; \r\n public NotificationOptionID: number; \r\n public HomePageOptionID: number; \r\n public CustomerDetailOptionID: number; \r\n public ContactUsOptionID: number; \r\n public FeatureOptionID: number; \r\n public TermsOfUseOptionID: number; \r\n public OrderOptionID: number; \r\n public QuoteOptionID: number; \r\n public DeliveryNoteOptionID: number; \r\n public RefundOptionID: number; \r\n public ReturnRequestOptionID: number; \r\n public InvoiceOptionID: number; \r\n public ReturnOptionID: number; \r\n public SeriesOptionID: number; \r\n public DefaultItemOptionID: number; \r\n public AddressOptionID: number; \r\n public CustomerFieldsetID: number; \r\n public OrderOption: DocumentOption = new DocumentOption; \r\n public QuoteOption: DocumentOption = new DocumentOption; \r\n public DeliveryNoteOption: DocumentOption = new DocumentOption; \r\n public RefundOption: DocumentOption = new DocumentOption; \r\n public ReturnRequestOption: DocumentOption = new DocumentOption; \r\n public InvoiceOption: DocumentOption = new DocumentOption; \r\n public ReturnOption: DocumentOption = new DocumentOption; \r\n public PaymentOption: PaymentOption = new PaymentOption; \r\n public ShipmentOption: ShipmentOption = new ShipmentOption; \r\n public CatalogueOption: CatalogueOption = new CatalogueOption; \r\n public FilterOption: FilterOption = new FilterOption; \r\n public BusinessOption: BusinessOption = new BusinessOption; \r\n public NotificationOption: NotificationOption = new NotificationOption; \r\n public HomePageOption: HomePageOption = new HomePageOption; \r\n public CustomerDetailOption: CustomerDetailOption = new CustomerDetailOption; \r\n public ContactUsOption: ContactUsOption = new ContactUsOption; \r\n public FeatureOption: FeatureOption = new FeatureOption; \r\n public TermsOfUseOption: TermsOfUseOption = new TermsOfUseOption; \r\n public SeriesOption: SeriesOption = new SeriesOption; \r\n public DefaultItemOption: ItemOption = new ItemOption; \r\n public AddressOption: AddressOption = new AddressOption; \r\n public CustomerFieldset: CustomFieldset = new CustomFieldset; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CustomerOption } from '@dino-proxy/entities/customeroption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-option-grid',\r\n templateUrl: './customer-option-grid.component.html'\r\n})\r\nexport class CustomerOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CustomerOptionsGridComponent', CustomerOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/customer-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerOptionEndpoint } from '@dino-proxy/endpoints/customeroption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-option-list',\r\n templateUrl: './customer-option-list.component.html'\r\n})\r\nexport class CustomerOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CustomerOptionEndpoint) {\r\n super(A, 'CustomerOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CustomerOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PaymentOptionView } from './../views/paymentoption.view';\r\n@Injectable()\r\nexport class PaymentOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"PaymentOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ShipmentOption } from './../entities/shipmentoption.entity';\r\n@Injectable()\r\nexport class ShipmentOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ShipmentOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FilterOption } from './../entities/filteroption.entity';\r\n@Injectable()\r\nexport class FilterOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"FilterOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { NotificationOptionView } from './../views/notificationoption.view';\r\nimport { InvoiceOneTemplate } from './../entities/invoiceonetemplate.entity';\r\nimport { PrintingTemplate } from './../entities/printingtemplate.entity';\r\n@Injectable()\r\nexport class NotificationOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"NotificationOption\", api);}\r\n\t\r\n\r\n public GetInvoiceOneTemplates() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetInvoiceOneTemplates', undefined );\r\n }\r\n\r\n public GetPrintingDocCodes() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPrintingDocCodes', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HomePageOption } from './../entities/homepageoption.entity';\r\n@Injectable()\r\nexport class HomepageOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"HomepageOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FeatureOption } from './../entities/featureoption.entity';\r\n@Injectable()\r\nexport class FeatureOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"FeatureOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { TermsOfUseOption } from './../entities/termsofuseoption.entity';\r\n@Injectable()\r\nexport class TermsOfUseOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"TermsOfUseOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentOptionView } from './../views/documentoption.view';\r\n@Injectable()\r\nexport class DocumentOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DocumentOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SeriesOption } from './../entities/seriesoption.entity';\r\n@Injectable()\r\nexport class SeriesOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SeriesOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AddressOption } from './../entities/addressoption.entity';\r\n@Injectable()\r\nexport class AddressOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AddressOption\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomFieldset } from './../entities/customfieldset.entity';\r\n@Injectable()\r\nexport class CustomFieldsetEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomFieldset\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomerOption } from '@dino-proxy/entities/customeroption.entity';\r\nimport { CustomerOptionEndpoint } from '@dino-proxy/endpoints/customeroption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CatalogueOptionEndpoint } from '@dino-proxy/endpoints/catalogueoption.endpoint';\r\nimport { PaymentOptionEndpoint } from '@dino-proxy/endpoints/paymentoption.endpoint';\r\nimport { ShipmentOptionEndpoint } from '@dino-proxy/endpoints/shipmentoption.endpoint';\r\nimport { FilterOptionEndpoint } from '@dino-proxy/endpoints/filteroption.endpoint';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { NotificationOptionEndpoint } from '@dino-proxy/endpoints/notificationoption.endpoint';\r\nimport { HomepageOptionEndpoint } from '@dino-proxy/endpoints/homepageoption.endpoint';\r\nimport { ContactUsOptionEndpoint } from '@dino-proxy/endpoints/contactusoption.endpoint';\r\nimport { FeatureOptionEndpoint } from '@dino-proxy/endpoints/featureoption.endpoint';\r\nimport { TermsOfUseOptionEndpoint } from '@dino-proxy/endpoints/termsofuseoption.endpoint';\r\nimport { DocumentOptionEndpoint } from '@dino-proxy/endpoints/documentoption.endpoint';\r\nimport { SeriesOptionEndpoint } from '@dino-proxy/endpoints/seriesoption.endpoint';\r\nimport { CustomerDetailOptionEndpoint } from '@dino-proxy/endpoints/customerdetailoption.endpoint';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\nimport { AddressOptionEndpoint } from '@dino-proxy/endpoints/addressoption.endpoint';\r\nimport { CustomFieldsetEndpoint } from '@dino-proxy/endpoints/customfieldset.endpoint';\r\nimport { CustomFieldset } from '@dino-proxy/entities/customfieldset.entity';\r\nimport { EnumCustomFieldLocations } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseOptionState {\r\n CustomerFieldSets: CustomFieldset[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-customer-option',\r\n templateUrl: './customer-option.component.html',\r\n styleUrls: ['./customer-option.component.scss']\r\n})\r\nexport class CustomerOptionComponent extends BasePageCRUDComponent {\r\n\r\n CatalogueOptionPage = 'pages/catalogue-option';\r\n ShipmentOptionPage = 'pages/shipment-option';\r\n FilterOptionPage = 'pages/filter-option';\r\n NotificationOptionPage = 'pages/notification-option';\r\n CustomerDetailOptionPage = 'pages/customer-detail-option';\r\n FeatureOptionPage = 'pages/feature-option';\r\n PaymentOptionPage = 'pages/payment-option';\r\n BusinessOptionPage = 'pages/business-option';\r\n HomePageOptionPage = 'pages/homepage-option';\r\n ContactUsOptionPage = 'pages/contact-us-option';\r\n TermsOfUseOptionPage = 'pages/terms-of-use-option';\r\n SeriesOptionPage = 'pages/series-option';\r\n ItemOptionPage = 'pages/item-option';\r\n DocumentOptionPage = 'pages/document-option';\r\n AddressOptionPage = 'pages/address-option';\r\n CustomFieldsetPage = 'pages/custom-fieldset';\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: CustomerOptionEndpoint,\r\n private catalogueOptionsEndpoint: CatalogueOptionEndpoint,\r\n private paymentOptionEndpoint: PaymentOptionEndpoint,\r\n private shipmentOptionEndpoint: ShipmentOptionEndpoint,\r\n private filterOptionEndpoin: FilterOptionEndpoint,\r\n private businessOptionEndpoint: BusinessOptionEndpoint,\r\n private notificationOptionEndpoin: NotificationOptionEndpoint,\r\n private homepageOptionEndpoint: HomepageOptionEndpoint,\r\n private customerDetailOptionEndpoint: CustomerDetailOptionEndpoint,\r\n private contactUsOptionEndpoint: ContactUsOptionEndpoint,\r\n private featureOptionEndpoin: FeatureOptionEndpoint,\r\n private termsOfUseOptionEndpoin: TermsOfUseOptionEndpoint,\r\n private documentOptionEndpoint: DocumentOptionEndpoint,\r\n private seriesOptionEndpoint: SeriesOptionEndpoint,\r\n private addressOptionEndpoint: AddressOptionEndpoint,\r\n private itemOptionEndpoint: ItemOptionEndpoint,\r\n private fieldsetEndpoint: CustomFieldsetEndpoint) {\r\n super(A, 'CustomerOptionComponent', CustomerOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitDataSources() { \r\n this.LoadCatalogueOptions();\r\n }\r\n\r\n LoadCatalogueOptions() {\r\n this.DataSources['CatalogueOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.catalogueOptionsEndpoint.GetList(options));\r\n this.DataSources['PaymentOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.paymentOptionEndpoint.GetList(options));\r\n this.DataSources['ShipmentOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.shipmentOptionEndpoint.GetList(options));\r\n this.DataSources['FilterOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.filterOptionEndpoin.GetList(options));\r\n this.DataSources['BusinessOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.businessOptionEndpoint.GetList(options));\r\n this.DataSources['NotificationOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.notificationOptionEndpoin.GetList(options));\r\n this.DataSources['HomePageOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.homepageOptionEndpoint.GetList(options));\r\n this.DataSources['CustomerDetailOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerDetailOptionEndpoint.GetList(options)); \r\n this.DataSources['ContactUsOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.contactUsOptionEndpoint.GetList(options)); \r\n this.DataSources['FeatureOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.featureOptionEndpoin.GetList(options)); \r\n this.DataSources['TermsOfUseOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.termsOfUseOptionEndpoin.GetList(options)); \r\n this.DataSources['DocumentOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.documentOptionEndpoint.GetList(options));\r\n this.DataSources['SeriesOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.seriesOptionEndpoint.GetList(options));\r\n this.DataSources['ItemOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemOptionEndpoint.GetList(options));\r\n this.fieldsetEndpoint.GetListShallow().subscribe(r => {\r\n if (r?.IsSuccess) {\r\n this.State.CustomerFieldSets = r.Entities.filter(f => f.Location === EnumCustomFieldLocations.Customer);\r\n }\r\n });\r\n this.DataSources['AddressOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.addressOptionEndpoint.GetList(options)); \r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DimensionConfiguration extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DimensionConfiguration';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public DimensionScale1ID: number; \r\n public DimensionScale2ID: number; \r\n public DimensionScale3ID: number; \r\n public IsUseParentClassification: boolean; \r\n public IsUseParentTexts: boolean; \r\n public IsUseParentImages: boolean; \r\n public IsUseParentVideos: boolean; \r\n public IsUseParentFiles: boolean; \r\n public IsUseParentTextAttributes: boolean; \r\n public IsUseParentSpecificationAttributes: boolean; \r\n public IsMergeChildImagesToParent: boolean; \r\n public IsMergeChildVideosToParent: boolean; \r\n public IsMergeChildFilesToParent: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DimensionConfiguration } from '@dino-proxy/entities/dimensionconfiguration.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension-configuration-grid',\r\n templateUrl: './dimension-configuration-grid.component.html'\r\n})\r\nexport class DimensionConfigurationsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DimensionConfigurationsGridComponent', DimensionConfiguration, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/dimension-configuration\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DimensionConfiguration } from './../entities/dimensionconfiguration.entity';\r\nimport { DimensionConfigurationValidityResult } from './../entities/dimensionconfigurationvalidityresult.entity';\r\n@Injectable()\r\nexport class DimensionConfigurationEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DimensionConfiguration\", api);}\r\n\t\r\n\r\n public GetDimensionValidities() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDimensionValidities', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Dimension } from './../entities/dimension.entity';\r\n@Injectable()\r\nexport class DimensionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Dimension\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DimensionScale } from './../entities/dimensionscale.entity';\r\n@Injectable()\r\nexport class DimensionScaleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DimensionScale\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DimensionConfigurationEndpoint } from '@dino-proxy/endpoints/dimensionconfiguration.endpoint';\r\nimport { DimensionEndpoint } from '@dino-proxy/endpoints/dimension.endpoint';\r\nimport { DimensionScaleEndpoint } from '@dino-proxy/endpoints/dimensionscale.endpoint';\r\nimport { DimensionValueEndpoint } from '@dino-proxy/endpoints/dimensionvalue.endpoint';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DimensionConfigurationValidityResult } from '@dino-proxy/entities/dimensionconfigurationvalidityresult.entity';\r\nimport { Subject } from 'rxjs';\r\n\r\nclass State extends BaseOptionState { }\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension-configuration-list',\r\n templateUrl: './dimension-configuration-list.component.html',\r\n styleUrls: ['./dimension-configuration-list.component.scss']\r\n})\r\nexport class DimensionConfigurationsListComponent extends BasePageComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n dimensionChangeSubject: Subject = new Subject();\r\n dimensionScaleSubject: Subject = new Subject();\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DimensionConfigurationEndpoint,\r\n private dimensionEndpoint: DimensionEndpoint,\r\n private dimensionScaleEndpoint: DimensionScaleEndpoint,\r\n private dimensionValueEndpoint: DimensionValueEndpoint) {\r\n super(A, 'DimensionConfigurationsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DimensionConfigurationsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n this.DataSources['DimensionsAdmin'] = new BaseDataStoreCRUDServer(this.dimensionEndpoint);\r\n this.DataSources['DimensionScalesAdmin'] = new BaseDataStoreCRUDServer(this.dimensionScaleEndpoint);\r\n this.DataSources['DimensionValuesAdmin'] = new BaseDataStoreCRUDServer(this.dimensionValueEndpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n this.dimensionChangeSubject.next();\r\n }\r\n\r\n OnScaleChange() {\r\n this.dimensionScaleSubject.next();\r\n }\r\n\r\n HandleValidateAll() {\r\n this.ShowMessageBox(EnumMessageBoxTypes.YesNo, this.RC('lblValidateAllDimensionsPrompt'), EnumWindowSizes.WindowAutoSize, () => {\r\n this.endpoint.GetDimensionValidities()\r\n .subscribe((r: BaseEntityResponse) => {\r\n setTimeout(() => {\r\n let message = this.RC('lblValidateAllDimensionsResult', \r\n r.Entity?.InvalidDimensions || 0, \r\n r.Entity?.HasNoChild || 0, \r\n r.Entity?.RelativeItemsWithoutDimensionConfig || 0,\r\n r.Entity?.NonDefinedParentItems || 0,\r\n r.Entity?.NonDefinedChildItems || 0);\r\n\r\n if (r.Entity?.InvalidDimensions > 0 \r\n || r.Entity?.RelativeItemsWithoutDimensionConfig > 0 \r\n || r.Entity?.NonDefinedParentItems > 0\r\n || r.Entity?.NonDefinedChildItems > 0) {\r\n message += '\\n\\r' + this.RC('lblValidateAllDimensionsFileResult');\r\n }\r\n this.ShowMessageBox(EnumMessageBoxTypes.OK, message, EnumWindowSizes.WindowMedium, null);\r\n }, 500);\r\n });\r\n });\r\n }\r\n\r\n protected ShowMessageBox(boxType: EnumMessageBoxTypes, prompt: string, messageBoxHeight: EnumWindowSizes, doneFunc?: () => void) {\r\n this.messageDialog.Type = boxType;\r\n this.messageDialog.Title = 'Validation';\r\n this.messageDialog.Prompt = prompt;\r\n this.messageDialog.Height = messageBoxHeight;\r\n this.messageDialog.ShowDialogShort(() => {\r\n if (doneFunc) doneFunc();\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DimensionConfiguration } from '@dino-proxy/entities/dimensionconfiguration.entity';\r\nimport { DimensionConfigurationEndpoint } from '@dino-proxy/endpoints/dimensionconfiguration.endpoint';\r\nimport { DimensionScaleEndpoint } from '@dino-proxy/endpoints/dimensionscale.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-dimension-configuration',\r\n\ttemplateUrl: './dimension-configuration.component.html',\r\n\tstyleUrls: ['./dimension-configuration.component.scss']\r\n})\r\nexport class DimensionConfigurationComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: DimensionConfigurationEndpoint,\r\n\t\tprivate dimensionScaleEndpoint: DimensionScaleEndpoint) {\r\n\t\tsuper(A, 'DimensionConfigurationComponent', DimensionConfiguration, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitDataSources() {\r\n\t\tthis.LoadSelectOptions();\r\n\t}\r\n\r\n\tLoadSelectOptions() {\r\n\t\tthis.DataSources['DimensionScalesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.dimensionScaleEndpoint.GetList(options));\r\n\t}\r\n\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DimensionScale extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DimensionScale';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public DimensionID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DimensionEndpoint } from '@dino-proxy/endpoints/dimension.endpoint';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DimensionScale } from '@dino-proxy/entities/dimensionscale.entity';\r\nimport { Observable } from 'rxjs';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension-scale-grid',\r\n templateUrl: './dimension-scale-grid.component.html'\r\n})\r\nexport class DimensionScalesGridComponent extends BaseGridComponent {\r\n @Input() DimensionChange: Observable;\r\n @Output() OnDimensionScaleScaleChange = new EventEmitter(); \r\n \r\n constructor(A: ServiceBagService,\r\n private dimensionEndpoint: DimensionEndpoint) {\r\n super(A, 'DimensionScalesGridComponent', DimensionScale, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n super.OnInitComponent();\r\n\r\n const dimensionChange$Subscription = this.DimensionChange\r\n .subscribe(_ => {\r\n this.DataSources['DimensionsAdmin'].Reload();\r\n });\r\n\r\n this.RegisterSubscription(dimensionChange$Subscription);\r\n }\r\n \r\n protected override OnInitDataSources() { \r\n this.LoadSelectOptions();\r\n }\r\n\r\n LoadSelectOptions() {\r\n this.DataSources['DimensionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.dimensionEndpoint.GetList(options));\r\n }\r\n\r\n OnScaleChange(e: any) {\r\n this.OnDimensionScaleScaleChange.emit();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class FilterAttributeValue extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FilterAttributeValue';\r\n }\r\n \r\n public Name: string; \r\n public SortOrder: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FilterAttributeValue } from './../entities/filterattributevalue.entity';\r\nexport class DimensionValue extends FilterAttributeValue {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DimensionValue';\r\n }\r\n \r\n public DimensionScaleID: number; \r\n public Value: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DimensionScaleEndpoint } from '@dino-proxy/endpoints/dimensionscale.endpoint';\r\nimport { DimensionValue } from '@dino-proxy/entities/dimensionvalue.entity';\r\nimport { Observable } from 'rxjs';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension-value-grid',\r\n templateUrl: './dimension-value-grid.component.html'\r\n})\r\nexport class DimensionValuesGridComponent extends BaseGridComponent {\r\n @Input() DimensionScaleChange: Observable;\r\n\r\n constructor(A: ServiceBagService,\r\n private dimensionScaleEndpoint: DimensionScaleEndpoint) {\r\n super(A, 'DimensionValuesGridComponent', DimensionValue, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n super.OnInitComponent();\r\n\r\n const dimensionChange$Subscription = this.DimensionScaleChange\r\n .subscribe(_ => {\r\n this.DataSources['DimensionScalesAdmin'].Reload();\r\n });\r\n\r\n this.RegisterSubscription(dimensionChange$Subscription);\r\n }\r\n \r\n protected override OnInitDataSources() { \r\n this.LoadSelectOptions();\r\n }\r\n\r\n LoadSelectOptions() {\r\n this.DataSources['DimensionScalesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.dimensionScaleEndpoint.GetList(options));\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumFilterDisplayOptions } from './../enums';\r\nimport { EnumAttributeDisplayOptions } from './../enums';\r\nexport class FilterAttribute extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FilterAttribute';\r\n }\r\n \r\n public Name: string; \r\n public SortOrder: number; \r\n public FilterDisplayOption: EnumFilterDisplayOptions; \r\n public AttributeDisplayOption: EnumAttributeDisplayOptions; \r\n public IsShowInFilter: boolean; \r\n public AttributeGroupID: number; \r\n public DateMinValue: Date; \r\n public DateMaxValue: Date; \r\n public NumberMinValue: number; \r\n public NumberMaxValue: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FilterAttribute } from './../entities/filterattribute.entity';\r\nimport { FilterAttributeValue } from './../entities/filterattributevalue.entity';\r\nexport class Dimension extends FilterAttribute {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Dimension';\r\n }\r\n \r\n public Description: string; \r\n public Values: FilterAttributeValue[] = []; \r\n public AttributeGroupName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Dimension } from '@dino-proxy/entities/dimension.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension-grid',\r\n templateUrl: './dimension-grid.component.html'\r\n})\r\nexport class DimensionGridComponent extends BaseGridComponent {\r\n\r\n headerIsShowInFilterData = Utils.ToCamelCase(this.LIST(\"YesNo\"));\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DimensionGridComponent', Dimension, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/dimension\", e.data.EntryID]);\r\n }\r\n\r\n OnDelete = (e) => {\r\n this.grid.instance.deleteRow(e.row.rowIndex);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SpecificationAttribute } from './../entities/specificationattribute.entity';\r\nimport { SpecificationAttributeValidityResult } from './../entities/specificationattributevalidityresult.entity';\r\n@Injectable()\r\nexport class SpecificationAttributeEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SpecificationAttribute\", api);}\r\n\t\r\n\r\n public GetAttributeValidities() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAttributeValidities', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FilterAttribute } from './../entities/filterattribute.entity';\r\nimport { FilterAttributeValue } from './../entities/filterattributevalue.entity';\r\nexport class SpecificationAttribute extends FilterAttribute {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SpecificationAttribute';\r\n }\r\n \r\n public Description: string; \r\n public IsPredefinedValue: boolean; \r\n public IsShowDescription: boolean; \r\n public Values: FilterAttributeValue[] = []; \r\n public AttributeGroupName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SpecificationAttributeValue } from './../entities/specificationattributevalue.entity';\r\n@Injectable()\r\nexport class SpecificationAttributeValueEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SpecificationAttributeValue\", api);}\r\n\t\r\n\r\n public ListEx(specificationAttributeID: number, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {specificationAttributeID: specificationAttributeID, options:options?.GetLoadOptions()} );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SpecificationAttributeEndpoint } from '@dino-proxy/endpoints/specificationattribute.endpoint';\r\nimport { SpecificationAttribute } from '@dino-proxy/entities/specificationattribute.entity';\r\nimport { DataSourceCustomAction, ServerSideDataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { AttributeGroupEndpoint } from '@dino-proxy/endpoints/attributegroup.endpoint';\r\nimport { SpecificationAttributeValueEndpoint } from '@dino-proxy/endpoints/specificationattributevalue.endpoint';\r\nimport { EnumAttributeDisplayOptions, EnumFilterDisplayOptions } from '@dino-proxy/enums';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseOptionState {\r\n\tFilterAttributeDisplayOptions: GenericListEntity[] = [];\r\n\tFilterAttributeDisplayOptionSet = {};\r\n}\r\n\r\nexport function GetValidDisplayToFilterOptionSet() {\r\n\tconst displayToFilterOptionSet = {};\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.ColorCircles] = [EnumFilterDisplayOptions.ColorCircles, EnumFilterDisplayOptions.Text];\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.Date] = [EnumFilterDisplayOptions.DateRange, EnumFilterDisplayOptions.Text];\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.Link] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.Number] = [EnumFilterDisplayOptions.NumberRange, EnumFilterDisplayOptions.Text];\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.Tag] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n\tdisplayToFilterOptionSet[EnumAttributeDisplayOptions.Text] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n\treturn displayToFilterOptionSet;\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-specification-attribute',\r\n\ttemplateUrl: './specification-attribute.component.html',\r\n\tstyleUrls: ['./specification-attribute.component.scss']\r\n})\r\nexport class SpecificationAttributeComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: SpecificationAttributeEndpoint,\r\n\t\tprivate attributeGroupEndpoint: AttributeGroupEndpoint,\r\n\t\tprivate specificationAttributeValueEndpoint: SpecificationAttributeValueEndpoint) {\r\n\t\tsuper(A, 'SpecificationAttributeComponent', SpecificationAttribute, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitDataSources() {\r\n\t\tthis.LoadDataSources();\r\n\t}\r\n\r\n\tLoadDataSources() {\r\n\t\tthis.DataSources['AttributeGroupsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.attributeGroupEndpoint.GetList(options));\r\n\r\n\t\tthis.DataSources['SpecificationAttributeValues'] =\r\n\t\t\tnew ServerSideDataSourceEndpointCRUD(this.specificationAttributeValueEndpoint,\r\n\t\t\t\t{ requireTotalCount: false },\r\n\t\t\t\t(options: DataLoadOptions) => this.specificationAttributeValueEndpoint.ListEx(this.EntityEntryID, options));\r\n\r\n\t\tthis.State.FilterAttributeDisplayOptionSet = GetValidDisplayToFilterOptionSet();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus() {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}];\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\tonAttributeDisplayOptionChanged(e) {\r\n\t\tconst filterDisplayOptions = this.LIST('EnumFilterDisplayOptions');\r\n\r\n\t\tthis.State.FilterAttributeDisplayOptions\r\n\t\t\t= filterDisplayOptions.filter(x => (this.State.FilterAttributeDisplayOptionSet[this.Entity.AttributeDisplayOption] as EnumFilterDisplayOptions[]).find(y => y === x.Value));\r\n\r\n\t\tif (this.Entity.FilterDisplayOption && !this.State.FilterAttributeDisplayOptions.find(x => x.Value === this.Entity.FilterDisplayOption)) {\r\n\t\t\tthis.Entity.FilterDisplayOption = this.State.FilterAttributeDisplayOptions[0].Value as EnumFilterDisplayOptions;\r\n\t\t\tthis.RefreshEntityOriginal();\r\n\t\t}\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\nexport enum SidebarActions {\r\n ToggleShoppingCart,\r\n ToggleWishlist,\r\n OpenShoppingCart,\r\n OpenWishlist,\r\n CloseShoppingCart,\r\n CloseWishlist\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SidebarsService {\r\n private sidebarActionSubject = new Subject();\r\n readonly SidebarAction = this.sidebarActionSubject.asObservable();\r\n\r\n SetSidebarAction(action: SidebarActions) {\r\n this.sidebarActionSubject.next(action);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DimensionEndpoint } from '@dino-proxy/endpoints/dimension.endpoint';\r\nimport { Dimension } from '@dino-proxy/entities/dimension.entity';\r\nimport { AttributeGroupEndpoint } from '@dino-proxy/endpoints/attributegroup.endpoint';\r\nimport { EnumAttributeDisplayOptions, EnumFilterDisplayOptions } from '@dino-proxy/enums';\r\nimport { GetValidDisplayToFilterOptionSet } from '@dino-pages/settings/specification-attributes/specification-attribute.component';\r\n\r\nclass State extends BaseOptionState {\r\n FilterAttributeDisplayOptions: GenericListEntity[] = [];\r\n FilterAttributeDisplayOptionSet = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dimension',\r\n templateUrl: './dimension.component.html',\r\n styleUrls: ['./dimension.component.scss']\r\n})\r\nexport class DimensionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: DimensionEndpoint,\r\n private attributeGroupEndpoint: AttributeGroupEndpoint) {\r\n super(A, 'DimensionComponent', Dimension, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitDataSources() { \r\n this.LoadSelectOptions();\r\n }\r\n\r\n LoadSelectOptions() {\r\n this.DataSources['AttributeGroupsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.attributeGroupEndpoint.GetList(options)); \r\n this.State.FilterAttributeDisplayOptionSet = GetValidDisplayToFilterOptionSet();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n onAttributeDisplayOptionChanged(e) {\r\n const filterDisplayOptions = this.LIST('EnumFilterDisplayOptions');\r\n\r\n this.State.FilterAttributeDisplayOptions\r\n = filterDisplayOptions.filter(x => (this.State.FilterAttributeDisplayOptionSet[this.Entity.AttributeDisplayOption] as EnumFilterDisplayOptions[]).find(y => y === x.Value));\r\n\r\n if (this.Entity.FilterDisplayOption && !this.State.FilterAttributeDisplayOptions.find(x => x.Value === this.Entity.FilterDisplayOption)) {\r\n this.Entity.FilterDisplayOption = this.State.FilterAttributeDisplayOptions[0].Value as EnumFilterDisplayOptions;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumDiscountPermissionCheckTypes } from './../enums';\r\nexport class DiscountPermission extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermission';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public DiscountRuleID: number; \r\n public CheckType: EnumDiscountPermissionCheckTypes; \r\n public DiscountPermissionCategories: DiscountPermissionCategory[] = []; \r\n public DiscountPermissionBrands: DiscountPermissionBrand[] = []; \r\n public DiscountPermissionVendors: DiscountPermissionVendor[] = []; \r\n public DiscountPermissionManufacturers: DiscountPermissionManufacturer[] = []; \r\n public DiscountPermissionItems: DiscountPermissionItem[] = []; \r\n\t\r\n}\r\n\r\nexport class DiscountPermissionCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermissionCategory';\r\n }\r\n \r\n public DiscountRuleID: number; \r\n public CategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class DiscountPermissionBrand extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermissionBrand';\r\n }\r\n \r\n public DiscountRuleID: number; \r\n public BrandID: number; \r\n public LineID: number;\r\n}\r\nexport class DiscountPermissionVendor extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermissionVendor';\r\n }\r\n \r\n public DiscountRuleID: number; \r\n public VendorID: number; \r\n public LineID: number;\r\n}\r\nexport class DiscountPermissionManufacturer extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermissionManufacturer';\r\n }\r\n \r\n public DiscountRuleID: number; \r\n public ManufacturerID: number; \r\n public LineID: number;\r\n}\r\nexport class DiscountPermissionItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountPermissionItem';\r\n }\r\n \r\n public DiscountRuleID: number; \r\n public ItemID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DiscountPermission } from '@dino-proxy/entities/discountpermission.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-discount-permission-grid',\r\n templateUrl: './discount-permission-grid.component.html'\r\n})\r\nexport class DiscountPermissionGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DiscountPermissionGridComponent', DiscountPermission, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/discount-permission\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DiscountPermission } from './../entities/discountpermission.entity';\r\n@Injectable()\r\nexport class DiscountPermissionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DiscountPermission\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DiscountPermissionEndpoint } from '@dino-proxy/endpoints/discountpermission.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-discount-permission-list',\r\n templateUrl: './discount-permission-list.component.html'\r\n})\r\nexport class DiscountPermissionListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DiscountPermissionEndpoint) {\r\n super(A, 'DiscountPermissionListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DiscountPermissionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DiscountRule } from '@dino-proxy/entities/discountrule.entity';\r\n@Injectable()\r\nexport class DiscountRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DiscountRule\", api);}\r\n\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntitiesResponse, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DiscountPermissionEndpoint } from '@dino-proxy/endpoints/discountpermission.endpoint';\r\nimport { DiscountPermission } from '@dino-proxy/entities/discountpermission.entity';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { ItemListParams } from '@dino-proxy/params/itemlist.param';\r\nimport { Category } from '@dino-proxy/entities/category.entity';\r\nimport { VendorEndpoint } from '@dino-proxy/endpoints/vendor.endpoint';\r\nimport { BrandEndpoint } from '@dino-proxy/endpoints/brand.endpoint';\r\nimport { ManufacturerEndpoint } from '@dino-proxy/endpoints/manufacturer.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n PermissionTabs: GenericListEntity[] = [];\r\n CurrentTabIndex = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-discount-permission',\r\n templateUrl: './discount-permission.component.html',\r\n styleUrls: ['./discount-permission.component.scss']\r\n})\r\nexport class DiscountPermissionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: DiscountPermissionEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint,\r\n private categoryEndpoint: CategoryEndpoint,\r\n private vendorEndpoint: VendorEndpoint,\r\n private brandEndpoint: BrandEndpoint,\r\n private manufacturerEndpoint: ManufacturerEndpoint,\r\n private itemsEndpoint: ItemsEndpoint) {\r\n super(A, 'DiscountPermissionComponent', DiscountPermission, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n DiscountRulePage = 'pages/discount-rule';\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.PermissionTabs = this.LIST(\"DiscountPermissionTabs\");\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.LoadOptions();\r\n }\r\n\r\n LoadOptions() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BrandEndpoint } from '@dino-proxy/endpoints/brand.endpoint';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountPermissionBrand } from '@dino-proxy/entities/discountpermission.entity';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-permission-brand-grid',\r\n templateUrl: './permission-brand-grid.component.html'\r\n})\r\nexport class PermissionBrandGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private brandEndpoint: BrandEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint) {\r\n super(A, 'PermissionBrandGridComponent', DiscountPermissionBrand, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n this.DataSources['BrandsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.brandEndpoint.ListLite(options), \r\n entryID => this.brandEndpoint.Get(entryID), \r\n undefined, \r\n false);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | Lookup:DS('BrandsAdmin'):'Name' | async}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountPermissionBrand, DiscountPermissionCategory } from '@dino-proxy/entities/discountpermission.entity';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-permission-category-grid',\r\n templateUrl: './permission-category-grid.component.html'\r\n})\r\nexport class PermissionCategoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private categoryEndpoint: CategoryEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint) {\r\n super(A, 'PermissionCategoryGridComponent', DiscountPermissionCategory, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n this.DataSources['CategoriesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.categoryEndpoint.GetAllCategories(options),\r\n entryID => this.categoryEndpoint.GetCategoryByID(entryID),\r\n undefined,\r\n false);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | Lookup:DS('CategoriesAdmin'):'Name' | async}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountPermissionBrand, DiscountPermissionItem } from '@dino-proxy/entities/discountpermission.entity';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-permission-item-grid',\r\n templateUrl: './permission-item-grid.component.html'\r\n})\r\nexport class PermissionItemGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint) {\r\n super(A, 'PermissionItemGridComponent', DiscountPermissionItem, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n this.DataSources['ItemsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemsEndpoint.GetItemsLite(options),\r\n entryID => this.itemsEndpoint.GetItemLiteByID(entryID),\r\n undefined,\r\n false);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | Lookup:DS('ItemsAdmin'):'ItemName' | async}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BrandEndpoint } from '@dino-proxy/endpoints/brand.endpoint';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountPermissionBrand, DiscountPermissionManufacturer } from '@dino-proxy/entities/discountpermission.entity';\r\nimport { ManufacturerEndpoint } from '@dino-proxy/endpoints/manufacturer.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-permission-manufacturer-grid',\r\n templateUrl: './permission-manufacturer-grid.component.html'\r\n})\r\nexport class PermissionManufacturerGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private manufacturerEndpoint: ManufacturerEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint) {\r\n super(A, 'PermissionManufacturerGridComponent', DiscountPermissionManufacturer, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n this.DataSources['ManufacturersAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.manufacturerEndpoint.ListLite(options),\r\n entryID => this.manufacturerEndpoint.Get(entryID),\r\n undefined,\r\n false);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | Lookup:DS('ManufacturersAdmin'):'Name' | async}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountPermissionBrand, DiscountPermissionVendor } from '@dino-proxy/entities/discountpermission.entity';\r\nimport { VendorEndpoint } from '@dino-proxy/endpoints/vendor.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-permission-vendor-grid',\r\n templateUrl: './permission-vendor-grid.component.html'\r\n})\r\nexport class PermissionVendorGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private vendorEndpoint: VendorEndpoint,\r\n private discountRuleEndpoint: DiscountRuleEndpoint) {\r\n super(A, 'PermissionVendorGridComponent', DiscountPermissionVendor, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.DataSources['DiscountRulesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.discountRuleEndpoint.GetList(options));\r\n this.DataSources['VendorsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.vendorEndpoint.ListLite(options),\r\n entryID => this.vendorEndpoint.Get(entryID),\r\n undefined,\r\n false);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | Lookup:DS('VendorsAdmin'):'Name' | async}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DiscountRule extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DiscountRule';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public MaximumLineDiscountPercent: number; \r\n public MaximumDocumentDiscountPercent: number; \r\n public MaximumCombinedDiscountPercent: number; \r\n public IsAllowSpecialPricelistException: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DiscountRule } from '@dino-proxy/entities/discountrule.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-discount-rule-grid',\r\n templateUrl: './discount-rule-grid.component.html'\r\n})\r\nexport class DiscountRuleGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DiscountRuleGridComponent', DiscountRule, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/discount-rule\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-discount-rule-list',\r\n templateUrl: './discount-rule-list.component.html'\r\n})\r\nexport class DiscountRuleListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DiscountRuleEndpoint) {\r\n super(A, 'DiscountRuleListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DiscountRulesAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DiscountRuleEndpoint } from '@dino-proxy/endpoints/discountrule.endpoint ';\r\nimport { DiscountRule } from '@dino-proxy/entities/discountrule.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-discount-rule',\r\n\ttemplateUrl: './discount-rule.component.html',\r\n\tstyleUrls: ['./discount-rule.component.scss']\r\n})\r\nexport class DiscountRuleComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: DiscountRuleEndpoint) {\r\n\t\tsuper(A, 'DiscountRuleComponent', DiscountRule, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BusinessOption } from '@dino-proxy/entities/businessoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-option-grid',\r\n templateUrl: './document-option-grid.component.html'\r\n})\r\nexport class DocumentOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentOptionsGridComponent', BusinessOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/document-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DocumentOptionEndpoint } from '@dino-proxy/endpoints/documentoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-option-list',\r\n templateUrl: './document-option-list.component.html'\r\n})\r\nexport class DocumentOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DocumentOptionEndpoint) {\r\n super(A, 'DocumentOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DocumentOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { DocumentOptionEndpoint } from '@dino-proxy/endpoints/documentoption.endpoint';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAddressEntryModes, EnumContactPersonEntryModes, EnumCustomFieldLocations, EnumFormFieldOptions } from '@dino-proxy/enums';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { AddressOptionEndpoint } from '@dino-proxy/endpoints/addressoption.endpoint';\r\nimport { CustomFieldsetEndpoint } from '@dino-proxy/endpoints/customfieldset.endpoint';\r\nimport { CustomFieldset } from '@dino-proxy/entities/customfieldset.entity';\r\n\r\nclass State extends BaseOptionState {\r\n CurrentTabIndex = 0;\r\n Tabs: any[] = [];\r\n OnlyVisibleOptions: GenericListEntity[] = [];\r\n WithoutViewOptions: GenericListEntity[] = [];\r\n HeaderFieldSets: CustomFieldset[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-option',\r\n templateUrl: './document-option.component.html',\r\n styleUrls: ['./document-option.component.scss']\r\n})\r\nexport class DocumentOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: DocumentOptionEndpoint,\r\n\t\tprivate addressOptionEndpoint: AddressOptionEndpoint,\r\n private fieldsetEndpoint: CustomFieldsetEndpoint) {\r\n super(A, 'DocumentOptionComponent', DocumentOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n CustomFieldsetPage = 'pages/custom-fieldset';\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n IsAllowSelectingAddressVisible() {\r\n return this.Entity.AddressEntryMode === EnumAddressEntryModes.CustomerAddress \r\n || this.Entity.AddressEntryMode === EnumAddressEntryModes.Both;\r\n }\r\n\r\n IsAllowEditingAddressVisible() {\r\n return this.Entity.IsAllowSelectingAddress && this.IsAllowSelectingAddressVisible();\r\n }\r\n\r\n IsAllowSelectingContactVisible() {\r\n return this.Entity.ContactPersonEntryMode === EnumContactPersonEntryModes.CustomerContactPerson \r\n || this.Entity.ContactPersonEntryMode === EnumContactPersonEntryModes.Both;\r\n }\r\n\r\n IsAllowEditingContactVisible() {\r\n return this.Entity.IsAllowSelectingContact && this.IsAllowSelectingContactVisible();\r\n }\r\n\r\n IsCasualContactPersonNotificationReceiverVisible() {\r\n return this.Entity.ContactPersonEntryMode === EnumContactPersonEntryModes.Both \r\n || this.Entity.ContactPersonEntryMode === EnumContactPersonEntryModes.Casual;\r\n }\r\n\r\n IsItemTotalsVisible() {\r\n return this.Entity.IsAllowLineEditing;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnEntityNew() {\r\n this.Entity.TotalOption = EnumFormFieldOptions.Hidden;\r\n this.Entity.TotalAfterVatOption = EnumFormFieldOptions.Hidden;\r\n }\r\n\r\n OnAllowItemEditingChange(e) {\r\n this.Entity.TotalOption = EnumFormFieldOptions.Hidden;\r\n this.Entity.TotalAfterVatOption = EnumFormFieldOptions.Hidden;\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblGeneralSection'),\r\n Name: \"GeneralSection\"\r\n },\r\n {\r\n index: 1,\r\n text: this.RC('lblAddressContactSection'),\r\n Name: \"AddressContactSection\"\r\n },\r\n {\r\n index: 2,\r\n text: this.RC('lblEditOptionsSection'),\r\n Name: \"EditOptionsSection\"\r\n },\r\n {\r\n index: 3,\r\n text: this.RC('lblDocumentDetails'),\r\n Name: \"DocumentDetailsSection\"\r\n },\r\n {\r\n index: 4,\r\n text: this.RC('lblAlertsSection'),\r\n Name: \"AlertsSection\"\r\n }\r\n ];\r\n \r\n this.State.OnlyVisibleOptions = this.LIST('EnumFormFieldOptions').filter(o => o.Value === EnumFormFieldOptions.Disabled || o.Value === EnumFormFieldOptions.Hidden);\r\n this.State.WithoutViewOptions = this.LIST('EnumFormFieldOptions').filter(o => o.Value !== EnumFormFieldOptions.Visible);\r\n this.DataSources['AddressOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.addressOptionEndpoint.GetList(options)); \r\n this.fieldsetEndpoint.GetListShallow().subscribe(r => {\r\n if (r?.IsSuccess) {\r\n this.State.HeaderFieldSets = r.Entities.filter(f => f.Location === EnumCustomFieldLocations.Header);\r\n }\r\n });\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { FeatureOption } from '@dino-proxy/entities/featureoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-feature-option-grid',\r\n templateUrl: './feature-option-grid.component.html'\r\n})\r\nexport class FeatureOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FeatureOptionsGridComponent', FeatureOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/feature-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FeatureOptionEndpoint } from '@dino-proxy/endpoints/featureoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-feature-option-list',\r\n templateUrl: './feature-option-list.component.html'\r\n})\r\nexport class FeatureOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: FeatureOptionEndpoint) {\r\n super(A, 'FeatureOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['FeatureOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FeatureOptionEndpoint } from '@dino-proxy/endpoints/featureoption.endpoint';\r\nimport { FeatureOption } from '@dino-proxy/entities/featureoption.entity';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\nimport { ExternalLink } from '@dino-proxy/entities/externallink.entity';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\tExternalQueries: ExternalQuery[] = [];\r\n\tExternalLinks: ExternalLink[] = [];\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-feature-option',\r\n\ttemplateUrl: './feature-option.component.html',\r\n\tstyleUrls: ['./feature-option.component.scss']\r\n})\r\nexport class FeatureOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: FeatureOptionEndpoint,\r\n\t\tprivate externalQueryEndpoint: ExternalQueryEndpoint,\r\n\t\tprivate externalLinkEndpoint: ExternalLinkEndpoint) {\r\n\t\tsuper(A, 'FeatureOptionComponent', FeatureOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.externalQueryEndpoint.GetList().subscribe(r => {\r\n\t\t\tif (r.IsSuccess) this.State.ExternalQueries = r.Entities;\r\n\t\t});\r\n\t\tthis.externalLinkEndpoint.GetList().subscribe(r => {\r\n\t\t\tif (r.IsSuccess) this.State.ExternalLinks = r.Entities;\r\n\t\t});\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { FilterOption } from '@dino-proxy/entities/filteroption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-filter-option-grid',\r\n templateUrl: './filter-option-grid.component.html'\r\n})\r\nexport class FilterOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FilterOptionsGridComponent', FilterOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/filter-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FilterOptionEndpoint } from '@dino-proxy/endpoints/filteroption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-filter-option-list',\r\n templateUrl: './filter-option-list.component.html'\r\n})\r\nexport class FilterOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: FilterOptionEndpoint) {\r\n super(A, 'FilterOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['FilterOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FilterOption } from '@dino-proxy/entities/filteroption.entity';\r\nimport { FilterOptionEndpoint } from '@dino-proxy/endpoints/filteroption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-filter-option',\r\n\ttemplateUrl: './filter-option.component.html',\r\n\tstyleUrls: ['./filter-option.component.scss']\r\n})\r\nexport class FilterOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: FilterOptionEndpoint) {\r\n\t\tsuper(A, 'FilterOptionComponent', FilterOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumGiftCardValueTypes } from './../enums';\r\nimport { HiddenItem } from './../entities/hiddenitem.entity';\r\nexport class GiftCard extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'GiftCard';\r\n }\r\n \r\n public Name: string; \r\n public Comments: string; \r\n public ActivationCode: string; \r\n public IsActive: boolean; \r\n public ValidFrom: Date; \r\n public ValidUntil: Date; \r\n public CustomerID: number; \r\n public Value: number; \r\n public Currency: string; \r\n public MinOrderSum: number; \r\n public MinOrderCurrency: string; \r\n public IsUsed: boolean; \r\n public HiddenItemID: number; \r\n public ValueType: EnumGiftCardValueTypes; \r\n public IsValidForFirstOrderOnly: boolean; \r\n public HiddenItem: HiddenItem = new HiddenItem; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { GiftCard } from './../entities/giftcard.entity';\r\n@Injectable()\r\nexport class GiftCardEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"GiftCard\", api);}\r\n\t\r\n\r\n public ReactivateGiftCardByID(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ReactivateGiftCardByID', {EntryID: EntryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Promotion } from './../entities/promotion.entity';\r\n@Injectable()\r\nexport class PromotionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Promotion\", api);}\r\n\t\r\n\r\n public override Save(Entity: Promotion) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public CheckUniqueSecretTextAvailable(secretText: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'CheckUniqueSecretTextAvailable', {secretText: secretText} );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { take } from 'rxjs/operators';\r\nimport { Currency } from '@dino-proxy/entities/currency.entity';\r\nimport { Observable } from 'rxjs';\r\nimport { GiftCard } from '@dino-proxy/entities/giftcard.entity';\r\nimport { GiftCardEndpoint } from '@dino-proxy/endpoints/giftcard.endpoint';\r\nimport { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumGiftCardStatuses } from '@dino-proxy/enums';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseOptionState {\r\n EffectItems: ItemView[] = [];\r\n Customers: Customer[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-gift-card',\r\n templateUrl: './gift-card.component.html',\r\n styleUrls: ['./gift-card.component.scss']\r\n})\r\nexport class GiftCardComponent extends BasePageCRUDComponent {\r\n originalSecretText: string = \"\";\r\n GiftCardStatus: EnumGiftCardStatuses;\r\n IsReactivateGiftCardButtonVisible: boolean;\r\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n constructor(A: ServiceBagService,\r\n private endpoint: GiftCardEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private promotionEndpoint: PromotionEndpoint,\r\n private giftCardEndpoint: GiftCardEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'GiftCardComponent', GiftCard, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n\r\n }\r\n\r\n protected OnEntityLoaded(): void {\r\n this.originalSecretText = this.Entity.ActivationCode;\r\n this.GiftCardStatus = this.Entity.IsUsed ? EnumGiftCardStatuses.Used : EnumGiftCardStatuses.NotUsed;\r\n this.IsReactivateGiftCardButtonVisible = this.Entity.IsUsed;\r\n }\r\n\r\n override OnInitComponent(): void {\r\n this.FlushDataAfterDuplicate();\r\n this.LoadItems();\r\n this.DataSources['Customers'] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n }\r\n\r\n protected LoadItems() {\r\n this.DataSources['HiddenItems'] \r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.itemsEndpoint.GetHiddenItems(options));\r\n }\r\n\r\n FlushDataAfterDuplicate() {\r\n if (this.IsAddMode) {\r\n this.Entity.ActivationCode = '';\r\n this.Entity.IsUsed = false;\r\n }\r\n }\r\n\r\n ReactivateGiftCard() {\r\n this.Do(this.giftCardEndpoint.ReactivateGiftCardByID(this.EntityEntryID), true,\r\n (response) => {\r\n if (!response.IsSuccess) return;\r\n this.GiftCardStatus = EnumGiftCardStatuses.NotUsed;\r\n this.IsReactivateGiftCardButtonVisible = false;\r\n\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.GIFT_CARD_REACTIVATED);\r\n });\r\n }\r\n\r\n isSecretTextAvailable = (params): Promise => {\r\n if (this.originalSecretText == params.value) {\r\n return Promise.resolve(true);\r\n }\r\n return new Promise((resolve) => {\r\n this.promotionEndpoint.CheckUniqueSecretTextAvailable(params.value).subscribe((result) => {\r\n resolve(result.Data);\r\n });\r\n })\r\n }\r\n\r\n validateDate = (): boolean => {\r\n if (this.Entity.ValidFrom && this.Entity.ValidUntil) {\r\n return this.Entity.ValidUntil > this.Entity.ValidFrom;\r\n }\r\n return true;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n HandleValueTypeChanged(e) {\r\n \r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { GiftCard } from '@dino-proxy/entities/giftcard.entity';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-gift-cards-grid',\r\n templateUrl: './gift-cards-grid.component.html'\r\n})\r\nexport class GiftCardsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: PromotionEndpoint) {\r\n super(A, 'GiftCardsGridComponent', GiftCard, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([ROUTE_PATHS.GIFT_CARD, e.data.EntryID]);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { GiftCardEndpoint } from '@dino-proxy/endpoints/giftcard.endpoint';\r\nimport { filter } from 'rxjs';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { GetNewObjectPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-gift-cards-list',\r\n templateUrl: './gift-cards-list.component.html'\r\n})\r\nexport class GiftCardsListComponent extends BasePageComponent {\r\n\r\n NewGiftCardRoute: string = GetNewObjectPath(ROUTE_PATHS.GIFT_CARD);\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: GiftCardEndpoint,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'GiftCardsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n this.InitEvents();\r\n }\r\n\r\n private InitEvents() {\r\n const giftCardReactivatedSubscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.GIFT_CARD_REACTIVATED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.LoadDataSource();\r\n });\r\n\r\n this.RegisterSubscription(giftCardReactivatedSubscription);\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['GiftCardsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.GetList(options));\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity, \r\n ExternalEntityType: new () => BaseEntity, \r\n ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { HomePageOption } from '@dino-proxy/entities/homepageoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-homepage-option-grid',\r\n templateUrl: './homepage-option-grid.component.html'\r\n})\r\nexport class HomepageOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HomepageOptionsGridComponent', HomePageOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/homepage-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HomepageOptionEndpoint } from '@dino-proxy/endpoints/homepageoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-homepage-option-list',\r\n templateUrl: './homepage-option-list.component.html'\r\n})\r\nexport class HomepageOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: HomepageOptionEndpoint) {\r\n super(A, 'HomepageOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['HomepageOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { HomepageOptionEndpoint } from '@dino-proxy/endpoints/homepageoption.endpoint';\r\nimport { HomePageOption } from '@dino-proxy/entities/homepageoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-homepage-option',\r\n\ttemplateUrl: './homepage-option.component.html',\r\n\tstyleUrls: ['./homepage-option.component.scss']\r\n})\r\nexport class HomepageOptionComponent extends BasePageCRUDComponent {\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: HomepageOptionEndpoint) {\r\n\t\tsuper(A, 'HomepageOptionComponent', HomePageOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-display-element-option-grid',\r\n templateUrl: './item-display-element-option-grid.component.html'\r\n})\r\nexport class ItemDisplayElementOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemDisplayElementOptionsGridComponent', ItemDisplayElementOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/item-display-element-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemDisplayElementOption } from './../entities/itemdisplayelementoption.entity';\r\n@Injectable()\r\nexport class ItemDisplayElementOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemDisplayElementOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ItemDisplayElementOptionEndpoint } from '@dino-proxy/endpoints/itemdisplayelementoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-display-element-option-list',\r\n templateUrl: './item-display-element-option-list.component.html'\r\n})\r\nexport class ItemDisplayElementOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ItemDisplayElementOptionEndpoint) {\r\n super(A, 'ItemDisplayElementOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ItemDisplayElementOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PriceDisplayOption } from './../entities/pricedisplayoption.entity';\r\n@Injectable()\r\nexport class PriceDisplayOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"PriceDisplayOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayElementOptionEndpoint } from '@dino-proxy/endpoints/itemdisplayelementoption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { PriceDisplayOptionEndpoint } from '@dino-proxy/endpoints/pricedisplayoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-display-element-option',\r\n templateUrl: './item-display-element-option.component.html',\r\n styleUrls: ['./item-display-element-option.component.scss']\r\n})\r\nexport class ItemDisplayElementOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: ItemDisplayElementOptionEndpoint,\r\n private priceDisplayOptionsEndpoint: PriceDisplayOptionEndpoint) {\r\n super(A, 'ItemDisplayElementOptionComponent', ItemDisplayElementOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n PriceDisplayOptionPage = 'pages/price-display-option';\r\n\r\n protected OnInitComponent(): void {\r\n this.HandleEntityAfterDuplication();\r\n this.LoadDataSources();\r\n }\r\n\r\n HandleEntityAfterDuplication() {\r\n (this.IsAddMode) && ( this.SetDirty());\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n LoadDataSources() {\r\n this.DataSources['PriceDisplayOptions'] \r\n\t\t= new DataSourceCustomAction((options: DataLoadOptions) => this.priceDisplayOptionsEndpoint.GetList(options));\r\n\t}\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-display-popup-option-grid',\r\n templateUrl: './item-display-popup-option-grid.component.html'\r\n})\r\nexport class ItemDisplayPopupOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemDisplayPopupOptionsGridComponent', ItemDisplayPopupOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/item-display-popup-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ItemDisplayPopupOption } from './../entities/itemdisplaypopupoption.entity';\r\n@Injectable()\r\nexport class ItemDisplayPopupOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ItemDisplayPopupOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ItemDisplayPopupOptionEndpoint } from '@dino-proxy/endpoints/itemdisplaypopupoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-display-popup-option-list',\r\n templateUrl: './item-display-popup-option-list.component.html'\r\n})\r\nexport class ItemDisplayPopupOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ItemDisplayPopupOptionEndpoint) {\r\n super(A, 'ItemDisplayPopupOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ItemDisplayPopupOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ItemDisplayPopupOptionEndpoint } from '@dino-proxy/endpoints/itemdisplaypopupoption.endpoint';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { PriceDisplayOptionEndpoint } from '@dino-proxy/endpoints/pricedisplayoption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-item-display-popup-option',\r\n\ttemplateUrl: './item-display-popup-option.component.html',\r\n\tstyleUrls: ['./item-display-popup-option.component.scss']\r\n})\r\nexport class ItemDisplayPopupOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: ItemDisplayPopupOptionEndpoint,\r\n\t\tprivate priceDisplayOptionsEndpoint: PriceDisplayOptionEndpoint) {\r\n\t\tsuper(A, 'ItemDisplayPopupOptionComponent', ItemDisplayPopupOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tPriceDisplayOptionPage = 'pages/price-display-option';\r\n\r\n\tprotected OnInitComponent() {\r\n\t\tthis.HandleEntityAfterDuplication();\r\n\t\tthis.LoadDataSources();\r\n\t}\r\n\r\n\tLoadDataSources() {\r\n this.DataSources['PriceDisplayOptions'] \r\n\t\t= new DataSourceCustomAction((options: DataLoadOptions) => this.priceDisplayOptionsEndpoint.GetList(options));\r\n\t}\r\n\t\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n\tHandleEntityAfterDuplication() {\r\n\t\t(this.IsAddMode) && ( this.SetDirty());\r\n\t}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ItemOption } from '@dino-proxy/entities/itemoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-option-grid',\r\n templateUrl: './item-option-grid.component.html'\r\n})\r\nexport class ItemOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemOptionsGridComponent', ItemOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/item-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-option-list',\r\n templateUrl: './item-option-list.component.html'\r\n})\r\nexport class ItemOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ItemOptionEndpoint) {\r\n super(A, 'ItemOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ItemOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ItemDisplayPopupOptionEndpoint } from '@dino-proxy/endpoints/itemdisplaypopupoption.endpoint';\r\nimport { ItemOption } from '@dino-proxy/entities/itemoption.entity';\r\nimport { ItemDisplayElementOptionEndpoint } from '@dino-proxy/endpoints/itemdisplayelementoption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\nimport { UI_EVENTS, UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-item-option',\r\n templateUrl: './item-option.component.html',\r\n styleUrls: ['./item-option.component.scss']\r\n})\r\nexport class ItemOptionComponent extends BasePageCRUDComponent {\r\n\r\n ItemDisplayElementOptionPage = 'pages/item-display-element-option';\r\n ItemDisplayPopupOptionPage = 'pages/item-display-popup-option';\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: ItemOptionEndpoint,\r\n\t\tprivate itemDisplayElementOptionEndpoint: ItemDisplayElementOptionEndpoint,\r\n\t\tprivate itemDisplayPopupOptionEndpoint: ItemDisplayPopupOptionEndpoint,\r\n\t\tprivate uiComponentService: UiComponentService) {\r\n super(A, 'ItemOptionComponent', ItemOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.HandleEntityAfterDuplication();\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected OnEntityLoaded(): void {\r\n console.log(this.Entity.PopupDesktopOptionID);\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.ITEM_OPTION_ENTITY_LOADED, this.Entity);\r\n }\r\n\r\n protected override OnInitDataSources() { \r\n this.LoadOptions();\r\n }\r\n\r\n LoadOptions() {\r\n this.DataSources['ItemDisplayElementOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemDisplayElementOptionEndpoint.GetList(options));\r\n this.DataSources['ItemDisplayPopupOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemDisplayPopupOptionEndpoint.GetList(options));\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n \r\n HandleEntityAfterDuplication() {\r\n\t\t(this.IsAddMode) && ( this.SetDirty());\r\n\t}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { NotificationOption } from '@dino-proxy/entities/notificationoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-option-grid',\r\n templateUrl: './notification-option-grid.component.html'\r\n})\r\nexport class NotificationOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationOptionsGridComponent', NotificationOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/notification-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { NotificationOptionEndpoint } from '@dino-proxy/endpoints/notificationoption.endpoint';\r\nimport { NotificationOption } from '@dino-proxy/entities/notificationoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-option-list',\r\n templateUrl: './notification-option-list.component.html'\r\n})\r\nexport class NotificationOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: NotificationOptionEndpoint) {\r\n super(A, 'NotificationOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['NotificationOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationOption } from './../entities/notificationoption.entity';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nexport class NotificationOptionView extends NotificationOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationOptionView';\r\n }\r\n \r\n public DocumentNotificationEmailAddressEx: string; \r\n public SenderEmailAddressEx: string; \r\n public SenderDisplayNameEx: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { NotificationOptionEndpoint } from '@dino-proxy/endpoints/notificationoption.endpoint';\r\nimport { NotificationOptionView } from '@dino-proxy/views/notificationoption.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { OptionSourceView } from '@dino-proxy/views/optionsource.view';\r\nimport { EnumInvoiceOneDocumentTypes, EnumInvoiceOneNotificationTypes } from '@dino-proxy/enums';\r\nimport { NotificationDocumentOption, NotificationTemplateOption } from '@dino-proxy/entities/notificationoption.entity';\r\nimport { GenericListEntity, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { PrintingTemplate } from '@dino-proxy/entities/printingtemplate.entity';\r\nimport { InvoiceOneTemplate } from '@dino-proxy/entities/invoiceonetemplate.entity';\r\n\r\nclass State extends BaseOptionState {\r\n InvoiceOneTemplatesDataSourceDictionary: { [id: number]: OptionSourceView[] } = {};\r\n PrintingDocCodesDataSourceDictionary: { [id: number]: OptionSourceView[] } = {};\r\n NotificationTemplates: NotificationTemplate[] = [];\r\n ActualInvoiceOneNotificationTypes: GenericListEntity[] = [];\r\n CurrentTabIndex = 0;\r\n Tabs: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-option',\r\n templateUrl: './notification-option.component.html',\r\n styleUrls: ['./notification-option.component.scss']\r\n})\r\nexport class NotificationOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private notificationOptionEndpoint: NotificationOptionEndpoint,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint) {\r\n super(A, 'NotificationOptionComponent', NotificationOptionView, State, notificationOptionEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblDocumentTemplates'),\r\n Name: 'DocumentsSection'\r\n },\r\n {\r\n index: 1,\r\n text: this.RC('lblAutomaticNotificationDocuments'),\r\n Name: 'GeneralSection'\r\n }\r\n ];\r\n\r\n this.InitInvoiceOneTemplates();\r\n this.InitPrintDocCodes();\r\n\r\n this.LoadNotificationTemplates();\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n this.State.ActualInvoiceOneNotificationTypes = this.LIST('EnumInvoiceOneNotificationTypes')\r\n .filter(c => c.Value === EnumInvoiceOneNotificationTypes.None || c.Value === EnumInvoiceOneNotificationTypes.Default);\r\n this.HandleInvoiceOneNotificationChanged({ event: {} }, 'IsAllowSharingByEmail', EnumInvoiceOneNotificationTypes.Email);\r\n this.HandleInvoiceOneNotificationChanged({ event: {} }, 'IsAllowSharingBySMS', EnumInvoiceOneNotificationTypes.SMS);\r\n this.HandleInvoiceOneNotificationChanged({ event: {} }, 'IsAllowSharingByWhatsapp', EnumInvoiceOneNotificationTypes.Whatsapp);\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n HandleInvoiceOneNotificationChanged(e, propName: string, notificationType: EnumInvoiceOneNotificationTypes) {\r\n if (!e || !e.event) return;\r\n\r\n const checked = this.Entity && this.Entity[propName];\r\n if (checked) {\r\n this.State.ActualInvoiceOneNotificationTypes = [\r\n ...this.State.ActualInvoiceOneNotificationTypes,\r\n ...this.LIST('EnumInvoiceOneNotificationTypes').filter(c => c.Value === notificationType)];\r\n } else {\r\n this.State.ActualInvoiceOneNotificationTypes\r\n = this.State.ActualInvoiceOneNotificationTypes.filter(c => c.Value !== notificationType);\r\n }\r\n\r\n }\r\n\r\n // validatePassword = () => {\r\n // return !Utils.ContainsHebrewLetters(this.Entity.InvoiceOnePasswordSecure);\r\n // };\r\n\r\n OnInitNewRow = (e) => {\r\n // if (!e.data && !e.data) { }\r\n };\r\n\r\n SetNotificationDocumentOptionEntityValue = (newRow: NotificationTemplateOption, value) => {\r\n newRow.InvoiceOneTemplateID = null;\r\n newRow.InvoiceOneTemplateIDEng = null;\r\n newRow.PrintingDocCode = null;\r\n newRow.PrintingDocCodeEng = null;\r\n newRow.DocumentType = value;\r\n };\r\n\r\n private InitInvoiceOneTemplates() {\r\n this.notificationOptionEndpoint.GetInvoiceOneTemplates()\r\n .subscribe(response => {\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Order] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Order, response.Entities);\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.DeliveryNote] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.DeliveryNote, response.Entities);\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Return] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.DeliveryNote, response.Entities);\r\n // DeliveryNote = Return for future InvoiceOneDocument, can use same template\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Invoice] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Invoice, response.Entities);\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Refund] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Invoice, response.Entities);\r\n // Invoice = Refund for future InvoiceOneDocument, can use same template\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Quote] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Quote, response.Entities);\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Receipt] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Receipt, response.Entities);\r\n this.State.InvoiceOneTemplatesDataSourceDictionary[EnumInvoiceOneDocumentTypes.ReturnRequest] =\r\n this.FilterInvoiceOneByTypeAndCastToView(EnumInvoiceOneDocumentTypes.ReturnRequest, []);\r\n });\r\n }\r\n\r\n private InitPrintDocCodes() {\r\n this.notificationOptionEndpoint.GetPrintingDocCodes()\r\n .subscribe(response => {\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Order] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Order, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.DeliveryNote] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.DeliveryNote, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Return] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Return, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Invoice] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Invoice, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Refund] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Refund, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Quote] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Quote, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.Receipt] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.Receipt, response.Entities);\r\n this.State.PrintingDocCodesDataSourceDictionary[EnumInvoiceOneDocumentTypes.ReturnRequest] =\r\n this.FilterPrintingByTypeAndCastToView(EnumInvoiceOneDocumentTypes.ReturnRequest, response.Entities);\r\n });\r\n }\r\n\r\n private LoadNotificationTemplates() {\r\n this.notificationTemplateEndpoint.GetList()\r\n .subscribe(response => {\r\n this.State.NotificationTemplates = (response.Entities as NotificationTemplate[])\r\n .filter((value, index, array) => array.findIndex(x => x.Name === value.Name) === index);\r\n });\r\n }\r\n\r\n private FilterPrintingByTypeAndCastToView(invoiceOneType: EnumInvoiceOneDocumentTypes, entities: PrintingTemplate[]) {\r\n const defaultValue = { StrValue: null, Text: this.RC('lblDefaultTemplate') } as OptionSourceView;\r\n const result = entities.filter(pt => pt.DocumentType === invoiceOneType).map(pt => {\r\n return { StrValue: pt.TemplateCode, Text: pt.TemplateName } as OptionSourceView;\r\n });\r\n return [defaultValue, ...result];\r\n }\r\n\r\n private FilterInvoiceOneByTypeAndCastToView(invoiceOneType: EnumInvoiceOneDocumentTypes, entities: InvoiceOneTemplate[]) {\r\n if (invoiceOneType === EnumInvoiceOneDocumentTypes.ReturnRequest) {\r\n return [{ Value: null, Text: this.RC('lblDefaultTemplate') } as OptionSourceView];\r\n }\r\n\r\n const result = entities.filter(oit => oit.DocumentType === invoiceOneType).map(oit => {\r\n return { Value: oit.EntryID, Text: oit.Name } as OptionSourceView;\r\n });\r\n return result;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | LookupList: (State.InvoiceOneTemplatesDataSourceDictionary[cellInfo.data.DocumentType] || [])}} \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | LookupList: (State.InvoiceOneTemplatesDataSourceDictionary[cellInfo.data.DocumentType] || [])}} \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | LookupList: (State.PrintingDocCodesDataSourceDictionary[cellInfo.data.DocumentType] || [])}} \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | LookupList: (State.PrintingDocCodesDataSourceDictionary[cellInfo.data.DocumentType] || [])}} \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | LookupList: LIST('EnumInvoiceOneNotificationTypes')}} \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { PaymentOption } from '@dino-proxy/entities/paymentoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-option-grid',\r\n templateUrl: './payment-option-grid.component.html'\r\n})\r\nexport class PaymentOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentOptionsGridComponent', PaymentOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/payment-option', e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PaymentOptionEndpoint } from '@dino-proxy/endpoints/paymentoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-option-list',\r\n templateUrl: './payment-option-list.component.html'\r\n})\r\nexport class PaymentOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: PaymentOptionEndpoint) {\r\n super(A, 'PaymentOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['PaymentOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Series } from './../entities/series.entity';\r\nimport { SeriesView } from './../views/series.view';\r\n@Injectable()\r\nexport class SeriesEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Series\", api);}\r\n\t\r\n\r\n public GetSeries() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSeries', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Account } from './../entities/account.entity';\r\n@Injectable()\r\nexport class AccountEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Account\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { PaymentOption } from '@dino-proxy/entities/paymentoption.entity';\r\nimport { PaymentOptionEndpoint } from '@dino-proxy/endpoints/paymentoption.endpoint';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Series } from '@dino-proxy/entities/series.entity';\r\nimport { SeriesEndpoint } from '@dino-proxy/endpoints/series.endpoint';\r\nimport { EnumGoCreditTransactionModes } from '@dino-proxy/enums';\r\nimport { AccountEndpoint } from '@dino-proxy/endpoints/account.endpoint';\r\nimport { Account } from '@dino-proxy/entities/account.entity';\r\n\r\nclass State extends BaseOptionState {\r\n Series: Series[] = [];\r\n IsGoCreditNotJ4: boolean = false;\r\n Accounts: Account[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-option',\r\n templateUrl: './payment-option.component.html',\r\n styleUrls: ['./payment-option.component.scss']\r\n})\r\nexport class PaymentOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: PaymentOptionEndpoint,\r\n private seriesEndpoint: SeriesEndpoint,\r\n private accountEndpoint: AccountEndpoint) {\r\n super(A, 'PaymentOptionComponent', PaymentOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.LoadAccounts();\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.UpdateGoCreditModeEffect(null);\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n LoadAccounts() {\r\n this.Do(this.accountEndpoint.GetList(), false, (response) => {\r\n this.State.Accounts = response.Entities;\r\n });\r\n }\r\n\r\n validatePassword = () => {\r\n return !Utils.ContainsHebrewLetters(this.Entity.GoCreditPasswordSecure);\r\n };\r\n\r\n UpdateGoCreditModeEffect(e) {\r\n if (this.Entity.IsAllowGoCreditPayment && this.Entity.GoCreditTransactionMode !== EnumGoCreditTransactionModes.J4) {\r\n this.Entity.IsAllowCashPayment = false;\r\n this.Entity.IsAllowChequePayment = false;\r\n this.Entity.IsAllowWirePayment = false;\r\n this.Entity.IsAllowSplitPayment = false;\r\n this.State.IsGoCreditNotJ4 = true;\r\n } else {\r\n this.State.IsGoCreditNotJ4 = false;\r\n }\r\n\r\n if (!this.Entity.IsAllowGoCreditPayment) {\r\n this.Entity.IsAllowUsingExistingCreditCard = false;\r\n this.Entity.IsAllowCreditCardSaving = false;\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { PaymentOptionEndpoint } from \"@dino-proxy/endpoints/paymentoption.endpoint\";\r\nimport { PriceDisplayOptionEndpoint } from \"@dino-proxy/endpoints/pricedisplayoption.endpoint\";\r\nimport { PriceDisplayOption } from \"@dino-proxy/entities/pricedisplayoption.entity\";\r\nimport { ContextMenuElement } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { BasePageCRUDComponent } from \"@m4u-angular/base/component/BasePageCRUDComponent\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-price-display-option',\r\n templateUrl: './price-display-option.component.html',\r\n styleUrls: ['./price-display-option.component.scss']\r\n})\r\nexport class PriceDisplayOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: PriceDisplayOptionEndpoint) {\r\n super(A, 'PriceDisplayOptionComponent', PriceDisplayOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected OnEntitySaved(): void {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.HandleEntityAfterDuplication();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n\r\n return menus;\r\n }\r\n\r\n HandleEntityAfterDuplication() {\r\n\t\t(this.IsAddMode) && ( this.SetDirty());\r\n\t}\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BusinessOption } from '@dino-proxy/entities/businessoption.entity';\r\nimport { PriceDisplayOption } from '@dino-proxy/entities/pricedisplayoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-price-display-option-grid',\r\n templateUrl: './price-display-option-grid.component.html'\r\n})\r\nexport class PriceDisplayOptionGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PriceDisplayOptionGridComponent', PriceDisplayOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/price-display-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { PriceDisplayOptionEndpoint } from '@dino-proxy/endpoints/pricedisplayoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-price-display-option-list',\r\n templateUrl: './price-display-option-list.component.html'\r\n})\r\nexport class PriceDisplayOptionListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: PriceDisplayOptionEndpoint) {\r\n super(A, 'PriceDisplayOptionListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['PriceDisplayOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPromotionCustomerFilterTypes } from './../enums';\r\nimport { EnumPromotionItemFilterTypes } from './../enums';\r\nimport { EnumPromotionAggregationLevelTypes } from './../enums';\r\nimport { EnumPromotionRequiredTypes } from './../enums';\r\nimport { EnumEffectTargetSelector } from './../enums';\r\nimport { EnumPromotionDiscountApplicationRule } from './../enums';\r\nimport { EnumPromotionEffectTargetTypes } from './../enums';\r\nimport { EnumPromotionResultTypes } from './../enums';\r\nimport { EnumPromotionEffectItemFilterTypes } from './../enums';\r\nexport class Promotion extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Promotion';\r\n }\r\n \r\n public AutomaticName: string; \r\n public CommercialName: string; \r\n public IsManualName: boolean; \r\n public IsActive: boolean; \r\n public IsAllowItemMultipleTrigger: boolean; \r\n public IsFeaturedPromotion: boolean; \r\n public Priority: number; \r\n public ValidFrom: Date; \r\n public ValidUntil: Date; \r\n public CustomerFilterType: EnumPromotionCustomerFilterTypes; \r\n public ItemFilterType: EnumPromotionItemFilterTypes; \r\n public AggregationLevelType: EnumPromotionAggregationLevelTypes; \r\n public RequiredType: EnumPromotionRequiredTypes; \r\n public EffectItemConfigurationSelectionRule: EnumEffectTargetSelector; \r\n public DiscountApplicationRule: EnumPromotionDiscountApplicationRule; \r\n public RequiredQuantity: number; \r\n public RequiredSum: number; \r\n public SumCurrency: string; \r\n public EffectsQuantityLimit: number; \r\n public EffectType: EnumPromotionEffectTargetTypes; \r\n public ResultType: EnumPromotionResultTypes; \r\n public EffectQuantity: number; \r\n public EffectDiscount: number; \r\n public EffectFixedPrice: number; \r\n public Currency: string; \r\n public EffectItemFilterType: EnumPromotionEffectItemFilterTypes; \r\n public EffectItemID: number; \r\n public ActivationCode: string; \r\n public Categories: PromotionCategory[] = []; \r\n public Customers: PromotionCustomer[] = []; \r\n public CustomerGroups: PromotionCustomerGroup[] = []; \r\n public EffectiveCategories: PromotionEffectiveCategory[] = []; \r\n public EffectiveItems: PromotionEffectiveItem[] = []; \r\n public Items: PromotionItem[] = []; \r\n\t\r\n}\r\n\r\nexport class PromotionCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionCategory';\r\n }\r\n \r\n public CategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class PromotionCustomer extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionCustomer';\r\n }\r\n \r\n public CustomerID: number; \r\n public LineID: number;\r\n}\r\nexport class PromotionCustomerGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionCustomerGroup';\r\n }\r\n \r\n public CustomerGroupID: number; \r\n public LineID: number;\r\n}\r\nexport class PromotionEffectiveCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionEffectiveCategory';\r\n }\r\n \r\n public CategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class PromotionEffectiveItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionEffectiveItem';\r\n }\r\n \r\n public ItemID: number; \r\n public LineID: number;\r\n}\r\nexport class PromotionItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PromotionItem';\r\n }\r\n \r\n public ItemID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { Promotion, PromotionCategory, PromotionCustomer, PromotionCustomerGroup, PromotionEffectiveCategory, PromotionEffectiveItem, PromotionItem } from '@dino-proxy/entities/promotion.entity';\r\nimport { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { EnumPromotionCustomerFilterTypes, EnumPromotionEffectItemFilterTypes, EnumPromotionResultTypes, EnumPromotionEffectTargetTypes, EnumPromotionItemFilterTypes, EnumPromotionRequiredTypes } from '@dino-proxy/enums';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { Customer } from '@dino-proxy/entities/customer.entity';\r\nimport { CustomerGroup } from '@dino-proxy/entities/customergroup.entity';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { CategoryView } from '@dino-proxy/views/category.view';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { take } from 'rxjs/operators';\r\nimport { Currency } from '@dino-proxy/entities/currency.entity';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomerLiteView } from '@dino-proxy/views/customerlite.view';\r\nimport { Item } from '@dino-proxy/entities/item.entity';\r\nimport { ItemListParams } from '@dino-proxy/params/itemlist.param';\r\n\r\nclass State extends BaseOptionState {\r\n EffectItems: ItemView[] = [];\r\n Customers: CustomerLiteView[] = [];\r\n CustomerGroups: CustomerGroup[] = [];\r\n Categories: CategoryView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-promotion',\r\n templateUrl: './promotion.component.html',\r\n styleUrls: ['./promotion.component.scss']\r\n})\r\nexport class PromotionComponent extends BasePageCRUDComponent {\r\n customerFilterCustomerIds: number[] = [];\r\n customerFilterGroupIds: number[] = [];\r\n itemFilterCategoryIds: number[] = [];\r\n itemFilterItemsIds: number[] = [];\r\n effectCategoryIds: number[] = [];\r\n effectItemsIds: number[] = [];\r\n availableForSearchItems: ItemView[] = [];\r\n automaticName: string = \"\";\r\n isCommercialNameDirty: boolean = false;\r\n originalSecretText: string = \"\";\r\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n constructor(A: ServiceBagService,\r\n private endpoint: PromotionEndpoint,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private categoryEndpoint: CategoryEndpoint) {\r\n super(A, 'PromotionComponent', Promotion, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n\r\n }\r\n\r\n override OnInitComponent(): void {\r\n this.FlushDataAfterDuplicate();\r\n this.LoadItems();\r\n this.DataSources['Customers'] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n this.customerEndpoint.GetCustomerGroups().subscribe(response => this.State.CustomerGroups = response.Entities);\r\n const itemListParams = { IgnoreFilter: true } as ItemListParams;\r\n this.categoryEndpoint.GetCategories(itemListParams).subscribe(response => this.State.Categories = response.Entities);\r\n }\r\n\r\n protected OnEntityLoaded(): void {\r\n this.LoadValuesOfCustomFields();\r\n }\r\n\r\n LoadValuesOfCustomFields() {\r\n this.customerFilterCustomerIds = this.customerFilterCustomerIds.concat(this.Entity.Customers.map(val => val.CustomerID));\r\n this.customerFilterGroupIds = this.customerFilterGroupIds.concat(this.Entity.CustomerGroups.map(val => val.CustomerGroupID));\r\n this.itemFilterCategoryIds = this.itemFilterCategoryIds.concat(this.Entity.Categories.map(val => val.CategoryID));\r\n this.itemFilterItemsIds = this.itemFilterItemsIds.concat(this.Entity.Items.map(val => val.ItemID));\r\n this.effectCategoryIds = this.effectCategoryIds.concat(this.Entity.EffectiveCategories.map(val => val.CategoryID));\r\n this.effectItemsIds = this.effectItemsIds.concat(this.Entity.EffectiveItems.map(val => val.ItemID));\r\n this.loadSelectedItems();\r\n this.originalSecretText = this.Entity.ActivationCode;\r\n }\r\n\r\n loadSelectedItems() {\r\n let itemIds = this.effectItemsIds.concat(this.itemFilterItemsIds.filter(val => !this.effectItemsIds.includes(val)));\r\n if (this.Entity.EffectItemID && !itemIds.includes(this.Entity.EffectItemID)) {\r\n itemIds.push(this.Entity.EffectItemID);\r\n }\r\n itemIds = itemIds.filter(id => !this.availableForSearchItems.map(item => item.EntryID).includes(id));\r\n itemIds.forEach(id => {\r\n this.itemsEndpoint.GetShallow(id).pipe(\r\n take(1)\r\n ).subscribe(result => {\r\n if (!this.availableForSearchItems.map(val => val.EntryID).includes(result.Entity.EntryID)) {\r\n this.availableForSearchItems.push(result.Entity)\r\n }\r\n })\r\n });\r\n }\r\n\r\n protected LoadItems() {\r\n this.DataSources[\"EffectItems\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemsEndpoint.GetListShallow(options),\r\n (value: number) => this.itemsEndpoint.GetShallow(value),\r\n (data => {\r\n this.availableForSearchItems = this.availableForSearchItems.concat(data.filter(val => {\r\n return !this.availableForSearchItems.map(item => item?.EntryID).includes(val?.EntryID);\r\n }))\r\n }), false);\r\n this.DataSources['EffectItems']?.Data.filter(\"IsVisibleForNewSale\", \"=\", 1)\r\n this.DataSources['EffectItems'].Reload();\r\n }\r\n\r\n isEffectQuantityVisible(): boolean {\r\n return this.Entity.ResultType === EnumPromotionResultTypes.FreeItem\r\n || this.Entity.ResultType === EnumPromotionResultTypes.Discount\r\n || this.Entity.ResultType === EnumPromotionResultTypes.FixedPrice;\r\n }\r\n\r\n isEffectTargetSelectorTypeVisible(): boolean {\r\n const effectType = this.Entity.EffectType;\r\n const itemFilterType = this.Entity.ItemFilterType;\r\n const effectItemFilterType = this.Entity.EffectItemFilterType;\r\n\r\n const isSameItemEffectType = effectType === EnumPromotionEffectTargetTypes.SameItem;\r\n const isCustomSelectionEffectType = effectType === EnumPromotionEffectTargetTypes.ItemList;\r\n \r\n const isItemFilterTypeNoneOrCategories = itemFilterType === EnumPromotionItemFilterTypes.All ||\r\n itemFilterType === EnumPromotionItemFilterTypes.Categories;\r\n const isItemFilterTypeItemsWithMultipleSelection = itemFilterType === EnumPromotionItemFilterTypes.Items && this.itemFilterItemsIds.length > 1;\r\n \r\n const isEffectItemFilterTypeNoneOrCategories = effectItemFilterType === EnumPromotionEffectItemFilterTypes.AllItems ||\r\n effectItemFilterType === EnumPromotionEffectItemFilterTypes.Categories;\r\n const isEffectItemFilterTypeItemsWithMultipleSelection = effectItemFilterType === EnumPromotionEffectItemFilterTypes.Items && this.effectItemsIds.length > 1;\r\n \r\n const conditionForSameItemEffect = isSameItemEffectType && (isItemFilterTypeNoneOrCategories || isItemFilterTypeItemsWithMultipleSelection);\r\n const conditionForCustomSelectionEffect = isCustomSelectionEffectType && (isEffectItemFilterTypeNoneOrCategories || isEffectItemFilterTypeItemsWithMultipleSelection);\r\n \r\n return conditionForSameItemEffect || conditionForCustomSelectionEffect;\r\n }\r\n\r\n isEffectDiscountVisible(): boolean {\r\n return this.Entity.ResultType === EnumPromotionResultTypes.Discount;\r\n }\r\n\r\n isEffectFixedPriceVisible(): boolean {\r\n return this.Entity.ResultType === EnumPromotionResultTypes.FixedPrice;\r\n }\r\n\r\n isEffectItemFilterTypeVisible(): boolean {\r\n return this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList;\r\n }\r\n\r\n isEffectItemVisible(): boolean {\r\n return this.Entity.EffectType === EnumPromotionEffectTargetTypes.SpecificItem;\r\n }\r\n\r\n isCustomerFilterGroupsListVisible(): boolean {\r\n return this.Entity.CustomerFilterType === EnumPromotionCustomerFilterTypes.CustomerGroups;\r\n }\r\n\r\n isCustomerFilterCustomersListVisible(): boolean {\r\n return this.Entity.CustomerFilterType === EnumPromotionCustomerFilterTypes.Customers;\r\n }\r\n\r\n isItemFilterCategoriesListVisible(): boolean {\r\n return this.Entity.ItemFilterType === EnumPromotionItemFilterTypes.Categories;\r\n }\r\n\r\n isItemFilterItemsListVisible(): boolean {\r\n return this.Entity.ItemFilterType === EnumPromotionItemFilterTypes.Items;\r\n }\r\n\r\n isEffectCategoriesListVisible(): boolean {\r\n return this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList\r\n && this.Entity.EffectItemFilterType === EnumPromotionEffectItemFilterTypes.Categories;\r\n }\r\n\r\n isEffectItemsListVisible(): boolean {\r\n return this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList\r\n && this.Entity.EffectItemFilterType === EnumPromotionEffectItemFilterTypes.Items;\r\n }\r\n\r\n isRequiredQuantityVisible(): boolean {\r\n return this.Entity.RequiredType === EnumPromotionRequiredTypes.Quantity;\r\n }\r\n\r\n isRequiredSumVisible(): boolean {\r\n return this.Entity.RequiredType === EnumPromotionRequiredTypes.Sum;\r\n }\r\n\r\n isSumCurrencyVisible(): boolean {\r\n return this.Entity.RequiredType === EnumPromotionRequiredTypes.Sum;\r\n }\r\n\r\n isEffectTargetEffectTypeVisible(): boolean {\r\n return Boolean(this.Entity.EffectType);\r\n }\r\n\r\n isCurrencyVisible(): boolean {\r\n return this.Entity.ResultType === EnumPromotionResultTypes.FixedPrice;\r\n }\r\n\r\n onItemArrayChange(e) {\r\n this.SetDirty();\r\n }\r\n\r\n validateDate = (): boolean => {\r\n if (this.Entity.ValidFrom && this.Entity.ValidUntil) {\r\n return this.Entity.ValidUntil > this.Entity.ValidFrom;\r\n }\r\n return true;\r\n }\r\n\r\n validateEffectQuantity = (): boolean => {\r\n if (this.Entity.EffectType === EnumPromotionEffectTargetTypes.SameItem\r\n || this.Entity.EffectType === EnumPromotionEffectTargetTypes.SpecificItem\r\n || this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList) {\r\n return Boolean(this.Entity.EffectQuantity);\r\n }\r\n return true;\r\n }\r\n\r\n validateEffectDiscount = (): boolean => {\r\n if (this.Entity.ResultType === EnumPromotionResultTypes.Discount ||\r\n this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList) {\r\n return Boolean(this.Entity.EffectDiscount);\r\n }\r\n return true;\r\n }\r\n\r\n validateEffectFixedPrice = (): boolean => {\r\n if (this.Entity.ResultType === EnumPromotionResultTypes.FixedPrice) {\r\n return Boolean(this.Entity.EffectFixedPrice);\r\n }\r\n return true;\r\n }\r\n\r\n validateEffectItem = (): boolean => {\r\n if (this.Entity.EffectType === EnumPromotionEffectTargetTypes.SpecificItem) {\r\n return Boolean(this.Entity.EffectItemID);\r\n }\r\n return true;\r\n }\r\n\r\n validateEffectItemFilterType = (): boolean => {\r\n if (this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList) {\r\n return Boolean(this.Entity.EffectItemFilterType);\r\n }\r\n return true;\r\n }\r\n\r\n validateRequiredQuantity = (): boolean => {\r\n if (this.Entity.RequiredType === EnumPromotionRequiredTypes.Quantity) {\r\n return Boolean(this.Entity.RequiredQuantity);\r\n }\r\n return true;\r\n }\r\n\r\n validateRequiredSum = (): boolean => {\r\n if (this.Entity.RequiredType === EnumPromotionRequiredTypes.Sum) {\r\n return Boolean(this.Entity.RequiredSum);\r\n }\r\n return true;\r\n }\r\n\r\n validateItemFilterItemsList = (): boolean => {\r\n if (this.Entity.ItemFilterType === EnumPromotionItemFilterTypes.Items) {\r\n return Boolean(this.itemFilterItemsIds.length);\r\n }\r\n return true;\r\n }\r\n\r\n validateItemFilterCategoriesList = (): boolean => {\r\n if (this.Entity.ItemFilterType === EnumPromotionItemFilterTypes.Categories) {\r\n return Boolean(this.itemFilterCategoryIds.length);\r\n }\r\n return true;\r\n }\r\n\r\n validateCustomerFilterGroupsList = (): boolean => {\r\n if (this.Entity.CustomerFilterType === EnumPromotionCustomerFilterTypes.CustomerGroups) {\r\n return Boolean(this.customerFilterGroupIds.length);\r\n }\r\n return true;\r\n }\r\n validateCustomerFilterCustomersList = (): boolean => {\r\n if (this.Entity.CustomerFilterType === EnumPromotionCustomerFilterTypes.Customers) {\r\n return Boolean(this.customerFilterCustomerIds.length);\r\n }\r\n return true;\r\n }\r\n\r\n isSecretTextAvailable = (params): Promise => {\r\n if (this.originalSecretText == params.value) {\r\n return Promise.resolve(true);\r\n }\r\n return new Promise((resolve) => {\r\n this.endpoint.CheckUniqueSecretTextAvailable(params.value).subscribe((result) => {\r\n resolve(result.Data);\r\n });\r\n })\r\n }\r\n\r\n getCommercialName(): string {\r\n if (this.Entity.IsManualName) {\r\n return this.Entity.AutomaticName;\r\n }\r\n return this.getAutomaticName();\r\n }\r\n\r\n OnCommercialNameChange() {\r\n if (!this.Entity.CommercialName)\r\n this.Entity.CommercialName = this.Entity.AutomaticName;\r\n }\r\n\r\n getAutomaticName(): string {\r\n let text = `${this.RC(\"lblPromotionTextBuy\")} `;\r\n switch (this.Entity.RequiredType) {\r\n case EnumPromotionRequiredTypes.Quantity:\r\n if (this.Entity.RequiredQuantity) {\r\n text += this.Entity.RequiredQuantity\r\n }\r\n break;\r\n case EnumPromotionRequiredTypes.Sum:\r\n text += `${this.RC(\"lblPromotionTextOnSum\")} `;\r\n if (this.Entity.RequiredSum) {\r\n text += this.Entity.RequiredSum\r\n }\r\n break;\r\n }\r\n switch (this.Entity.ItemFilterType) {\r\n case EnumPromotionItemFilterTypes.Items:\r\n text += ` ${this.RC(\"lblPromotionTextItems\")} `;\r\n text += this.availableForSearchItems.filter(val => {\r\n return this.itemFilterItemsIds.includes(val?.EntryID);\r\n }).map(val => val?.ItemCode).join(` ${this.RC(\"lblPromotionTextOr\")} `);\r\n break;\r\n case EnumPromotionItemFilterTypes.Categories:\r\n text += ` ${this.RC(\"lblPromotionTextFrom\")} `;\r\n text += this.State.Categories.filter(val => {\r\n return this.itemFilterCategoryIds.includes(val?.EntryID);\r\n }).map(val => val?.Name).join(` ${this.RC(\"lblPromotionTextOr\")} `);\r\n break;\r\n }\r\n text += ` ${this.RC(\"lblPromotionTextGet\")} `;\r\n switch (this.Entity.EffectType) {\r\n case EnumPromotionEffectTargetTypes.SameItem:\r\n text = this.getTextForEffectTargetEffectType(text);\r\n text += ` ${this.RC(\"lblPromotionTextOfSameItem\")}`;\r\n break;\r\n case EnumPromotionEffectTargetTypes.SpecificItem:\r\n const item = this.availableForSearchItems.find(val => val.EntryID == this.Entity.EffectItemID);\r\n text = this.getTextForEffectTargetEffectType(text);\r\n text += ` ${this.RC(\"lblPromotionTextOfItem\")} ${item ? item.ItemCode : \"-\"}`;\r\n break;\r\n case EnumPromotionEffectTargetTypes.ItemList:\r\n text = this.getTextForEffectTargetEffectType(text);\r\n switch (this.Entity.EffectItemFilterType) {\r\n case EnumPromotionEffectItemFilterTypes.Items:\r\n text += ` ${this.RC(\"lblPromotionTextFromItems\")} `;\r\n text += this.availableForSearchItems.filter(val => {\r\n return this.effectItemsIds.includes(val?.EntryID);\r\n }).map(val => val?.ItemCode).join(\", \");\r\n break;\r\n case EnumPromotionEffectItemFilterTypes.Categories:\r\n text += ` ${this.RC(\"lblPromotionTextFromCategories\")} `;\r\n text += this.State.Categories.filter(val => {\r\n return this.effectCategoryIds.includes(val?.EntryID);\r\n }).map(val => val?.Name).join(\", \");\r\n break;\r\n }\r\n break;\r\n }\r\n\r\n const maxLengthOfAutomaticName = 200;\r\n if (text.length > maxLengthOfAutomaticName) {\r\n text = text.substring(0, 197) + '...';\r\n }\r\n\r\n return text;\r\n }\r\n\r\n private getTextForEffectTargetEffectType(text: string) {\r\n switch (this.Entity.ResultType) {\r\n case EnumPromotionResultTypes.FreeItem:\r\n if (this.Entity.EffectQuantity) {\r\n text += `${this.Entity.EffectQuantity}`;\r\n }\r\n break;\r\n case EnumPromotionResultTypes.FixedPrice:\r\n if (this.Entity.EffectQuantity && this.Entity.EffectFixedPrice) {\r\n text += `${this.Entity.EffectFixedPrice}${this.Entity.Currency} ${this.RC(\"lblPromotionTextPriceOn\")} ${this.Entity.EffectQuantity}`;\r\n }\r\n break;\r\n case EnumPromotionResultTypes.Discount:\r\n if (this.Entity.EffectQuantity && this.Entity.EffectDiscount) {\r\n text += `${this.Entity.EffectDiscount}% ${this.RC(\"lblPromotionTextDiscountOn\")} ${this.Entity.EffectQuantity}`;\r\n }\r\n break;\r\n }\r\n return text;\r\n }\r\n\r\n onPromotionSave(): void {\r\n if (!this.Entity.IsManualName) {\r\n this.Entity.AutomaticName = this.getAutomaticName();\r\n }\r\n if (!this.Entity.CommercialName) {\r\n this.Entity.CommercialName = this.Entity.AutomaticName;\r\n }\r\n\r\n switch (this.Entity.CustomerFilterType) {\r\n case EnumPromotionCustomerFilterTypes.CustomerGroups:\r\n this.Entity.CustomerGroups.length = 0;\r\n this.customerFilterGroupIds.forEach(element => this.Entity.CustomerGroups.push({ CustomerGroupID: element } as PromotionCustomerGroup));\r\n break;\r\n case EnumPromotionCustomerFilterTypes.Customers:\r\n this.Entity.Customers.length = 0;\r\n this.customerFilterCustomerIds.forEach(element => this.Entity.Customers.push({ CustomerID: element } as PromotionCustomer));\r\n break;\r\n }\r\n switch (this.Entity.ItemFilterType) {\r\n case EnumPromotionItemFilterTypes.Categories:\r\n this.Entity.Categories.length = 0;\r\n this.itemFilterCategoryIds.forEach(element => this.Entity.Categories.push({ CategoryID: element } as PromotionCategory));\r\n break;\r\n case EnumPromotionItemFilterTypes.Items:\r\n this.Entity.Items.length = 0;\r\n this.itemFilterItemsIds.forEach(element => this.Entity.Items.push({ ItemID: element } as PromotionItem));\r\n break;\r\n }\r\n if (this.Entity.EffectType === EnumPromotionEffectTargetTypes.ItemList) {\r\n switch (this.Entity.EffectItemFilterType) {\r\n case EnumPromotionEffectItemFilterTypes.Categories:\r\n this.Entity.EffectiveCategories.length = 0;\r\n this.effectCategoryIds.forEach(element => this.Entity.EffectiveCategories.push({ CategoryID: element } as PromotionEffectiveCategory));\r\n break;\r\n case EnumPromotionEffectItemFilterTypes.Items:\r\n this.Entity.EffectiveItems.length = 0;\r\n this.effectItemsIds.forEach(element => this.Entity.EffectiveItems.push({ ItemID: element } as PromotionEffectiveItem));\r\n break;\r\n }\r\n }\r\n this.OnSave();\r\n\r\n }\r\n\r\n FlushDataAfterDuplicate() {\r\n if (this.IsAddMode) {\r\n this.Entity.ActivationCode = '';\r\n this.LoadValuesOfCustomFields();\r\n this.SetDirty();\r\n }\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n GetItemDisplayName = (item: Item) => item && `${item.ItemCode} - ${item.ItemName}`;\r\n GetCustomerDisplayName = (customer: Customer) => customer && `${customer.CardCode} - ${customer.CardName}`;\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.CardCode}}
\\r\\n
{{data.CardName}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { Promotion } from '@dino-proxy/entities/promotion.entity';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-promotions-grid',\r\n templateUrl: './promotions-grid.component.html'\r\n})\r\nexport class PromotionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: PromotionEndpoint) {\r\n super(A, 'PromotionsGridComponent', Promotion, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([ROUTE_PATHS.PROMOTION, e.data.EntryID]);\r\n }\r\n\r\n OnReorder = (e) => {\r\n const visibleRows = e.component.getVisibleRows();\r\n const toData = visibleRows[e.toIndex].data as Promotion;\r\n const fromData = e.itemData as Promotion;\r\n fromData.Priority = toData.Priority;\r\n\r\n let added = e.toIndex >= e.fromIndex ? -1 : 1;\r\n let dataToSave = [fromData];\r\n \r\n for (let i = e.toIndex; i != e.fromIndex && i >= 0; i += added) {\r\n const data = visibleRows[i].data as Promotion;\r\n data.Priority += added;\r\n dataToSave.push(data);\r\n }\r\n\r\n this.Do(this.endpoint.SaveBatch(dataToSave), true, () => this.NotifyEntitySaved(fromData, Promotion, EnumCRUDActions.Update));\r\n }\r\n\r\n \r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { GetNewObjectPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-promotions-list',\r\n templateUrl: './promotions-list.component.html'\r\n})\r\nexport class PromotionsListComponent extends BasePageComponent {\r\n\r\n NewPrmotionRoute: string = GetNewObjectPath(ROUTE_PATHS.PROMOTION);\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: PromotionEndpoint) {\r\n super(A, 'PromotionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['PromotionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.GetList(options));\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SalePeriod extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalePeriod';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public SalePeriodParts: SalePeriodPart[] = []; \r\n\t\r\n}\r\n\r\nexport class SalePeriodPart extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalePeriodPart';\r\n }\r\n \r\n public Name: string; \r\n public FromDate: Date; \r\n public UntilDate: Date; \r\n public SalePeriodPartUniqueID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SalePeriod } from '@dino-proxy/entities/saleperiod.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-period-grid',\r\n templateUrl: './sale-period-grid.component.html'\r\n})\r\nexport class SalePeriodGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SalePeriodGridComponent', SalePeriod, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/sale-period\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nimport { SalePeriodEndpoint } from '@dino-proxy/endpoints/saleperiod.endpoint';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-period-list',\r\n templateUrl: './sale-period-list.component.html'\r\n})\r\nexport class SalePeriodListComponent extends BasePageComponent {\r\n \r\n constructor(A: ServiceBagService,\r\n private endpoint: SalePeriodEndpoint) {\r\n super(A, 'SalePeriodListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SalePeriodsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SalePeriodPart } from '@dino-proxy/entities/saleperiod.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-period-parts',\r\n templateUrl: './sale-period-parts.component.html'\r\n})\r\nexport class SalePeriodPartGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SalePeriodPartGridComponent', SalePeriodPart, State);\r\n }\r\n\r\n OnInitNewRow = (e) => {\r\n if (e.data) {\r\n const dataSource = this.DataSource;\r\n if (!dataSource) return;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | formatDateShort}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | formatDateShort}}\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SalePeriodEndpoint } from '@dino-proxy/endpoints/saleperiod.endpoint';\r\nimport { SalePeriod, SalePeriodPart } from '@dino-proxy/entities/saleperiod.entity';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-period',\r\n templateUrl: './sale-period.component.html',\r\n styleUrls: ['./sale-period.component.scss']\r\n})\r\nexport class SalePeriodComponent extends BasePageCRUDComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: SalePeriodEndpoint) {\r\n super(A, 'SalePeriodComponent', SalePeriod, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnSave() {\r\n if (!this.Entity.SalePeriodParts?.length) {\r\n this.UI.StopMessage(this.RC('msgSalePeriodNoPartsError'));\r\n return;\r\n }\r\n\r\n super.OnSave();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n HandleGenerateMonthly() {\r\n if (!this.Entity.StartDate || !this.Entity.EndDate || (this.Entity.StartDate > this.Entity.EndDate)) return;\r\n\r\n const generate = () => {\r\n this.Entity.SalePeriodParts = [];\r\n const periodStartDate = new Date(this.Entity.StartDate.toDateString());\r\n const periodEndDate = new Date(this.Entity.EndDate.toDateString());\r\n\r\n let iteratorStartDate = new Date(periodStartDate);\r\n\r\n while (iteratorStartDate <= periodEndDate) {\r\n let iteratorEndDate = new Date(iteratorStartDate.getFullYear(), iteratorStartDate.getMonth() + 1, 0);\r\n if (iteratorEndDate > periodEndDate) iteratorEndDate = periodEndDate;\r\n this.Entity.SalePeriodParts.push({\r\n FromDate: iteratorStartDate,\r\n UntilDate: iteratorEndDate,\r\n Name: this.RC(`Month_${iteratorStartDate.getMonth() + 1}`)\r\n } as SalePeriodPart);\r\n iteratorStartDate = DateHelpers.AddDay(new Date(iteratorEndDate), 1);\r\n }\r\n };\r\n\r\n if (this.Entity.SalePeriodParts?.length !== 0) {\r\n this.messageDialog.ShowDialogShort(() => {\r\n generate();\r\n });\r\n } else {\r\n generate();\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SalePeriod } from './../entities/saleperiod.entity';\r\nimport { EnumSaleTargetDimensions } from './../enums';\r\nimport { EnumSaleTargetMeasures } from './../enums';\r\nexport class SaleTarget extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaleTarget';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public SalePeriodID: number; \r\n public SalePeriod: SalePeriod = new SalePeriod; \r\n public SaleTargetSalesPersons: SaleTargetSalesPerson[] = []; \r\n public SaleTargetLines: SaleTargetLine[] = []; \r\n public SaleTargetLineValues: SaleTargetLineValue[] = []; \r\n\t\r\n}\r\n\r\nexport class SaleTargetSalesPerson extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaleTargetSalesPerson';\r\n }\r\n \r\n public SalesPersonID: number; \r\n public LineID: number;\r\n}\r\nexport class SaleTargetLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaleTargetLine';\r\n }\r\n \r\n public TargetDimension: EnumSaleTargetDimensions; \r\n public TargetDimensionID: number; \r\n public TargetMeasure: EnumSaleTargetMeasures; \r\n public SaleTargetLineUniqueID: number; \r\n public TempUniqueID: number; \r\n public LineID: number;\r\n}\r\nexport class SaleTargetLineValue extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaleTargetLineValue';\r\n }\r\n \r\n public SaleTargetLineUniqueID: number; \r\n public SalePeriodPartUniqueID: number; \r\n public Value: number; \r\n public TempUniqueID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SaleTarget } from '@dino-proxy/entities/saletarget.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-target-grid',\r\n templateUrl: './sale-target-grid.component.html'\r\n})\r\nexport class SaleTargetGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SaleTargetGridComponent', SaleTarget, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/sale-target\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SaleTargetEndpoint } from '@dino-proxy/endpoints/saletarget.endpoint';\r\nimport { SaleTarget, SaleTargetLine, SaleTargetLineValue, SaleTargetSalesPerson } from '@dino-proxy/entities/saletarget.entity';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { SalePeriodEndpoint } from '@dino-proxy/endpoints/saleperiod.endpoint';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { SalePeriod } from '@dino-proxy/entities/saleperiod.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseOptionState {\r\n SalesPersons: SalesPerson[] = [];\r\n SaleTargetSalesPersonIDs: number[] = [];\r\n SaleTargetLinesExtended: SaleTargetLine[] = [];\r\n ValueColumnDescriptors: ValueColumnDescriptor[] = [];\r\n LinesChanged: boolean;\r\n}\r\n\r\nexport const EXTENTED_COLUMN_NAME_PREFIX: string = 'SaleTargetLineValue_';\r\nexport const TOTAL_COLUMN_NAME = EXTENTED_COLUMN_NAME_PREFIX + \"TOTAL\";\r\nexport const TARGET_COLUMN_NAME = EXTENTED_COLUMN_NAME_PREFIX + \"TARGET\";\r\n\r\nexport class ValueColumnDescriptor {\r\n Name: string;\r\n FieldName: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-target',\r\n templateUrl: './sale-target.component.html',\r\n styleUrls: ['./sale-target.component.scss']\r\n})\r\nexport class SaleTargetComponent extends BasePageCRUDComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: SaleTargetEndpoint,\r\n private salePeriodEndpoint: SalePeriodEndpoint,\r\n private salesPersonEndpoint: SalesPersonEndpoint) {\r\n super(A, 'SaleTargetComponent', SaleTarget, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n if (!this.Entity) return;\r\n this.State.SaleTargetSalesPersonIDs = this.Entity.SaleTargetSalesPersons?.map(x => x.SalesPersonID) || [];\r\n\r\n this.BuildSaleTargetLines(false);\r\n }\r\n\r\n SaveExtended() {\r\n if (!this.Entity?.SalePeriod) return;\r\n \r\n this.PrepareSaleTargetLines();\r\n //\r\n this.OnSave();\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.LoadOptions();\r\n }\r\n\r\n LoadOptions() {\r\n this.DataSources['SalePeriodsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.salePeriodEndpoint.GetList(options));\r\n this.salesPersonEndpoint.GetListShallow().subscribe(response => this.State.SalesPersons = response.Entities);\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n HandleSalesPersonChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n this.Entity.SaleTargetSalesPersons = this.Entity.SaleTargetSalesPersons\r\n .filter(x => this.State.SaleTargetSalesPersonIDs.findIndex(id => x.SalesPersonID === id) !== -1);\r\n\r\n this.State.SaleTargetSalesPersonIDs\r\n .forEach(id => {\r\n if (this.Entity.SaleTargetSalesPersons.findIndex(x => x.SalesPersonID === id) === -1) {\r\n const saleTargetSalesPerson = { EntryID: -1, SalesPersonID: id } as SaleTargetSalesPerson;\r\n this.Entity.SaleTargetSalesPersons.push(saleTargetSalesPerson);\r\n }\r\n });\r\n }\r\n\r\n HandleSalePeriodChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.Entity.SaleTargetLines.length) {\r\n this.UI.WarningMessage(this.RC('msgSaleTargetLineRemovePrompt'));\r\n }\r\n\r\n this.Entity.SaleTargetLines = [];\r\n this.Entity.SaleTargetLineValues = [];\r\n this.BuildSaleTargetLines(true);\r\n }\r\n\r\n HandleLinesChanged() {\r\n this.State.LinesChanged = true;\r\n this.SetDirty();\r\n }\r\n\r\n protected BuildSaleTargetLines(clear: boolean) {\r\n if (!this.Entity.SalePeriodID) return;\r\n\r\n if (this.Entity.SalePeriodID === this.Entity.SalePeriod?.EntryID)\r\n this.BuildSaleTargetLinesBySalePeriod(this.Entity.SalePeriod);\r\n else {\r\n this.salePeriodEndpoint.Get(this.Entity.SalePeriodID)\r\n .subscribe(r => {\r\n this.Entity.SalePeriod = r.Entity;\r\n this.BuildSaleTargetLinesBySalePeriod(r.Entity);\r\n });\r\n }\r\n\r\n if (clear) return;\r\n }\r\n\r\n protected BuildSaleTargetLinesBySalePeriod(salePeriod: SalePeriod) {\r\n this.State.SaleTargetLinesExtended = Utils.CloneObject(this.Entity.SaleTargetLines);\r\n this.State.SaleTargetLinesExtended.forEach(stle => {\r\n let total = null;\r\n salePeriod.SalePeriodParts.forEach(spp => {\r\n let saleTargetLineValue = this.Entity.SaleTargetLineValues\r\n .find(x => x.SalePeriodPartUniqueID === spp.SalePeriodPartUniqueID && x.SaleTargetLineUniqueID === stle.SaleTargetLineUniqueID);\r\n let value = saleTargetLineValue?.Value;\r\n stle[EXTENTED_COLUMN_NAME_PREFIX + spp.SalePeriodPartUniqueID.toString()] = value;\r\n if (!!value) total += +value;\r\n });\r\n\r\n stle[TOTAL_COLUMN_NAME] = total;\r\n });\r\n\r\n this.State.ValueColumnDescriptors = [];\r\n salePeriod.SalePeriodParts.forEach(spp => {\r\n const valueColumnDescriptor = {\r\n Name: spp.Name,\r\n FieldName: EXTENTED_COLUMN_NAME_PREFIX + spp.SalePeriodPartUniqueID.toString()\r\n } as ValueColumnDescriptor;\r\n this.State.ValueColumnDescriptors.push(valueColumnDescriptor);\r\n });\r\n }\r\n\r\n protected PrepareSaleTargetLines() {\r\n this.Entity.SaleTargetLines = [];\r\n const oldSaleTargetLineValues = this.Entity.SaleTargetLineValues;\r\n this.Entity.SaleTargetLineValues = [];\r\n let tempUniqueID = 1;\r\n const salePeriodParts = this.Entity.SalePeriod.SalePeriodParts;\r\n this.State.SaleTargetLinesExtended.forEach(stle => {\r\n\r\n const saleTargetLine = {\r\n EntryID: stle.EntryID,\r\n LineID: stle.LineID,\r\n TargetDimension: stle.TargetDimension,\r\n TargetDimensionID: stle.TargetDimensionID,\r\n TargetMeasure: stle.TargetMeasure,\r\n SaleTargetLineUniqueID: stle.SaleTargetLineUniqueID\r\n } as SaleTargetLine;\r\n\r\n let newSaleTargetLineValues: SaleTargetLineValue[];\r\n if (saleTargetLine.SaleTargetLineUniqueID) {\r\n newSaleTargetLineValues = oldSaleTargetLineValues.filter(x => x.SaleTargetLineUniqueID === saleTargetLine.SaleTargetLineUniqueID);\r\n // sync periods?\r\n if (!newSaleTargetLineValues.length) {\r\n newSaleTargetLineValues = salePeriodParts.map(x => {\r\n return {\r\n SaleTargetLineUniqueID: saleTargetLine.SaleTargetLineUniqueID,\r\n SalePeriodPartUniqueID: x.SalePeriodPartUniqueID\r\n } as SaleTargetLineValue;\r\n });\r\n }\r\n //\r\n } else {\r\n saleTargetLine.TempUniqueID = tempUniqueID;\r\n newSaleTargetLineValues = salePeriodParts.map(x => {\r\n return {\r\n TempUniqueID: tempUniqueID,\r\n SalePeriodPartUniqueID: x.SalePeriodPartUniqueID\r\n } as SaleTargetLineValue;\r\n });\r\n tempUniqueID++;\r\n }\r\n\r\n salePeriodParts.forEach(spp => {\r\n const value = stle[EXTENTED_COLUMN_NAME_PREFIX + spp.SalePeriodPartUniqueID.toString()];\r\n const newSaleTargetLineValue = newSaleTargetLineValues.find(x => x.SalePeriodPartUniqueID === spp.SalePeriodPartUniqueID);\r\n if (newSaleTargetLineValue) newSaleTargetLineValue.Value = value;\r\n });\r\n\r\n this.Entity.SaleTargetLineValues = [...this.Entity.SaleTargetLineValues, ...newSaleTargetLineValues];\r\n this.Entity.SaleTargetLines.push(saleTargetLine);\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SaleTargetLine } from '@dino-proxy/entities/saletarget.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSaleTargetDimensions } from '@dino-proxy/enums';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { CustomerLiteView } from '@dino-proxy/views/customerlite.view';\r\nimport { CustomerGroupEndpoint } from '@dino-proxy/endpoints/customergroup.endpoint';\r\nimport { TARGET_COLUMN_NAME, TOTAL_COLUMN_NAME, ValueColumnDescriptor } from '../sale-target.component';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\n\r\nclass State extends BaseOptionState {\r\n SaleTargetDimensions: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-target-lines',\r\n templateUrl: './sale-target-lines.component.html',\r\n styleUrls: ['./sale-target-lines.component.scss']\r\n})\r\nexport class SaleTargetLineGridComponent extends BaseGridComponent {\r\n TOTAL_COLUMN_NAME = TOTAL_COLUMN_NAME;\r\n TARGET_COLUMN_NAME = TARGET_COLUMN_NAME;\r\n @Input() ValueColumnDescriptors: ValueColumnDescriptor[] = [];\r\n @Output() LinesChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private categoryEndpoint: CategoryEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private customerGroupEndpoint: CustomerGroupEndpoint) {\r\n super(A, 'SaleTargetLineGridComponent', SaleTargetLine, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.SaleTargetDimensions = this.LIST('SaleTargetDimensions');\r\n }\r\n\r\n protected override OnInitDataSources(): void {\r\n this.DataSources['ItemsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemsEndpoint.GetItemsLite(options),\r\n entryID => this.itemsEndpoint.GetItemLiteByID(entryID),\r\n undefined,\r\n false);\r\n this.DataSources['CategoriesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.categoryEndpoint.GetAllCategories(options),\r\n entryID => this.categoryEndpoint.GetCategoryByID(entryID),\r\n undefined,\r\n false);\r\n this.DataSources['Customers'] = new DataSourceCustomAction((opts) => this.customerEndpoint.GetCustomersLite(opts),\r\n (value: number) => this.customerEndpoint.Get(value),\r\n null,\r\n false);\r\n this.DataSources['CustomerGroupsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerGroupEndpoint.GetList(options),\r\n entryID => this.customerGroupEndpoint.Get(entryID),\r\n undefined,\r\n false);\r\n }\r\n\r\n OnInitNewRow = (e) => {\r\n if (e.data) {\r\n const dataSource = this.DataSource;\r\n if (!dataSource) return;\r\n }\r\n }\r\n\r\n OnTargetDimensionChanged(cell, e) {\r\n const targetDimension: EnumSaleTargetDimensions = e.value;\r\n cell.setValue(targetDimension);\r\n // \r\n const row = cell.row;\r\n const cellTargetDimensionID = (row.cells as any[]).find(x => x.column.dataField === 'TargetDimensionID');\r\n if (cellTargetDimensionID) cellTargetDimensionID.setValue(targetDimension === EnumSaleTargetDimensions.All ? -1 : null);\r\n //\r\n this.LinesChanged.emit();\r\n }\r\n\r\n GetTargetDimension(cell) {\r\n const line = cell?.row?.data as SaleTargetLine;\r\n return line?.TargetDimension;\r\n }\r\n\r\n GetCustomerTitle = (customer: CustomerLiteView) => {\r\n if (!customer) return null;\r\n return `${customer.CardCode} - ${customer.CardName}`;\r\n }\r\n\r\n GetItemTitle = (item: ItemView) => {\r\n if (!item) return null;\r\n return `${item.ItemCode} - ${item.ItemName}`;\r\n }\r\n\r\n HandleValueChanged(cell, e) {\r\n const dataField = cell.column.dataField;\r\n let total = 0;\r\n const line = cell?.row?.data as SaleTargetLine;\r\n const row = cell.row;\r\n const value: number = e.value;\r\n\r\n if (dataField !== TOTAL_COLUMN_NAME) {\r\n cell.setValue(value);\r\n line[dataField] = value;\r\n }\r\n\r\n if (dataField === this.TARGET_COLUMN_NAME) {\r\n this.ValueColumnDescriptors.forEach(c => {\r\n const valueCell = (row.cells as any[]).find(x => x.column.dataField === c.FieldName);\r\n if (valueCell) valueCell.setValue(value);\r\n line[c.FieldName] = value;\r\n });\r\n }\r\n\r\n if (dataField !== TOTAL_COLUMN_NAME) { \r\n this.ValueColumnDescriptors.forEach(x => {\r\n let value = line[x.FieldName];\r\n if (!!value) total += +value;\r\n });\r\n\r\n const totalCell = (row.cells as any[]).find(x => x.column.dataField === TOTAL_COLUMN_NAME);\r\n if (totalCell) totalCell.setValue(total);\r\n }\r\n\r\n this.LinesChanged.emit();\r\n }\r\n\r\n HandleChanged(e) {\r\n this.LinesChanged.emit();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | LookupList:LIST('SaleTargetDimensions'):'Text' }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | Lookup:DS('CustomerGroupsAdmin'):'GroupName' | async}}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | Lookup:DS('Customers'):GetCustomerTitle | async}}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | Lookup:DS('CategoriesAdmin'):'Name' | async}}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | Lookup:DS('ItemsAdmin'):GetItemTitle | async}}\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | LookupList:LIST('SaleTargetMeasures'):'Text' }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n {{ cell.value | formatNumberSum }}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{ cell.value | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n {{ cell.value | formatNumberSum}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SaleTargetEndpoint } from '@dino-proxy/endpoints/saletarget.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-target-list',\r\n templateUrl: './sale-target-list.component.html'\r\n})\r\nexport class SaleTargetListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: SaleTargetEndpoint) {\r\n super(A, 'SaleTargetListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SaleTargetsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumItemImagesFallbackTypes } from './../enums';\r\nimport { EnumCityInputMethods } from './../enums';\r\nimport { EnumSalesDocumentLayers } from './../enums';\r\nexport class SystemOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SystemOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public ImagePath: string; \r\n public ImageCachePath: string; \r\n public FilesPath: string; \r\n public IsAutoResolveImagesForItems: boolean; \r\n public IsAutoResolveImagesForBrands: boolean; \r\n public IsAutoResolveImagesForVendors: boolean; \r\n public IsAutoResolveImagesForManufacturers: boolean; \r\n public IsAutoResolveImagesForCategories: boolean; \r\n public IsAutoResolveFiles: boolean; \r\n public IsEnableGuestAccess: boolean; \r\n public PriceRefreshInterval: number; \r\n public DefaultCustomerOptionID: number; \r\n public GuestCredentialID: number; \r\n public AutoResolveFallbackTypeForItemImages: EnumItemImagesFallbackTypes; \r\n public IsSearchKeywordsOnly: boolean; \r\n public IsSearchKeywordsCache: boolean; \r\n public SearchKeywordsRefreshInterval: number; \r\n public ErrorNotificationEmailAddress: string; \r\n public ErrorNotificationTemplate: string; \r\n public DefaultSalesPersonOptionID: number; \r\n public CityInputMethod: EnumCityInputMethods; \r\n public TempFilesPath: string; \r\n public MaxUploadFileSize: number; \r\n public SalesDocumentLayer: EnumSalesDocumentLayers; \r\n public IsBlockFurtherAttemptsOnCheckoutError: boolean; \r\n public IsLicensedForB2B: boolean; \r\n public IsLicensedForSalesPersons: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SystemOption } from '@dino-proxy/entities/systemoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-person-option-grid',\r\n templateUrl: './sales-person-option-grid.component.html'\r\n})\r\nexport class SalesPersonOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SalesPersonOptionsGridComponent', SystemOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/sales-person-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SalesPersonOption } from './../entities/salespersonoption.entity';\r\n@Injectable()\r\nexport class SalesPersonOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SalesPersonOption\", api);}\r\n\t\r\n\r\n public GetSalesPersonOption() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSalesPersonOption', undefined );\r\n }\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SalesPersonOptionEndpoint } from '@dino-proxy/endpoints/salespersonoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-person-option-list',\r\n templateUrl: './sales-person-option-list.component.html'\r\n})\r\nexport class SalesPersonOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: SalesPersonOptionEndpoint) {\r\n super(A, 'SalesPersonOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SalesPersonOptions'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { CustomerOption } from './../entities/customeroption.entity';\r\nexport class SalesPersonOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesPersonOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public CustomerOptionID: number; \r\n public IsAllowCustomerAdding: boolean; \r\n public IsAllowCustomerEditing: boolean; \r\n public DefaultCustomerGroupID: number; \r\n public DefaultPaymentTermsID: number; \r\n public DefaultPriceListNumber: number; \r\n public IsShowAlertForExistingCustomerWithCart: boolean; \r\n public DiscountPermissionID: number; \r\n public CustomerOption: CustomerOption = new CustomerOption; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PaymentTerm } from './../entities/paymentterm.entity';\r\n@Injectable()\r\nexport class PaymentTermEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"PaymentTerm\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CustomerOptionEndpoint } from '@dino-proxy/endpoints/customeroption.endpoint';\r\nimport { SalesPersonOption } from '@dino-proxy/entities/salespersonoption.entity';\r\nimport { SalesPersonOptionEndpoint } from '@dino-proxy/endpoints/salespersonoption.endpoint';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomerGroupEndpoint } from '@dino-proxy/endpoints/customergroup.endpoint';\r\nimport { PaymentTermEndpoint } from '@dino-proxy/endpoints/paymentterm.endpoint';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DiscountPermissionEndpoint } from '@dino-proxy/endpoints/discountpermission.endpoint';\r\nimport { CustomFieldsetEndpoint } from '@dino-proxy/endpoints/customfieldset.endpoint';\r\nimport { EnumCustomFieldLocations } from '@dino-proxy/enums';\r\nimport { CustomFieldset } from '@dino-proxy/entities/customfieldset.entity';\r\n\r\nclass State extends BaseOptionState {\r\n PriceListNumbers: GenericListEntity[] = [];\r\n CustomFieldsets: CustomFieldset[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sales-person-option',\r\n templateUrl: './sales-person-option.component.html',\r\n styleUrls: ['./sales-person-option.component.scss']\r\n})\r\nexport class SalesPersonOptionComponent extends BasePageCRUDComponent {\r\n\r\n CustomerOptionPage = 'pages/customer-option';\r\n DiscountPermissionPage = 'pages/discount-permission';\r\n CustomFieldsetPage = 'pages/custom-fieldset';\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: SalesPersonOptionEndpoint,\r\n private customerOptionEndpoint: CustomerOptionEndpoint,\r\n private customerGroupEndpoint: CustomerGroupEndpoint,\r\n private paymentTermsEndpoint: PaymentTermEndpoint,\r\n private businessOptionEndpoint: BusinessOptionEndpoint,\r\n private discountPermissionEndpoint: DiscountPermissionEndpoint,\r\n private customFieldsetEndpoint: CustomFieldsetEndpoint) {\r\n super(A, 'SalesPersonOptionComponent', SalesPersonOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected OnInitComponent() {\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n } s\r\n\r\n protected override OnInitDataSources() {\r\n this.LoadData();\r\n }\r\n\r\n LoadData() {\r\n this.LoadSelectOptions();\r\n this.LoadCustomerGroups();\r\n this.LoadPaymentTerms();\r\n this.LoadDiscountPermissions();\r\n this.LoadCustomFieldsets();\r\n\r\n this.businessOptionEndpoint.GetPriceListNumbers()\r\n .subscribe(r => this.State.PriceListNumbers = \r\n [\r\n {\r\n EntryID: -1,\r\n Text: this.RC('lblLastPurchasePrice')\r\n } as GenericListEntity,\r\n {\r\n EntryID: -2,\r\n Text: this.RC('lblLastEvaluatedPrice')\r\n } as GenericListEntity,\r\n ...r.Entities\r\n ]);\r\n }\r\n\r\n LoadSelectOptions() {\r\n this.DataSources['CustomerOptionsAdmin'] \r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.customerOptionEndpoint.GetList(options));\r\n }\r\n\r\n LoadCustomerGroups() {\r\n this.DataSources['CustomerGroups'] \r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.customerGroupEndpoint.GetList(options));\r\n }\r\n\r\n LoadPaymentTerms() {\r\n this.DataSources['PaymentTerms'] \r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.paymentTermsEndpoint.GetList(options));\r\n }\r\n\r\n LoadDiscountPermissions() {\r\n this.DataSources['DiscountPermissions'] \r\n = new DataSourceCustomAction((options: DataLoadOptions) => this.discountPermissionEndpoint.GetList(options));\r\n }\r\n\r\n LoadCustomFieldsets() {\r\n this.customFieldsetEndpoint.GetList().subscribe(result => {\r\n if(result.IsSuccess) {\r\n this.State.CustomFieldsets = result.Entities.filter(f => f.Location === EnumCustomFieldLocations.Customer);\r\n }\r\n })\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SeriesOption } from '@dino-proxy/entities/seriesoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-series-option-grid',\r\n templateUrl: './series-option-grid.component.html'\r\n})\r\nexport class SeriesOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SeriesOptionsGridComponent', SeriesOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/series-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SeriesOptionEndpoint } from '@dino-proxy/endpoints/seriesoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-series-option-list',\r\n templateUrl: './series-option-list.component.html'\r\n})\r\nexport class SeriesOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: SeriesOptionEndpoint) {\r\n super(A, 'SeriesOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SeriesOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SeriesOption } from '@dino-proxy/entities/seriesoption.entity';\r\nimport { SeriesOptionEndpoint } from '@dino-proxy/endpoints/seriesoption.endpoint';\r\nimport { SeriesView } from '@dino-proxy/views/series.view';\r\nimport { SeriesEndpoint } from '@dino-proxy/endpoints/series.endpoint';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseOptionState {\r\n AllQuoteSeries: SeriesView[] = [];\r\n AllOrderSeries: SeriesView[] = [];\r\n AllInvoiceSeries: SeriesView[] = [];\r\n AllDeliveryNoteSeries: SeriesView[] = [];\r\n AllReturnSeries: SeriesView[] = [];\r\n AllReturnRequestSeries: SeriesView[] = [];\r\n AllRefundSeries: SeriesView[] = [];\r\n AllSeries: SeriesView[] =[];\r\n AllPaymentDocumentSeries: SeriesView[] = [];\r\n AllCustomerSeries: SeriesView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-series-option',\r\n templateUrl: './series-option.component.html',\r\n styleUrls: ['./series-option.component.scss']\r\n})\r\nexport class SeriesOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: SeriesOptionEndpoint,\r\n private seriesEndpoint: SeriesEndpoint) {\r\n super(A, 'SeriesOptionComponent', SeriesOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n if (!this.Entity.DeliveryNoteSeriesID) {\r\n this.Entity.DeliveryNoteSeriesID = -999;\r\n }\r\n if (!this.Entity.QuoteSeriesID) {\r\n this.Entity.QuoteSeriesID = -999;\r\n }\r\n if (!this.Entity.InvoiceSeriesID) {\r\n this.Entity.InvoiceSeriesID = -999;\r\n }\r\n if (!this.Entity.OrderSeriesID) {\r\n this.Entity.OrderSeriesID = -999;\r\n }\r\n if (!this.Entity.RefundSeriesID) {\r\n this.Entity.RefundSeriesID = -999;\r\n }\r\n if (!this.Entity.ReturnRequestSeriesID) {\r\n this.Entity.ReturnRequestSeriesID = -999;\r\n }\r\n if (!this.Entity.ReturnSeriesID) {\r\n this.Entity.ReturnSeriesID = -999;\r\n }\r\n if (!this.Entity.PaymentDocumentSeriesID) {\r\n this.Entity.PaymentDocumentSeriesID = -999;\r\n }\r\n if (!this.Entity.DefaultCustomerSeriesID) {\r\n this.Entity.DefaultCustomerSeriesID = -999;\r\n }\r\n this.RefreshEntityOriginal();\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.seriesEndpoint.GetSeries()\r\n .subscribe(r => {\r\n this.State.AllSeries = r.Entities;\r\n this.SetSeriesByDocument();\r\n });\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n public SetSeriesByDocument() { \r\n this.State.AllQuoteSeries = this.AddDefaultOption(EnumDocumentTypes.Quote);\r\n this.State.AllOrderSeries = this.AddDefaultOption(EnumDocumentTypes.Order);\r\n this.State.AllInvoiceSeries = this.AddDefaultOption(EnumDocumentTypes.Invoice);\r\n this.State.AllDeliveryNoteSeries = this.AddDefaultOption(EnumDocumentTypes.DeliveryNote);\r\n this.State.AllReturnSeries = this.AddDefaultOption(EnumDocumentTypes.Return);\r\n this.State.AllReturnRequestSeries = this.AddDefaultOption(EnumDocumentTypes.ReturnRequest);\r\n this.State.AllRefundSeries = this.AddDefaultOption(EnumDocumentTypes.Refund);\r\n this.State.AllPaymentDocumentSeries = this.AddDefaultOption('Receipt');\r\n this.State.AllCustomerSeries = this.AddDefaultCustomerOption();\r\n }\r\n\r\n private AddDefaultOption(documentType: string): SeriesView[] {\r\n let defaultSeries = { EntryID: -999, Name: this.RC('lblDefaultSeries') } as SeriesView;\r\n let series = this.State.AllSeries.filter(s => s.DocumentType === documentType);\r\n return [defaultSeries, ...series];\r\n }\r\n\r\n private AddDefaultCustomerOption(): SeriesView[] {\r\n let defaultSeries = { EntryID: -999, Name: this.RC('lblDefaultCustomerSeries') } as SeriesView;\r\n let series = this.State.AllSeries.filter(s => s.IsCustomerSeries);\r\n return [defaultSeries, ...series];\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ShipmentMethod } from '@dino-proxy/entities/shipmentmethod.entity';\r\nimport { ItemShipment } from '@dino-proxy/entities/itemshipment.entity';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n ItemShipments: ItemShipment[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shipment-method-grid',\r\n templateUrl: './shipment-method-grid.component.html'\r\n})\r\nexport class ShipmentMethodsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService, private itemsEndpoint: ItemsEndpoint) {\r\n super(A, 'ShipmentMethodsGridComponent', ShipmentMethod, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.itemsEndpoint.GetItemShipments().subscribe(response => {\r\n this.State.ItemShipments = response.Entities;\r\n });\r\n }\r\n\r\n itemCodeDisplayExpr(item) {\r\n return item && `${item.ItemCode} - ${item.ItemName}`;\r\n }\r\n\r\n IsItemCodeValid(item) {\r\n const data = item?.data;\r\n if (!data.IsNoShipment) {\r\n return !!data.ItemShipmentID;\r\n }\r\n return true;\r\n }\r\n\t\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ itemData.ItemCode }}
\\r\\n
{{ itemData.ItemName }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ShipmentOption } from '@dino-proxy/entities/shipmentoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shipment-option-grid',\r\n templateUrl: './shipment-option-grid.component.html'\r\n})\r\nexport class ShipmentOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ShipmentOptionsGridComponent', ShipmentOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/shipment-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ShipmentMethod } from './../entities/shipmentmethod.entity';\r\n@Injectable()\r\nexport class ShipmentMethodEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ShipmentMethod\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShipmentOptionEndpoint } from '@dino-proxy/endpoints/shipmentoption.endpoint';\r\nimport { ShipmentMethodEndpoint } from '@dino-proxy/endpoints/shipmentmethod.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shipment-option-list',\r\n templateUrl: './shipment-option-list.component.html'\r\n})\r\nexport class ShipmentOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ShipmentOptionEndpoint,\r\n private shipmentMethodEndpoint: ShipmentMethodEndpoint) {\r\n super(A, 'ShipmentOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ShipmentOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n this.DataSources['ShipmentMethodsAdmin'] = new BaseDataStoreCRUDServer(this.shipmentMethodEndpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ShipmentDistributionCycle, ShipmentOption } from '@dino-proxy/entities/shipmentoption.entity';\r\nimport { ShipmentOptionEndpoint } from '@dino-proxy/endpoints/shipmentoption.endpoint';\r\nimport { ShipmentMethod } from '@dino-proxy/entities/shipmentmethod.entity';\r\nimport { ShipmentMethodEndpoint } from '@dino-proxy/endpoints/shipmentmethod.endpoint';\r\nimport { DistributionCycle } from '@dino-proxy/entities/distributioncycle.entity';\r\nimport { DistributionCycleEndpoint } from '@dino-proxy/endpoints/distributioncycle.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\tShipmentMethods: ShipmentMethod[] = [];\r\n\tDistributionCycles: DistributionCycle[] = [];\r\n\tSelectedCycles: number[] = [];\r\n\tLoaded: boolean = false;\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-shipment-option',\r\n\ttemplateUrl: './shipment-option.component.html',\r\n\tstyleUrls: ['./shipment-option.component.scss']\r\n})\r\nexport class ShipmentOptionComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: ShipmentOptionEndpoint,\r\n\t\tprivate shipmentMethodEndpoint: ShipmentMethodEndpoint,\r\n\t\tprivate distributionCycleEndpoint: DistributionCycleEndpoint) {\r\n\t\tsuper(A, 'ShipmentOptionComponent', ShipmentOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.LoadData();\r\n\t}\r\n\r\n\tprotected override OnEntityLoaded() {\r\n\t\tif (this.Entity && this.Entity.EntryID > 0 && this.Entity.ShipmentDistributionCycles && this.Entity.ShipmentDistributionCycles.length > 0) {\r\n\t\t\tthis.State.SelectedCycles = this.Entity.ShipmentDistributionCycles.map(c => c.DistributionCycleID);\r\n\t\t}/* else {\r\n\t\t\tthis.State.Loaded = true;\r\n\t\t}*/\r\n\t}\r\n\r\n\tprotected override OnEntityNew() {\r\n\t\tthis.State.Loaded = true;\r\n\t}\r\n\r\n\tLoadData() {\r\n\t\tthis.Do(this.shipmentMethodEndpoint.GetListShallow(), false, (response: BaseEntitiesResponse) => {\r\n\t\t\tthis.State.ShipmentMethods = response.Entities;\r\n\t\t});\r\n\t\tthis.Do(this.distributionCycleEndpoint.GetListShallow(), false, (response: BaseEntitiesResponse) => {\r\n\t\t\tthis.State.DistributionCycles = response.Entities;\r\n\t\t});\r\n\t}\r\n\r\n\tHandleCycleChanged(e: any) {\r\n\t\t/*if (!this.State.Loaded) {\r\n\t\t\tthis.State.Loaded = true;\r\n\t\t\treturn;\r\n\t\t}*/\r\n\t\tif (e.value /*&& this.State.Loaded*/) {\r\n\t\t\tthis.Entity.ShipmentDistributionCycles = this.State.SelectedCycles.map((sc, i) => {\r\n\t\t\t\treturn {DistributionCycleID: sc} as ShipmentDistributionCycle;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SystemOption } from '@dino-proxy/entities/systemoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-option-grid',\r\n templateUrl: './system-option-grid.component.html'\r\n})\r\nexport class SystemOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionsGridComponent', SystemOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/dino-system-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SystemOption } from './../entities/systemoption.entity';\r\n@Injectable()\r\nexport class SystemOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SystemOption\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SystemOptionEndpoint } from '@dino-proxy/endpoints/systemoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-option-list',\r\n templateUrl: './system-option-list.component.html'\r\n})\r\nexport class SystemOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: SystemOptionEndpoint) {\r\n super(A, 'SystemOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SystemOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SystemOption } from '@dino-proxy/entities/systemoption.entity';\r\nimport { SystemOptionEndpoint } from '@dino-proxy/endpoints/systemoption.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\nimport { CustomerOptionEndpoint } from '@dino-proxy/endpoints/customeroption.endpoint';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { SalesPersonOptionEndpoint } from '@dino-proxy/endpoints/salespersonoption.endpoint';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n\tIsUseContactPerson: boolean;\r\n\tNotificationTemplates: NotificationTemplate[] = [];\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'dino-system-option',\r\n\ttemplateUrl: './system-option.component.html',\r\n\tstyleUrls: ['./system-option.component.scss']\r\n})\r\nexport class DinoSystemOptionComponent extends BasePageCRUDComponent {\r\n\r\n\tCustomerOptionPage = 'pages/customer-option';\r\n\tSalesPersonOptionPage = 'pages/sales-person-option';\r\n\tNotificationTemplatePage = 'pages/notification-template';\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: SystemOptionEndpoint,\r\n\t\tprivate customerOptionEndpoint: CustomerOptionEndpoint,\r\n\t\tprivate customerEndpoint: CustomerEndpoint,\r\n\t\tprivate contactPersonEndpoint: ContactPersonEndpoint,\r\n\t\tprivate salesPersonOptionEndpoint: SalesPersonOptionEndpoint,\r\n\t\tprivate notificationTemplateEndpoint: NotificationTemplateEndpoint) {\r\n\t\tsuper(A, 'DinoSystemOptionComponent', SystemOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected OnInitComponent() {\r\n\t\tthis.State.IsUseContactPerson = this.A.Framework.SystemOptionFlag(\"IsUseContactPerson\");\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitDataSources() {\r\n\t\tthis.LoadSelectOptions();\r\n\t\tthis.LoadNotificationTemplates();\r\n\t}\r\n\r\n\tprivate LoadNotificationTemplates() {\r\n\t\tthis.notificationTemplateEndpoint.GetList()\r\n\t\t\t.subscribe(response => {\r\n\t\t\t\tthis.State.NotificationTemplates = (response.Entities as NotificationTemplate[])\r\n\t\t\t\t\t.filter((value, index, array) => array.findIndex(x => x.Name === value.Name) === index);\r\n\t\t\t});\r\n\t}\r\n\r\n\tLoadSelectOptions() {\r\n\t\tthis.DataSources['CustomerOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerOptionEndpoint.GetList(options));\r\n\t\tthis.DataSources['GuestContactPersonsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.contactPersonEndpoint.GetList(options));\r\n\t\tthis.DataSources['GuestCustomersAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerEndpoint.GetList(options));\r\n\t\tthis.DataSources['SalePersonOptions'] = new DataSourceCustomAction((options: DataLoadOptions) => this.salesPersonOptionEndpoint.GetList(options));\r\n\t}\r\n\r\n\tIsErrorNotificationInfoFilled = () => {\r\n\t\tif (this.Entity.ErrorNotificationTemplate) {\r\n\t\t\treturn !!this.Entity.ErrorNotificationEmailAddress;\r\n\t\t} else return true;\r\n\t};\r\n\r\n\tGetNotificationTemplateEntryID(templateName: string) {\r\n\t\tif (!templateName) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn this.State.NotificationTemplates.find(nt => nt.Name === templateName)?.EntryID;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { TermsOfUseOption } from '@dino-proxy/entities/termsofuseoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-terms-of-use-option-grid',\r\n templateUrl: './terms-of-use-option-grid.component.html'\r\n})\r\nexport class TermsOfUseOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TermsOfUseOptionsGridComponent', TermsOfUseOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/terms-of-use-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { TermsOfUseOptionEndpoint } from '@dino-proxy/endpoints/termsofuseoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-terms-of-use-option-list',\r\n templateUrl: './terms-of-use-option-list.component.html'\r\n})\r\nexport class TermsOfUseOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: TermsOfUseOptionEndpoint) {\r\n super(A, 'TermsOfUseOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['TermsOfUseOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { TermsOfUseOptionEndpoint } from '@dino-proxy/endpoints/termsofuseoption.endpoint';\r\nimport { TermsOfUseOption } from '@dino-proxy/entities/termsofuseoption.entity';\r\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-terms-of-use-option',\r\n\ttemplateUrl: './terms-of-use-option.component.html',\r\n\tstyleUrls: ['./terms-of-use-option.component.scss']\r\n})\r\nexport class TermsOfUseOptionComponent extends BasePageCRUDComponent {\r\n\t@ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: TermsOfUseOptionEndpoint) {\r\n\t\tsuper(A, 'TermsOfUseOptionComponent', TermsOfUseOption, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\tOnShowInEditor() {\r\n\t\tthis.htmlEditorDialog.ShowDialogShort((state: any) => {\r\n\t\t\tthis.Entity.Content = state.HTMLBody;\r\n\t\t});\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SpecificationAttribute } from '@dino-proxy/entities/specificationattribute.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-specification-attribute-grid',\r\n templateUrl: './specification-attribute-grid.component.html'\r\n})\r\nexport class SpecificationAttributesGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SpecificationAttributesGridComponent', SpecificationAttribute, State);\r\n }\r\n\r\n \r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/specification-attribute\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SpecificationAttributeEndpoint } from '@dino-proxy/endpoints/specificationattribute.endpoint';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { SpecificationAttributeValidityResult } from '@dino-proxy/entities/specificationattributevalidityresult.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-specification-attribute-list',\r\n templateUrl: './specification-attribute-list.component.html',\r\n styleUrls: ['./specification-attribute-list.component.scss']\r\n})\r\nexport class SpecificationAttributesListComponent extends BasePageComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: SpecificationAttributeEndpoint) {\r\n super(A, 'SpecificationAttributesListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['SpecificationAttributesAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n HandleValidateAll() {\r\n this.ShowMessageBox(EnumMessageBoxTypes.YesNo, this.RC(\"lblValidateAllSpecificationAttributesPrompt\"), () => {\r\n this.endpoint.GetAttributeValidities()\r\n .subscribe((r: BaseEntityResponse) => {\r\n setTimeout(() => {\r\n let message = this.RC(\"lblValidateAllSpecificationAttributesResult\", r.Entity.InvalidAttributes, r.Entity.EmptyAttributes);\r\n if (r.Entity.InvalidAttributes > 0) {\r\n message += '\\n\\r' + this.RC(\"lblValidateAllSpecificationAttributesFileResult\"); \r\n }\r\n this.ShowMessageBox(EnumMessageBoxTypes.OK, message, null);\r\n }, 500);\r\n });\r\n });\r\n }\r\n\r\n protected ShowMessageBox(boxType: EnumMessageBoxTypes, prompt: string, doneFunc?: () => void) {\r\n this.messageDialog.Type = boxType;\r\n this.messageDialog.Title = \"Validation\";\r\n this.messageDialog.Prompt = prompt;\r\n this.messageDialog.ShowDialogShort(() => {\r\n if (doneFunc) doneFunc();\r\n });\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FilterAttributeValue } from './../entities/filterattributevalue.entity';\r\nexport class SpecificationAttributeValue extends FilterAttributeValue {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SpecificationAttributeValue';\r\n }\r\n \r\n public Description: string; \r\n public SpecificationAttributeID: number; \r\n public Value: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { SpecificationAttributeValueEndpoint } from '@dino-proxy/endpoints/specificationattributevalue.endpoint';\r\nimport { EnumAttributeDisplayOptions } from '@dino-proxy/enums';\r\nimport { SpecificationAttributeValue } from '@dino-proxy/entities/specificationattributevalue.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-specification-attribute-value-grid',\r\n templateUrl: './specification-attribute-value-grid.component.html'\r\n})\r\nexport class SpecificationAttributeValuesGridComponent extends BaseGridComponent {\r\n @Input() SpecificationAttributeID: number;\r\n @Input() AttributeDisplayOption: EnumAttributeDisplayOptions;\r\n\r\n constructor(A: ServiceBagService,\r\n private specificationAttributeValueEndpoint: SpecificationAttributeValueEndpoint) {\r\n super(A, 'SpecificationAttributeValuesGridComponent', SpecificationAttributeValue, State);\r\n }\r\n\r\n OnInitNewRow(e) {\r\n this.G.SetData('SpecificationAttributeID', this.SpecificationAttributeID, e.data);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{cellInfo.value | formatDate}}\\r\\n {{cellInfo.value}} \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { EnumDocumentTypes } from \"@dino-proxy/enums\";\r\nimport { DxDataGridComponent } from \"devextreme-angular\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DocumentEndpoint } from \"@dino-proxy/endpoints/document.endpoint\";\r\nimport { DocumentListParams } from \"@dino-proxy/params/documentlist.param\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\n\r\nclass State extends BaseOptionState {\r\n SelectedDocumentID: number;\r\n IsMobile: boolean = false;\r\n DataSource: DataSourceCustomAction;\r\n}\r\n\r\n@Component({\r\n selector: 'app-duplicate-repeat-dialog',\r\n templateUrl: './duplicate-repeat-dialog.component.html',\r\n styleUrls: ['./duplicate-repeat-dialog.component.scss'],\r\n})\r\nexport class DuplicateRepeatDialogComponent extends BasePageComponent {\r\n @ViewChild('dataGrid') dataGrid: DxDataGridComponent;\r\n private _documentType: EnumDocumentTypes\r\n private _customerID: number;\r\n private _isDuplicateAction: boolean;\r\n \r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint) {\r\n super(A, 'DuplicateRepeatDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this._isDuplicateAction ? this.RC('msgDuplicateDocumentTitle') : this.RC('msgRepeatDocumentTitle');\r\n }\r\n\r\n public override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n OnSelectionChanged(documentID: number) {\r\n this.State.SelectedDocumentID = documentID;\r\n }\r\n\r\n OnMobileSelectionChanged(event: any) {\r\n this.State.SelectedDocumentID = event?.addedItems[0]?.EntryID;\r\n }\r\n\r\n CloseDialog() {\r\n this.CloseDialogWithSuccess(this.State.SelectedDocumentID);\r\n }\r\n\r\n Cancel() {\r\n this.CloseDialogWithCancel();\r\n }\r\n\r\n SetupData(documentType: EnumDocumentTypes, customerID: number, isDuplicateAction: boolean) {\r\n this._documentType = documentType;\r\n this._customerID = customerID;\r\n this._isDuplicateAction = isDuplicateAction;\r\n this.InitData();\r\n this.ReloadToolbar();\r\n }\r\n\r\n private InitData(): DataSourceCustomAction {\r\n this.DataSources['OriginalDocuments'] = null;\r\n if (!this._documentType || !this._customerID) return;\r\n\r\n const params = {\r\n CustomerID: this._customerID,\r\n DocumentType: this._documentType,\r\n } as DocumentListParams;\r\n\r\n const dataSource = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.documentEndpoint.GetListByParams(params, options),\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n this.DataSources['OriginalDocuments'] = dataSource;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Output } from \"@angular/core\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { DocumentView } from \"@dino-proxy/views/document.view\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\n@Component({\r\n selector: 'app-duplicate-repeat-documents-grid',\r\n templateUrl: './duplicate-repeat-documents-grid.component.html',\r\n styleUrls: ['./duplicate-repeat-documents-grid.component.scss'],\r\n})\r\nexport class DuplicateRepeatDocumentGridComponent extends BaseGridComponent {\r\n @Output() OnDocumentSelection = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DuplicateRepeatDialogComponent', DocumentView, BaseState);\r\n }\r\n\r\n OnSelectionChanged(event: any) {\r\n this.OnDocumentSelection.emit(event.selectedRowsData[0]?.EntryID);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ cell.data.Currency }} {{ cell.data.TotalAfterVat | formatNumberSum }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemsService, ShoppingCartEvent } from '@dino-services/items.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { WishlistEndpoint } from '@dino-proxy/endpoints/wishlist.endpoint';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\n\r\nclass State extends BaseState {\r\n Quantity: number;\r\n IsShoppingCartLoadedFirstHandled: boolean;\r\n IsWishlistLoadedFirstHandled: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-quantitybadge',\r\n templateUrl: './quantity-badge.component.html',\r\n styleUrls: ['./quantity-badge.component.scss']\r\n})\r\nexport class QuantityBadgeComponent extends BaseCustomerComponent {\r\n @Input() Mode: 'shopping-cart' | 'wishlist' = 'shopping-cart';\r\n\r\n // It should be combinedto one event\r\n private wishlistLoaded$Subscription: Subscription;\r\n private wishlistItemUpdated$Subscription: Subscription;\r\n private wishlistCleaned$Subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsService: ItemsService,\r\n private shoppingCartService: ShoppingCartService,\r\n customerService: CustomerService) {\r\n super(A, 'QuantityBadgeComponent', State, customerService);\r\n }\r\n \r\n override OnInitComponent() {\r\n if (this.Mode === 'shopping-cart') {\r\n const description$Subscription = this.shoppingCartService.description$\r\n .subscribe((r: ShoppingCartDescriptionResult) => {\r\n this.State.Quantity = r?.Length || 0;\r\n });\r\n\r\n this.RegisterSubscription(description$Subscription);\r\n }\r\n\r\n if (this.Mode === 'wishlist') {\r\n\r\n // setTimeout(() => {\r\n // if (this.State.IsWishlistLoadedFirstHandled) return;\r\n // this.UpdateWishlistQuantity();\r\n // }, 1000);\r\n\r\n this.wishlistLoaded$Subscription = this.itemsService.wishlistLoaded$\r\n .subscribe(event => {\r\n this.State.IsWishlistLoadedFirstHandled = true;\r\n this.State.Quantity = event.data as number;\r\n });\r\n\r\n this.wishlistItemUpdated$Subscription = this.itemsService.wishlistItemUpdated$\r\n .subscribe(() => {\r\n this.UpdateWishlistQuantity();\r\n });\r\n\r\n this.wishlistCleaned$Subscription = this.itemsService.wishlistCleaned$\r\n .subscribe(() => {\r\n this.State.Quantity = 0;\r\n });\r\n }\r\n }\r\n\r\n override OnCustomerChanged() {\r\n if (this.Mode === 'wishlist') {\r\n this.UpdateWishlistQuantity();\r\n } \r\n }\r\n\r\n override OnDestroyComponent() {\r\n // this.shoppingCartLoaded$Subscription && this.shoppingCartLoaded$Subscription.unsubscribe();\r\n // this.shoppingCartUpdated$Subscription && this.shoppingCartUpdated$Subscription.unsubscribe();\r\n // this.shoppingCartCleaned$Subscription && this.shoppingCartCleaned$Subscription.unsubscribe();\r\n\r\n this.wishlistLoaded$Subscription && this.wishlistLoaded$Subscription.unsubscribe();\r\n this.wishlistItemUpdated$Subscription && this.wishlistItemUpdated$Subscription.unsubscribe();\r\n this.wishlistCleaned$Subscription && this.wishlistCleaned$Subscription.unsubscribe();\r\n }\r\n\r\n protected UpdateWishlistQuantity() {\r\n this.itemsService.getWishlistQuantity();\r\n }\r\n\r\n protected UpdateShoppingCartQuantity(event: ShoppingCartEvent) {\r\n this.State.IsShoppingCartLoadedFirstHandled = true;\r\n const shoppingCartView = event.data as ShoppingCartView;\r\n this.State.Quantity = (shoppingCartView && shoppingCartView.ShoppingCartItemViews) ? shoppingCartView.ShoppingCartItemViews.length : 0;\r\n }\r\n}\r\n\r\n\r\n","export default \"
\\r\\n {{State.Quantity}}\\r\\n
\";","import { ShoppingCartEndpoint } from \"@dino-proxy/endpoints/shoppingcart.endpoint\";\r\nimport { ItemsService } from \"@dino-services/items.service\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { BaseShoppingCartState } from \"./base-shopping-cart-state\";\r\n\r\n// TEMP SOLUTION\r\nexport class CouponHelper {\r\n\r\n static applyCoupon(state: BaseShoppingCartState, shoppingCartService: ShoppingCartService, component: BaseComponent) {\r\n if (!state.Coupon\r\n || state.ShoppingCart.Coupons\r\n .find(val => val.SecretText.trim().toLowerCase() === state.Coupon.trim().toLowerCase())) return;\r\n\r\n shoppingCartService.applyCoupon(state.Coupon)\r\n .subscribe(r => {\r\n if (r.success) {\r\n component.A.UI.InfoMessage(component.RC(\"msgCouponApplied\"));\r\n } else {\r\n component.A.UI.WarningMessage(component.RC(\"msgCouponNotApplied\"));\r\n }\r\n });\r\n }\r\n\r\n static removeCoupon(value, shoppingCartService: ShoppingCartService, component: BaseComponent) {\r\n shoppingCartService.removeCoupon(value)\r\n .subscribe(r => {\r\n if (r.success) {\r\n component.A.UI.InfoMessage(component.RC(\"msgCouponRemoved\"));\r\n }\r\n });\r\n }\r\n\r\n static getCouponsSum(state: BaseShoppingCartState) {\r\n return state.ShoppingCart?.Coupons?.reduce((a, b) => a + b.TotalPrice || 0, 0);\r\n }\r\n\r\n static onCouponsSelectionChanged(event, shoppingCartService: ShoppingCartService, component: BaseComponent) {\r\n if (event.removedItems.length > 0) {\r\n CouponHelper.removeCoupon(event.removedItems[0].SecretText, shoppingCartService, component);\r\n }\r\n }\r\n}","import { BaseOptionState } from \"@dino-classes/base-option-state\";\r\nimport { ShoppingCartView } from \"@dino-proxy/views/shoppingcart.view\";\r\n\r\nexport class BaseShoppingCartState extends BaseOptionState {\r\n ShoppingCart: ShoppingCartView;\r\n TotalsExpanded: Boolean;\r\n IsSuggestedPromotionsLinkVisible: boolean;\r\n Coupon: string;\r\n CouponIds: number[] = [];\r\n DisableShoppingCartChange: boolean = false;\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ActionResultEvent, ShoppingCartItemUpdate, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { EnumMessageBoxTypes, EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CouponHelper } from '@dino-pages/shopping-cart/base/coupon.helper';\r\nimport { BaseShoppingCartState } from '@dino-pages/shopping-cart/base/base-shopping-cart-state';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumDocumentTypes, EnumShoppingCartItemViewOptions, EnumValidationStatus, ShoppingCartStatusEnums } from '@dino-proxy/enums';\r\nimport { ShoppingCartItemEditComponent } from '@dino-pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ShoppingCartItemsComponent } from '../shopping-cart-items/shopping-cart-items.component';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { DuplicateRepeatDialogComponent } from '../duplicate-repeat-dialog/duplicate-repeat-dialog.component';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { RepeatDocumentParams } from '@dino-proxy/params/repeatdocument.param';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { UpdateDocumentParams } from '@dino-proxy/params/updatedocument.param';\r\nimport { ShoppingCartItemCustomField } from '@dino-proxy/entities/shoppingcartitemcustomfield.entity';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseShoppingCartState {\r\n ItemDisplayType: EnumShoppingCartItemViewOptions = EnumShoppingCartItemViewOptions.List;\r\n IsEditMode: boolean;\r\n EditShoppingCartItem: ShoppingCartItemView;\r\n ShoppingCartItemUpdate: ShoppingCartItemUpdate;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-shoppingcart-compact',\r\n templateUrl: './shopping-cart-compact.component.html',\r\n styleUrls: ['./shopping-cart-compact.component.scss']\r\n})\r\nexport class ShoppingCartCompactComponent extends BaseCustomerComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @ViewChild('shoppingCartItemEditComponent', { static: false }) ShoppingCartItemEditComponent: ShoppingCartItemEditComponent;\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n @ViewChild(DuplicateRepeatDialogComponent) duplicateRepeatDialogComponent: DuplicateRepeatDialogComponent;\r\n @ViewChild('notEmptyShoppingCartPrompt') notEmptyShoppingCartPrompt: MessageBoxDialogComponent;\r\n\r\n ContextMenuItems: any[] = [];\r\n EnumScreenSizes = EnumScreenSizes;\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n IsDragAndDropModeEnabled: boolean = false;\r\n IsEnableShoppingCartListView: boolean;\r\n IsEnableShoppingCartCompactView: boolean;\r\n IsEnableShoppingCartLineView: boolean;\r\n ShoppingCartItemDisplayTypeStorageKey: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n public customerService: CustomerService,\r\n // TEMP\r\n public shoppingCartEndpoint: ShoppingCartEndpoint,\r\n public itemsService: ItemsService,\r\n private uiComponentService: UiComponentService,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n public documentEndpoint: DocumentEndpoint,\r\n public screenService: ScreenService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'ShoppingCartItemsComponent', State, customerService);\r\n }\r\n\r\n protected get IsPaymentEnabled() {\r\n let paymentOption = this.State.CustomerOption?.PaymentOption;\r\n return this.State.ShoppingCart?.DocumentOption && this.State.ShoppingCart?.DocumentOption.IsAllowPayment && this.State.ShoppingCart?.TotalAfterVat > 0\r\n && this.State.ShoppingCart?.DocumentType !== EnumDocumentTypes.Refund\r\n && this.State.ShoppingCart?.Status != ShoppingCartStatusEnums.Update\r\n && paymentOption && (paymentOption.IsAllowCashPayment || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowGoCreditPayment || paymentOption.IsAllowWirePayment || paymentOption.IsAllowLaterPayment);\r\n }\r\n\r\n get ItemCustomFields(): ShoppingCartItemCustomField[] {\r\n return this.State.EditShoppingCartItem && this.State.ShoppingCart?.ItemCustomFieldsView?.filter(f => f.UniqueItemID == this.State.EditShoppingCartItem.UniqueItemID) || [];\r\n }\r\n\r\n DefineAllowedViews() {\r\n const defaultItemOption = this.State.CustomerOption?.DefaultItemOption;\r\n const isDesktop = !this.screenService.IsMobile();\r\n this.IsEnableShoppingCartListView = isDesktop \r\n ? !!defaultItemOption?.ShoppingCartListDesktopOption \r\n : !!defaultItemOption?.ShoppingCartListMobileOption;\r\n\r\n this.IsEnableShoppingCartCompactView = isDesktop\r\n ? !!defaultItemOption?.ShoppingCartCompactDesktopOption\r\n : !!defaultItemOption?.ShoppingCartCompactMobileOption;\r\n\r\n this.IsEnableShoppingCartLineView = isDesktop\r\n ? !!defaultItemOption?.ShoppingCartLineDesktopOption\r\n : !!defaultItemOption?.ShoppingCartLineMobileOption;\r\n }\r\n\r\n override OnInitComponent() {\r\n const isMobile = this.screenService.IsMobile();\r\n this.ShoppingCartItemDisplayTypeStorageKey = `ShoppingCartItemDisplayType_${isMobile ? 'mobile' : 'desktop'}`;\r\n this.DefineAllowedViews();\r\n this.InitContextMenu();\r\n\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n this.State.ShoppingCart = r.shoppingCart;\r\n this.State.DisableShoppingCartChange = r.shoppingCart?.ShoppingPayment?.AnyPaymentDone;\r\n this.ToggleEnableAllPromotionItemsContextMenu();\r\n\r\n if (this.State.ShoppingCart\r\n && this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(x => x.name === 'new_line')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('lblShoppingCartItemNewLine'),\r\n icon: 'mdi mdi-note-plus-outline',\r\n name: 'new_line',\r\n command: () => {\r\n this.HandleNewLine();\r\n }\r\n }];\r\n }\r\n\r\n this.State.IsSuggestedPromotionsLinkVisible = !!this.State.ShoppingCart?.SuggestedPromotions && this.State.ShoppingCart.SuggestedPromotions.length > 0;\r\n this.State.TotalsExpanded = this.State.TotalsExpanded && !!(this.State.ShoppingCart?.ShoppingCartItemViews?.length);\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.customerService.GetIsAllowedBaseDocument(r.shoppingCart.DocumentType)\r\n && !this.ContextMenuItems.some(m => m.name === 'base_doc')\r\n && !r.shoppingCart.DisableShoppingCartChange) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('lblBaseDocumentBtnHint'),\r\n icon: 'mdi mdi-file-document-multiple-outline',\r\n name: 'base_doc',\r\n command: () => { this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, true); }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.State.ShoppingCart.DocumentOption?.IsAllowDuplication\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(m => m.name === 'duplicate_doc')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('btnDuplicateDocument'),\r\n icon: 'mdi mdi-file-document-multiple-outline',\r\n name: 'duplicate_doc',\r\n command: () => {\r\n this.HandleDuplicateDocument();\r\n }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.State.ShoppingCart.DocumentOption?.IsAllowRepeat\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(m => m.name === 'repeat_doc')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('btnRepeatDocument'),\r\n icon: 'mdi mdi-calendar-sync-outline',\r\n name: 'repeat_doc',\r\n command: () => {\r\n this.HandleRepeatDocument();\r\n }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.customerService.GetIsAllowedBaseDocument(r.shoppingCart.DocumentType)\r\n && r.shoppingCart.DisableShoppingCartChange) {\r\n this.InitContextMenu();\r\n }\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n }\r\n\r\n InitContextMenu() {\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(this.ShoppingCartItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n const isMobile = this.screenService.IsMobile();\r\n this.State.ItemDisplayType = isMobile\r\n ? this.State.CustomerOption?.DefaultItemOption?.DefaultShoppingCartMobileItemViewOption\r\n : this.State.CustomerOption?.DefaultItemOption?.DefaultShoppingCartDesktopItemViewOption;\r\n }\r\n }\r\n\r\n this.ContextMenuItems = [];\r\n\r\n (this.IsEnableShoppingCartListView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.List) }\r\n });\r\n\r\n (this.IsEnableShoppingCartCompactView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Compact) }\r\n });\r\n\r\n (this.IsEnableShoppingCartLineView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewUltraCompact'), icon: 'mdi mdi-minus', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Line) }\r\n });\r\n\r\n if ((!this.A.Screen.IsMobile() && this.A.Screen.IsWideScreen())) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('lblShoppingCartReorderItemsButton'),\r\n icon: 'mdi mdi-drag',\r\n name: 'drag-and-drop',\r\n command: () => {\r\n this.ToggleDragAndDropMode();\r\n }\r\n }];\r\n }\r\n }\r\n\r\n ToggleEnableAllPromotionItemsContextMenu() {\r\n const disabledPromotionsExist = this.State.ShoppingCart?.DisabledPromotionsExist;\r\n const promotionItem = { label: this.RC('btnEnableAllPromotionItems'), icon: 'mdi mdi-currency-usd', command: () => { this.shoppingCartService.enableAllPromotionItems() } };\r\n if (disabledPromotionsExist && !this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, { separator: true }, promotionItem];\r\n } else if (!disabledPromotionsExist && this.ContextMenuItems.some(item => item.label === promotionItem.label)) {\r\n const itemIndex = this.ContextMenuItems.findIndex(item => item.label === promotionItem.label);\r\n if (itemIndex > -1) {\r\n this.ContextMenuItems = [\r\n ...this.ContextMenuItems.slice(0, itemIndex - 1),\r\n ...this.ContextMenuItems.slice(itemIndex + 1)\r\n ];\r\n }\r\n }\r\n }\r\n\r\n HandleDuplicateDocument() {\r\n let duplicateAction = () => {\r\n this.duplicateRepeatDialogComponent.SetupData(this.State.ShoppingCart.DocumentType, this.CustomerID, true);\r\n this.duplicateRepeatDialogComponent.ShowDialogShort(documentID => {\r\n const params = {\r\n DocumentID: documentID,\r\n DocumentType: this.State.ShoppingCart.DocumentType,\r\n IsEditExisting: false\r\n } as UpdateDocumentParams;\r\n\r\n this.documentEndpoint.UpdateDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (this.State.ShoppingCart.ShoppingCartItemViews.length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => duplicateAction())\r\n } else {\r\n duplicateAction();\r\n };\r\n }\r\n\r\n HandleRepeatDocument() {\r\n const repeatAction = () => {\r\n this.duplicateRepeatDialogComponent.SetupData(this.State.ShoppingCart.DocumentType, this.CustomerID, false);\r\n this.duplicateRepeatDialogComponent.ShowDialogShort(documentID => {\r\n const params = {\r\n DocumentID: documentID,\r\n DocumentType: this.State.ShoppingCart.DocumentType\r\n } as RepeatDocumentParams;\r\n\r\n this.documentEndpoint.RepeatDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n });\r\n };\r\n\r\n if (this.State.ShoppingCart.ShoppingCartItemViews.length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => repeatAction());\r\n } else {\r\n repeatAction();\r\n };\r\n }\r\n\r\n private ToggleDragAndDropMode() {\r\n this.IsDragAndDropModeEnabled = !this.IsDragAndDropModeEnabled;\r\n const dragAndDropLabel = this.IsDragAndDropModeEnabled\r\n ? this.RC('lblShoppingCartSaveItemsOrder')\r\n : this.RC('lblShoppingCartReorderItemsButton');\r\n const dragAndDropItem = this.ContextMenuItems.find(x => x.name === 'drag-and-drop');\r\n if (dragAndDropItem) {\r\n dragAndDropItem.label = dragAndDropLabel;\r\n }\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.Refresh();\r\n this.shoppingCartService.load(false);\r\n }\r\n\r\n get HasCouponBlock() { return this.State.ShoppingCart?.DocumentOption?.IsEnableGiftCards && !!this.State.ShoppingCart?.ShoppingCartItemViews?.length && !this.State.DisableShoppingCartChange; }\r\n\r\n Refresh() {\r\n this.State.IsEditMode = false;\r\n this.State.EditShoppingCartItem = null;\r\n this.State.ShoppingCartItemUpdate = null;\r\n this.State.ShoppingCart = null;\r\n this.State.Coupon = null;\r\n this.State.CouponIds = [];\r\n this.State.TotalsExpanded = false;\r\n }\r\n\r\n HandleChangeViewMode(itemDisplayType: EnumShoppingCartItemViewOptions) {\r\n this.State.ItemDisplayType = itemDisplayType;\r\n // ??? localStorage\r\n this.localStorageService.SetItem(this.ShoppingCartItemDisplayTypeStorageKey, itemDisplayType);\r\n }\r\n\r\n HandleSelectViewMode(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n HandleCheckout() {\r\n if (!this.State.ShoppingCart?.ShoppingCartItemViews?.length) return;\r\n this.A.RouteHistoryService.ClearHistory();\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CHECKOUT,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n HandleToggleTotals() {\r\n this.State.TotalsExpanded = !this.State.TotalsExpanded;\r\n }\r\n\r\n HandleRemoveAll() {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('btnRemoveAll');\r\n this.messageDialog.Prompt = this.RC('promptClearShoppingCart');\r\n this.messageDialog.ShowDialogShort(() => { this.shoppingCartService.cleanShoppingCart() });\r\n }\r\n\r\n NavigateToSuggestedPromotionsComponent() {\r\n this.Navigate([ROUTE_PATHS.SUGGESTED_PROMOTIONS]);\r\n }\r\n\r\n applyCoupon() {\r\n CouponHelper.applyCoupon(this.State, this.shoppingCartService, this);\r\n }\r\n\r\n removeCoupon(value) {\r\n CouponHelper.removeCoupon(value, this.shoppingCartService, this);\r\n }\r\n\r\n getCouponsSum() {\r\n CouponHelper.getCouponsSum(this.State);\r\n }\r\n\r\n onCouponsSelectionChanged(event) {\r\n CouponHelper.onCouponsSelectionChanged(event, this.shoppingCartService, this)\r\n }\r\n\r\n HandleItemEdit(shoppingCartItem: ShoppingCartItemView, isDuplicate: boolean = false) {\r\n if (!this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing) return;\r\n\r\n this.State.IsEditMode = true;\r\n\r\n if (!isDuplicate) {\r\n this.State.EditShoppingCartItem = shoppingCartItem;\r\n } else {\r\n this.State.EditShoppingCartItem = Utils.CloneObject(shoppingCartItem);\r\n this.State.EditShoppingCartItem.EntryID = null;\r\n setTimeout(() => this.ShoppingCartItemEditComponent.SendEvent(), 100);\r\n }\r\n }\r\n\r\n HandleNewLine() {\r\n this.State.IsEditMode = true;\r\n this.State.EditShoppingCartItem = {} as ShoppingCartItemView;\r\n this.State.EditShoppingCartItem.WarehouseID = this.State.CustomerOption.BusinessOption.WarehouseID;\r\n }\r\n\r\n HandleConfirmEdit() {\r\n setTimeout(() => {\r\n if (!this.State.ShoppingCartItemUpdate?.IsValid) return;\r\n\r\n const isNew = !this.State.EditShoppingCartItem.EntryID;\r\n if (isNew) {\r\n this.State.ShoppingCartItemUpdate.PlaceAfterUniqueID = this.State.ShoppingCartItemUpdate.UniqueItemID;\r\n this.State.ShoppingCartItemUpdate.UniqueItemID = null;\r\n }\r\n\r\n this.shoppingCartService.updateItem(this.State.ShoppingCartItemUpdate, isNew)\r\n .subscribe((r: ActionResultEvent) => {\r\n if (r.success) {\r\n this.State.IsEditMode = false;\r\n this.State.EditShoppingCartItem = null;\r\n this.State.ShoppingCartItemUpdate = null;\r\n } else {\r\n //this.uiComponentService.ProcessAlerts(r.error);\r\n }\r\n });\r\n }, 366);\r\n }\r\n\r\n HandleCancelEdit() {\r\n this.State.IsEditMode = false;\r\n this.State.EditShoppingCartItem = null;\r\n this.State.ShoppingCartItemUpdate = null;\r\n }\r\n\r\n HandleShoppingCartItemChanged(update: ShoppingCartItemUpdate) {\r\n this.State.ShoppingCartItemUpdate = update;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
{{State.ShoppingCart?.ShoppingCartItemViews?.length ? RC('lblShoppingCartCompactLength', State.ShoppingCart?.ShoppingCartItemViews?.length) : RC('lblShoppingCartCompactNoItems')}}
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
{{'lblShoppingCartCompactClear' | RC:THIS}}
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
{{'lblItemEditing' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n {{'btnSuggestedPromotions' | RC:THIS}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { ShoppingCartItemNumbersDialogComponent } from '@dino-pages/shopping-cart/components/shopping-cart-item-numbers-dialog/shopping-cart-item-numbers-dialog.component';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { VatGroupEndpoint } from '@dino-proxy/endpoints/vatgroup.endpoint';\r\nimport { WarehouseEndpoint } from '@dino-proxy/endpoints/warehouse.endpoint';\r\nimport { Batch } from '@dino-proxy/entities/batch.entity';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\nimport { BusinessOption } from '@dino-proxy/entities/businessoption.entity';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { SerialNumber } from '@dino-proxy/entities/serialnumber.entity';\r\nimport { ShoppingCartItemBatch } from '@dino-proxy/entities/shoppingcartitembatch.entity';\r\nimport { ShoppingCartItemSerialNumber } from '@dino-proxy/entities/shoppingcartitemserialnumber.entity';\r\nimport { UpdateItemBatch } from '@dino-proxy/entities/updateitembatch.entity';\r\nimport { EnumFormFieldOptions, EnumItemStockManagementTypes } from '@dino-proxy/enums';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { VatGroupView } from '@dino-proxy/views/vatgroup.view';\r\nimport { DisplayType, ItemOptionService } from '@dino-services/item-option.service';\r\nimport { ShoppingCartItemUpdate, ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { forkJoin } from 'rxjs/internal/observable/forkJoin';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ShoppingCartItemCustomField } from '@dino-proxy/entities/shoppingcartitemcustomfield.entity';\r\n\r\nclass State extends BaseState {\r\n ElementOption = new ItemDisplayElementOption;\r\n PopupOption = new ItemDisplayPopupOption;\r\n EditShoppingCartItem: ShoppingCartItemView = {} as ShoppingCartItemView;\r\n IsVatLiable: boolean = false;\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n SerialNumbers: ShoppingCartItemSerialNumber[] = [];\r\n Batches: ShoppingCartItemBatch[] = [];\r\n ShoppingCart: ShoppingCartView;\r\n ShowVatGroupSelection: boolean = false;\r\n VatGroups: VatGroupView[] = [];\r\n CustomerVatGroup: string;\r\n AllNumbers: SerialNumber[] | Batch[] = [];\r\n CustomFieldValues: any = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shopping-cart-item-edit',\r\n templateUrl: './shopping-cart-item-edit.component.html',\r\n styleUrls: ['./shopping-cart-item-edit.component.scss']\r\n})\r\nexport class ShoppingCartItemEditComponent extends BaseComponent {\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild('shoppingCartItemNumbersDialog') shoppingCartItemNumbersDialog: ShoppingCartItemNumbersDialogComponent;\r\n\r\n @Input() set ShoppingCartItem(value: ShoppingCartItemView) {\r\n this._shoppingCartItemView = value;\r\n this._uniqueItemID = value?.UniqueItemID;\r\n this.InitItem(this._shoppingCartItemView);\r\n }\r\n get ShoppingCartItem() { return this._shoppingCartItemView; }\r\n @Input() DocumentOption: DocumentOption;\r\n @Input() BusinessOption: BusinessOption;\r\n get Item() { return this.State.EditShoppingCartItem?.ItemView; }\r\n @Input() CustomValues: ShoppingCartItemCustomField[] = [];\r\n @Output() OnChanged = new EventEmitter();\r\n\r\n get BatchesQuantity() {\r\n return this.State.Batches.reduce((accumulator, batch) => {\r\n return accumulator + batch.Quantity;\r\n }, 0);\r\n }\r\n\r\n get ShowItemNumbersByDocType() {\r\n return this.State.ShoppingCart && this.ShoppingCartItem?.IsNumberSelectionEnabled && this.documentService.IsInventory(this.State.ShoppingCart.DocumentType);\r\n }\r\n\r\n private _shoppingCartItemView: ShoppingCartItemView;\r\n private _uniqueItemID: number = null;\r\n IsItemCodeFieldDisabled: boolean;\r\n IsQuantityFieldDisabled: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemsEndpoint: ItemsEndpoint,\r\n private itemOptionService: ItemOptionService,\r\n private shoppingCartEndpoint: ShoppingCartEndpoint,\r\n private warehouseEndpoint: WarehouseEndpoint,\r\n private shoppingCartService: ShoppingCartService,\r\n private vatGroupEndpoint: VatGroupEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private documentService: DocumentService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'ShoppingCartItemEditComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadItems();\r\n\r\n this.State.Tabs = [{\r\n index: 0,\r\n text: this.RC('lblShoppingCartItemEditing'),\r\n Name: 'Editing'\r\n }];\r\n\r\n this.shoppingCartService.changed$.subscribe(event => {\r\n if (!!event.shoppingCart) {\r\n this.State.ShoppingCart = event.shoppingCart;\r\n this.State.SerialNumbers = this.State.ShoppingCart.SerialNumbersView || [];\r\n this.State.Batches = this.State.ShoppingCart.BatchesView || [];\r\n if (this.State.ShoppingCart && this.documentService.IsInventory(this.State.ShoppingCart.DocumentType) && this.State.AllNumbers.length === 0) {\r\n this.LoadNumbers();\r\n }\r\n }\r\n });\r\n\r\n this.DisableFormFields();\r\n }\r\n\r\n DisableFormFields() {\r\n const editItem = this.State.EditShoppingCartItem;\r\n\r\n if (!editItem.UniqueItemID) return;\r\n\r\n this.IsItemCodeFieldDisabled = this.IsFieldDisabled('Item')\r\n || (!!editItem.BaseEntryID && editItem.BaseEntryID > 0)\r\n || (editItem.Permissions && !editItem.Permissions?.IsAllowItemCodeEditing);\r\n\r\n this.IsQuantityFieldDisabled = editItem.Permissions && !editItem.Permissions.IsAllowQuantityEditing;\r\n }\r\n\r\n InitItem(shoppingCartItem: ShoppingCartItemView) {\r\n this.CustomValues.forEach(cfv => {\r\n this.State.CustomFieldValues[cfv.CustomFieldID] = cfv.Value;\r\n });\r\n this.State.EditShoppingCartItem = Utils.CloneObject(shoppingCartItem);\r\n this.State.EditShoppingCartItem.UniqueItemID = this._uniqueItemID;\r\n if (this.Item?.ItemOptionID) {\r\n this.State.ElementOption\r\n = this.itemOptionService.GetItemOption(this.Item.ItemOptionID, DisplayType.ShoppingCartList)\r\n || new ItemDisplayElementOption;\r\n this.State.PopupOption\r\n = this.itemOptionService.GetItemOption(this.Item.ItemOptionID, DisplayType.Popup) || new ItemDisplayPopupOption;\r\n } else {\r\n this.State.ElementOption = {} as ItemDisplayElementOption;\r\n this.State.PopupOption = {} as ItemDisplayPopupOption;\r\n }\r\n\r\n this.State.IsVatLiable = this.State.EditShoppingCartItem.IsVatLiable;\r\n\r\n if (this.F.LocalizationType === this.SysEnums.EnumLocalizationTypes.Europe) {\r\n forkJoin([this.customerEndpoint.GetCurrentCustomerWithDetails(), this.vatGroupEndpoint.GetVatGroups()]).subscribe(results => {\r\n this.State.CustomerVatGroup = results[0].Entity.VatGroupCode;\r\n this.State.VatGroups = results[1].Entities || [];\r\n this.State.ShowVatGroupSelection = true;\r\n });\r\n }\r\n }\r\n\r\n protected LoadItems() {\r\n this.DataSources[\"SalesPersonItems\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.itemsEndpoint.GetItemsLite(options),\r\n entryID => this.itemsEndpoint.GetItemLiteByID(entryID),\r\n undefined,\r\n false);\r\n this.DataSources[\"Warehouses\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.warehouseEndpoint.GetList());\r\n }\r\n\r\n private LoadNumbers() {\r\n if (this.Item?.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n this.itemsEndpoint.GetSerialNumbers(this.State.EditShoppingCartItem.ItemID).subscribe(response => {\r\n let result = response.Entities;\r\n if (!!this.State.EditShoppingCartItem.Warehouse) {\r\n result = response.Entities.filter(x => x.WarehouseID == this.State.EditShoppingCartItem.WarehouseID);\r\n }\r\n this.State.AllNumbers = result;\r\n });\r\n }\r\n else if (this.Item?.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n this.itemsEndpoint.GetBatches(this.State.EditShoppingCartItem.ItemID).subscribe(response => {\r\n let result = response.Entities;\r\n if (!!this.State.EditShoppingCartItem.Warehouse) {\r\n result = response.Entities.filter(x => x.WarehouseID == this.State.EditShoppingCartItem.WarehouseID);\r\n }\r\n this.State.AllNumbers = result;\r\n });\r\n }\r\n }\r\n\r\n IsFieldDisplaying = (name: string) => this.GetFieldOption(name) !== EnumFormFieldOptions.Hidden;\r\n IsFieldMandatory = (name: string) => this.GetFieldOption(name) === EnumFormFieldOptions.Mandatory;\r\n GetFieldOption = (name: string) => this.DocumentOption ? this.DocumentOption[name + 'Option'] as EnumFormFieldOptions : null;\r\n\r\n IsFieldDisabled(name: string) {\r\n const isFieldOptionDisabled = this.GetFieldOption(name) === EnumFormFieldOptions.Disabled;\r\n return isFieldOptionDisabled || this.IsPriceRelatedFieldDisabled(name);\r\n }\r\n\r\n IsPriceRelatedFieldDisabled(name: string) {\r\n const editItem = this.State.EditShoppingCartItem;\r\n\r\n if (!editItem.UniqueItemID) return false;\r\n\r\n const disabledPriceRelatedFields = ['Currency', 'Price', 'PriceAfterVat', 'Discount',\r\n 'PriceAfterDiscount', 'PriceAfterDiscountAndVat', 'Total', 'TotalAfterVat'];\r\n return (editItem.Permissions\r\n && !editItem.Permissions?.IsAllowPriceEditing && disabledPriceRelatedFields.includes(name));\r\n }\r\n\r\n HandleItemChanged() {\r\n if (this.State.EditShoppingCartItem.ItemID) {\r\n this.shoppingCartEndpoint.GetSingleItemWithTotals(this.State.EditShoppingCartItem.ItemID)\r\n .subscribe(r => {\r\n const item = r.Entity as ShoppingCartItemView;\r\n item.WarehouseID = this.State.EditShoppingCartItem.WarehouseID;\r\n this.InitItem(item);\r\n this.SendEvent(true);\r\n });\r\n } else {\r\n this.State.EditShoppingCartItem = {\r\n UniqueItemID: this._uniqueItemID,\r\n ItemView: {} as ItemView,\r\n WarehouseID: this.State.EditShoppingCartItem.WarehouseID\r\n } as ShoppingCartItemView;\r\n this.SendEvent();\r\n }\r\n }\r\n\r\n HandleQuantityValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n if (!this.State.EditShoppingCartItem.Quantity) this.State.EditShoppingCartItem.Quantity = 1;\r\n\r\n this.CalculateTotals();\r\n this.SendEvent();\r\n }\r\n\r\n HandleCurrencyChanged() {\r\n this.SendEvent();\r\n }\r\n\r\n HandlePriceValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.CalculatePriceAfterVat();\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotals();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandlePriceAfterVatValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.State.EditShoppingCartItem.Price = Utils.Round(this.State.EditShoppingCartItem.PriceAfterVat / this.GetVatMultiplier());\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotals();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandleDiscountPercentValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotals();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandlePriceAfterDiscountValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.State.EditShoppingCartItem.Discount = this.State.EditShoppingCartItem.Price\r\n ? Utils.Round((this.State.EditShoppingCartItem.Price - this.State.EditShoppingCartItem.PriceAfterDiscount) / this.State.EditShoppingCartItem.Price * 100)\r\n : 0;\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotals();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandlePriceAfterDiscountAndVatValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n // this.State.EditShoppingCartItem.Price = Utils.Round(this.State.EditShoppingCartItem.PriceAfterDiscountAndVat / this.GetDiscountMultiplier() / this.GetVatMultiplier());\r\n this.State.EditShoppingCartItem.Discount = this.State.EditShoppingCartItem.Price\r\n ? Utils.Round((this.State.EditShoppingCartItem.Price - (this.State.EditShoppingCartItem.PriceAfterDiscountAndVat / this.GetVatMultiplier())) / this.State.EditShoppingCartItem.Price * 100)\r\n : 0;\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotals();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandleTotalValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.CalculateDiscountPercent();\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculateTotalAfterVAT();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandleTotalAfterVatValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.State.EditShoppingCartItem.Total = Utils.Round(this.State.EditShoppingCartItem.TotalAfterVat / this.GetVatMultiplier());\r\n this.CalculateDiscountPercent();\r\n this.CalculatePriceAfterDiscountValue();\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandleVatGroupChanged(e) {\r\n if (!e?.event) return;\r\n\r\n if (!this.State.EditShoppingCartItem.VatGroupCode) {\r\n this.State.EditShoppingCartItem.VatGroupCode = this.State.CustomerVatGroup || this.Framework.CompanyInfo.DefaultVatGroupCode;\r\n }\r\n\r\n this.State.EditShoppingCartItem.VatPercent = this.State.VatGroups.find(vg => vg.Code === this.State.EditShoppingCartItem.VatGroupCode).Percent;\r\n this.CalculatePriceAfterDiscountAndVatValue();\r\n this.CalculatePriceAfterVat();\r\n this.CalculateTotalAfterVAT();\r\n\r\n this.SendEvent();\r\n }\r\n\r\n HandleTextChanged(e) {\r\n if (!e?.event) return;\r\n this.SendEvent();\r\n }\r\n\r\n HandleWarehouseValueChanged(e) {\r\n if (!e?.event) return;\r\n\r\n this.State.SerialNumbers = [];\r\n this.State.Batches = [];\r\n this.LoadNumbers();\r\n this.SendEvent();\r\n }\r\n\r\n HandleShowAvailability() {\r\n if (!this.Item?.EntryID || !this.State.PopupOption?.IsRenderAvailability) return;\r\n\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, this.Item?.EntryID], { Tab: 'AvailabilityTab' })\r\n );\r\n }\r\n\r\n OnSelectNumberDialog() {\r\n setTimeout(() => {\r\n const isSerial = this.Item.ItemStockManagementType == this.Enums.EnumItemStockManagementTypes.Serial;\r\n this.shoppingCartItemNumbersDialog.AllowManualInput = this.documentService.IsNegative(this.State.ShoppingCart.DocumentType) && this.documentService.IsInventory(this.State.ShoppingCart.DocumentType);\r\n this.shoppingCartItemNumbersDialog.NumberItems = isSerial\r\n ? [...(this.State.SerialNumbers.filter(sn => sn.UniqueItemID === this._uniqueItemID))]\r\n : [...(this.State.Batches.filter(b => b.UniqueItemID === this._uniqueItemID))];\r\n this.shoppingCartItemNumbersDialog.ItemStockManagementType = this.Item.ItemStockManagementType;\r\n this.shoppingCartItemNumbersDialog.AllNumbers = this.State.AllNumbers;\r\n this.shoppingCartItemNumbersDialog.ShowDialogShort((result) => {\r\n if (!result) return;\r\n\r\n if (isSerial) {\r\n this.State.SerialNumbers.length = 0;\r\n this.State.SerialNumbers.push(...result);\r\n }\r\n else {\r\n this.State.Batches.length = 0;\r\n this.State.Batches.push(...result);\r\n }\r\n this.SendEvent();\r\n });\r\n }, 100);\r\n }\r\n\r\n CheckNumbersQuantity = () => {\r\n switch (this.Item?.ItemStockManagementType) {\r\n case this.Enums.EnumItemStockManagementTypes.Batch: return this.BatchesQuantity === this.State.EditShoppingCartItem.Quantity;\r\n case this.Enums.EnumItemStockManagementTypes.Serial: return this.State.SerialNumbers.length === this.State.EditShoppingCartItem.Quantity;\r\n case this.Enums.EnumItemStockManagementTypes.Default: return true;\r\n }\r\n }\r\n\r\n OnFormChange(field: any) {\r\n if (!this.State.CustomFieldValues) {\r\n this.State.CustomFieldValues = {} as any;\r\n }\r\n this.State.CustomFieldValues[field.Key] = field.Value;\r\n this.SendEvent();\r\n }\r\n\r\n private CalculateTotals() {\r\n this.CalculateTotal();\r\n this.CalculateTotalAfterVAT();\r\n }\r\n\r\n private CalculateTotal() {\r\n this.State.EditShoppingCartItem.Total = Utils.Round(this.State.EditShoppingCartItem.Quantity * this.State.EditShoppingCartItem.Price * this.GetDiscountMultiplier());\r\n }\r\n\r\n private CalculatePriceAfterDiscountAndVatValue() {\r\n this.State.EditShoppingCartItem.PriceAfterDiscountAndVat = Utils.Round(this.GetDiscountMultiplier() * this.GetVatMultiplier() * this.State.EditShoppingCartItem.Price);\r\n }\r\n\r\n private CalculatePriceAfterDiscountValue() {\r\n this.State.EditShoppingCartItem.PriceAfterDiscount = Utils.Round(this.State.EditShoppingCartItem.Price * this.GetDiscountMultiplier());\r\n }\r\n\r\n private CalculatePriceAfterVat() {\r\n this.State.EditShoppingCartItem.PriceAfterVat = Utils.Round(this.State.EditShoppingCartItem.Price * this.GetVatMultiplier());\r\n }\r\n\r\n private CalculateTotalAfterVAT() {\r\n this.State.EditShoppingCartItem.TotalAfterVat = Utils.Round(this.State.EditShoppingCartItem.Total * this.GetVatMultiplier());\r\n }\r\n\r\n private CalculateDiscountPercent() {\r\n let price = this.State.EditShoppingCartItem.Quantity * this.State.EditShoppingCartItem.Price;\r\n this.State.EditShoppingCartItem.Discount = Utils.Round(100 * (price - this.State.EditShoppingCartItem.Total) / price);\r\n }\r\n\r\n private GetVatMultiplier(): number {\r\n let vatPercent = this.State.ShowVatGroupSelection ? this.State.EditShoppingCartItem.VatPercent : this.A.Framework.CompanyInfo.VatPercent;\r\n return this.State.IsVatLiable ? 1 + vatPercent / 100 : 1;\r\n }\r\n\r\n private GetDiscountMultiplier(): number {\r\n return 1 - (this.State.EditShoppingCartItem.Discount ?? 0) / 100;\r\n }\r\n\r\n public SendEvent(forceValid: boolean = false) {\r\n setTimeout(() => {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n const eventObj = {\r\n ...this.State.EditShoppingCartItem,\r\n ...{\r\n IsValid: forceValid || valid,\r\n ItemID: this.Item?.EntryID,\r\n PlaceAfterUniqueID: this.State.EditShoppingCartItem.UniqueItemID,\r\n Batches: this.State.Batches.map(b => b as UpdateItemBatch),\r\n SerialNumbers: this.State.SerialNumbers.map(sn => sn.SerialNumber),\r\n CustomFieldValues: this.State.CustomFieldValues\r\n }\r\n } as any as ShoppingCartItemUpdate;\r\n\r\n this.OnChanged.emit(eventObj)\r\n });\r\n }, 166);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{Item?.ItemName}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{data.ItemCode}}
\\r\\n
{{data.ItemName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n 0\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Type=\\\"default\\\"\\r\\n (OnClick)=\\\"OnSelectNumberDialog()\\\"\\r\\n Icon=\\\"mdi mdi-plus-circle\\\"\\r\\n Text=\\\"{{'btnEditSerialNumber' | RC:THIS}}\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n 0\\\"\\r\\n Mode=\\\"text\\\"\\r\\n Type=\\\"default\\\"\\r\\n (OnClick)=\\\"OnSelectNumberDialog()\\\"\\r\\n Icon=\\\"mdi mdi-plus-circle\\\"\\r\\n Text=\\\"{{'btnEditBatch' | RC:THIS}}\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{data.WarehouseCode}}
\\r\\n
{{data.Name}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxContextMenuComponent, DxListComponent } from 'devextreme-angular';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { ShoppingCartItemBatch } from '@dino-proxy/entities/shoppingcartitembatch.entity';\r\nimport { ShoppingCartItemSerialNumber } from '@dino-proxy/entities/shoppingcartitemserialnumber.entity';\r\nimport { SerialNumber } from '@dino-proxy/entities/serialnumber.entity';\r\nimport { Batch } from '@dino-proxy/entities/batch.entity';\r\nimport { EnumItemStockManagementTypes } from '@dino-proxy/enums';\r\nimport { BarcodeComponent } from '@dino-components/barcode/barcode.component';\r\n\r\nclass State extends BaseState {\r\n SelectedNumbers: any[] = [];\r\n SearchNumber: string;\r\n FilteredNumbers: SerialNumber[] | Batch[] = [];\r\n Barcode: string;\r\n SortByItems: any = [];\r\n SortIndex: number = 0;\r\n IsSortDescending = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-select-item-numbers-dialog',\r\n templateUrl: './select-item-numbers-dialog.component.html',\r\n styleUrls: ['./select-item-numbers-dialog.component.scss']\r\n})\r\nexport class SelectItemNumberDialogComponent extends BasePageComponent {\r\n\r\n @Input() NumberItems: ShoppingCartItemBatch[] | ShoppingCartItemSerialNumber[] = [];\r\n @Input() AllNumbers: SerialNumber[] | Batch[] = [];\r\n @Input() ItemStockManagementType: EnumItemStockManagementTypes;\r\n\r\n @ViewChild('sortByContextMenu') sortByContextMenu: DxContextMenuComponent;\r\n @ViewChild('barcode') barcodeBoxDialog: BarcodeComponent;\r\n @ViewChild('list') list: DxListComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectItemNumberDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle() {\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) return this.RC('lblSelectBatchNumbers');\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) return this.RC('lblSelectSerialNumbers');\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n this.State.SelectedNumbers = (this.AllNumbers as SerialNumber[]).filter(x => this.NumberItems.some(item => item.SerialNumber == x.SerialNum));\r\n this.State.FilteredNumbers = this.AllNumbers;\r\n this.Sort();\r\n return;\r\n }\r\n\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n this.State.SelectedNumbers = (this.AllNumbers as Batch[]).filter(x => this.NumberItems.some(item => item.Number == x.Number));\r\n this.State.FilteredNumbers = this.AllNumbers;\r\n this.InitSortContextMenu();\r\n this.Sort();\r\n return;\r\n }\r\n }\r\n\r\n OnSortBy() {\r\n this.sortByContextMenu.instance.show();\r\n }\r\n\r\n OnConfirm() {\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n this.CloseDialogWithSuccess(this.list.selectedItems);\r\n return;\r\n }\r\n }\r\n\r\n OnItemClicked(e) {\r\n this.CloseDialogWithSuccess(e.itemData);\r\n }\r\n\r\n OnSearch() {\r\n if (!this.State.SearchNumber) {\r\n this.State.FilteredNumbers = [...(this.AllNumbers as any[])];\r\n return;\r\n }\r\n\r\n let selectedElements = this.list.selectedItems;\r\n\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n this.State.FilteredNumbers = (this.AllNumbers as SerialNumber[]).filter(x => x.SerialNum.indexOf(this.State.SearchNumber) >= 0 || selectedElements.indexOf(x) >= 0)\r\n }\r\n else if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n this.State.FilteredNumbers = (this.AllNumbers as Batch[]).filter(x => x.Number.indexOf(this.State.SearchNumber) >= 0 || selectedElements.indexOf(x) >= 0)\r\n }\r\n }\r\n\r\n OnSearchClear() {\r\n this.State.SearchNumber = \"\";\r\n }\r\n\r\n OnBarcodeValueChanged(value) {\r\n this.State.Barcode = value;\r\n }\r\n\r\n OnSortChanged = (e) => {\r\n this.State.IsSortDescending = !this.State.IsSortDescending;\r\n this.Sort();\r\n }\r\n\r\n OnSortByItem = (e) => {\r\n this.State.SortIndex = e?.itemData?.Index ?? 1;\r\n this.Sort();\r\n }\r\n\r\n GetNumbersAddedLabel = () => {\r\n return this.RC('lblSerialNumbersSelected', this.list?.selectedItems?.length ?? 0);\r\n }\r\n\r\n GetUnits = (item: Batch) => {\r\n return this.RC('lblBatchNumberCount', `${formatNumber(item.Quantity, this.F.NumberQuantity)}`);\r\n }\r\n\r\n private Sort() {\r\n // sort by name\r\n if (this.State.SortIndex == 0) {\r\n if (this.ItemStockManagementType === EnumItemStockManagementTypes.Batch) {\r\n (this.AllNumbers as Batch[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.Number.localeCompare(b.Number) : b.Number.localeCompare(a.Number);\r\n });\r\n \r\n (this.State.FilteredNumbers as Batch[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.Number.localeCompare(b.Number) : b.Number.localeCompare(a.Number);\r\n });\r\n } else {\r\n (this.AllNumbers as SerialNumber[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.SerialNum.localeCompare(b.SerialNum) : b.SerialNum.localeCompare(a.SerialNum);\r\n });\r\n \r\n (this.State.FilteredNumbers as SerialNumber[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.SerialNum.localeCompare(b.SerialNum) : b.SerialNum.localeCompare(a.SerialNum);\r\n });\r\n }\r\n return;\r\n }\r\n\r\n // sort by quantity\r\n if (this.State.SortIndex == 1) {\r\n (this.AllNumbers as Batch[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.Quantity - b.Quantity : b.Quantity - a.Quantity;\r\n });\r\n\r\n (this.State.FilteredNumbers as Batch[]).sort((a, b) => {\r\n return this.State.IsSortDescending ? a.Quantity - b.Quantity : b.Quantity - a.Quantity;\r\n });\r\n return;\r\n }\r\n }\r\n\r\n private InitSortContextMenu() {\r\n this.State.SortByItems = [\r\n {\r\n Text: this.ItemStockManagementType === EnumItemStockManagementTypes.Batch \r\n ? this.RC('lblBatchNumber')\r\n : this.RC('lblSerialNumber'),\r\n Index: 0\r\n }\r\n ];\r\n\r\n if (this.ItemStockManagementType === EnumItemStockManagementTypes.Batch) {\r\n this.State.SortByItems.push(\r\n {\r\n Text: this.RC('lblQuantity'),\r\n Index: 1\r\n }\r\n );\r\n }\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n {{ State.Barcode }}\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{ 'lblBatchSortBy' | RC:THIS }}
\\r\\n
{{ State.SortByItems[State.SortIndex]?.Text }}
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{ e.Text }} \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ item.Number }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
{{ GetNumbersAddedLabel() }}
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ShoppingCartItemSerialNumber extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItemSerialNumber';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public SerialNumber: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ShoppingCartItemBatch extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItemBatch';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public Number: string; \r\n public Quantity: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SelectItemNumberDialogComponent } from './select-item-numbers-dialog/select-item-numbers-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { SerialNumber } from '@dino-proxy/entities/serialnumber.entity';\r\nimport { Batch } from '@dino-proxy/entities/batch.entity';\r\nimport { ShoppingCartItemSerialNumber } from '@dino-proxy/entities/shoppingcartitemserialnumber.entity';\r\nimport { ShoppingCartItemBatch } from '@dino-proxy/entities/shoppingcartitembatch.entity';\r\nimport { EnumItemStockManagementTypes } from '@dino-proxy/enums';\r\nimport { BarcodeBoxDialogComponent } from '@m4u-angular/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n Number: string;\r\n Quantity: number;\r\n Barcode: string;\r\n MaxQuantity: number = 99999;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shopping-cart-item-numbers-dialog',\r\n templateUrl: './shopping-cart-item-numbers-dialog.component.html',\r\n styleUrls: ['./shopping-cart-item-numbers-dialog.component.scss']\r\n})\r\nexport class ShoppingCartItemNumbersDialogComponent extends BasePageComponent {\r\n\r\n @Input() NumberItems: ShoppingCartItemBatch[] | ShoppingCartItemSerialNumber[] = [];\r\n @Input() ItemStockManagementType: EnumItemStockManagementTypes;\r\n @Input() AllNumbers: SerialNumber[] | Batch[];\r\n @Input() AllowManualInput: boolean = false;\r\n\r\n @ViewChild('barcode') barcodeBoxDialog: BarcodeBoxDialogComponent;\r\n @ViewChild('selectItemNumberDialog') selectItemNumberDialog: SelectItemNumberDialogComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ShoppingCartItemNumbersDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.ResetValidationGroup();\r\n this.InitMaxQuantity();\r\n }\r\n\r\n protected override OnInitTitle() {\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) return this.RC('lblBatchNumbers');\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) return this.RC('lblSerialNumbers');\r\n }\r\n\r\n IsValid() {\r\n if (!this.State.Number) return false;\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) return !!this.State.Quantity;\r\n return true;\r\n }\r\n\r\n IsValidQuantity = (e) => {\r\n return e?.value && e?.value > 0 && e?.value <= this.State.MaxQuantity;\r\n }\r\n\r\n OnNumberChanged(e) {\r\n if (!e?.event) return;\r\n this.InitMaxQuantity();\r\n }\r\n\r\n OnSelectNumber() {\r\n this.selectItemNumberDialog.ItemStockManagementType = this.ItemStockManagementType;\r\n this.selectItemNumberDialog.NumberItems = [...this.NumberItems] as any[];\r\n this.selectItemNumberDialog.AllNumbers = this.AllNumbers;\r\n this.selectItemNumberDialog.ShowDialogShort((result) => {\r\n if (!result) {\r\n this.ResetValidationGroup();\r\n return;\r\n }\r\n\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n this.State.Number = result.Number;\r\n this.State.MaxQuantity = result.Quantity;\r\n return;\r\n }\r\n\r\n this.NumberItems = [];\r\n for (const item of result) {\r\n this.AddItemToList(item.SerialNum, null, false);\r\n }\r\n this.ResetValidationGroup();\r\n });\r\n }\r\n\r\n OnAddToList() {\r\n if (this.NumberItems.some(x => x.Number == this.State.Number)) {\r\n this.ShowNumberAlreadyAddedMessage();\r\n return;\r\n }\r\n\r\n this.ValidateValidationGroup(this.validationGroup).then(isValid => {\r\n if (!isValid) return;\r\n if (!this.State.Number) return;\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch && !this.State.Quantity) return;\r\n\r\n this.AddToList();\r\n this.ResetValidationGroup();\r\n });\r\n }\r\n\r\n OnConfirm() {\r\n this.CloseDialogWithSuccess(this.NumberItems);\r\n }\r\n\r\n OnDeleteNumber(item: ShoppingCartItemBatch | ShoppingCartItemSerialNumber) {\r\n this.NumberItems = (this.NumberItems as any[]).filter(x => x != item);\r\n }\r\n\r\n OnBarcodeValueChanged(value: string) {\r\n this.State.Number = value;\r\n }\r\n\r\n GetNumbersAddedLabel = () => {\r\n let number;\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n number = this.NumberItems.map(x => x.Quantity).reduce((p, c) => c + p, 0);\r\n }\r\n else {\r\n number = this.NumberItems.length;\r\n }\r\n\r\n return this.RC(this.ItemStockManagementType == EnumItemStockManagementTypes.Batch ? 'lblBatchNumbersCounted' : 'lblSerialNumbersCounted', number);\r\n }\r\n\r\n private ResetValidationGroup() {\r\n this.validationGroup?.instance?.reset();\r\n }\r\n\r\n private InitMaxQuantity() {\r\n this.State.MaxQuantity = 99999;\r\n }\r\n\r\n private AddToList() {\r\n if (!this.IsNumberInList(this.State.Number) && !this.AllowManualInput) {\r\n this.ShowNumberIsNotIncludedMessage();\r\n return;\r\n }\r\n\r\n this.AddItemToList(this.State.Number, this.State.Quantity);\r\n }\r\n\r\n private AddItemToList(number: string, quantity?: number, resetStateNumberInfo: boolean = true) {\r\n let item;\r\n\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) {\r\n item = new ShoppingCartItemBatch;\r\n item.Number = number;\r\n item.Quantity = quantity;\r\n }\r\n else if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n item = new ShoppingCartItemSerialNumber;\r\n item.SerialNumber = number;\r\n }\r\n\r\n item && this.NumberItems.push(item);\r\n if (resetStateNumberInfo) {\r\n this.State.Number = null;\r\n this.State.Quantity = null;\r\n }\r\n }\r\n\r\n private ShowNumberIsNotIncludedMessage() {\r\n this.messageBoxDialog.Title = \" \";\r\n this.messageBoxDialog.Prompt = this.ItemStockManagementType == EnumItemStockManagementTypes.Serial ? this.RC('lblSerialNumberNotIncluded') : this.RC('lblBatchNumberNotIncluded');\r\n this.messageBoxDialog.Width = EnumWindowSizes.WindowXLarge;\r\n this.messageBoxDialog.IsHideCancel = true;\r\n this.messageBoxDialog.ShowDialogShort(() => { }, () => { }, true);\r\n }\r\n\r\n private ShowNumberAlreadyAddedMessage() {\r\n let prompt = '';\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) prompt = this.RC('lblSerialNumberAlreadyAdded', this.State.Number);\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Batch) prompt = this.RC('lblBatchNumberAlreadyAdded', this.State.Number);\r\n\r\n this.messageBoxDialog.Title = \" \";\r\n this.messageBoxDialog.Prompt = prompt;\r\n this.messageBoxDialog.Width = EnumWindowSizes.WindowXLarge;\r\n this.messageBoxDialog.IsHideCancel = true;\r\n this.messageBoxDialog.ShowDialogShort(() => { }, () => { }, true);\r\n }\r\n\r\n private IsNumberInList(number: string) {\r\n if (this.ItemStockManagementType == EnumItemStockManagementTypes.Serial) {\r\n return (this.AllNumbers as SerialNumber[]).some(x => x.SerialNum == number);\r\n }\r\n\r\n return (this.AllNumbers as Batch[]).some(x => x.Number == number);\r\n }\r\n\r\n \r\n}","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
{{'btnSelectNumber' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n {{ State.Number }}\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{ item.SerialNumber }}
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
{{ GetNumbersAddedLabel() }}
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ShoppingCartItemVisibilityEntry extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ShoppingCartItemVisibilityEntry';\r\n }\r\n \r\n public UniqueItemID: number; \r\n public IsVisible: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { EnumScreenSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { EnumQuantityActiveErrorPlace, EnumShoppingCartItemType, EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\nimport { DxListComponent } from 'devextreme-angular';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { filter } from 'rxjs';\r\nimport { ShoppingCartItemVisibilityEntry } from '@dino-proxy/entities/shoppingcartitemvisibilityentry.entity';\r\nimport { DocumentLineDataParams } from '@dino-proxy/params/documentlinedata.param';\r\n\r\nclass State extends BaseState {\r\n ShoppingCart: ShoppingCartView;\r\n Loading: boolean;\r\n InvalidItems = new Set();\r\n PickoutItemID: number;\r\n CompactShoppingCartOpened: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shoppingcartitems',\r\n templateUrl: './shopping-cart-items.component.html',\r\n styleUrls: ['./shopping-cart-items.component.scss']\r\n})\r\nexport class ShoppingCartItemsComponent extends BaseCustomerComponent {\r\n @ViewChild('shoppingCartItemsList', { static: false }) shoppingCartItemsList: DxListComponent;\r\n EnumDisplayTypes = DisplayType;\r\n @Input() DisplayType = DisplayType.ShoppingCartList;\r\n @Input() ItemDisplayType: EnumShoppingCartItemViewOptions = EnumShoppingCartItemViewOptions.List;\r\n @Input() ForceScreenSize: EnumScreenSizes;\r\n @Input() HideNoItemsCaption: boolean;\r\n @Input() IsDragAndDropModeEnabled: boolean;\r\n @Input() AnyPaymentDone: boolean = false;\r\n @Input() Mode: 'shopping-cart' | 'checkout' = 'shopping-cart';\r\n @Input() CurrentPageForQuiantityError: EnumQuantityActiveErrorPlace;\r\n @Input() CheckOpenedState: boolean;\r\n\r\n @Output() OnQuantitiesValidation = new EventEmitter();\r\n @Output() OnItemEdit = new EventEmitter();\r\n @Output() OnItemDuplicate = new EventEmitter();\r\n\r\n DisplayTypeEnum = DisplayType;\r\n ItemTypeEnum = EnumShoppingCartItemType;\r\n ReorderedRowUniqueIds: any[];\r\n\r\n constructor(A: ServiceBagService,\r\n public shoppingCartService: ShoppingCartService,\r\n public customerService: CustomerService,\r\n public uiComponentService: UiComponentService) {\r\n super(A, 'ShoppingCartItemsComponent', State, customerService);\r\n this.HandleItemDragEnd = this.HandleItemDragEnd.bind(this);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitEvents();\r\n }\r\n\r\n private InitEvents() {\r\n var changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n //\r\n //console.log(r);\r\n //\r\n this.State.ShoppingCart = r.shoppingCart;\r\n this.proccessShoppingCart();\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n\r\n var loading$Subscription = this.shoppingCartService.loading$\r\n .subscribe(r => {\r\n this.State.Loading = r;\r\n });\r\n this.RegisterSubscription(loading$Subscription);\r\n\r\n let pickoutHandler;\r\n var pickout$Subscription = this.shoppingCartService.pickout$\r\n .subscribe(itemID => {\r\n if (pickoutHandler) {\r\n clearTimeout(pickoutHandler);\r\n }\r\n this.State.PickoutItemID = itemID;\r\n pickoutHandler = setTimeout(() => {\r\n this.State.PickoutItemID = null;\r\n pickoutHandler = null;\r\n }, 3000);\r\n });\r\n this.RegisterSubscription(pickout$Subscription);\r\n\r\n const childrenToggleFired$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.KIT_CHILDREN_VISIBILITY_TOGGLE)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.HandleKitChildrenVisibilityChange(event.Payload.ParentUniqueItemID, event.Payload.IsCollapsed);\r\n this.shoppingCartItemsList.instance.repaint();\r\n });\r\n\r\n this.RegisterSubscription(childrenToggleFired$Subscription);\r\n\r\n if (this.CheckOpenedState) {\r\n const shoppingCartPanelSide$Subscription = this.A.SysEvents.PageSidePanelState.subscribe(({ pageComponentName, state }) => {\r\n if (pageComponentName != 'ProductCatalogue2Component') return;\r\n \r\n this.State.CompactShoppingCartOpened = state;\r\n });\r\n \r\n this.RegisterSubscription(shoppingCartPanelSide$Subscription);\r\n }\r\n }\r\n\r\n HandleKitChildrenVisibilityChange(parentUniqueItemID: number, isCollapsed: boolean) {\r\n const dxListInstanceItems = this.shoppingCartItemsList.instance.option('items');\r\n const items = this.State.ShoppingCart?.ShoppingCartItemViews;\r\n\r\n let shoppingCartItemsVisibility: ShoppingCartItemVisibilityEntry[] = [];\r\n\r\n const updateVisibilityRecursive = (parentId: number, isVisible: boolean) => {\r\n items.forEach(item => {\r\n if (item.ParentUniqueItemID === parentId) {\r\n // Update the visibility for the current child item\r\n const index = dxListInstanceItems.indexOf(item);\r\n if (index !== -1) {\r\n dxListInstanceItems[index].visible = isVisible;\r\n }\r\n\r\n // Update visibility in the local state\r\n this.State.ShoppingCart.ShoppingCartItemViews[items.indexOf(item)].IsItemHiddenOnUI = !isVisible;\r\n\r\n // Create and add visibility entry for the current item\r\n const visibilityEntry = new ShoppingCartItemVisibilityEntry();\r\n visibilityEntry.UniqueItemID = item.UniqueItemID;\r\n visibilityEntry.IsVisible = isVisible;\r\n shoppingCartItemsVisibility.push(visibilityEntry);\r\n\r\n // Recursively update visibility for any children of the current item\r\n updateVisibilityRecursive(item.UniqueItemID, isVisible);\r\n }\r\n });\r\n };\r\n\r\n updateVisibilityRecursive(parentUniqueItemID, !isCollapsed);\r\n\r\n // Update visibility on the backend\r\n this.shoppingCartService.updateShoppingCartItemsVisibility(shoppingCartItemsVisibility);\r\n }\r\n\r\n SetInitialItemsVisibility() {\r\n const dxListInstanceItems = this.shoppingCartItemsList.instance.option('items');\r\n\r\n if (!dxListInstanceItems) return;\r\n\r\n const items = this.State.ShoppingCart?.ShoppingCartItemViews;\r\n\r\n items.forEach(item => {\r\n dxListInstanceItems[dxListInstanceItems.indexOf(item)].visible = !item.IsItemHiddenOnUI;\r\n });\r\n }\r\n\r\n IsItemBottomKitItem(item: ShoppingCartItemView) {\r\n if (!item.ItemView.IsKitItem) return false;\r\n \r\n const shoppingCartItems = this.State.ShoppingCart.ShoppingCartItemViews;\r\n\r\n if (item.ItemView.IsKitChild) {\r\n const parentItem = this.GetTopLevelKitParent(shoppingCartItems, item);\r\n\r\n const allVisibleDescendantsOfParentItem = this.GetAllDescendantsOfParentItem(parentItem, shoppingCartItems)\r\n .filter(x => !x.IsItemHiddenOnUI);\r\n\r\n const allVisibleDescendantsOfParentItemInInitialOrder \r\n = shoppingCartItems.filter(x => allVisibleDescendantsOfParentItem.includes(x));\r\n\r\n return allVisibleDescendantsOfParentItemInInitialOrder.length > 0 \r\n && item.UniqueItemID === allVisibleDescendantsOfParentItemInInitialOrder[allVisibleDescendantsOfParentItemInInitialOrder.length - 1].UniqueItemID;\r\n }\r\n else if (this.IsItemTopKitItem(item)) {\r\n const allVisibleDescendantsOfParentItem = this.GetAllDescendantsOfParentItem(item, shoppingCartItems)\r\n .filter(x => !x.IsItemHiddenOnUI)\r\n .sort(x => x.LineID);\r\n return (allVisibleDescendantsOfParentItem.length === 0);\r\n }\r\n return false;\r\n }\r\n\r\n GetAllDescendantsOfParentItem(parentItem: ShoppingCartItemView, shoppingCartItems: ShoppingCartItemView[]): ShoppingCartItemView[] {\r\n if (!parentItem) return [];\r\n\r\n const findDescendants = (currentItem: ShoppingCartItemView, items: ShoppingCartItemView[], accumulator: ShoppingCartItemView[]) => {\r\n const children = items.filter(item => item.ParentUniqueItemID === currentItem.UniqueItemID);\r\n accumulator.push(...children);\r\n children.forEach(child => findDescendants(child, items, accumulator));\r\n };\r\n\r\n const descendants: ShoppingCartItemView[] = [];\r\n findDescendants(parentItem, shoppingCartItems, descendants);\r\n\r\n return descendants;\r\n }\r\n\r\n IsItemTopKitItem(item: ShoppingCartItemView) {\r\n if (!item.ItemView.IsKitItem) return false;\r\n return item.ItemView.IsKitParent && !item.ParentUniqueItemID;\r\n }\r\n\r\n IsUseAlternativeBackground(item: ShoppingCartItemView) {\r\n if (!item.ItemView.IsKitItem) return false;\r\n const nestingLevel = this.GetKitItemNestingLevel(item);\r\n return nestingLevel % 2 !== 0;\r\n }\r\n \r\n CalculateItemPadding(item: ShoppingCartItemView) {\r\n const additionalPaddingForEveryNestingLevel = 20;\r\n\r\n if (!item.ItemView.IsKitItem || this.A.Screen.IsMobile()) return 0;\r\n \r\n const nestingLevel = this.GetKitItemNestingLevel(item);\r\n return additionalPaddingForEveryNestingLevel * nestingLevel;\r\n }\r\n\r\n GetKitItemNestingLevel(item: ShoppingCartItemView) {\r\n const shoppingCartItems = this.State.ShoppingCart.ShoppingCartItemViews;\r\n \r\n let parentUniqueItemID = item.ParentUniqueItemID;\r\n if (!parentUniqueItemID) return 0; // Default nesting level. Same as for regular non-kit items\r\n\r\n let nestingLevel = 0;\r\n let parentExists = true;\r\n while (parentExists) {\r\n const parentItem = shoppingCartItems.find(x => x.UniqueItemID === parentUniqueItemID);\r\n if (parentItem) {\r\n nestingLevel++;\r\n parentUniqueItemID = parentItem.ParentUniqueItemID;\r\n } else {\r\n parentExists = false;\r\n }\r\n }\r\n return nestingLevel;\r\n }\r\n\r\n GetTopLevelKitParent(shoppingCartItems: ShoppingCartItemView[], item: ShoppingCartItemView) {\r\n let parentExists = true;\r\n while (parentExists) {\r\n const parentItem = shoppingCartItems.find(x => x.UniqueItemID === item.ParentUniqueItemID);\r\n if (parentItem) {\r\n item = parentItem;\r\n } else {\r\n parentExists = false;\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n HandleItemDragEnd(e) {\r\n const visibleRows = this.ReorderedRowUniqueIds\r\n || e.component.option('items').map(item => item.UniqueItemID);\r\n\r\n if (!visibleRows || visibleRows.length === 0) return;\r\n\r\n const item = visibleRows.splice(e.fromIndex, 1)[0];\r\n visibleRows.splice(e.toIndex, 0, item);\r\n\r\n this.ReorderedRowUniqueIds = visibleRows;\r\n this.SaveShoppingCartItemsOrder();\r\n }\r\n\r\n SaveShoppingCartItemsOrder() {\r\n this.shoppingCartService.reorderShoppingCartItems(this.ReorderedRowUniqueIds);\r\n this.ReorderedRowUniqueIds = undefined;\r\n }\r\n\r\n HandleDelete(item: ShoppingCartItemView) {\r\n this.shoppingCartService.removeItem(item.UniqueItemID);\r\n }\r\n\r\n HandleEdit(item: ShoppingCartItemView, isDuplicate: boolean = false) {\r\n if (this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing) {\r\n isDuplicate ? this.OnItemDuplicate.emit(item) : this.OnItemEdit.emit(item);\r\n }\r\n }\r\n\r\n HandleQuantityValidation(item: ShoppingCartItemView, valid: boolean) {\r\n if (!this.State.InvalidItems) return;\r\n\r\n if (valid) {\r\n if (this.State.InvalidItems.has(item.ItemID)) this.State.InvalidItems.delete(item.ItemID);\r\n } else {\r\n this.State.InvalidItems.add(item.ItemID);\r\n }\r\n\r\n this.OnQuantitiesValidation.emit(!this.State.InvalidItems.size);\r\n }\r\n\r\n GetAdditionalDocumentLineData(item: ShoppingCartItemView): DocumentLineDataParams {\r\n return {\r\n WarehouseName: item.Warehouse?.Name,\r\n Notes: item.Notes\r\n } as DocumentLineDataParams;\r\n }\r\n\r\n protected RemoveItem(itemID: number) {\r\n const idx = this.State.ShoppingCart.ShoppingCartItemViews.findIndex(x => x.ItemID === itemID);\r\n if (idx >= 0) this.State.ShoppingCart.ShoppingCartItemViews.splice(idx, 1);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n if (!this.CustomerID) {\r\n this.State.ShoppingCart = null;\r\n }\r\n }\r\n\r\n protected proccessShoppingCart() {\r\n if (!this.State.ShoppingCart || !this.State.ShoppingCart.ShoppingCartItemViews.length) return;\r\n\r\n this.State.ShoppingCart.ShoppingCartItemViews.forEach(x => {\r\n x.ItemView.AdditionalData = x.AdditionalData;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblShoppingCardLoading' | RC:THIS}}\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblEmptyShoppingCart' | RC:THIS}}\\r\\n
\\r\\n\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPriceDisplayOptions } from '@dino-proxy/enums';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { NavigationTabCode } from '@dino-pages/checkout2/components/checkout-navigator/checkout-navigator.component';\r\n\r\nclass State extends BaseOptionState {\r\n ShowVatPercent: boolean = true;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shoppingcart-totals',\r\n templateUrl: './shopping-cart-totals.component.html',\r\n styleUrls: ['./shopping-cart-totals.component.scss']\r\n})\r\nexport class ShoppingCartTotalsComponent extends BasePageComponent {\r\n @Input() TotalItems: number;\r\n @Input() TotalShipments: number;\r\n @Input() IsShowShipments: boolean;\r\n @Input() TotalDeposit: number;\r\n @Input() TotalCoupons: number;\r\n @Input() TotalCouponsDescription: string;\r\n @Input() TotalBeforeDiscount: number;\r\n @Input() SelectedTabCode: NavigationTabCode;\r\n\r\n @Input() DiscountPercent: number;\r\n @Input() DiscountSum: number;\r\n\r\n @Input() Currency: string;\r\n @Input() TotalBeforeVat: number;\r\n @Input() VatPercent: number;\r\n @Input() TotalVat: number;\r\n @Input() TotalAfterVat: number;\r\n @Input() PaidAmount: number;\r\n\r\n @Input() AllowPayment: boolean = false;\r\n\r\n @Input() EnableEditSummary: boolean = false;\r\n @Output() OnEditSummary = new EventEmitter();\r\n\r\n @Input() IsHideChangeZero: boolean = false;\r\n @Input() IsHideTotalAfterVat: boolean = false; \r\n @Input() TotalGoods: number;\r\n @Input() IsShowOnlyTotalAfterVat: boolean = false;\r\n\r\n @Input() Mode: 'normal' | 'checkout' = 'normal';\r\n EnumPriceDisplayOptions = EnumPriceDisplayOptions;\r\n \r\n protected override OnInitComponent() {\r\n if (this.F.LocalizationType === this.SysEnums.EnumLocalizationTypes.Europe) {\r\n this.State.ShowVatPercent = false;\r\n }\r\n super.OnInitComponent(); \r\n }\r\n\r\n get DiscountPercentFinal(): number {\r\n return Math.abs(this.DiscountPercent) < 0.01 ? 0 : this.DiscountPercent;\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ShoppingCartTotalsComponent', BaseEntity, State);\r\n }\r\n\r\n GetPriceMainPart(value: number) {\r\n return Helper.GetPriceMainPartRound(value, this.F);\r\n }\r\n\r\n GetPriceChangePart(value: number) {\r\n return Helper.GetPriceChangePartRound(value, this.F);\r\n }\r\n\r\n HandleEditSummary() {\r\n this.OnEditSummary.emit();\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalItems' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalItems)}}
\\r\\n
.{{GetPriceChangePart(TotalItems)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalShipment' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalShipments)}}
\\r\\n
.{{GetPriceChangePart(TotalShipments)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalDeposit' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalDeposit)}}
\\r\\n
.{{GetPriceChangePart(TotalDeposit)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalCoupons' | RC:THIS}} ({{TotalCouponsDescription}})\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(TotalCoupons)}}
\\r\\n
.{{GetPriceChangePart(TotalCoupons)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalBeforeDiscount' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalBeforeDiscount)}}
\\r\\n
.{{GetPriceChangePart(TotalBeforeDiscount)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblTotals_DiscountPercent' | RC:THIS}}
(
{{(DiscountPercentFinal || 0) | formatNumberPercent}}
%)
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(DiscountSum)}}
\\r\\n
.{{GetPriceChangePart(DiscountSum)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalBeforeVat' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalBeforeVat)}}
\\r\\n
.{{GetPriceChangePart(TotalBeforeVat)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
0\\\">\\r\\n {{'lblTotals_TotalVat' | RC:THIS}} ({{(VatPercent || 0) | formatNumberPercent}}%)\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalVat' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalVat)}}
\\r\\n
.{{GetPriceChangePart(TotalVat)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{'lblTotals_TotalAfterVat' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalAfterVat)}}
\\r\\n
.{{GetPriceChangePart(TotalAfterVat)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
{{TotalGoods}}
\\r\\n
 {{(TotalGoods === 1 ? 'lblCheckoutTotalGoods2Single' : 'lblCheckoutTotalGoods2Multi') | RC:THIS}}
\\r\\n\\r\\n
\\r\\n \\r\\n {{'lblEditSummary' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalItems' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalItems)}}
\\r\\n
.{{GetPriceChangePart(TotalItems)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalShipment' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalShipments)}}
\\r\\n
.{{GetPriceChangePart(TotalShipments)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalDeposit' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalDeposit)}}
\\r\\n
.{{GetPriceChangePart(TotalDeposit)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalCoupons' | RC:THIS}} ({{TotalCouponsDescription}})
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(TotalCoupons)}}
\\r\\n
.{{GetPriceChangePart(TotalCoupons)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalBeforeDiscount' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalBeforeDiscount)}}
\\r\\n
.{{GetPriceChangePart(TotalBeforeDiscount)}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{'lblTotals_DiscountPercent' | RC:THIS}}
(
{{(DiscountPercentFinal || 0) | formatNumberPercent}}
%)
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(DiscountSum)}}
\\r\\n
.{{GetPriceChangePart(DiscountSum)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalBeforeVat' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalBeforeVat)}}
\\r\\n
.{{GetPriceChangePart(TotalBeforeVat)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n 0; else vatNoPercent\\\">\\r\\n {{'lblTotals_TotalVat' | RC:THIS}} ({{(VatPercent || 0) | formatNumberPercent}}%)\\r\\n \\r\\n \\r\\n {{'lblTotals_TotalVat' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalVat)}}
\\r\\n
.{{GetPriceChangePart(TotalVat)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalAfterVat' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalAfterVat)}}
\\r\\n
.{{GetPriceChangePart(TotalAfterVat)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalPaid' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(PaidAmount)}}
\\r\\n
.{{GetPriceChangePart(PaidAmount)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotals_TotalRemainder' | RC:THIS}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalAfterVat - PaidAmount)}}
\\r\\n
.{{GetPriceChangePart(TotalAfterVat - PaidAmount)}}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { GetConfigPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ContactUsDialogComponent } from '@dino-pages/home/contact-us-dialog/contact-us-dialog.component';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { EnumShoppingCartModeOptions, EnumShowTotalOnTopOptions } from '@dino-proxy/enums';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\nclass State extends BaseOptionState {\r\n PageSidePanelState: boolean;\r\n SidePanelPageComponentName: string;\r\n ShoppingCartDescription: ShoppingCartDescriptionResult;\r\n}\r\n\r\n@Component({\r\n selector: 'app-shopping-wishlist-buttons',\r\n templateUrl: './shopping-wishlist-buttons.component.html',\r\n styleUrls: ['./shopping-wishlist-buttons.component.scss']\r\n})\r\nexport class ShoppingWishlistButtonsComponent extends BaseCustomerComponent {\r\n @ViewChild(ContactUsDialogComponent) contactUsDialog: ContactUsDialogComponent;\r\n @Input() ForceNavigation: boolean;\r\n @Input() HideWishlist: boolean;\r\n @Input() HideShoppinCart: boolean;\r\n @Input() Mode: 'normal' | 'checkout' = 'normal';\r\n\r\n constructor(A: ServiceBagService,\r\n public customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService) {\r\n super(A, 'ShoppingWishlistButtonsComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n const pageSidePanelState$Subscription = this.A.SysEvents.PageSidePanelState\r\n .subscribe(s => {\r\n this.State.PageSidePanelState = s.state;\r\n this.State.SidePanelPageComponentName = s.pageComponentName;\r\n });\r\n\r\n this.RegisterSubscription(pageSidePanelState$Subscription);\r\n\r\n const shoppingCartDescription$Subscription = this.shoppingCartService.description$\r\n .subscribe(s => {\r\n this.State.ShoppingCartDescription = s;\r\n });\r\n\r\n this.RegisterSubscription(shoppingCartDescription$Subscription);\r\n }\r\n\r\n HandleToggleShoppingCart() {\r\n if (this.A.Screen.IsMobile() || this.ForceNavigation) {\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART]);\r\n return;\r\n }\r\n\r\n const orientation = this.A.Screen.Orientation();\r\n\r\n if (this.State.CustomerOption?.CatalogueOption?.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Fixed && orientation === 'landscape') {\r\n this.A.SysEvents.SetPageSidePanelState(this.State.SidePanelPageComponentName, !this.State.PageSidePanelState);\r\n } else {\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART]);\r\n }\r\n }\r\n\r\n HandleToggleWishlist() {\r\n this.Navigate([ROUTE_PATHS.WISHLIST]);\r\n }\r\n\r\n HandleShowContactUs() {\r\n this.contactUsDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n HandleCustomerInfoClick() {\r\n if (!this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n return;\r\n }\r\n this.Navigate([ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW, this.CustomerID]);\r\n }\r\n\r\n GetPriceMainPart(value: number) {\r\n return Helper.GetPriceMainPartRound(value, this.F);\r\n }\r\n\r\n GetPriceChangePart(value: number) {\r\n return Helper.GetPriceChangePartRound(value, this.F);\r\n }\r\n\r\n GetTitleTotalOnTop() {\r\n return this.RC(this.State?.CustomerOption?.CatalogueOption?.ShowTotalOnTopOption === EnumShowTotalOnTopOptions.AfterVat\r\n ? 'lblTotalAfterVatOnTopTitle'\r\n : 'lblTotalBeforeVatOnTopTitle')\r\n }\r\n\r\n GetTotalOnTop() {\r\n const value = this.State?.CustomerOption?.CatalogueOption?.ShowTotalOnTopOption === EnumShowTotalOnTopOptions.AfterVat\r\n ? this.State.ShoppingCartDescription.TotalAfterVat\r\n : this.State.ShoppingCartDescription.TotalBeforeVat;\r\n return this.GetPriceMainPart(value);\r\n }\r\n\r\n GetTotalChangeOnTop() {\r\n const value = this.State?.CustomerOption?.CatalogueOption?.ShowTotalOnTopOption === EnumShowTotalOnTopOptions.AfterVat\r\n ? this.State.ShoppingCartDescription.TotalAfterVat\r\n : this.State.ShoppingCartDescription.TotalBeforeVat;\r\n return this.GetPriceChangePart(value);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
{{GetTitleTotalOnTop()}}
\\r\\n
\\r\\n
{{State.ShoppingCartDescription.Currency}}
\\r\\n
{{GetTotalOnTop()}}
\\r\\n
.{{GetTotalChangeOnTop()}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { SuggestedPromotion } from \"@dino-proxy/entities/suggestedpromotion.entity\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { EnumPromotionEffectItemFilterTypes, EnumPromotionEffectTargetTypes, EnumPromotionItemFilterTypes } from \"@dino-proxy/enums\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-suggested-promotions-accordion',\r\n templateUrl: './suggested-promotions-accordion.component.html',\r\n styleUrls: ['./suggested-promotions-accordion.component.scss']\r\n})\r\n\r\nexport class SuggestedPromotionsAccordionComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n public shoppingCartService: ShoppingCartService,\r\n private restrictedNavigationService: RestrictedNavigationService) {\r\n super(A, 'AccordionComponent', BaseState);\r\n }\r\n\r\n @Input() SuggestedPromotions: SuggestedPromotion[];\r\n @Input() SectionIcon: string;\r\n @Input() SectionLabel: string;\r\n @Input() IsUseFeaturedPromotionsHints: boolean = false;\r\n\r\n GetSuggestedPromotionHint(suggestedpromotion: SuggestedPromotion) {\r\n const effectCategoriesSuggestionHint = this.RC('lblSuggestedPromotionCategoriesHint');\r\n const effectItemsSuggestionHint = this.RC('lblSuggestedPromotionItemsHint');\r\n const allItemsSuggestionHint = this.RC('lblSuggestedPromotionAllItemsHint');\r\n const effectCategoriesFeaturedPromotionSuggestionHint = this.RC('lblFeaturedPromotionCategoriesHint');\r\n const effectItemsFeaturedPromotionSuggestionHint = this.RC('lblFeaturedPromotionItemsHint');\r\n\r\n const anyItemIsEffectItemCase = (suggestedpromotion.Promotion.EffectType === EnumPromotionEffectTargetTypes.ItemList\r\n && suggestedpromotion.Promotion.EffectItemFilterType === EnumPromotionEffectItemFilterTypes.AllItems)\r\n || (suggestedpromotion.Promotion.ItemFilterType === EnumPromotionItemFilterTypes.All\r\n && suggestedpromotion.Promotion.EffectType === EnumPromotionEffectTargetTypes.SameItem);\r\n\r\n if (anyItemIsEffectItemCase)\r\n return allItemsSuggestionHint;\r\n\r\n if (this.IsUseFeaturedPromotionsHints && !suggestedpromotion.EffectCategories && suggestedpromotion.EffectItems)\r\n return effectItemsFeaturedPromotionSuggestionHint;\r\n\r\n if (this.IsUseFeaturedPromotionsHints && suggestedpromotion.EffectCategories && !suggestedpromotion.EffectItems)\r\n return effectCategoriesFeaturedPromotionSuggestionHint;\r\n\r\n if (!suggestedpromotion.EffectCategories && suggestedpromotion.EffectItems)\r\n return effectItemsSuggestionHint;\r\n\r\n if (suggestedpromotion.EffectCategories && !suggestedpromotion.EffectItems)\r\n return effectCategoriesSuggestionHint;\r\n }\r\n\r\n override OnInitComponent(): void {\r\n super.OnInitComponent();\r\n }\r\n\r\n public NavigateToItem(EntryID: number) {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.ITEM,\r\n (route) => this.Navigate([route, EntryID])\r\n );\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n {{ data?.Promotion?.CommercialName }}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetSuggestedPromotionHint(data) }}\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity, BaseEntityResponse, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { SuggestedPromotion } from \"@dino-proxy/entities/suggestedpromotion.entity\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { ShoppingCartView } from \"@dino-proxy/views/shoppingcart.view\";\r\nimport { EnumPromotionSuggestionType } from \"@dino-proxy/enums\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\n\r\nclass State {\r\n ShoppingCart: ShoppingCartView;\r\n FeaturedPromotions: SuggestedPromotion[] = [];\r\n RelevantPromotions: SuggestedPromotion[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-suggested-promotions',\r\n templateUrl: './suggested-promotions.component.html',\r\n styleUrls: ['./suggested-promotions.component.scss']\r\n})\r\nexport class SuggestedPromotionsComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, public shoppingCartService: ShoppingCartService, public screenService: ScreenService) {\r\n super(A, 'SuggestedPromotionsComponent', \r\n BaseEntity, State, EnumPageDisplayModes.Window, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('btnSuggestedPromotions');\r\n }\r\n\r\n override OnInitComponent(): void {\r\n this.InitEvents();\r\n this.FilterSuggestedPromotions();\r\n super.OnInitComponent();\r\n }\r\n\r\n private InitEvents() {\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(response => {\r\n this.State.ShoppingCart = response.shoppingCart;\r\n });\r\n this.RegisterSubscription(changed$Subscription);\r\n }\r\n\r\n private FilterSuggestedPromotions() {\r\n if (!this.State.ShoppingCart?.SuggestedPromotions) return;\r\n \r\n this.State.FeaturedPromotions = this.State.ShoppingCart.SuggestedPromotions\r\n .filter(p => p.SuggestionType === EnumPromotionSuggestionType.FeaturedPromotion);\r\n \r\n this.State.RelevantPromotions = this.State.ShoppingCart.SuggestedPromotions\r\n .filter(p => p.SuggestionType === EnumPromotionSuggestionType.EffectItemExistsWithPartialQuantity \r\n || p.SuggestionType === EnumPromotionSuggestionType.EffectItemIsMissing);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n 0\\\" \\r\\n [SuggestedPromotions]=\\\"State.RelevantPromotions\\\"\\r\\n [IsUseFeaturedPromotionsHints]=\\\"false\\\"\\r\\n SectionIcon=\\\"mdi mdi-currency-usd\\\"\\r\\n SectionLabel=\\\"{{'lblRelevantPromotions' | RC:THIS}}\\\">\\r\\n \\r\\n 0\\\" \\r\\n [SuggestedPromotions]=\\\"State.FeaturedPromotions\\\"\\r\\n [IsUseFeaturedPromotionsHints]=\\\"true\\\"\\r\\n SectionIcon=\\\"mdi mdi-sale\\\"\\r\\n SectionLabel=\\\"{{'lblFeaturedPromotions' | RC:THIS}}\\\">\\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, EventEmitter, Output } from '@angular/core';\r\nimport { Helper } from '@dino-classes/helper';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-total-after-button',\r\n templateUrl: './total-after-button.component.html',\r\n styleUrls: ['./total-after-button.component.scss']\r\n})\r\nexport class TotalAfterButtonComponent extends BaseComponent {\r\n @Input() Expanded: boolean;\r\n @Input() IsHideChangeZero: boolean;\r\n @Input() Currency: string;\r\n @Input() TotalAfterVat: number = 0;\r\n @Input() Disabled: number;\r\n @Output() OnToggle = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalAfterButtonComponent', State);\r\n }\r\n\r\n override OnInitComponent() { }\r\n\r\n HandleToggle() {\r\n if (this.Disabled) return;\r\n this.Expanded = !this.Expanded;\r\n this.OnToggle.emit(this.Expanded);\r\n }\r\n\r\n GetPriceMainPart(value: number) {\r\n return Helper.GetPriceMainPart(value || 0, this.F);\r\n }\r\n\r\n GetPriceChangePart(value: number) {\r\n return Helper.GetPriceChangePart(value || 0, this.F);\r\n }\r\n}\r\n\r\n\r\n","export default \"
\\r\\n
\\r\\n
{{'lblTotalsTotalAfterVat' | RC:THIS}}
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
{{GetPriceMainPart(TotalAfterVat)}}
\\r\\n
.{{GetPriceChangePart(TotalAfterVat)}}
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { BaseShoppingCartState } from './base/base-shopping-cart-state';\r\nimport { CouponHelper } from './base/coupon.helper';\r\nimport { ShoppingCartItemsComponent } from './components/shopping-cart-items/shopping-cart-items.component';\r\nimport { EnumDocumentTypes, EnumShoppingCartItemViewOptions, EnumValidationStatus, ShoppingCartStatusEnums } from '@dino-proxy/enums';\r\nimport { UiComponentService, UI_EVENTS } from '@dino-services/ui-component.service';\r\nimport { DuplicateRepeatDialogComponent } from './components/duplicate-repeat-dialog/duplicate-repeat-dialog.component';\r\nimport { UpdateDocumentParams } from '@dino-proxy/params/duplicatedocument.param';\r\nimport { RepeatDocumentParams } from '@dino-proxy/params/repeatdocument.param';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nconst TotalsExpandedDesktopStorageKey = 'TotalsExpandedDesktop';\r\n\r\nclass State extends BaseShoppingCartState {\r\n IsMobile: boolean;\r\n ItemDisplayType: EnumShoppingCartItemViewOptions = EnumShoppingCartItemViewOptions.List;\r\n ShoppingCartDisplayMode: 'shopping-cart' | 'checkout' = 'shopping-cart';\r\n IsDesktopExpanded = true;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices, AddonService],\r\n selector: 'app-shopping-cart2',\r\n templateUrl: './shopping-cart2.component.html',\r\n styleUrls: ['./shopping-cart2.component.scss']\r\n})\r\nexport class ShoppingCart2Component extends BaseCustomerPageComponent {\r\n @ViewChild('pageShoppingCart') page: PageLayoutComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n @ViewChild(DuplicateRepeatDialogComponent) duplicateRepeatDialogComponent: DuplicateRepeatDialogComponent;\r\n @ViewChild('notEmptyShoppingCartPrompt') notEmptyShoppingCartPrompt: MessageBoxDialogComponent;\r\n\r\n IsDragAndDropModeEnabled: boolean = false;\r\n IsEnableAllPromotionItemsButtonVisible: boolean = false;\r\n IsEnableShoppingCartListView: boolean;\r\n IsEnableShoppingCartCompactView: boolean;\r\n IsEnableShoppingCartLineView: boolean;\r\n DragAndDropButtonLabel: string = this.RC('lblShoppingCartReorderItemsButton');\r\n ContextMenuItems: any[] = [];\r\n MessageBoxTypes = EnumMessageBoxTypes;\r\n ShoppingCartItemDisplayTypeStorageKey : string;\r\n\r\n constructor(A: ServiceBagService,\r\n public customerService: CustomerService,\r\n public shoppingCartService: ShoppingCartService,\r\n public uiComponentService: UiComponentService,\r\n public documentEndpoint: DocumentEndpoint,\r\n private restrictedNavigationService: RestrictedNavigationService,\r\n public screenService: ScreenService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'ShoppingCart2Component', BaseEntity, State, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected get IsPaymentEnabled() {\r\n let paymentOption = this.State.CustomerOption?.PaymentOption;\r\n return this.State.ShoppingCart?.DocumentOption && this.State.ShoppingCart?.DocumentOption.IsAllowPayment && this.State.ShoppingCart?.TotalAfterVat > 0\r\n && this.State.ShoppingCart?.DocumentType !== EnumDocumentTypes.Refund\r\n && this.State.ShoppingCart?.Status != ShoppingCartStatusEnums.Update\r\n && paymentOption && (paymentOption.IsAllowCashPayment || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowGoCreditPayment || paymentOption.IsAllowWirePayment || paymentOption.IsAllowLaterPayment);\r\n }\r\n\r\n DefineAllowedViews() {\r\n const defaultItemOption = this.State.CustomerOption?.DefaultItemOption;\r\n const isDesktop = !this.screenService.IsMobile();\r\n this.IsEnableShoppingCartListView = isDesktop \r\n ? !!defaultItemOption?.ShoppingCartListDesktopOption \r\n : !!defaultItemOption?.ShoppingCartListMobileOption;\r\n\r\n this.IsEnableShoppingCartCompactView = isDesktop\r\n ? !!defaultItemOption?.ShoppingCartCompactDesktopOption\r\n : !!defaultItemOption?.ShoppingCartCompactMobileOption;\r\n\r\n this.IsEnableShoppingCartLineView = isDesktop\r\n ? !!defaultItemOption?.ShoppingCartLineDesktopOption\r\n : !!defaultItemOption?.ShoppingCartLineMobileOption;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n if (localStorage) {\r\n const totalsExpandedDesktop = this.localStorageService.GetItem(TotalsExpandedDesktopStorageKey);\r\n if (totalsExpandedDesktop) {\r\n this.State.IsDesktopExpanded = totalsExpandedDesktop === 'true';\r\n } else {\r\n this.State.IsDesktopExpanded = true;\r\n }\r\n }\r\n\r\n this.ShoppingCartItemDisplayTypeStorageKey = `ShoppingCartItemDisplayType_${this.State.IsMobile ? 'mobile' : 'desktop'}`;\r\n this.DefineAllowedViews();\r\n this.ProcessQueryParams();\r\n\r\n this.InitContextMenu();\r\n\r\n var changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n this.State.ShoppingCart = r.shoppingCart;\r\n this.State.DisableShoppingCartChange = r.shoppingCart?.ShoppingPayment?.AnyPaymentDone;\r\n this.IsEnableAllPromotionItemsButtonVisible = r.shoppingCart && r.shoppingCart.DisabledPromotionsExist;\r\n this.State.IsSuggestedPromotionsLinkVisible =\r\n !!r.shoppingCart?.SuggestedPromotions && r.shoppingCart.SuggestedPromotions.length > 0;\r\n this.State.CouponIds = this.State.ShoppingCart?.Coupons?.map(c => c.LineID);\r\n this.NotifyReloadTitle();\r\n\r\n if (this.State.ShoppingCart\r\n && this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(x => x.name === 'new_line')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('lblShoppingCartItemNewLine'),\r\n icon: 'mdi mdi-note-plus-outline',\r\n name: 'new_line',\r\n command: () => { this.HandleNewLine(); }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.customerService.GetIsAllowedBaseDocument(r.shoppingCart.DocumentType)\r\n && !this.ContextMenuItems.some(m => m.name === 'base_doc')\r\n && !r.shoppingCart.DisableShoppingCartChange) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('lblBaseDocumentBtnHint'),\r\n icon: 'mdi mdi-file-document-multiple-outline',\r\n name: 'base_doc',\r\n command: () => {\r\n this.uiComponentService.TriggerUiEvent(UI_EVENTS.OPEN_BASE_DOCUMENT_DIALOG, true);\r\n }\r\n }];\r\n }\r\n\r\n if (this.State.ShoppingCart?.ShoppingCartItemViews?.length\r\n && !this.State.DisableShoppingCartChange && !this.A.Screen.IsWideScreen()\r\n && !this.ContextMenuItems.find(x => x.name === 'remove_all')) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('btnRemoveAll'),\r\n icon: 'mdi mdi-delete-forever-outline',\r\n name: 'remove_all',\r\n command: () => {\r\n this.HandleRemoveAll();\r\n }\r\n }];\r\n }\r\n\r\n if (!this.A.Screen.IsWideScreen()) {\r\n if (this.IsEnableAllPromotionItemsButtonVisible || this.State.IsSuggestedPromotionsLinkVisible) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }];\r\n }\r\n\r\n if (this.IsEnableAllPromotionItemsButtonVisible && !this.ContextMenuItems.find(x => x.name === 'all_promo')) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n label: this.RC('btnEnableAllPromotionItems'),\r\n icon: 'mdi mdi-sale',\r\n name: 'all_promo',\r\n command: () => {\r\n this.shoppingCartService.enableAllPromotionItems();\r\n }\r\n }];\r\n }\r\n\r\n if (this.State.IsSuggestedPromotionsLinkVisible && !this.ContextMenuItems.find(x => x.name === 'suggested_promo')) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n label: this.RC('btnSuggestedPromotions'),\r\n icon: 'mdi mdi-sale-outline',\r\n name: 'suggested_promo',\r\n command: () => {\r\n this.NavigateToSuggestedPromotionsComponent();\r\n }\r\n }];\r\n }\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.State.ShoppingCart.DocumentOption?.IsAllowDuplication\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(m => m.name === 'duplicate_doc')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('btnDuplicateDocument'),\r\n icon: 'mdi mdi-content-copy',\r\n name: 'duplicate_doc',\r\n command: () => {\r\n this.HandleDuplicateDocument();\r\n }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.State.ShoppingCart.DocumentOption?.IsAllowRepeat\r\n && !this.State.DisableShoppingCartChange\r\n && !this.ContextMenuItems.some(m => m.name === 'repeat_doc')) {\r\n\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.RC('btnRepeatDocument'),\r\n icon: 'mdi mdi-calendar-sync-outline',\r\n name: 'repeat_doc',\r\n command: () => {\r\n this.HandleRepeatDocument();\r\n }\r\n }];\r\n }\r\n\r\n if (!!r.shoppingCart\r\n && !!r.shoppingCart.DocumentType\r\n && this.customerService.GetIsAllowedBaseDocument(r.shoppingCart.DocumentType)\r\n && r.shoppingCart.DisableShoppingCartChange) {\r\n this.InitContextMenu();\r\n }\r\n });\r\n\r\n this.RegisterSubscription(changed$Subscription);\r\n }\r\n\r\n ProcessQueryParams() {\r\n if (this.QueryParams?.ShoppingCartDisplayMode) {\r\n this.State.ShoppingCartDisplayMode = this.QueryParams.ShoppingCartDisplayMode;\r\n }\r\n }\r\n\r\n HandleNewLine() {\r\n this.Navigate([ROUTE_PATHS.EDIT_SHOPPING_CART_ITEM], { IsNew: true, GotoShoppingCartOnClose: true });\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.RC('ShoppingCart2Component', this.State.ShoppingCart?.ShoppingCartItemViews?.length || 0);\r\n }\r\n\r\n InitContextMenu() {\r\n if (localStorage) {\r\n const itemDisplayType = this.localStorageService.GetItem(this.ShoppingCartItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.State.ItemDisplayType = this.State.IsMobile\r\n ? this.State.CustomerOption?.DefaultItemOption?.DefaultShoppingCartMobileItemViewOption\r\n : this.State.CustomerOption?.DefaultItemOption?.DefaultShoppingCartDesktopItemViewOption;\r\n }\r\n }\r\n\r\n this.ContextMenuItems = [];\r\n\r\n (this.IsEnableShoppingCartListView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.List) }\r\n });\r\n\r\n (this.IsEnableShoppingCartCompactView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Compact) }\r\n });\r\n\r\n (this.IsEnableShoppingCartLineView) && this.ContextMenuItems.push({\r\n label: this.RC('lblViewUltraCompact'), icon: 'mdi mdi-minus', command: () => { this.HandleChangeViewMode(EnumShoppingCartItemViewOptions.Line) }\r\n });\r\n\r\n if ((!this.A.Screen.IsMobile() && !this.A.Screen.IsWideScreen())) {\r\n this.ContextMenuItems = [...this.ContextMenuItems, {\r\n separator: true\r\n }, {\r\n label: this.DragAndDropButtonLabel,\r\n icon: 'mdi mdi-drag',\r\n name: 'drag-and-drop',\r\n command: () => {\r\n this.ToggleDragAndDropMode();\r\n }\r\n }];\r\n }\r\n }\r\n\r\n HandleChangeViewMode(itemDisplayType: EnumShoppingCartItemViewOptions) {\r\n this.State.ItemDisplayType = itemDisplayType;\r\n // ??? localStorage\r\n this.localStorageService.SetItem(this.ShoppingCartItemDisplayTypeStorageKey, itemDisplayType);\r\n }\r\n\r\n HandleSelectViewMode(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n HandleCheckout() {\r\n this.A.RouteHistoryService.ClearHistory();\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CHECKOUT,\r\n (route) => this.Navigate([route])\r\n );\r\n }\r\n\r\n HandleContinueShopping() {\r\n if (!this.State.CustomerOption.FeatureOption.IsEnableCatalogue) return;\r\n this.A.RouteHistoryService.ClearHistory();\r\n this.Navigate([ROUTE_PATHS.CATALOGUE]);\r\n }\r\n\r\n HandleRemoveAll() {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('btnRemoveAll');\r\n this.messageDialog.Prompt = this.RC('promptClearShoppingCart');\r\n this.messageDialog.ShowDialogShort(() => { this.shoppingCartService.cleanShoppingCart(); });\r\n }\r\n\r\n ToggleDragAndDropMode() {\r\n this.IsDragAndDropModeEnabled = !this.IsDragAndDropModeEnabled;\r\n this.DragAndDropButtonLabel = this.IsDragAndDropModeEnabled\r\n ? this.RC('lblShoppingCartSaveItemsOrder')\r\n : this.RC('lblShoppingCartReorderItemsButton');\r\n const dragAndDropItem = this.ContextMenuItems.find(x => x.name === 'drag-and-drop');\r\n if (dragAndDropItem) {\r\n dragAndDropItem.label = this.DragAndDropButtonLabel;\r\n }\r\n }\r\n\r\n HandleDuplicateDocument() {\r\n let duplicateAction = () => {\r\n this.duplicateRepeatDialogComponent.SetupData(this.State.ShoppingCart.DocumentType, this.CustomerID, true);\r\n this.duplicateRepeatDialogComponent.ShowDialogShort(documentID => {\r\n const params = {\r\n DocumentID: documentID,\r\n DocumentType: this.State.ShoppingCart.DocumentType,\r\n IsEditExisting: false\r\n } as UpdateDocumentParams;\r\n\r\n this.documentEndpoint.UpdateDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART], { ShoppingCartDisplayMode: 'checkout' });\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (this.State.ShoppingCart.ShoppingCartItemViews.length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => duplicateAction())\r\n } else {\r\n duplicateAction();\r\n };\r\n }\r\n\r\n HandleRepeatDocument() {\r\n const repeatAction = () => {\r\n this.duplicateRepeatDialogComponent.SetupData(this.State.ShoppingCart.DocumentType, this.CustomerID, false);\r\n this.duplicateRepeatDialogComponent.ShowDialogShort(documentID => {\r\n const params = {\r\n DocumentID: documentID,\r\n DocumentType: this.State.ShoppingCart.DocumentType\r\n } as RepeatDocumentParams;\r\n\r\n this.documentEndpoint.RepeatDocument(params)\r\n .subscribe(response => {\r\n const validationResult = response.Entity;\r\n if (response.IsSuccess && validationResult?.Status !== EnumValidationStatus.Error) {\r\n this.shoppingCartService.load(false);\r\n this.Navigate([ROUTE_PATHS.SHOPPING_CART], { ShoppingCartDisplayMode: 'checkout' });\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\r\n }\r\n });\r\n });\r\n };\r\n\r\n if (this.State.ShoppingCart.ShoppingCartItemViews.length > 0) {\r\n this.notEmptyShoppingCartPrompt.ShowDialogShort(() => repeatAction());\r\n } else {\r\n repeatAction();\r\n };\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n settings.ShowCloseButton = this.A.Screen.IsMobile();\r\n settings.IsSupportHistory = false;\r\n settings.ShowCloseButton = true;\r\n return settings;\r\n }\r\n\r\n HandleToggleTotals() {\r\n this.State.TotalsExpanded = !this.State.TotalsExpanded;\r\n }\r\n\r\n HandleSwipeTotals(dest: 'up' | 'down') {\r\n if (dest === 'up') this.State.TotalsExpanded = true;\r\n if (dest === 'down') this.State.TotalsExpanded = false;\r\n }\r\n\r\n HandleClickError(e) {\r\n e && e.stopPropagation();\r\n }\r\n\r\n NavigateToSuggestedPromotionsComponent() {\r\n this.Navigate([ROUTE_PATHS.SUGGESTED_PROMOTIONS]);\r\n }\r\n\r\n applyCoupon() {\r\n CouponHelper.applyCoupon(this.State, this.shoppingCartService, this);\r\n }\r\n\r\n removeCoupon(value) {\r\n CouponHelper.removeCoupon(value, this.shoppingCartService, this);\r\n }\r\n\r\n getCouponsSum() {\r\n CouponHelper.getCouponsSum(this.State);\r\n }\r\n\r\n onCouponsSelectionChanged(event) {\r\n CouponHelper.onCouponsSelectionChanged(event, this.shoppingCartService, this)\r\n }\r\n\r\n override get ShowAsWindowOnMobile(): boolean { return true; }\r\n\r\n override OnCustomerChanged() {\r\n this.shoppingCartService.load(false);\r\n }\r\n\r\n HandleItemEdit(shoppingCartItem: ShoppingCartItemView, isDuplicate: boolean = false) {\r\n if (!this.State.ShoppingCart?.DocumentOption?.IsAllowLineEditing) return;\r\n\r\n this.Navigate([ROUTE_PATHS.EDIT_SHOPPING_CART_ITEM], { UniqueItemID: shoppingCartItem.UniqueItemID, IsDuplicate: isDuplicate, GotoShoppingCartOnClose: true });\r\n }\r\n\r\n HandleDesktopTotalExpand(e) {\r\n e && e.stopPropagation && e.stopPropagation();\r\n this.State.IsDesktopExpanded = !this.State.IsDesktopExpanded;\r\n this.localStorageService.SetItem(TotalsExpandedDesktopStorageKey, this.State.IsDesktopExpanded ? 'true' : 'false');\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nclass State extends BaseOptionState {\r\n SafeHtml: SafeHtml;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-terms-of-use',\r\n templateUrl: './terms-of-use.component.html',\r\n styleUrls: ['./terms-of-use.component.scss']\r\n})\r\nexport class TermsOfUseComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'TermsOfUseComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.SafeHtml = this.sanitizer.bypassSecurityTrustHtml(this.State.CustomerOption.TermsOfUseOption.Content);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { WishlistEndpoint } from '@dino-proxy/endpoints/wishlist.endpoint';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemsService } from '@dino-services/items.service';\r\nimport { Subscription, filter } from 'rxjs';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DisplayType } from '@dino-services/item-option.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UI_EVENTS, UiComponentEvent, UiComponentService } from '@dino-services/ui-component.service';\r\nimport { EnumShoppingCartItemViewOptions } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState {\r\n WishlistItems: ItemView[] = [];\r\n WishlistViewOption: EnumShoppingCartItemViewOptions;\r\n IsMobile: boolean;\r\n DisableShoppingCartChange: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-wishlist',\r\n templateUrl: './wishlist.component.html',\r\n styleUrls: ['./wishlist.component.scss']\r\n})\r\nexport class WishlistComponent extends BaseCustomerPageComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n private wishlistItemUpdated$Subscription: Subscription;\r\n private wishlistCleaned$Subscription: Subscription;\r\n private shoppingCartDescription$Subscription: Subscription;\r\n DisplayType = DisplayType;\r\n\r\n constructor(A: ServiceBagService,\r\n private wishlistEndpoint: WishlistEndpoint,\r\n private screenService: ScreenService,\r\n private itemsService: ItemsService,\r\n public customerService: CustomerService,\r\n public sessionService: SessionService,\r\n private shoppinCartService: ShoppingCartService,\r\n private uiComponentService: UiComponentService) {\r\n super(A, 'WishlistComponent', BaseEntity, State, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n this.InitEvents();\r\n\r\n this.wishlistItemUpdated$Subscription = this.itemsService.wishlistItemUpdated$\r\n .subscribe(() => {\r\n this.LoadWishlistItems();\r\n });\r\n\r\n this.wishlistCleaned$Subscription = this.itemsService.wishlistCleaned$\r\n .subscribe(() => {\r\n this.State.WishlistItems.length = 0;\r\n });\r\n\r\n this.shoppingCartDescription$Subscription = this.shoppinCartService.description$\r\n .subscribe(r => {\r\n if (!!r) {\r\n this.State.DisableShoppingCartChange = r.DisableShoppingCartChange;\r\n }\r\n })\r\n }\r\n\r\n private InitEvents() {\r\n const itemViewChanged$Subscription = this.uiComponentService.onUiEventFired$\r\n .pipe(\r\n filter(event => event.EventName === UI_EVENTS.WISHLIST_VIEW_MODE_CHANGED)\r\n )\r\n .subscribe((event: UiComponentEvent) => {\r\n this.State.WishlistViewOption = event.Payload;\r\n });\r\n\r\n this.RegisterSubscription(itemViewChanged$Subscription);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.wishlistItemUpdated$Subscription && this.wishlistItemUpdated$Subscription.unsubscribe();\r\n this.wishlistCleaned$Subscription && this.wishlistCleaned$Subscription.unsubscribe();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = false;\r\n return settings;\r\n }\r\n\r\n LoadWishlistItems() {\r\n \r\n if (!this.CustomerID) {\r\n this.State.WishlistItems = [];\r\n this.itemsService.notifyWishlistLoaded(0);\r\n return;\r\n }\r\n // TODO: LOAD all wishlist \r\n this.wishlistEndpoint.GetWishlistItems()\r\n .subscribe(r => {\r\n this.State.WishlistItems = r.Entities;\r\n this.itemsService.notifyWishlistLoaded(this.State.WishlistItems?.length || 0);\r\n });\r\n }\r\n\r\n HandleRemoveAll() {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Title = this.RC('btnRemoveAll');\r\n this.messageDialog.Prompt = this.RC('promptClearWishlist');\r\n this.messageDialog.ShowDialogShort(() => { this.itemsService.notifyWishlistRemoveAll(); });\r\n }\r\n\r\n override get ShowAsWindowOnMobile(): boolean { return true; }\r\n\r\n override OnCustomerChanged() {\r\n this.LoadWishlistItems();\r\n } \r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{'lblEmptyWishlist' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { mergeMap } from 'rxjs/operators';\r\n\r\n@Pipe({ name: 'LookupCategory' })\r\nexport class LookupCategoryPipe implements PipeTransform {\r\n constructor(private categoriesService: CategoriesService) { }\r\n\r\n transform(value: number, propName: string = \"Name\"): Observable {\r\n if (value === undefined || value === null) return of('');\r\n\r\n return this.categoriesService.findRawNodeByCategoryID(value)\r\n .pipe(mergeMap(category => {\r\n if (!category) return of(value.toString());\r\n return of (category.Name);\r\n }));\r\n }\r\n}","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPerson } from '@dino-proxy/entities/salesperson.entity';\r\nimport { EnumSaleTargetDimensions, EnumSaleTargetMeasures } from '@dino-proxy/enums';\r\nimport { SaleTargetsGetSaleTargetPerformanceParams } from '@dino-proxy/params/saletargetsgetsaletargetperformance.param';\r\nimport { SaleTargetPerformanceEndpoint } from '@dino-proxy/endpoints/saletargetperformance.endpoint';\r\nimport { SaleTargetPerformanceBase } from '@dino-proxy/entities/saletargetperformancebase.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { groupSaleTargetPerformanceEntitiesByPeriodPart } from '@dino-pages/sales/sale-targets/base/base-sale-targets';\r\n\r\nclass State extends BaseState {\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n SalesPersonIDs: number[] = [];\r\n SalesPersons: SalesPerson[] = [];\r\n IsDesktop: boolean;\r\n IsCurrentUserAdmin: boolean;\r\n IsCurrentUserSalesPerson: boolean;\r\n SaleTargetDimension: EnumSaleTargetDimensions;\r\n SaleTargetDimensions: GenericListEntity[] = [];\r\n SaleTargetPerformanceEntities: SaleTargetPerformanceBase[] = [];\r\n Performances: SalesPersonPerformance[] = [];\r\n IsMobile: boolean;\r\n IsWideScreen: boolean;\r\n}\r\n\r\nclass SalesPersonPerformance {\r\n public Name: string;\r\n public GoalValue: number;\r\n public ActualTotal: number;\r\n public TargetTotal: number;\r\n public TotalTargetMeasure: EnumSaleTargetMeasures;\r\n public PerformanceItems: SalesPersonPerformanceItem[];\r\n}\r\n\r\nclass SalesPersonPerformanceItem {\r\n public Name: string;\r\n public TargetValue: number;\r\n public TargetValuePercent: number;\r\n public ActualValue: number;\r\n public ActualValuePercent: number;\r\n public TargetMeasure: EnumSaleTargetMeasures;\r\n public DimensionName: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-targets',\r\n templateUrl: './dashboard-targets.component.html',\r\n styleUrls: ['./dashboard-targets.component.scss']\r\n})\r\nexport class DashboardTargetsComponent extends BaseCustomerComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n @Input() CurrentCustomerID: number;\r\n @Output() SaleTargetsLoaded = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private targetPerformanceEndpoint: SaleTargetPerformanceEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardTargetsComponent', State, customerService);\r\n this.State.IsDesktop = this.A.Screen.IsDesktop();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen()\r\n }\r\n\r\n public get HasCustomer() { return !!this.CustomerID && this.CurrentCustomerID; }\r\n public get FirstPerformance() { return this.State?.Performances?.length ? this.State.Performances[0] : null };\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsCurrentUserAdmin = this.customerService.IsCurrentUserAdmin();\r\n this.State.IsCurrentUserSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n\r\n this.State.SaleTargetDimensions = this.LIST('SaleTargetDimensions');\r\n this.State.SaleTargetDimensions.find(x => x.Value === EnumSaleTargetDimensions.All).Text = this.RC('lblSaleTargetFilterDimensionAllSalesPersons');\r\n\r\n if (this.State.IsCurrentUserAdmin || this.State.IsCurrentUserSalesPerson) {\r\n if (this.State.IsDesktop) {\r\n this.DataSources['SalesPersons'] = new DataSourceCustomAction((options: DataLoadOptions) => this.salesPersonEndpoint.GetList(options),\r\n entryID => this.salesPersonEndpoint.Get(entryID),\r\n null,\r\n false);\r\n } else {\r\n this.salesPersonEndpoint.GetListShallow()\r\n .subscribe(response => this.State.SalesPersons = response.Entities);\r\n }\r\n }\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n SaleTargetDimensions: this.State.SaleTargetDimension ? [this.State.SaleTargetDimension] : [],\r\n SalesPersonIDs: this.State.SalesPersonIDs,\r\n IsGroupBySalePeriod: false\r\n } as SaleTargetsGetSaleTargetPerformanceParams;\r\n\r\n this.targetPerformanceEndpoint.GetSaleTargetPerformance(params, null)\r\n .subscribe({\r\n next: r => {\r\n if (r.Entities.length === 1 && r.Entities[0].EntryID === -1) {\r\n r.Entities = [];\r\n this.SaleTargetsLoaded.emit(false);\r\n } else {\r\n this.State.SaleTargetPerformanceEntities = r.Entities;\r\n this.PrepareData();\r\n }\r\n },\r\n error: () => {\r\n this.State.SaleTargetPerformanceEntities = [];\r\n this.State.Performances = [];\r\n this.SaleTargetsLoaded.emit(false);\r\n }\r\n });\r\n }\r\n\r\n protected PrepareData() {\r\n this.State.Performances = [];\r\n if (!this.State.SaleTargetPerformanceEntities?.length) {\r\n this.SaleTargetsLoaded.emit(true);\r\n return;\r\n }\r\n\r\n const groupedBySalesPerson = Utils.GroupBy(this.State.SaleTargetPerformanceEntities, x => x.SalesPersonID);\r\n groupedBySalesPerson.forEach(g => {\r\n const firstElem = g[0];\r\n const performance = {\r\n Name: firstElem.SalesPersonName,\r\n GoalValue: 0,\r\n PerformanceItems: [],\r\n } as SalesPersonPerformance\r\n this.State.Performances.push(performance);\r\n\r\n let totalActualValuePercent = 0;\r\n let hasEqualTargetMeasure = true;\r\n const groupedByPeriodPart = groupSaleTargetPerformanceEntitiesByPeriodPart(g);\r\n groupedByPeriodPart.forEach(x => {\r\n const pi = {\r\n Name: this.GetTargetName(x),\r\n DimensionName: this.LIST(\"SaleTargetDimensions\").find(z => z.Value === x.TargetDimension).Text,\r\n ActualValue: Math.round(!x.ActualValue ? 0 : x.ActualValue),\r\n TargetValue: Math.round(!x.TargetValue ? 0 : x.TargetValue),\r\n ActualValuePercent: 0,\r\n TargetValuePercent: 0,\r\n TargetMeasure: x.TargetMeasure\r\n } as SalesPersonPerformanceItem;\r\n\r\n let itemActualValue = 0;\r\n\r\n if (pi.TargetValue == 0 && pi.ActualValue != 0) {\r\n pi.TargetValuePercent = 0;\r\n pi.ActualValuePercent = itemActualValue = 100;\r\n } else if (pi.TargetValue != 0 && pi.ActualValue == 0) {\r\n pi.TargetValuePercent = 100;\r\n pi.ActualValuePercent = itemActualValue = 0;\r\n } else if (pi.TargetValue == 0) {\r\n pi.TargetValuePercent = 0;\r\n pi.ActualValuePercent = itemActualValue = 0;\r\n } else if (pi.TargetValue > pi.ActualValue) {\r\n pi.TargetValuePercent = 100;\r\n pi.ActualValuePercent = itemActualValue = Utils.Round(((pi.ActualValue / pi.TargetValue) * 100));\r\n } else if (pi.TargetValue < pi.ActualValue) {\r\n pi.ActualValuePercent = 100;\r\n pi.TargetValuePercent = Utils.Round(((pi.TargetValue / pi.ActualValue) * 100));\r\n itemActualValue = Utils.Round(((pi.ActualValue / pi.TargetValue) * 100));\r\n }\r\n\r\n totalActualValuePercent += itemActualValue;\r\n\r\n if (hasEqualTargetMeasure) {\r\n if (performance.TotalTargetMeasure == null) {\r\n performance.TotalTargetMeasure = pi.TargetMeasure;\r\n performance.TargetTotal = pi.TargetValue;\r\n performance.ActualTotal = pi.ActualValue;\r\n } else if (performance.TotalTargetMeasure !== pi.TargetMeasure) {\r\n performance.TotalTargetMeasure = null;\r\n performance.TargetTotal = null;\r\n performance.ActualTotal = null;\r\n hasEqualTargetMeasure = false;\r\n } else {\r\n performance.TargetTotal += pi.TargetValue;\r\n performance.ActualTotal += pi.ActualValue;\r\n }\r\n }\r\n\r\n performance.PerformanceItems.push(pi);\r\n });\r\n\r\n performance.GoalValue = Math.round(groupedByPeriodPart.length ? (totalActualValuePercent / groupedByPeriodPart.length) : 0);\r\n });\r\n\r\n this.SaleTargetsLoaded.emit(true);\r\n }\r\n\r\n private GetTargetName(saleTargetPerformance: SaleTargetPerformanceBase) {\r\n if (saleTargetPerformance.TargetSalesPersonName) {\r\n return saleTargetPerformance.TargetSalesPersonName;\r\n } else if (saleTargetPerformance.TargetCustomerGroupName) {\r\n return saleTargetPerformance.TargetCustomerGroupName;\r\n } else if (saleTargetPerformance.TargetCustomerCardCode) {\r\n return `${saleTargetPerformance.TargetCustomerCardCode} - ${saleTargetPerformance.TargetCustomerCardName}`;\r\n } else if (saleTargetPerformance.TargetCategoryName) {\r\n return saleTargetPerformance.TargetCategoryName;\r\n } else if (saleTargetPerformance.TargetItemCode) {\r\n return `${saleTargetPerformance.TargetItemCode} - ${saleTargetPerformance.TargetItemName}`;\r\n }\r\n return '';\r\n }\r\n\r\n HandleAdditionalFilterChanged(e?) {\r\n if (!this.IsUIEvent(e) && !e?.value) return;\r\n\r\n this.UpdateData();\r\n }\r\n\r\n\r\n public override OnCustomerChanged(prevCustomerID?: number, currentCustomerID?: number) { }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblDashboardTargetDimensionActualTitle' | RC:THIS}}
\\r\\n
{{'lblDashboardTargetDimensionTargetTitle' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n {{FirstPerformance?.GoalValue}}% {{'lblDashboardTargetDimensionTotalPerf' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
{{item.GoalValue}}% {{'lblDashboardTargetDimensionTotalPerf' | RC:THIS}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{FirstPerformance?.GoalValue}}%\\r\\n {{'lblDashboardPerformanceRate' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n \\r\\n {{FirstPerformance?.ActualTotal | formatNumberShort}} \\r\\n {{FirstPerformance?.TotalTargetMeasure === 'Quantity' ? '' : Framework?.CompanyInfo?.CurrencySystem}}\\r\\n {{'lblDashboardActualTotal' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n \\r\\n {{FirstPerformance?.TargetTotal | formatNumberShort}}\\r\\n {{FirstPerformance?.TotalTargetMeasure === 'Quantity' ? '' : Framework?.CompanyInfo?.CurrencySystem}}\\r\\n \\r\\n {{'lblDashboardTargetTotal' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblDashboardNoDataTitle' | RC:THIS}}
\\r\\n
\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n {{perf.DimensionName}}: {{perf.Name}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{perf.TargetValue | formatNumberShort}} {{perf.TargetMeasure==='Quantity' ? '' : Framework?.CompanyInfo?.CurrencySystem}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{perf.ActualValue | formatNumberShort}} {{perf.TargetMeasure==='Quantity' ? '' : Framework?.CompanyInfo?.CurrencySystem}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { GetActiveUsersParams } from '@dino-proxy/params/getactiveusers.param';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DashboardSaleAnalysis } from '@dino-proxy/entities/dashboardsaleanalysis.entity';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n Documents: DashboardSaleAnalysis[] = [];\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n IsMobile: boolean;\r\n IsShowPrevious: boolean = true;\r\n IsHebrew: boolean = false;\r\n TooltipCurrentPeriodName: string;\r\n TooltipCurrentPeriodValue: string;\r\n TooltipPreviousPeriodName: string;\r\n TooltipPreviousPeriodValue: string;\r\n CurrentCustomerID: number;\r\n loadTimeoutInstance: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sale-analysis',\r\n templateUrl: './sale-analysis.component.html',\r\n styleUrls: ['./sale-analysis.component.scss']\r\n})\r\nexport class SaleAnalysisComponent extends BaseCustomerComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.ClearTooltip(null);\r\n this.UpdateData();\r\n }\r\n\r\n get IsBySalePeriod(): boolean {\r\n return this.State.DashboardSalePeriod?.SalePeriodID > 0;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint,\r\n public customerService: CustomerService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'SaleAnalysisComponent', State, customerService);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsHebrew = SysGlobals.Language == EnumLanguages.Hebrew;\r\n }\r\n\r\n @Input() set CurrentCustomerID(value: number) {\r\n if (this.State.CurrentCustomerID != value) {\r\n this.State.CurrentCustomerID = value;\r\n this.UpdateData();\r\n }\r\n }\r\n\r\n protected UpdateData() {\r\n this.clearTimeoutInstance();\r\n\r\n this.State.loadTimeoutInstance = setTimeout(() => {\r\n this.clearTimeoutInstance();\r\n this.load();\r\n }, 500);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.UpdateData();\r\n }\r\n\r\n public GetTooltipInfo(previous: boolean, data: DashboardSaleAnalysis, asText: boolean) {\r\n if (!this.State.DashboardSalePeriod) return '';\r\n\r\n let total = previous ? data.PreviousTotal : data.CurrentTotal;\r\n const value = `${Utils.Round(total)} ${this.Framework?.CompanyInfo?.CurrencySystem}`;\r\n const name = this.IsBySalePeriod\r\n ? data.PartName\r\n : data.DocumentDate.toLocaleString(this.State.IsHebrew ? 'he' : 'default', { month: 'short' });\r\n\r\n let years = '';\r\n let dateFromYear = this.State.DashboardSalePeriod.DateFrom.getFullYear();\r\n let dateToYear = this.State.DashboardSalePeriod.DateTo.getFullYear();\r\n const isMultipleYears = dateFromYear != this.State.DashboardSalePeriod.DateTo.getFullYear();\r\n\r\n if (isMultipleYears) {\r\n if (previous) {\r\n years = `${dateFromYear - 1} - ${dateToYear - 1}`\r\n } else {\r\n years = `${dateFromYear} - ${dateToYear}`;\r\n }\r\n } else {\r\n years = previous\r\n ? (dateFromYear - 1).toString()\r\n : dateFromYear.toString();\r\n }\r\n\r\n if (asText) {\r\n return `${name} ${years} : ${value}`;\r\n } \r\n \r\n const text = `${name} ${years} : ${value}`; \r\n return asText ? text : this.sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n\r\n GetSeriesName(previous: boolean): string {\r\n if (!this.State.DashboardSalePeriod) return '';\r\n\r\n let dateFromYear = this.State.DashboardSalePeriod.DateFrom.getFullYear();\r\n let dateToYear = this.State.DashboardSalePeriod.DateTo.getFullYear();\r\n const isMultipleYears = dateFromYear != dateToYear;\r\n\r\n if (this.IsBySalePeriod) {\r\n if (previous) {\r\n if (isMultipleYears) {\r\n return `${dateFromYear - 1} - ${dateToYear - 1}`;\r\n }\r\n return (dateToYear - 1).toString();\r\n }\r\n return this.State.DashboardSalePeriod.SalePeriod?.Name;\r\n } else {\r\n if (isMultipleYears) {\r\n if (previous) {\r\n return `${dateFromYear - 1} - ${dateToYear - 1}`;\r\n }\r\n return `${dateFromYear} - ${dateToYear}`;\r\n } else {\r\n if (previous) {\r\n return (dateFromYear - 1).toString();\r\n }\r\n return dateFromYear.toString();\r\n }\r\n }\r\n }\r\n\r\n CustomizeDateText = (e: any) => {\r\n let monthName = (e.value as Date).toLocaleString(this.State.IsHebrew ? 'he' : 'default', { month: 'short' });\r\n let isMultipleYears = (e.max as Date).getFullYear() != (e.min as Date).getFullYear();\r\n return isMultipleYears && e.value.getMonth() === 0 ? `${monthName} ${e.value.getFullYear()}` : monthName;\r\n }\r\n\r\n CustomizePeriodText = (e: any) => {\r\n let part = this.State.DashboardSalePeriod?.SalePeriod?.SalePeriodParts.find(p => p.LineID + 1 === e.value);\r\n return part?.Name;\r\n }\r\n\r\n onPointHoverChanged(event: any) {\r\n if (!this.State.IsMobile) return;\r\n\r\n let fullCurrent = this.GetTooltipInfo(false, event.target.data, true) as string;\r\n let parts = fullCurrent.split(':');\r\n this.State.TooltipCurrentPeriodName = parts[0];\r\n this.State.TooltipCurrentPeriodValue = parts[1];\r\n\r\n if (this.State.IsShowPrevious) {\r\n let fullPrevious = this.GetTooltipInfo(true, event.target.data, true) as string;\r\n let partsPrevious = fullPrevious.split(':');\r\n this.State.TooltipPreviousPeriodName = partsPrevious[0];\r\n this.State.TooltipPreviousPeriodValue = partsPrevious[1];\r\n }\r\n }\r\n\r\n ClearTooltip(e: any) {\r\n this.State.TooltipCurrentPeriodName = null;\r\n this.State.TooltipCurrentPeriodValue = null;\r\n this.State.TooltipPreviousPeriodName = null;\r\n this.State.TooltipPreviousPeriodValue = null;\r\n }\r\n\r\n private load() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n\r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n CustomerID: this.State.CurrentCustomerID\r\n } as GetActiveUsersParams;\r\n this.dashboardEndpoint.GetSalesAnalysis(params)\r\n .subscribe(r => {\r\n if (!r.Entities) return;\r\n this.State.Documents = r.Entities;\r\n });\r\n }\r\n\r\n private clearTimeoutInstance() {\r\n if (this.State.loadTimeoutInstance) {\r\n clearTimeout(this.State.loadTimeoutInstance);\r\n this.State.loadTimeoutInstance = null;\r\n }\r\n };\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
{{State.TooltipCurrentPeriodName || '-'}}
\\r\\n
{{State.TooltipCurrentPeriodValue || '-'}}
\\r\\n
\\r\\n
\\r\\n
{{State.TooltipPreviousPeriodName || '-'}}
\\r\\n
{{State.TooltipPreviousPeriodValue || '-'}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardSalePeriodValue } from '../dashboard-filter/dashboard-filter.component';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { BaseDashboardParams } from '@dino-proxy/params/basedashboard.param';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n Documents: DocumentView[] = [];\r\n DashboardSalePeriod: DashboardSalePeriodValue;\r\n IsMobile: boolean = false;\r\n CustomerID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-latest-documents',\r\n templateUrl: './latest-documents.component.html',\r\n styleUrls: ['./latest-documents.component.scss']\r\n})\r\nexport class LatestDocumentsComponent extends BaseComponent {\r\n @Input() set DashboardSalePeriod(value: DashboardSalePeriodValue) {\r\n this.State.DashboardSalePeriod = value;\r\n this.UpdateData();\r\n }\r\n\r\n @Input() set CustomerID(value: number) {\r\n this.State.CustomerID = value;\r\n this.UpdateData();\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'LatestDocumentsComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n protected UpdateData() {\r\n if (!this.State.DashboardSalePeriod) return;\r\n \r\n const params = {\r\n SalePeriodID: this.State.DashboardSalePeriod.SalePeriodID,\r\n DateFrom: this.State.DashboardSalePeriod.DateFrom,\r\n DateTo: this.State.DashboardSalePeriod.DateTo,\r\n CustomerID: this.State.CustomerID\r\n } as BaseDashboardParams;\r\n\r\n this.dashboardEndpoint.GetLatestDocuments(params)\r\n .subscribe(r => {\r\n this.State.Documents = r?.Entities || [];\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { OrderView } from '@dino-proxy/views/order.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';;\r\n\r\nclass State extends BaseOptionState {}\r\n\r\n@Component({\r\n selector: 'app-latest-documents-list',\r\n templateUrl: './latest-documents-list.component.html',\r\n styleUrls: ['./latest-documents-list.component.scss']\r\n})\r\nexport class LatestDocumentsListComponent extends BaseComponent {\r\n @Input() DataSource: OrderView[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LatestDocumentsListComponent', State);\r\n }\r\n\r\n OnNavigate(document: DocumentView) {\r\n this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: document.EntryID, DocumentType: document.DocumentType });\r\n }\r\n\r\n GetDocumentTitle(doc: DocumentView): string {\r\n return `${this.RC('lblDocument' + doc.DocumentType)} ${doc.DocumentNumber}`;\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
{{GetDocumentTitle(document)}}
\\r\\n
{{(document.Currency) + (document.TotalAfterVat | formatNumberSum)}}
\\r\\n
\\r\\n
\\r\\n
{{'lblLatestDocumentDate' | RC:THIS}} {{document.DocumentDate | formatDateShort}} | {{'lblLatestDocumentDueDate' | RC:THIS}} {{document.DocDueDate | formatDateShort}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { DocumentView } from '@dino-proxy/views/document.view';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\n\r\n\r\nclass State extends BaseOptionState { }\r\n\r\n@Component({\r\n selector: 'app-latest-documents-grid',\r\n templateUrl: './latest-documents-grid.component.html',\r\n styleUrls: ['./latest-documents-grid.component.scss']\r\n})\r\nexport class LatestDocumentsGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LatestDocumentsGridComponent', DocumentView, State);\r\n } \r\n\r\n OnNavigate(e) {\r\n if (e?.data?.EntryID) this.Navigate([ROUTE_PATHS.DOCUMENT], { DocumentID: e.data.EntryID, DocumentType: e.data.DocumentType});\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ cell.data.TotalAfterVat | formatNumberSum }} {{ cell.data.Currency }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n Balance: number;\r\n Currency: string;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-balance',\r\n templateUrl: './dashboard-balance.component.html',\r\n styleUrls: ['./dashboard-balance.component.scss']\r\n})\r\nexport class DashboardBalanceComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardBalanceComponent', State);\r\n this.State.Currency = this.Framework?.CompanyInfo?.CurrencySystem;\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.GetData();\r\n }\r\n\r\n protected GetData() {\r\n this.dashboardEndpoint.GetBalance()\r\n .subscribe(r => {\r\n this.State.Balance = r.Data;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DashboardEndpoint } from '@dino-proxy/endpoints/dashboard.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n BalanceLate: number;\r\n Currency: string;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-balance-late',\r\n templateUrl: './dashboard-balance-late.component.html',\r\n styleUrls: ['./dashboard-balance-late.component.scss']\r\n})\r\nexport class DashboardBalanceLateComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private dashboardEndpoint: DashboardEndpoint) {\r\n super(A, 'DashboardBalanceLateComponent', State);\r\n this.State.Currency = this.Framework?.CompanyInfo?.CurrencySystem;\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.GetData();\r\n }\r\n\r\n protected GetData() { \r\n this.dashboardEndpoint.GetBalanceLate()\r\n .subscribe(r => {\r\n this.State.BalanceLate = r.Data;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\";","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseCustomerPageComponent } from '@dino-classes/base-customer-page-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { DashboardSalePeriodValue } from '../components/dashboard-filter/dashboard-filter.component';\r\n\r\nclass State extends BaseOptionState {\r\n RouteCustomerID: number;\r\n CustomerTitle: string;\r\n IsMobile: boolean = false;\r\n IsTablet: boolean = false;\r\n IsDesktop: boolean = false;\r\n IsMediumScreen: boolean = false;\r\n IsWideScreen: boolean = false;\r\n SalePeriod: DashboardSalePeriodValue;\r\n IsCurrentUserAdmin: boolean;\r\n IsCurrentUserSalesPerson: boolean;\r\n HasNoSaleTargets: boolean;\r\n LoadSaleAnalysis: boolean;\r\n IsLicensedForB2B: boolean;\r\n CustomerName: string;\r\n CustomerSelected: boolean; // undefined or null means that no param had been passed as query-string \r\n}\r\n\r\n@Component({\r\n selector: 'base-dashboard',\r\n template: '
',\r\n})\r\nexport abstract class BaseDashboardComponent extends BaseCustomerPageComponent {\r\n @ViewChild('customerName') customerName: TemplateRef;\r\n abstract CustomerDetailsRoute: string;\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private screenService: ScreenService,\r\n private customerEndpoint: CustomerEndpoint,\r\n customerService: CustomerService,\r\n pageDisplayMode: EnumPageDisplayModes) {\r\n super(A, componentName, BaseEntity, State, customerService, pageDisplayMode);\r\n this.State.IsMediumScreen = this.A.Screen.IsWideScreen() || this.A.Screen.IsMediumScreen();\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.State.IsTablet = this.A.Screen.IsTablet();\r\n this.State.IsDesktop = this.A.Screen.IsDesktop();\r\n this.State.IsWideScreen = this.A.Screen.IsWideScreen();\r\n this.State.IsLicensedForB2B = this.A.Framework.SystemOptionFlag('IsLicensedForB2B');\r\n }\r\n\r\n // Customer ID for dashboard\r\n get CurrentCustomerID(): number {\r\n return (this.State.IsCurrentUserAdmin || (this.State.CustomerSelected != null && !this.State.CustomerSelected)) ? 0 : this.State.RouteCustomerID || this.CustomerID;\r\n }\r\n\r\n //public get HasCustomer() { return !!this.CurrentCustomerID && (this.State.CustomerSelected); }\r\n\r\n override OnInitComponent() {\r\n this.State.IsCurrentUserAdmin = this.customerService.IsCurrentUserAdmin();\r\n this.State.IsCurrentUserSalesPerson = this.customerService.IsCurrentUserSalesPerson();\r\n if (this.QueryParams.hasOwnProperty('CustomerSelected')) this.State.CustomerSelected = this.QueryParams.CustomerSelected;\r\n\r\n if (this.QueryParams.CustomerID) {\r\n this.State.RouteCustomerID = this.QueryParams.CustomerID as number;\r\n this.GetData(this.State.RouteCustomerID);\r\n return;\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowExport = false;\r\n settings.IsAllowFilter = false;\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n const menu = [];\r\n if (!this.State.IsCurrentUserAdmin) return menu;\r\n \r\n if ((this.State.RouteCustomerID || this.CustomerID) && this.State.CustomerOption?.FeatureOption?.IsEnableMyDetails) {\r\n menu.push({\r\n text: this.RC('btnViewCustomer'),\r\n icon: 'mdi mdi-card-account-details-star-outline',\r\n onClick: () => this.Navigate([this.CustomerDetailsRoute, this.State.RouteCustomerID || this.CustomerID])\r\n });\r\n }\r\n\r\n return menu;\r\n };\r\n\r\n override OnInitSubtitle() {\r\n return this.CurrentCustomerID ? this.State.CustomerTitle : '';\r\n }\r\n\r\n GetData(customerID: number) {\r\n this.customerEndpoint.GetShallow(customerID).subscribe(response => {\r\n if (response.IsSuccess && response.Entity) {\r\n this.State.CustomerTitle = response.Entity.CardName + ' - ' + response.Entity.CardCode;\r\n this.ReloadToolbar();\r\n }\r\n });\r\n }\r\n\r\n HandleFilterValueChanged(e: DashboardSalePeriodValue) {\r\n this.State.SalePeriod = e;\r\n if (!((this.State.IsCurrentUserAdmin || (this.State.IsCurrentUserSalesPerson && !this.CurrentCustomerID)) && this.State.SalePeriod?.SalePeriodID)) {\r\n this.State.HasNoSaleTargets = true;\r\n this.State.LoadSaleAnalysis = true;\r\n }\r\n //\r\n console.log(e);\r\n //\r\n }\r\n\r\n HandleSaleTargetsLoaded(hasSaleTargets: boolean) {\r\n this.State.HasNoSaleTargets = !hasSaleTargets;\r\n this.State.LoadSaleAnalysis = true;\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.GetData(this.CustomerID);\r\n const customer = this.customerService.GetCurrentCustomer();\r\n this.State.CustomerName = customer ? `${customer.CardCode} - ${customer.CardName}` : '';\r\n }\r\n}\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseDashboardComponent } from './base/base-dashboard-component';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-window',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss']\r\n})\r\nexport class DashboardWindowComponent extends BaseDashboardComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n customerEndpoint: CustomerEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardWindowComponent', screenService, customerEndpoint, customerService, EnumPageDisplayModes.Window);\r\n\r\n }\r\n\r\n override CustomerDetailsRoute = ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW;\r\n}\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { BaseDashboardComponent } from './base/base-dashboard-component';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-fullscreen',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss']\r\n})\r\nexport class DashboardFullscreenComponent extends BaseDashboardComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n screenService: ScreenService,\r\n customerEndpoint: CustomerEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardFullscreenComponent', screenService, customerEndpoint, customerService, EnumPageDisplayModes.FullScreen);\r\n\r\n }\r\n\r\n override CustomerDetailsRoute = ROUTE_PATHS.CUSTOMER_DETAILS_FULL;\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\nimport { ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shopping-cart-edit-mode-warning-dialog',\r\n templateUrl: './shopping-cart-edit-mode-warning-dialog.component.html',\r\n styleUrls: ['./shopping-cart-edit-mode-warning-dialog.component.scss']\r\n})\r\nexport class ShoppingCartEditModeWarningDialogComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, \r\n public ref: DynamicDialogRef,\r\n public restrictedNavigationService: RestrictedNavigationService, \r\n public shoppingCartService: ShoppingCartService) {\r\n super(A, 'ShoppingCartEditModeWarningDialogComponent', State);\r\n }\r\n\r\n OnContinue() {\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CHECKOUT,\r\n (route) => this.Navigate([route])\r\n );\r\n this.ref.close();\r\n }\r\n\r\n OnStartOver() {\r\n this.shoppingCartService.removeCurrentShoppingCart();\r\n this.restrictedNavigationService.RestrictedNavigate(\r\n ROUTE_PATHS.CATALOGUE,\r\n (route) => this.Navigate([route])\r\n );\r\n this.ref.close();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { ShoppingCartItemView } from '@dino-proxy/views/shoppingcartitem.view';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxTextBoxComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseOptionState {\r\n Barcode: string;\r\n Items: ShoppingCartItemView[] = [];\r\n UpdateInProgress: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'app-barcode-external-dialog',\r\n templateUrl: './barcode-external-dialog.component.html',\r\n styleUrls: ['./barcode-external-dialog.component.scss']\r\n})\r\nexport class BarcodeExternalDialogComponent extends BasePageComponent {\r\n @ViewChild('FocusOnMe', {static: false}) barcodeInput: DxTextBoxComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService) {\r\n super(A, 'BarcodeExternalDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n OnBarcodeEnter() {\r\n if (this.State.UpdateInProgress) {\r\n return;\r\n }\r\n\r\n this.State.UpdateInProgress = true;\r\n this.shoppingCartService.addItemFromBarcode(this.State.Barcode).subscribe(result => {\r\n this.State.UpdateInProgress = false;\r\n\r\n if (result) {\r\n let items = this.State.Items.filter(i => i.UniqueItemID != result.UniqueItemID);\r\n items.push(result);\r\n this.State.Items = items; \r\n this.FocusBarcode();\r\n } \r\n })\r\n }\r\n\r\n FocusBarcode() {\r\n setTimeout(() => this.barcodeInput?.instance?.focus(), 500)\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { CustomField } from \"@dino-proxy/entities/customfield.entity\";\r\nimport { EnumCustomFieldTypes } from \"@dino-proxy/enums\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-custom-item-field',\r\n templateUrl: './custom-item-field.component.html',\r\n styleUrls: ['./custom-item-field.component.scss']\r\n})\r\nexport class CustomItemFieldComponent extends BaseComponent {\r\n @Input() CustomField: CustomField;\r\n @Input() Value: any;\r\n\r\n get IsDate(): boolean {\r\n return this.CustomField && this.CustomField.Type === EnumCustomFieldTypes.Date;\r\n }\r\n\r\n constructor(A: ServiceBagService,) {\r\n super(A, 'CustomItemFieldComponent', State);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{CustomField.Name}}: {{Value}}
\\r\\n
{{CustomField.Name}}: {{Value | formatDateShort}}
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { CustomField } from \"@dino-proxy/entities/customfield.entity\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'app-custom-form-field-edit',\r\n templateUrl: './custom-form-field-edit.component.html',\r\n styleUrls: ['./custom-form-field-edit.component.scss']\r\n})\r\nexport class CustomFormFieldEditComponent extends BaseComponent {\r\n @Input() CustomField: CustomField;\r\n @Input() InitValue: any;\r\n @Input() Disabled: boolean = false;\r\n @Input() DebounceTime: number = 10;\r\n @Output() OnFieldChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,) {\r\n super(A, 'CustomFormFieldEditComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Value = this.InitValue || null;\r\n }\r\n\r\n onValueChanged(e) {\r\n //if (!e?.event) return;\r\n let field = {\r\n Key: this.CustomField.EntryID,\r\n Value: this.State.Value\r\n } as any;\r\n this.OnFieldChange.emit(field);\r\n }\r\n\r\n Clear(event?: any) {\r\n if (!event || !event.value) {\r\n this.State.Value = '';\r\n let field = {\r\n Key: this.CustomField.EntryID,\r\n Value: this.State.Value\r\n } as any;\r\n this.OnFieldChange.emit(field);\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { CustomFieldsetEndpoint } from \"@dino-proxy/endpoints/customfieldset.endpoint\";\r\nimport { CustomField } from \"@dino-proxy/entities/customfield.entity\";\r\nimport { CustomFieldset } from \"@dino-proxy/entities/customfieldset.entity\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Fieldset: CustomFieldset;\r\n IsMobile: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-custom-fieldset-form',\r\n templateUrl: './custom-fieldset-form.component.html',\r\n styleUrls: ['./custom-fieldset-form.component.scss']\r\n})\r\nexport class CustomFieldsetFormComponent extends BaseComponent {\r\n @Input() FieldsetID: number;\r\n @Input() Values: any;\r\n @Input() Disabled: boolean;\r\n @Input() IsAddMode: boolean = true;\r\n @Input() IsItemView: boolean = false;\r\n @Input() IsCustomerView: boolean = false;\r\n @Input() Mode: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() Size: 'normal' | 'big' = 'normal';\r\n @Input() set CustomFieldset(value: CustomFieldset) {\r\n this.State.Fieldset = value;\r\n }\r\n @Output() OnFormChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private fieldsetEndpoint: CustomFieldsetEndpoint) {\r\n super(A, 'CustomFieldsetFormComponent', State);\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n }\r\n\r\n get debounceTime(): number {\r\n return this.IsCustomerView || this.IsItemView ? 10 : 700;\r\n }\r\n\r\n protected override OnInitComponent() {\r\n if (this.IsItemView && !this.IsAddMode) {\r\n return;\r\n }\r\n this.fieldsetEndpoint.Get(this.FieldsetID).subscribe(result => {\r\n if (result.IsSuccess) {\r\n this.State.Fieldset = result.Entity;\r\n }\r\n });\r\n }\r\n\r\n GetInitValue(field: CustomField): any {\r\n return this.Values && this.Values[field.EntryID] || field.DefaultValue || null;\r\n }\r\n\r\n GetViewValue(field: CustomField): any {\r\n return this.Values && this.Values[field.EntryID];\r\n }\r\n\r\n OnFieldChange(field: any) {\r\n this.OnFormChange.emit(field);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { CustomField } from \"@dino-proxy/entities/customfield.entity\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-custom-form-field',\r\n templateUrl: './custom-form-field.component.html',\r\n styleUrls: ['./custom-form-field.component.scss']\r\n})\r\nexport class CustomFormFieldComponent extends BaseComponent {\r\n @Input() CustomField: CustomField;\r\n @Input() Value: any;\r\n\r\n constructor(A: ServiceBagService,) {\r\n super(A, 'CustomFormFieldComponent', State);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CustomField } from '@dino-proxy/entities/customfield.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-custom-fieldset-grid',\r\n templateUrl: './custom-fieldset-grid.component.html'\r\n})\r\nexport class CustomFieldsetGridComponent extends BaseGridComponent {\r\n\r\n CustomFieldLocations: GenericListEntity[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CustomFieldsetGridComponent', CustomField, State);\r\n this.CustomFieldLocations = this.LIST('EnumCustomFieldLocation');\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/custom-fieldset\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CustomFieldsetEndpoint } from '@dino-proxy/endpoints/customfieldset.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-custom-fieldset-list',\r\n templateUrl: './custom-fieldset-list.component.html'\r\n})\r\nexport class CustomFieldsetListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CustomFieldsetEndpoint) {\r\n super(A, 'CustomFieldsetListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CustomFieldsets'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomField } from './../entities/customfield.entity';\r\n@Injectable()\r\nexport class CustomFieldEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CustomField\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomFieldEndpoint } from '@dino-proxy/endpoints/customfield.endpoint';\r\nimport { CustomField } from '@dino-proxy/entities/customfield.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CustomFieldsetEndpoint } from '@dino-proxy/endpoints/customfieldset.endpoint';\r\nimport { CustomFieldset } from '@dino-proxy/entities/customfieldset.entity';\r\n\r\nclass State extends BaseOptionState {\r\n\tAllCustomFields: CustomField[] = [];\r\n\tCustomFields: CustomField[] = [];\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-custom-fieldset',\r\n\ttemplateUrl: './custom-fieldset.component.html',\r\n\tstyleUrls: ['./custom-fieldset.component.scss']\r\n})\r\nexport class CustomFieldsetComponent extends BasePageCRUDComponent {\r\n\r\n\tCustomFieldTypes: GenericListEntity[] = [];\r\n\tCustomFieldLocations: GenericListEntity[] = [];\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: CustomFieldsetEndpoint,\r\n\t\tprivate customFieldEndpoint: CustomFieldEndpoint) {\r\n\t\tsuper(A, 'CustomFieldsetComponent', CustomFieldset, State, endpoint, EnumPageDisplayModes.Window);\r\n\t\tthis.CustomFieldLocations = this.LIST('EnumCustomFieldLocation');\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.customFieldEndpoint.GetList().subscribe(result => {\r\n\t\t\tif (result.IsSuccess) {\r\n\t\t\t\tthis.State.AllCustomFields = result.Entities;\r\n\t\t\t\tthis.State.CustomFields = result.Entities;\r\n\t\t\t\tthis.FilterCustomFields();\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprotected override OnEntityLoaded() {\r\n\t\tthis.FilterCustomFields();\r\n\t}\r\n\r\n\tFilterCustomFields() {\r\n\t\tif (this.Entity && this.Entity.Location && this.State.AllCustomFields.length > 0) {\r\n\t\t\tthis.State.CustomFields = this.State.AllCustomFields.filter(f => f.Location == this.Entity.Location)\r\n\t\t}\r\n\t}\r\n\r\n\tOnLocationChanged() {\r\n\t\tif (this.Entity.CustomFieldsetLines.length > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.FilterCustomFields();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CustomField } from '@dino-proxy/entities/customfield.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-custom-field-grid',\r\n templateUrl: './custom-field-grid.component.html'\r\n})\r\nexport class CustomFieldGridComponent extends BaseGridComponent {\r\n\r\n CustomFieldTypes: GenericListEntity[] = [];\r\n CustomFieldLocations: GenericListEntity[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CustomFieldGridComponent', CustomField, State);\r\n this.CustomFieldTypes = this.LIST('EnumCustomFieldTypes');\r\n this.CustomFieldLocations = this.LIST('EnumCustomFieldLocation');\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/custom-field\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CustomFieldEndpoint } from '@dino-proxy/endpoints/customfield.endpoint';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-custom-field-list',\r\n templateUrl: './custom-field-list.component.html'\r\n})\r\nexport class CustomFieldListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CustomFieldEndpoint) {\r\n super(A, 'CustomFieldListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CustomFields'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CustomFieldEndpoint } from '@dino-proxy/endpoints/customfield.endpoint';\r\nimport { CustomField } from '@dino-proxy/entities/customfield.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-custom-field',\r\n\ttemplateUrl: './custom-field.component.html',\r\n\tstyleUrls: ['./custom-field.component.scss']\r\n})\r\nexport class CustomFieldComponent extends BasePageCRUDComponent {\r\n\r\n\tCustomFieldTypes: GenericListEntity[] = [];\r\n\tCustomFieldLocations: GenericListEntity[] = [];\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: CustomFieldEndpoint) {\r\n\t\tsuper(A, 'CustomFieldComponent', CustomField, State, endpoint, EnumPageDisplayModes.Window);\r\n\t\tthis.CustomFieldLocations = this.LIST('EnumCustomFieldLocation');\r\n\t\tthis.CustomFieldTypes = this.LIST('EnumCustomFieldTypes');\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseOptionState } from \"@dino-classes/base-option-state\";\r\n\r\nclass State extends BaseOptionState { }\r\n\r\nexport class CompleteCheckoutButtonDescriptor {\r\n public TabRelatedIndex: number;\r\n public Label: string;\r\n} \r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-complete-checkout-button',\r\n templateUrl: './complete-checkout-button.component.html',\r\n styleUrls: ['./complete-checkout-button.component.scss']\r\n})\r\nexport class CompleteCheckoutButtonComponent extends BaseComponent {\r\n @Input() SelectedTabIndex: number;\r\n @Input() ShoppingCartLength: number;\r\n @Input() IsTermsOfUseAgreed: number;\r\n @Input() CheckoutButtons: CompleteCheckoutButtonDescriptor[] = [];\r\n @Input() Disabled: boolean;\r\n @Input() DocumentTypeText: string;\r\n //@Input() LastStepIndex: number;\r\n @Output() OnClick = new EventEmitter();\r\n\r\n GetButtonLabel(): string {\r\n const currentButton = this.CheckoutButtons?.find(x => x.TabRelatedIndex === this.SelectedTabIndex);\r\n return !!currentButton ? this.RC(currentButton.Label, this.DocumentTypeText) : '';\r\n }\r\n\r\n GetLastStepIndex() {\r\n if (!this.CheckoutButtons) return 0;\r\n return this.CheckoutButtons[this.CheckoutButtons.length - 1].TabRelatedIndex;\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CompleteCheckoutButtonComponent\", State);\r\n }\r\n\r\n HandleClick() {\r\n this.OnClick.emit();\r\n }\r\n}","export default \"\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input, Output, ViewChild } from '@angular/core';\r\nimport { AttachedFile, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSystemOptionsZ } from '@dino-proxy/enums';\r\nimport { ShoppingCartView } from '@dino-proxy/views/shoppingcart.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { BaseCustomerComponent } from '@dino-classes/base-customer-component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Files: AttachedFile[] = [];\r\n MaxFileSize: number;\r\n Uploading: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-checkout-attachments',\r\n templateUrl: './checkout-attachments.component.html',\r\n styleUrls: ['./checkout-attachments.component.scss']\r\n})\r\nexport class CheckoutAttachmentsComponent extends BaseCustomerComponent {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n @Input() set Entity(value: ShoppingCartView) {\r\n this._entity = value;\r\n this.InitFiles();\r\n }\r\n get Entity(): ShoppingCartView { return this._entity };\r\n private _entity: ShoppingCartView;\r\n\r\n constructor(A: ServiceBagService,\r\n private shoppingCartService: ShoppingCartService,\r\n customerService: CustomerService) {\r\n super(A, 'CheckoutAttachmentsComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\r\n const maxUploadFileSize = +this.SystemOption(EnumSystemOptionsZ.MaxUploadFileSize);\r\n this.State.MaxFileSize = maxUploadFileSize ? (maxUploadFileSize * 1024) : (20 *1024 * 1024);\r\n }\r\n\r\n override OnCustomerChanged() {\r\n this.State.Files = [];\r\n }\r\n\r\n get HasNewFiles() {\r\n return this.State.Files?.findIndex(x => x.NewFile) !== -1;\r\n }\r\n\r\n InitFiles() {\r\n if (!this.Entity?.DocumentOption?.IsAllowAttachments) return;\r\n const newFiles = this.State.Files?.filter(x => x.NewFile);\r\n\r\n this.State.Files = this.Entity?.Attachments.map(x => {\r\n return {\r\n Name: x.FileName,\r\n Size: x.Size,\r\n Extension: x.Extension,\r\n IsDisplayedAsImage: false,\r\n Date: (x as any).CreatedDate,\r\n EntryID: x.LineID,\r\n IsAllowDeleteForcely: true,\r\n IconStyle: Utils.GetIconStyle(x.Extension)\r\n\r\n } as AttachedFile;\r\n });\r\n\r\n this.State.Files = [...this.State.Files, ...newFiles];\r\n }\r\n\r\n OnFilesChanged(files: any[]) {\r\n this.State.Files = files;\r\n this.State.Files.forEach(x => x.IsDisplayedAsImage = false);\r\n }\r\n\r\n OnDeleteItem(file: AttachedFile) {\r\n if (file && !file.NewFile) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageDialog.Title = this.RC('lblAttachmentsDeleteTitle');\r\n this.messageDialog.Prompt = this.RC('lblAttachmentsDeletePrompt');\r\n\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.shoppingCartService.deleteAttachment(file.EntryID)\r\n .subscribe(r => {\r\n if (!r.success) this.UI.StopMessage(r.error);\r\n });\r\n });\r\n }\r\n }\r\n\r\n OnDownloadItem(file: AttachedFile) {\r\n this.shoppingCartService.getAttachment(file.EntryID, file.Name);\r\n }\r\n\r\n HandleUpload() {\r\n if (this.State.Uploading) return;\r\n const newFiles = this.State.Files.filter(x => x.NewFile).map(x => x.NewFile);\r\n\r\n if (newFiles?.length) {\r\n this.State.Uploading = true;\r\n Utils.LoadFilesBody(newFiles, uploadFiles => {\r\n this.State.Files = this.State.Files.filter(x => !x.NewFile);\r\n this.shoppingCartService.uploadAttachments(uploadFiles)\r\n .subscribe(r => {\r\n this.State.Uploading = false;\r\n if (!r.success) this.UI.StopMessage(r.error);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DistributionCategory } from './../entities/distributioncategory.entity';\r\n@Injectable()\r\nexport class DistributionCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DistributionCategory\", api);}\r\n\t\r\n}\r\n\r\n","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DistributionCategoryEndpoint } from '@dino-proxy/endpoints/distributioncategory.endpoint';\r\nimport { DistributionCategory } from '@dino-proxy/entities/distributioncategory.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-distribution-category',\r\n\ttemplateUrl: './distribution-category.component.html',\r\n\tstyleUrls: ['./distribution-category.component.scss']\r\n})\r\nexport class DistributionCategoryComponent extends BasePageCRUDComponent {\r\n\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: DistributionCategoryEndpoint) {\r\n\t\tsuper(A, 'DistributionCategoryComponent', DistributionCategory, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tOnInitNewRow = (e) => {\r\n\t\tif (!e.data && !e.data) {\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DistributionCategory } from '@dino-proxy/entities/distributioncategory.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-category-grid',\r\n templateUrl: './distribution-category-grid.component.html'\r\n})\r\nexport class DistributionCategoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DistributionCategoryGridComponent', DistributionCategory, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/distribution-category\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DistributionCategoryEndpoint } from '@dino-proxy/endpoints/distributioncategory.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-category-list',\r\n templateUrl: './distribution-category-list.component.html'\r\n})\r\nexport class DistributionCategoryListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DistributionCategoryEndpoint) {\r\n super(A, 'DistributionCategoryListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DistributionCategories'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DistributionCycleEndpoint } from '@dino-proxy/endpoints/distributioncycle.endpoint';\r\nimport { DistributionCategoryEndpoint } from '@dino-proxy/endpoints/distributioncategory.endpoint';\r\nimport { DistributionCycle, DistributionCycleCategory, DistributionCycleDate } from '@dino-proxy/entities/distributioncycle.entity';\r\nimport { DistributionCategory } from '@dino-proxy/entities/distributioncategory.entity';\r\n\r\nclass State extends BaseOptionState {\r\n\tDistributionCategories: DistributionCategory[] = [];\r\n\tSelectedCategories: number[] = [];\r\n\tLoaded: boolean = false;\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-distribution-cycle',\r\n\ttemplateUrl: './distribution-cycle.component.html',\r\n\tstyleUrls: ['./distribution-cycle.component.scss']\r\n})\r\nexport class DistributionCycleComponent extends BasePageCRUDComponent {\r\n\tconstructor(A: ServiceBagService,\r\n\t\tendpoint: DistributionCycleEndpoint,\r\n\t\tpublic distributionCategoryEndpoint: DistributionCategoryEndpoint) {\r\n\t\tsuper(A, 'DistributionCycleComponent', DistributionCycle, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected override OnEntityInitObjectName() {\r\n\t\treturn this.Entity && this.Entity.Name;\r\n\t}\r\n\r\n\tprotected override OnEntitySaved() {\r\n\t\tthis.NavigateBack();\r\n\t}\r\n\r\n\tprotected override OnInitComponent() {\r\n\t\tthis.distributionCategoryEndpoint.GetList().subscribe(result => {\r\n\t\t\tif (result.IsSuccess) {\r\n\t\t\t\tthis.State.DistributionCategories = result.Entities;\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprotected override OnEntityLoaded() {\r\n\t\tif (this.Entity && this.Entity.EntryID > 0 && this.Entity.DistributionCycleCategories) {\r\n\t\t\tthis.State.SelectedCategories = this.Entity.DistributionCycleCategories.map(c => c.DistributionCategoryID);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override OnEntityNew() {\r\n\t\tthis.State.Loaded = true;\r\n\t}\r\n\r\n\tHandleCategoryChanged(e: any) {\r\n\t\tif (!this.State.Loaded) {\r\n\t\t\tthis.State.Loaded = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (e.value && this.State.Loaded) {\r\n\t\t\tthis.Entity.DistributionCycleCategories = this.State.SelectedCategories.map((sc, i) => {\r\n\t\t\t\treturn {DistributionCategoryID: sc, LineID: i} as DistributionCycleCategory;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tHandleNewDatesGenerated(dates: DistributionCycleDate[]) {\r\n\t\tthis.Entity.DistributionCycleDates = dates;\r\n\t}\r\n\r\n\tprotected override OnInitContextMenus(): ContextMenuElement[] {\r\n\t\tif (this.IsAddMode) return undefined;\r\n\t\tconst menus: ContextMenuElement[] = [{\r\n\t\t\ttext: this.RC('titleDelete'),\r\n\t\t\tvisible: true,\r\n\t\t\tonClick: this.OnDelete.bind(this)\r\n\t\t}]\r\n\r\n\t\treturn menus;\r\n\t}\r\n\r\n\toverride OnGetToolbarSettings() {\r\n\t\treturn {\r\n\t\t\tIsSupportHistory: true,\r\n\t\t} as ToolbarSettings;\r\n\t}\r\n\r\n\toverride OnIsAllowDuplicate() {\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DistributionCycle } from '@dino-proxy/entities/distributioncycle.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-distribution-cycle-grid',\r\n\ttemplateUrl: './distribution-cycle-grid.component.html'\r\n})\r\nexport class DistributionCycleGridComponent extends BaseGridComponent {\r\n\r\n\tconstructor(A: ServiceBagService) {\r\n\t\tsuper(A, 'DistributionCycleGridComponent', DistributionCycle, State);\r\n\t}\r\n\r\n\tOnNavigate(e) {\r\n\t\tthis.Navigate([\"/pages/distribution-cycle\", e.data.EntryID]);\r\n\t}\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DistributionCycleEndpoint } from '@dino-proxy/endpoints/distributioncycle.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-cycle-list',\r\n templateUrl: './distribution-cycle-list.component.html'\r\n})\r\nexport class DistributionCycleListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DistributionCycleEndpoint) {\r\n super(A, 'DistributionCycleListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['DistributionCycles'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DistributionCycleEndpoint } from '@dino-proxy/endpoints/distributioncycle.endpoint';\r\nimport { DistributionCycleGenerateParams } from '@dino-proxy/params/distributioncyclegenerate.param';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\n\r\nclass State {\r\n\tDistributionDate: Date;\r\n\tEarlierDocumentFrom: Date;\r\n\tLastDocumentUntil: Date;\r\n\tDaysStep: number;\r\n\tEndDate: Date;\r\n\tDateAndTimeFormat: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-dates-generate-dialog',\r\n templateUrl: './distribution-dates-generate-dialog.component.html',\r\n styleUrls: ['./distribution-dates-generate-dialog.component.scss']\r\n})\r\nexport class DistributionDatesGenerateDialogComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService,\r\n\t\tprivate distributionCycleEndpoint: DistributionCycleEndpoint,\r\n\t\tprivate UiComponentService: UiComponentService) {\r\n super(A, 'DistributionDatesGenerateDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n\t\tthis.State.DateAndTimeFormat = `${this.Framework.CompanyInfo.DateFormatLong} | ${this.Framework.CompanyInfo.TimeFormatShort}`;\r\n }\r\n\r\n //Save\r\n OnGenerate() {\r\n const params = {\r\n\t\t\tDistributionDate: this.State.DistributionDate, \r\n\t\t\tEarlierDocumentFrom: this.State.EarlierDocumentFrom,\r\n\t\t\tLastDocumentUntil: this.State.LastDocumentUntil,\t\t\t\r\n\t\t\tDaysStep: this.State.DaysStep,\r\n\t\t\tEndDate: this.State.EndDate\r\n\t\t} as DistributionCycleGenerateParams;\r\n\t\t\r\n\t\tthis.distributionCycleEndpoint.GenerateDistributionCycleDates(params).subscribe(result => {\r\n\t\t\tif (result && result.IsSuccess) {\r\n\t\t\t\tthis.CloseDialogWithSuccess(result.Entities);\r\n\t\t\t} else {\r\n\t\t\t\tthis.UiComponentService.ProcessAlerts(result.ResponseMessage);\r\n\t\t\t\tthis.CloseDialogWithCancel();\r\n\t\t\t}\r\n\t\t});\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AddressOptionEndpoint } from '@dino-proxy/endpoints/addressoption.endpoint';\r\nimport { AddressOption } from '@dino-proxy/entities/addressoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-address-option',\r\n templateUrl: './address-option.component.html',\r\n styleUrls: ['./address-option.component.scss']\r\n})\r\nexport class AddressOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: AddressOptionEndpoint) {\r\n super(A, 'AddressOptionComponent', AddressOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }]\r\n\r\n return menus;\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnIsAllowDuplicate() {\r\n return true;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { AddressOption } from '@dino-proxy/entities/addressoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-address-option-grid',\r\n templateUrl: './address-option-grid.component.html'\r\n})\r\nexport class AddressOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AddressOptionsGridComponent', AddressOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/address-option\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { AddressOptionEndpoint } from '@dino-proxy/endpoints/addressoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-address-option-list',\r\n templateUrl: './address-option-list.component.html'\r\n})\r\nexport class AddressOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: AddressOptionEndpoint) {\r\n super(A, 'AddressOptionsListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['AddressOptionsAdmin'] = new BaseDataStoreCRUDServer(this.endpoint);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DocumentFile } from '@dino-proxy/entities/document.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { EnumDocumentTypes, EnumShowDocumentFilesModes } from '@dino-proxy/enums';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { DocumentOption } from '@dino-proxy/entities/documentoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n Files: DocumentFile[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-files',\r\n templateUrl: './document-files.component.html',\r\n styleUrls: ['./document-files.component.scss']\r\n})\r\nexport class DocumentFilesComponent extends BaseComponent {\r\n @Input() DocumentID: number;\r\n @Input() DocumentType: EnumDocumentTypes;\r\n @Input() DocumentOption: DocumentOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint) {\r\n super(A, 'DocumentFilesComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.documentEndpoint.GetDocumentFiles(this.DocumentID, this.DocumentType)\r\n .subscribe(r => {\r\n this.State.Files = r.Entities;\r\n if (this.State.Files) {\r\n this.State.Files = this.State.Files.sort((a, b) => (a.SortOrder - b.SortOrder));\r\n this.State.Files.forEach(f => {\r\n if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.SBOAttachments) {\r\n (f as any).FullName = `${f.FileName}.${f.FileExt}`;\r\n } else if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.DocumentOne) {\r\n (f as any).FullName = `${f.FileName}${f.FileExt}`;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n HandleDownload(file: DocumentFile) {\r\n let obz$;\r\n\r\n if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.SBOAttachments && file.AttachmentEntryID) {\r\n obz$ = this.documentEndpoint.GetDocumentFile(this.DocumentID, this.DocumentType, file.AttachmentEntryID, file.FileID);\r\n } else if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.DocumentOne) {\r\n obz$ = this.documentEndpoint.GetDocumentFile(this.DocumentID, this.DocumentType, null, file.EntryID);\r\n }\r\n\r\n obz$.subscribe({\r\n next: response => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n } else {\r\n let fileName = `${file.FileName}`;\r\n if (file.FileExt) {\r\n if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.SBOAttachments) {\r\n fileName = `${fileName}.${file.FileExt}`;\r\n } else if (this.DocumentOption.ShowFilesMode === EnumShowDocumentFilesModes.DocumentOne) {\r\n fileName = `${fileName}${file.FileExt}`;\r\n }\r\n }\r\n Utils.DoFileDownload(fileName, response.Entity.FileBlob, response.Entity.ContentType);\r\n }\r\n },\r\n error: (e) => {\r\n this.UI.StopMessage(e);\r\n }\r\n });\r\n }\r\n\r\n GetIcon(file: DocumentFile) {\r\n if (!file.FileExt) return 'mdi mdi-file-outline';\r\n return Utils.GetIconStyle(`.${file.FileExt}`);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{file.FullName}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ItemSaleEndpoint } from '@dino-proxy/endpoints/itemsale.endpoint';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { ItemSale } from '@dino-proxy/entities/itemsale.entity';\r\n\r\nclass State extends BaseState {\r\n LastItemSale: ItemSale;\r\n}\r\n\r\n@Component({\r\n selector: 'app-last-sale-info',\r\n templateUrl: './last-sale-info.component.html',\r\n styleUrls: ['./last-sale-info.component.scss']\r\n})\r\nexport class LastSaleInfoComponent extends BaseComponent {\r\n @Input() Item: ItemView;\r\n @Input() PopupOption: ItemDisplayPopupOption;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemSaleEndpoint: ItemSaleEndpoint) {\r\n super(A, 'LastSaleInfoComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Load();\r\n }\r\n\r\n Load() {\r\n if (this.PopupOption?.IsShowLastSaleInfo) {\r\n this.itemSaleEndpoint.GetLastItemSale(this.Item.EntryID, true)\r\n .subscribe(r => {\r\n this.State.LastItemSale = r.Entity;\r\n });\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { DistributionCycleDate } from '@dino-proxy/entities/distributioncycle.entity';\r\nimport { DistributionDatesGenerateDialogComponent } from '../distribution-dates-generate-dialog/distribution-dates-generate-dialog.component';\r\n\r\nclass State extends BaseOptionState {\r\n DateAndTimeFormat: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-distribution-dates-grid',\r\n templateUrl: './distribution-dates-grid.component.html'\r\n})\r\nexport class DistributionDatesGridComponent extends BaseGridComponent {\r\n @ViewChild(DistributionDatesGenerateDialogComponent) generateDialog: DistributionDatesGenerateDialogComponent;\r\n @Output() NewDatesGenerated = new EventEmitter()\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DistributionDatesGridComponent', DistributionCycleDate, State);\r\n this.State.DateAndTimeFormat = `${this.Framework.CompanyInfo.DateFormatLong} | ${this.Framework.CompanyInfo.TimeFormatShort}`;\r\n }\r\n\r\n OpenGenerateDialog() {\r\n this.generateDialog.ShowDialogShort((distributionCycleDates) => {\r\n this.NewDatesGenerated.emit([...(this.DataSource as DistributionCycleDate[]), ...distributionCycleDates])\r\n });\r\n }\r\n\r\n OnInitNewRow = (e) => {\r\n if (!e.data && !e.data) {\r\n\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { AccordionComponent } from \"@dino-components/accordion/accordion.component\";\r\nimport { ImpersonateDropdownComponent } from \"@dino-components/app-impersonate-selector/app-impersonate-dropdown.component\";\r\nimport { BarcodeComponent } from \"@dino-components/barcode/barcode.component\";\r\nimport { CitySelectorComponent } from \"@dino-components/city-selector/city-selector.component\";\r\nimport { CodeNameDisplayComponent } from \"@dino-components/code-name-display/code-name-display.component\";\r\nimport { ContactDialogComponent } from \"@dino-components/contact-person/contact-dialog/contact-dialog.component\";\r\nimport { ContactPersonComponent } from \"@dino-components/contact-person/contact-person.component\";\r\nimport { CouponsComponent } from \"@dino-components/coupons/coupons.component\";\r\nimport { AddressDialogComponent } from \"@dino-components/customer-address/address-dialog/address-dialog.component\";\r\nimport { CustomerAddressComponent } from \"@dino-components/customer-address/customer-address.component\";\r\nimport { EditButtonsComponent } from \"@dino-components/edit-buttons/edit-buttons.component\";\r\nimport { FiltersPanelSliderComponent } from \"@dino-components/filters-panel-slider/filters-panel-slider.component\";\r\nimport { ImageBadgeComponent } from \"@dino-components/image-badge/image-badge.component\";\r\nimport { ImageButtonComponent } from \"@dino-components/image-button/image-button.component\";\r\nimport { ImageComponent } from \"@dino-components/image/image.component\";\r\nimport { ItemDisplayOptionsHelper } from \"@dino-components/item-display-options/item-display-options-helper/item-display-options.helper\";\r\nimport { ItemDisplayOptionsComponent } from \"@dino-components/item-display-options/item-display-options.component\";\r\nimport { NumberIteratorComponent } from \"@dino-components/number-iterator/number-iterator.component\";\r\nimport { NumberIterator3Component } from \"@dino-components/number-iterator3/number-iterator3.component\";\r\nimport { NumberRangeComponent } from \"@dino-components/number-range/number-range.component\";\r\nimport { PriceComponent } from \"@dino-components/price/price.component\";\r\nimport { ShareDocumentComponent } from \"@dino-components/share-document/share-document.component\";\r\nimport { TotalBalanceDinoComponent } from \"@dino-components/total-balance/total-balance.component\";\r\nimport { FormatPriceCurrencyDirective } from \"@dino-directives/format-price-currency.directive\";\r\nimport { AllOrderedItemsGridComponent } from \"@dino-pages/admin-dashboard/components/all-ordered-items-grid/all-ordered-items-grid.component\";\r\nimport { AllOrdersGridComponent } from \"@dino-pages/admin-dashboard/components/all-orders-grid/all-orders-grid.component\";\r\nimport { ItemSearchesGridComponent } from \"@dino-pages/admin-dashboard/components/item-searches-grid/item-searches-grid.component\";\r\nimport { AgingCustomersGridComponent } from \"@dino-pages/aging-customers/aging-customers-grid/aging-customers-grid.component\";\r\nimport { AgingCustomersListComponent } from \"@dino-pages/aging-customers/aging-customers-list/aging-customers-list.component\";\r\nimport { AgingCustomersComponent } from \"@dino-pages/aging-customers/aging-customers.component\";\r\nimport { AgingFullscreenComponent } from \"@dino-pages/aging/aging-fullscreen.component\";\r\nimport { AgingGridComponent } from \"@dino-pages/aging/aging-grid/aging-grid.component\";\r\nimport { AgingListComponent } from \"@dino-pages/aging/aging-list/aging-list.component\";\r\nimport { AgingWindowComponent } from \"@dino-pages/aging/aging-window.component\";\r\nimport { CheckoutCompletedComponent } from \"@dino-pages/checkout2/components/checkout-completed/checkout-completed.component\";\r\nimport { CheckoutNavigatorComponent } from \"@dino-pages/checkout2/components/checkout-navigator/checkout-navigator.component\";\r\nimport { CheckoutSignatureComponent } from \"@dino-pages/checkout2/components/checkout-signature/checkout-signature.component\";\r\nimport { CheckoutTermsOfUseDialogComponent } from \"@dino-pages/checkout2/components/checkout-terms-of-use-dialog/checkout-terms-of-use-dialog.component\";\r\nimport { DocumentDetailsComponent } from \"@dino-pages/checkout2/components/document-details/document-details.component\";\r\nimport { EditSummaryComponent } from \"@dino-pages/checkout2/components/edit-summary/edit-summary.component\";\r\nimport { CheckoutSignatureDialogComponent } from \"@dino-pages/checkout2/components/signature-dialog/checkout-signature-dialog.component\";\r\nimport { DesktopCheckoutComponent } from \"@dino-pages/checkout2/desktop/desktop-checkout.component\";\r\nimport { MobileCheckoutComponent } from \"@dino-pages/checkout2/mobile/mobile-checkout.component\";\r\nimport { EditShoppingCartItemComponent } from \"@dino-pages/checkout2/pages/edit-shopping-cart-item/edit-shopping-cart-item.component\";\r\nimport { CredentialWithSalesSelectorComponent } from \"@dino-pages/credential-selector/component/credential-with-sales--selector.component\";\r\nimport { ImpersonatePageComponent } from \"@dino-pages/credential-selector/impersonate-page.component\";\r\nimport { CustomerBankDetailsComponent } from \"@dino-pages/customers/bank-details/customer-bank-details.component\";\r\nimport { ChangeCreditCardDialogComponent } from \"@dino-pages/customers/components/change-credit-card-dialog/change-credit-card.component\";\r\nimport { CustomerAddressesGridComponent } from \"@dino-pages/customers/components/customer-addresses-grid/customer-addresses-grid.component\";\r\nimport { CustomerAddressesListComponent } from \"@dino-pages/customers/components/customer-addresses-list/customer-addresses-list.component\";\r\nimport { CustomerContactPersonsGridComponent } from \"@dino-pages/customers/components/customer-contact-persons-grid/customer-contact-persons-grid.component\";\r\nimport { CustomerContactPersonsListComponent } from \"@dino-pages/customers/components/customer-contact-persons-list/customer-contact-persons-list.component\";\r\nimport { CustomerFilterComponent } from \"@dino-pages/customers/components/customer-filter/customer-filter.component\";\r\nimport { CustomerDetailsFullscreenComponent } from \"@dino-pages/customers/customer-details/customer-details-fullscreen.component\";\r\nimport { CustomerDetailsWindowComponent } from \"@dino-pages/customers/customer-details/customer-details-window.component\";\r\nimport { CustomersGridComponent } from \"@dino-pages/customers/customers-grid/customers-grid.component\";\r\nimport { CustomersListComponent } from \"@dino-pages/customers/customers-list/customers-list.component\";\r\nimport { CustomersComponent } from \"@dino-pages/customers/customers.component\";\r\nimport { DashboardActiveCustomersFromDinoComponent } from \"@dino-pages/dashboard2/components/active-customers-from-dino/dashboard-active-customers-from-dino.component\";\r\nimport { DashboardActiveCustomersComponent } from \"@dino-pages/dashboard2/components/active-customers/dashboard-active-customers.component\";\r\nimport { DashboardActiveUsersComponent } from \"@dino-pages/dashboard2/components/active-users/dashboard-active-users.component\";\r\nimport { DashboardFilterComponent } from \"@dino-pages/dashboard2/components/dashboard-filter/dashboard-filter.component\";\r\nimport { DashboardDocumentsFromDinoComponent } from \"@dino-pages/dashboard2/components/documents-from-dino/dashboard-documents-from-dino.component\";\r\nimport { DocumentsBySourceComponent } from \"@dino-pages/dashboard2/components/documents-by-source/documents-by-source.component\";\r\nimport { DashboardInactiveCustomersComponent } from \"@dino-pages/dashboard2/components/inactive-customers/dashboard-inactive-customers.component\";\r\nimport { DashboardOpenDocumentsComponent } from \"@dino-pages/dashboard2/components/open-documents/dashboard-open-documents.component\";\r\nimport { DashboardTop10CustomersComponent } from \"@dino-pages/dashboard2/components/top10-customers/dashboard-top10-customers.component\";\r\nimport { DashboardTop10ItemsComponent } from \"@dino-pages/dashboard2/components/top10-items/dashboard-top10-items.component\";\r\nimport { DocumentProcessingGridComponent } from \"@dino-pages/document-processing/document-processing-grid/document-processing-grid.component\";\r\nimport { DocumentProcessingListComponent } from \"@dino-pages/document-processing/document-processing-list/document-processing-list.component\";\r\nimport { DocumentProcessingComponent } from \"@dino-pages/document-processing/document-processing.component\";\r\nimport { AdditionalStatusComponent } from \"@dino-pages/documents/components/additional-status/additional-status.component\";\r\nimport { CopyToDialogComponent } from \"@dino-pages/documents/components/copy-to-dialog/copy-to-dialog.component\";\r\nimport { DocumentFilterComponent } from \"@dino-pages/documents/components/document-filter/document-filter.component\";\r\nimport { DocumentGridSummaryComponent } from \"@dino-pages/documents/components/document-grid-summary/document-grid-summary.component\";\r\nimport { DocumentGridComponent } from \"@dino-pages/documents/components/document-grid/document-grid.component\";\r\nimport { DocumentItemNumbersComponent } from \"@dino-pages/documents/components/document-item-numbers/document-item-numbers.component\";\r\nimport { DocumentListItemComponent } from \"@dino-pages/documents/components/document-list/document-list-item/document-list-item.component\";\r\nimport { DocumentListComponent } from \"@dino-pages/documents/components/document-list/document-list.component\";\r\nimport { DocumentStatusComponent } from \"@dino-pages/documents/components/document-status/document-status.component\";\r\nimport { RelatedDocumentsDialogComponent } from \"@dino-pages/documents/components/related-documents-dialog/related-documents-dialog.component\";\r\nimport { ShareDocumentDialogComponent } from \"@dino-pages/documents/components/share-document-dialog/share-document-dialog.component\";\r\nimport { DocumentComponent } from \"@dino-pages/documents/document/document.component\";\r\nimport { DocumentsComponent } from \"@dino-pages/documents/documents.component\";\r\nimport { ExternalLinkComponent } from \"@dino-pages/external-link/external-link.component\";\r\nimport { ExternalQueryDataComponent } from \"@dino-pages/external-query-data/external-query-data.component\";\r\nimport { GuestAccessComponent } from \"@dino-pages/guest-access/guest-access.component\";\r\nimport { HomeBannerComponent } from \"@dino-pages/home/components/home-banner/home-banner.component\";\r\nimport { HomeCategoriesComponent } from \"@dino-pages/home/components/home-categories/home-categories.component\";\r\nimport { HomeItemsComponent } from \"@dino-pages/home/components/home-items/home-items.component\";\r\nimport { ContactUsDialogComponent } from \"@dino-pages/home/contact-us-dialog/contact-us-dialog.component\";\r\nimport { HomeComponent } from \"@dino-pages/home/home.component\";\r\nimport { TermsOfUseDialogComponent } from \"@dino-pages/home/terms-of-use-dialog/terms-of-use-dialog.component\";\r\nimport { LedgerMobileListComponent } from \"@dino-pages/ledgers/ledger-list/ledger-mobile-list.component\";\r\nimport { LedgersFullscreenComponent } from \"@dino-pages/ledgers/ledgers-fullscreen.component\";\r\nimport { LedgersGridComponent } from \"@dino-pages/ledgers/ledgers-grid/ledgers-grid.component\";\r\nimport { LedgersWindowComponent } from \"@dino-pages/ledgers/ledgers-window.component\";\r\nimport { BaseTypePaymentComponent } from \"@dino-pages/payment/components/base/base-type-payment.component\";\r\nimport { CashPaymentComponent } from \"@dino-pages/payment/components/cash-payment/cash-payment.component\";\r\nimport { ChequePaymentComponent } from \"@dino-pages/payment/components/cheque-payment/cheque-payment.component\";\r\nimport { CreditCardPaymentDialogComponent } from \"@dino-pages/payment/components/credit-card-payment-dialog/credit-card-payment-dialog.component\";\r\nimport { LaterPaymentComponent } from \"@dino-pages/payment/components/later-payment/later-payment.component\";\r\nimport { PaymentTypeSelectDialogComponent } from \"@dino-pages/payment/components/payment-type-select-dialog/payment-type-select-dialog.component\";\r\nimport { PaymentTypeSelectComponent } from \"@dino-pages/payment/components/payment-type-select/payment-type-select.component\";\r\nimport { WirePaymentComponent } from \"@dino-pages/payment/components/wire-payment/wire-payment.component\";\r\nimport { PaymentComponent } from \"@dino-pages/payment/payment.component\";\r\nimport { AssortmentComponent } from \"@dino-pages/product-catalogue2/components/assortment/assortment.component\";\r\nimport { BaseDocumentDialogComponent } from \"@dino-pages/product-catalogue2/components/base-document/base-document-dialog/base-document-dialog.component\";\r\nimport { UseBaseDocumentButtonComponent } from \"@dino-pages/product-catalogue2/components/base-document/use-base-document-button/use-base-document-button.component\";\r\nimport { BreadcrumbComponent } from \"@dino-pages/product-catalogue2/components/breadcrumb/breadcrumb.component\";\r\nimport { CategoriesPanelComponent } from \"@dino-pages/product-catalogue2/components/categories-panel/categories-panel.component\";\r\nimport { CategorySelectorComponent } from \"@dino-pages/product-catalogue2/components/category-selector/category-selector.component\";\r\nimport { ClassificationComponent } from \"@dino-pages/product-catalogue2/components/classification/classification.component\";\r\nimport { DisplayOptionsComponent } from \"@dino-pages/product-catalogue2/components/display-options/display-options.component\";\r\nimport { FilterAttributes2Component } from \"@dino-pages/product-catalogue2/components/filter-panel2/components/filter-attributes2/filter-attributes2.component\";\r\nimport { FilterGroupContainerComponent } from \"@dino-pages/product-catalogue2/components/filter-panel2/components/filter-group-container/filter-group-container.component\";\r\nimport { FilterListGroupComponent } from \"@dino-pages/product-catalogue2/components/filter-panel2/components/filter-list-group/filter-list-group.component\";\r\nimport { FiltersPanel2Component } from \"@dino-pages/product-catalogue2/components/filter-panel2/filter-panel2.component\";\r\nimport { GroupOptionsComponent } from \"@dino-pages/product-catalogue2/components/group-options/group-options.component\";\r\nimport { SearchBarComponent } from \"@dino-pages/product-catalogue2/components/search-bar/search-bar.component\";\r\nimport { SortGroupAssortmentPanelComponent } from \"@dino-pages/product-catalogue2/components/sort-group-assortment-panel/sort-group-assortment-panel.component\";\r\nimport { SortOptionsComponent } from \"@dino-pages/product-catalogue2/components/sort-options/sort-options.component\";\r\nimport { FixedCatalogueComponent } from \"@dino-pages/product-catalogue2/fixed-catalogue/fixed-catalogue.component\";\r\nimport { DesktopListComponent } from \"@dino-pages/product-catalogue2/floating-catalogue/components/desktop-list/desktop-list.component\";\r\nimport { FloatingCatalogueComponent } from \"@dino-pages/product-catalogue2/floating-catalogue/floating-catalogue.component\";\r\nimport { CompactItemComponent } from \"@dino-pages/product-catalogue2/item-list/compact-item/compact-item.component\";\r\nimport { ItemActionsComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-actions/item-actions.component\";\r\nimport { ItemAttributes2Component } from \"@dino-pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component\";\r\nimport { ItemBadgesComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-badges/item-badges.component\";\r\nimport { ItemChildrenVisibilityToggleComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-children-visibility-toggle/item-children-visibility-toggle.component\";\r\nimport { ItemDeleteComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-delete/item-delete.component\";\r\nimport { ItemDescriptionComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-description/item-description.component\";\r\nimport { ItemDimensionsComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-dimensions/item-dimensions.component\";\r\nimport { ItemDisableFromPromotion } from \"@dino-pages/product-catalogue2/item-list/components/item-disable-promotion/item-disable-promotion\";\r\nimport { ItemEditComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-edit/item-edit.component\";\r\nimport { ItemFiles2Component } from \"@dino-pages/product-catalogue2/item-list/components/item-files2/item-files2.component\";\r\nimport { ItemMediaComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-media/item-media.component\";\r\nimport { ItemPrice2Component } from \"@dino-pages/product-catalogue2/item-list/components/item-price2/item-price2.component\";\r\nimport { ItemPromotionsComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-promotions/item-promotions.component\";\r\nimport { ItemQuantityComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-quantity/item-quantity.component\";\r\nimport { ItemStockComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-stock/item-stock.component\";\r\nimport { ItemVariationButtonComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-variation-button/item-variation-button.component\";\r\nimport { ItemWishlistComponent } from \"@dino-pages/product-catalogue2/item-list/components/item-wishlist/item-wishlist.component\";\r\nimport { ListItemImageComponent2 } from \"@dino-pages/product-catalogue2/item-list/components/list-item-image/list-item-image2.component\";\r\nimport { GridItemComponent2 } from \"@dino-pages/product-catalogue2/item-list/grid-item2/grid-item2.component\";\r\nimport { ListItemComponent2 } from \"@dino-pages/product-catalogue2/item-list/list-item2/list-item2.component\";\r\nimport { UltraCompactItemComponent } from \"@dino-pages/product-catalogue2/item-list/ultra-compact-item/ultra-compact-item.component\";\r\nimport { GeneralTabMobileComponent } from \"@dino-pages/product-catalogue2/item-popup/components/general-tab-mobile/general-tab-mobile.component\";\r\nimport { GeneralTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/general-tab/general-tab.component\";\r\nimport { ItemAvailabilityGridComponent } from \"@dino-pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-grid/item-availability-grid.component\";\r\nimport { ItemAvailabilityListComponent } from \"@dino-pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-list/item-availability-list.component\";\r\nimport { ItemAvailabilityTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-tab.component\";\r\nimport { ItemsPromotionsTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/item-promotions-tab/item-promotions-tab.component\";\r\nimport { KitItemsTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/kit-items-tab/kit-items-tab.component\";\r\nimport { ItemSalesGridComponent } from \"@dino-pages/product-catalogue2/item-popup/components/last-sales-tab/item-sales-grid/item-sales-grid.component\";\r\nimport { LastSalesTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/last-sales-tab/last-sales-tab.component\";\r\nimport { PurchaseOrdersGridComponent } from \"@dino-pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-grid/purchase-orders-grid.component\";\r\nimport { PurchaseOrdersTabComponent } from \"@dino-pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-tab.component\";\r\nimport { SimilarItemsComponent } from \"@dino-pages/product-catalogue2/item-popup/components/similar-items/similar-items.component\";\r\nimport { VariationsByDimensionComponent } from \"@dino-pages/product-catalogue2/item-popup/components/variations-by-dimension/variations-by-dimension.component\";\r\nimport { DesktopItemPopupComponent } from \"@dino-pages/product-catalogue2/item-popup/desktop/desktop-item-popup.component\";\r\nimport { MobileItemPopupComponent } from \"@dino-pages/product-catalogue2/item-popup/mobile/mobile-item-popup.component\";\r\nimport { MobileListComponent } from \"@dino-pages/product-catalogue2/mobile/components/mobile-list/mobile-list.component\";\r\nimport { MobileCatalogueComponent } from \"@dino-pages/product-catalogue2/mobile/mobile-catalogue.component\";\r\nimport { ProductCatalogue2Component } from \"@dino-pages/product-catalogue2/product-catalogue2.component\";\r\nimport { ReceiptFilterComponent } from \"@dino-pages/receipts/components/receipt-filter/receipt-filter.component\";\r\nimport { ReceiptGridComponent } from \"@dino-pages/receipts/components/receipt-grid/receipt-grid.component\";\r\nimport { ReceiptListItemComponent } from \"@dino-pages/receipts/components/receipt-list/receipt-list-item/receipt-list-item.component\";\r\nimport { ReceiptListComponent } from \"@dino-pages/receipts/components/receipt-list/receipt-list.component\";\r\nimport { CreateReceiptAmountsButtonComponent } from \"@dino-pages/receipts/create-receipt/components/create-receipt-amounts-button/create-receipt-amounts-button.component\";\r\nimport { CreateReceiptLedgerListItemComponent } from \"@dino-pages/receipts/create-receipt/components/create-receipt-ledger-list-item/create-receipt-ledger-list-item.component\";\r\nimport { CreateReceiptNavigatorComponent } from \"@dino-pages/receipts/create-receipt/components/create-receipt-navigator/create-receipt-navigator.component\";\r\nimport { PaymentAmountDialogComponent } from \"@dino-pages/receipts/create-receipt/components/payment-amount-dialog/payment-amount-dialog.component\";\r\nimport { ReceiptDocumentToSelectGridComponent } from \"@dino-pages/receipts/create-receipt/components/receipt-documents-to-select-grid/receipt-documents-to-select-grid.component\";\r\nimport { ReceiptDocumentToSelectListComponent } from \"@dino-pages/receipts/create-receipt/components/receipt-documents-to-select-list/receipt-documents-to-select-list.component\";\r\nimport { SelectedReceiptDocumentsGridComponent } from \"@dino-pages/receipts/create-receipt/components/selected-receipt-document-grid/selected-receipt-documents-grid.component\";\r\nimport { SelectedReceiptDocumentsListComponent } from \"@dino-pages/receipts/create-receipt/components/selected-receipt-document-list/selected-receipt-documents-list.component\";\r\nimport { CreateReceiptDesktopComponent } from \"@dino-pages/receipts/create-receipt/desktop/create-receipt-desktop.component\";\r\nimport { CreateReceiptMobileComponent } from \"@dino-pages/receipts/create-receipt/mobile/create-receipt-mobile.component\";\r\nimport { ReceiptPaymentsComponent } from \"@dino-pages/receipts/receipt/receipt-payments/receipt-payments.component\";\r\nimport { ReceiptRelatedDocumentsComponent } from \"@dino-pages/receipts/receipt/receipt-related-documents/receipt-related-documents.component\";\r\nimport { ReceiptComponent } from \"@dino-pages/receipts/receipt/receipt.component\";\r\nimport { ReceiptsComponent } from \"@dino-pages/receipts/receipts.component\";\r\nimport { SelectCustomerDropdownComponent } from \"@dino-pages/sales/components/select-customer-dropdown/select-customer-dropdown.component\";\r\nimport { SelectCustomerInfoComponent } from \"@dino-pages/sales/components/select-customer-info/select-customer-info.component\";\r\nimport { SelectCustomerMobileListComponent } from \"@dino-pages/sales/components/select-customer-mobile-list/select-customer-mobile-list.component\";\r\nimport { SelectCustomerPopupComponent } from \"@dino-pages/sales/components/select-customer-popup/select-customer-popup.component\";\r\nimport { SelectDocumentTypeComponent } from \"@dino-pages/sales/components/select-document-type/select-document-type.component\";\r\nimport { SalesDataGridComponent } from \"@dino-pages/sales/sale-targets/components/sales-data-grid/sales-data-grid.component\";\r\nimport { SalesTargetFilterComponent } from \"@dino-pages/sales/sale-targets/components/sales-target-filter/sales-target-filter.component\";\r\nimport { TargetPerformanceGridComponent } from \"@dino-pages/sales/sale-targets/components/target-performance-grid/target-performance-grid.component\";\r\nimport { SaleTargetPerformanceComponent } from \"@dino-pages/sales/sale-targets/sale-target-performance/sale-target-performance.component\";\r\nimport { SalesDataComponent } from \"@dino-pages/sales/sale-targets/sales-data/sales-data.component\";\r\nimport { SalesSummaryComponent } from \"@dino-pages/sales/sale-targets/sales-summary/sales-summary.component\";\r\nimport { AdminComponent } from \"@dino-pages/settings/admins/admin.component\";\r\nimport { AdminGridComponent } from \"@dino-pages/settings/admins/list/admin-grid.component\";\r\nimport { AdminListComponent } from \"@dino-pages/settings/admins/list/admin-list.component\";\r\nimport { AttributeGroupsGridComponent } from \"@dino-pages/settings/attribute-groups/attribute-groups-grid/attribute-groups-grid.component\";\r\nimport { AttributeGroupsComponent } from \"@dino-pages/settings/attribute-groups/attribute-groups.component\";\r\nimport { ContactUsSubjectsGridComponent } from \"@dino-pages/settings/contact-us-subjects/contact-us-subjects-grid/contact-us-subjects-grid.component\";\r\nimport { DepositGroupsGridComponent } from \"@dino-pages/settings/deposit-groups/deposit-groups-grid/deposit-groups-grid.component\";\r\nimport { DepositGroupsComponent } from \"@dino-pages/settings/deposit-groups/deposit-groups.component\";\r\nimport { ExternalLinkConfigComponent } from \"@dino-pages/settings/external-links-config/external-link-config.component\";\r\nimport { ExternalLinkConfigsListComponent } from \"@dino-pages/settings/external-links-config/external-link-config/external-link-config-list.component\";\r\nimport { ExternalLinkConfigsGridComponent } from \"@dino-pages/settings/external-links-config/external-link-grid-config/external-link-config-grid.component\";\r\nimport { ExternalQueriesGridComponent } from \"@dino-pages/settings/external-queries/external-query-grid/external-query-grid.component\";\r\nimport { ExternalQueriesListComponent } from \"@dino-pages/settings/external-queries/external-query-list/external-query-list.component\";\r\nimport { ExternalQueryComponent } from \"@dino-pages/settings/external-queries/external-query.component\";\r\nimport { BusinessOptionsGridComponent } from \"@dino-pages/settings/options/business-options/business-option-grid/business-option-grid.component\";\r\nimport { BusinessOptionsListComponent } from \"@dino-pages/settings/options/business-options/business-option-list/business-option-list.component\";\r\nimport { BusinessOptionComponent } from \"@dino-pages/settings/options/business-options/business-option.component\";\r\nimport { CatalogueOptionsGridComponent } from \"@dino-pages/settings/options/catalogue-options/catalogue-option-grid/catalogue-option-grid.component\";\r\nimport { CatalogueOptionsListComponent } from \"@dino-pages/settings/options/catalogue-options/catalogue-option-list/catalogue-option-list.component\";\r\nimport { CatalogueOptionComponent } from \"@dino-pages/settings/options/catalogue-options/catalogue-option.component\";\r\nimport { ContactUsOptionsGridComponent } from \"@dino-pages/settings/options/contact-us-options/contact-us-option-grid/contact-us-option-grid.component\";\r\nimport { ContactUsOptionsListComponent } from \"@dino-pages/settings/options/contact-us-options/contact-us-option-list/contact-us-option-list.component\";\r\nimport { ContactUsOptionComponent } from \"@dino-pages/settings/options/contact-us-options/contact-us-option.component\";\r\nimport { CustomerDetailOptionsGridComponent } from \"@dino-pages/settings/options/customer-detail-options/customer-detail-option-grid/customer-detail-option-grid.component\";\r\nimport { CustomerDetailOptionsListComponent } from \"@dino-pages/settings/options/customer-detail-options/customer-detail-option-list/customer-detail-option-list.component\";\r\nimport { CustomerDetailOptionComponent } from \"@dino-pages/settings/options/customer-detail-options/customer-detail-option.component\";\r\nimport { CustomerOptionsGridComponent } from \"@dino-pages/settings/options/customer-options/customer-option-grid/customer-option-grid.component\";\r\nimport { CustomerOptionsListComponent } from \"@dino-pages/settings/options/customer-options/customer-option-list/customer-option-list.component\";\r\nimport { CustomerOptionComponent } from \"@dino-pages/settings/options/customer-options/customer-option.component\";\r\nimport { DimensionConfigurationsGridComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-configuration-grid/dimension-configuration-grid.component\";\r\nimport { DimensionConfigurationsListComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-configuration-list/dimension-configuration-list.component\";\r\nimport { DimensionConfigurationComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-configuration.component\";\r\nimport { DimensionScalesGridComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-scales/dimension-scale-grid/dimension-scale-grid.component\";\r\nimport { DimensionValuesGridComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-values/dimension-value-grid/dimension-value-grid.component\";\r\nimport { DimensionGridComponent } from \"@dino-pages/settings/options/dimension-configurations/dimensions/dimension-grid/dimension-grid.component\";\r\nimport { DimensionComponent } from \"@dino-pages/settings/options/dimension-configurations/dimensions/dimension.component\";\r\nimport { DiscountPermissionGridComponent } from \"@dino-pages/settings/options/discount-permissions/discount-permission-grid/discount-permission-grid.component\";\r\nimport { DiscountPermissionListComponent } from \"@dino-pages/settings/options/discount-permissions/discount-permission-list/discount-permission-list.component\";\r\nimport { DiscountPermissionComponent } from \"@dino-pages/settings/options/discount-permissions/discount-permission.component\";\r\nimport { PermissionBrandGridComponent } from \"@dino-pages/settings/options/discount-permissions/permission-grids/brands-grid/permission-brand-grid.component\";\r\nimport { PermissionCategoryGridComponent } from \"@dino-pages/settings/options/discount-permissions/permission-grids/categories-grid/permission-category-grid.component\";\r\nimport { PermissionItemGridComponent } from \"@dino-pages/settings/options/discount-permissions/permission-grids/items-grid/permission-item-grid.component\";\r\nimport { PermissionManufacturerGridComponent } from \"@dino-pages/settings/options/discount-permissions/permission-grids/manufacturers-grid/permission-manufacturer-grid.component\";\r\nimport { PermissionVendorGridComponent } from \"@dino-pages/settings/options/discount-permissions/permission-grids/vendors-grid/permission-vendor-grid.component\";\r\nimport { DiscountRuleGridComponent } from \"@dino-pages/settings/options/discount-rules/discount-rule-grid/discount-rule-grid.component\";\r\nimport { DiscountRuleListComponent } from \"@dino-pages/settings/options/discount-rules/discount-rule-list/discount-rule-list.component\";\r\nimport { DiscountRuleComponent } from \"@dino-pages/settings/options/discount-rules/discount-rule.component\";\r\nimport { DocumentOptionsGridComponent } from \"@dino-pages/settings/options/document-options/document-option-grid/document-option-grid.component\";\r\nimport { DocumentOptionsListComponent } from \"@dino-pages/settings/options/document-options/document-option-list/document-option-list.component\";\r\nimport { DocumentOptionComponent } from \"@dino-pages/settings/options/document-options/document-option.component\";\r\nimport { FeatureOptionsGridComponent } from \"@dino-pages/settings/options/feature-options/feature-option-grid/feature-option-grid.component\";\r\nimport { FeatureOptionsListComponent } from \"@dino-pages/settings/options/feature-options/feature-option-list/feature-option-list.component\";\r\nimport { FeatureOptionComponent } from \"@dino-pages/settings/options/feature-options/feature-option.component\";\r\nimport { FilterOptionsGridComponent } from \"@dino-pages/settings/options/filter-options/filter-option-grid/filter-option-grid.component\";\r\nimport { FilterOptionsListComponent } from \"@dino-pages/settings/options/filter-options/filter-option-list/filter-option-list.component\";\r\nimport { FilterOptionComponent } from \"@dino-pages/settings/options/filter-options/filter-option.component\";\r\nimport { GiftCardComponent } from \"@dino-pages/settings/options/gift-cards/gift-card.component\";\r\nimport { GiftCardsGridComponent } from \"@dino-pages/settings/options/gift-cards/gift-cards-grid/gift-cards-grid.component\";\r\nimport { GiftCardsListComponent } from \"@dino-pages/settings/options/gift-cards/gift-cards-list/gift-cards-list.component\";\r\nimport { HomepageOptionsGridComponent } from \"@dino-pages/settings/options/homepage-options/homepage-option-grid/homepage-option-grid.component\";\r\nimport { HomepageOptionsListComponent } from \"@dino-pages/settings/options/homepage-options/homepage-option-list/homepage-option-list.component\";\r\nimport { HomepageOptionComponent } from \"@dino-pages/settings/options/homepage-options/homepage-option.component\";\r\nimport { ItemDisplayElementOptionsGridComponent } from \"@dino-pages/settings/options/item-display-element-options/item-display-element-option-grid/item-display-element-option-grid.component\";\r\nimport { ItemDisplayElementOptionsListComponent } from \"@dino-pages/settings/options/item-display-element-options/item-display-element-option-list/item-display-element-option-list.component\";\r\nimport { ItemDisplayElementOptionComponent } from \"@dino-pages/settings/options/item-display-element-options/item-display-element-option.component\";\r\nimport { ItemDisplayPopupOptionsGridComponent } from \"@dino-pages/settings/options/item-display-popup-options/item-display-popup-option-grid/item-display-popup-option-grid.component\";\r\nimport { ItemDisplayPopupOptionsListComponent } from \"@dino-pages/settings/options/item-display-popup-options/item-display-popup-option-list/item-display-popup-option-list.component\";\r\nimport { ItemDisplayPopupOptionComponent } from \"@dino-pages/settings/options/item-display-popup-options/item-display-popup-option.component\";\r\nimport { ItemOptionsGridComponent } from \"@dino-pages/settings/options/item-options/item-option-grid/item-option-grid.component\";\r\nimport { ItemOptionsListComponent } from \"@dino-pages/settings/options/item-options/item-option-list/item-option-list.component\";\r\nimport { ItemOptionComponent } from \"@dino-pages/settings/options/item-options/item-option.component\";\r\nimport { NotificationOptionsGridComponent } from \"@dino-pages/settings/options/notification-options/notification-option-grid/notification-option-grid.component\";\r\nimport { NotificationOptionsListComponent } from \"@dino-pages/settings/options/notification-options/notification-option-list/notification-option-list.component\";\r\nimport { NotificationOptionComponent } from \"@dino-pages/settings/options/notification-options/notification-option.component\";\r\nimport { PaymentOptionsGridComponent } from \"@dino-pages/settings/options/payment-options/payment-option-grid/payment-option-grid.component\";\r\nimport { PaymentOptionsListComponent } from \"@dino-pages/settings/options/payment-options/payment-option-list/payment-option-list.component\";\r\nimport { PaymentOptionComponent } from \"@dino-pages/settings/options/payment-options/payment-option.component\";\r\nimport { PriceDisplayOptionComponent } from \"@dino-pages/settings/options/price-display-options/price-display-option.component\";\r\nimport { PriceDisplayOptionGridComponent } from \"@dino-pages/settings/options/price-display-options/price-display-options-grid/price-display-option-grid.component\";\r\nimport { PriceDisplayOptionListComponent } from \"@dino-pages/settings/options/price-display-options/price-display-options-list/price-display-option-list.component\";\r\nimport { PromotionComponent } from \"@dino-pages/settings/options/promotions/promotion.component\";\r\nimport { PromotionsGridComponent } from \"@dino-pages/settings/options/promotions/promotions-grid/promotions-grid.component\";\r\nimport { PromotionsListComponent } from \"@dino-pages/settings/options/promotions/promotions-list/promotions-list.component\";\r\nimport { SalePeriodGridComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period-grid/sale-period-grid.component\";\r\nimport { SalePeriodListComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period-list/sale-period-list.component\";\r\nimport { SalePeriodPartGridComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period-parts-grid/sale-period-parts.component\";\r\nimport { SalePeriodComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period.component\";\r\nimport { SaleTargetGridComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target-grid/sale-target-grid.component\";\r\nimport { SaleTargetLineGridComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target-lines-grid/sale-target-lines.component\";\r\nimport { SaleTargetListComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target-list/sale-target-list.component\";\r\nimport { SaleTargetComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target.component\";\r\nimport { SalesPersonOptionsGridComponent } from \"@dino-pages/settings/options/sales-person-options/sales-person-option-grid/sales-person-option-grid.component\";\r\nimport { SalesPersonOptionsListComponent } from \"@dino-pages/settings/options/sales-person-options/sales-person-option-list/sales-person-option-list.component\";\r\nimport { SalesPersonOptionComponent } from \"@dino-pages/settings/options/sales-person-options/sales-person-option.component\";\r\nimport { SeriesOptionsGridComponent } from \"@dino-pages/settings/options/series-options/series-option-grid/series-option-grid.component\";\r\nimport { SeriesOptionsListComponent } from \"@dino-pages/settings/options/series-options/series-option-list/series-option-list.component\";\r\nimport { SeriesOptionComponent } from \"@dino-pages/settings/options/series-options/series-option.component\";\r\nimport { ShipmentMethodsGridComponent } from \"@dino-pages/settings/options/shipment-options/shipment-methods/shipment-method-grid/shipment-method-grid.component\";\r\nimport { ShipmentOptionsGridComponent } from \"@dino-pages/settings/options/shipment-options/shipment-option-grid/shipment-option-grid.component\";\r\nimport { ShipmentOptionsListComponent } from \"@dino-pages/settings/options/shipment-options/shipment-option-list/shipment-option-list.component\";\r\nimport { ShipmentOptionComponent } from \"@dino-pages/settings/options/shipment-options/shipment-option.component\";\r\nimport { SystemOptionsGridComponent } from \"@dino-pages/settings/options/system-options/system-option-grid/system-option-grid.component\";\r\nimport { SystemOptionsListComponent } from \"@dino-pages/settings/options/system-options/system-option-list/system-option-list.component\";\r\nimport { DinoSystemOptionComponent } from \"@dino-pages/settings/options/system-options/system-option.component\";\r\nimport { TermsOfUseOptionsGridComponent } from \"@dino-pages/settings/options/terms-of-use-options/terms-of-use-option-grid/terms-of-use-option-grid.component\";\r\nimport { TermsOfUseOptionsListComponent } from \"@dino-pages/settings/options/terms-of-use-options/terms-of-use-option-list/terms-of-use-option-list.component\";\r\nimport { TermsOfUseOptionComponent } from \"@dino-pages/settings/options/terms-of-use-options/terms-of-use-option.component\";\r\nimport { SpecificationAttributesGridComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute-grid/specification-attribute-grid.component\";\r\nimport { SpecificationAttributesListComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute-list/specification-attribute-list.component\";\r\nimport { SpecificationAttributeValuesGridComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute-value-grid/specification-attribute-value-grid.component\";\r\nimport { SpecificationAttributeComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute.component\";\r\nimport { DuplicateRepeatDialogComponent } from \"@dino-pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-dialog.component\";\r\nimport { DuplicateRepeatDocumentGridComponent } from \"@dino-pages/shopping-cart/components/duplicate-repeat-dialog/duplicate-repeat-documents-grid/duplicate-repeat-documents-grid.component\";\r\nimport { QuantityBadgeComponent } from \"@dino-pages/shopping-cart/components/quantity-badge/quantity-badge.component\";\r\nimport { ShoppingCartCompactComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-compact/shopping-cart-compact.component\";\r\nimport { ShoppingCartItemEditComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component\";\r\nimport { SelectItemNumberDialogComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-item-numbers-dialog/select-item-numbers-dialog/select-item-numbers-dialog.component\";\r\nimport { ShoppingCartItemNumbersDialogComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-item-numbers-dialog/shopping-cart-item-numbers-dialog.component\";\r\nimport { ShoppingCartItemsComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-items/shopping-cart-items.component\";\r\nimport { ShoppingCartTotalsComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-totals/shopping-cart-totals.component\";\r\nimport { ShoppingWishlistButtonsComponent } from \"@dino-pages/shopping-cart/components/shopping-wishlist-buttons/shopping-wishlist-buttons.component\";\r\nimport { SuggestedPromotionsAccordionComponent } from \"@dino-pages/shopping-cart/components/suggested-promotions/suggested-promotions-accordion/suggested-promotions-accordion.component\";\r\nimport { SuggestedPromotionsComponent } from \"@dino-pages/shopping-cart/components/suggested-promotions/suggested-promotions.component\";\r\nimport { TotalAfterButtonComponent } from \"@dino-pages/shopping-cart/components/total-after-button/total-after-button.component\";\r\nimport { ShoppingCart2Component } from \"@dino-pages/shopping-cart/shopping-cart2.component\";\r\nimport { TermsOfUseComponent } from \"@dino-pages/terms-of-use/terms-of-use.component\";\r\nimport { WishlistComponent } from \"@dino-pages/wishlist/wishlist.component\";\r\nimport { LookupCategoryPipe } from \"@dino-pipes/lookup-category.pipe\";\r\nimport { DashboardTargetsComponent } from \"@dino-pages/dashboard2/components/targets/dashboard-targets.component\";\r\nimport { SaleAnalysisComponent } from \"@dino-pages/dashboard2/components/sale-analysis/sale-analysis.component\";\r\nimport { LatestDocumentsComponent } from \"@dino-pages/dashboard2/components/latest-documents/latest-documents.component\";\r\nimport { LatestDocumentsListComponent } from \"@dino-pages/dashboard2/components/latest-documents/latest-documents-list/latest-documents-list.component\";\r\nimport { LatestDocumentsGridComponent } from \"@dino-pages/dashboard2/components/latest-documents/latest-documents-grid/latest-documents-grid.component\";\r\nimport { DashboardBalanceComponent } from \"@dino-pages/dashboard2/components/balance/dashboard-balance.component\";\r\nimport { DashboardBalanceLateComponent } from \"@dino-pages/dashboard2/components/balance-late/dashboard-balance-late.component\";\r\nimport { DashboardWindowComponent } from \"@dino-pages/dashboard2/dashboard-window.component\";\r\nimport { DashboardFullscreenComponent } from \"@dino-pages/dashboard2/dashboard-fullscreen.component\";\r\nimport { ShoppingCartEditModeWarningDialogComponent } from \"@dino-pages/shopping-cart/components/shopping-cart-edit-mode-dialog/shopping-cart-edit-mode-warning-dialog.component\";\r\nimport { BarcodeExternalDialogComponent } from \"@dino-components/barcode-external/barcode-external-dialog.component\";\r\nimport { CustomItemFieldComponent } from \"@dino-components/custom-fieldset-form/custom-item-field/custom-item-field.component\";\r\nimport { CustomFormFieldEditComponent } from \"@dino-components/custom-fieldset-form/custom-form-field-edit/custom-form-field-edit.component\";\r\nimport { CustomFieldsetFormComponent } from \"@dino-components/custom-fieldset-form/custom-fieldset-form.component\";\r\nimport { CustomFormFieldComponent } from \"@dino-components/custom-fieldset-form/custom-form-field/custom-form-field.component\";\r\nimport { CustomFieldsetGridComponent } from \"@dino-pages/settings/custom-fieldsets/custom-fieldset-grid/custom-fieldset-grid.component\";\r\nimport { CustomFieldsetListComponent } from \"@dino-pages/settings/custom-fieldsets/custom-fieldset-list/custom-fieldset-list.component\";\r\nimport { CustomFieldsetComponent } from \"@dino-pages/settings/custom-fieldsets/custom-fieldset.component\";\r\nimport { CustomFieldGridComponent } from \"@dino-pages/settings/custom-fields/custom-field-grid/custom-field-grid.component\";\r\nimport { CustomFieldListComponent } from \"@dino-pages/settings/custom-fields/custom-field-list/custom-field-list.component\";\r\nimport { CustomFieldComponent } from \"@dino-pages/settings/custom-fields/custom-field.component\";\r\nimport { CompleteCheckoutButtonComponent } from \"@dino-pages/checkout2/components/complete-checkout-button/complete-checkout-button.component\";\r\nimport { CheckoutAttachmentsComponent } from \"@dino-pages/checkout2/components/checkout-attachments/checkout-attachments.component\";\r\nimport { DistributionCategoryComponent } from \"@dino-pages/settings/distribution-categories/distribution-category.component\";\r\nimport { DistributionCategoryGridComponent } from \"@dino-pages/settings/distribution-categories/distribution-category-grid/distribution-category-grid.component\";\r\nimport { DistributionCategoryListComponent } from \"@dino-pages/settings/distribution-categories/distribution-category-list/distribution-category-list.component\";\r\nimport { DistributionCycleComponent } from \"@dino-pages/settings/distribution-cycles/distribution-cycle.component\";\r\nimport { DistributionCycleGridComponent } from \"@dino-pages/settings/distribution-cycles/distribution-cycle-grid/distribution-cycle-grid.component\";\r\nimport { DistributionCycleListComponent } from \"@dino-pages/settings/distribution-cycles/distribution-cycle-list/distribution-cycle-list.component\";\r\nimport { DistributionCycleSelectDialogComponent } from \"@dino-pages/checkout2/components/distribution-cycle-select-dialog/distribution-cycle-select-dialog.component\";\r\nimport { DistributionDatesGenerateDialogComponent } from \"@dino-pages/settings/distribution-cycles/distribution-dates-generate-dialog/distribution-dates-generate-dialog.component\";\r\nimport { AddressOptionComponent } from \"@dino-pages/settings/options/address-options/address-option.component\";\r\nimport { AddressOptionsGridComponent } from \"@dino-pages/settings/options/address-options/address-option-grid/address-option-grid.component\";\r\nimport { AddressOptionsListComponent } from \"@dino-pages/settings/options/address-options/address-option-list/address-option-list.component\";\r\nimport { DocumentFilesComponent } from \"@dino-pages/documents/components/document-files/document-files.component\";\r\nimport { LastSaleInfoComponent } from \"@dino-pages/product-catalogue2/item-popup/components/last-sale-info/last-sale-info.component\";\r\nimport { DistributionDatesGridComponent } from \"@dino-pages/settings/distribution-cycles/distribution-dates-grid/distribution-dates-grid.component\";\r\nimport { ChangeCustomerConfirmDialogComponent } from \"@dino-pages/sales/components/change-customer-confirm-dialog/change-customer-confirm-dialog.component\";\r\n\r\nexport const _components = [\r\n AdminComponent,\r\n AdminListComponent,\r\n AdminGridComponent,\r\n AssortmentComponent,\r\n CategoriesPanelComponent,\r\n ClassificationComponent,\r\n BreadcrumbComponent,\r\n SearchBarComponent,\r\n DisplayOptionsComponent,\r\n ItemDisplayOptionsComponent,\r\n ItemDisplayOptionsHelper,\r\n FiltersPanelSliderComponent,\r\n ImageComponent,\r\n ContactDialogComponent,\r\n AddressDialogComponent,\r\n ShoppingCartItemsComponent,\r\n ShoppingCartTotalsComponent,\r\n WishlistComponent,\r\n ImageBadgeComponent,\r\n LookupCategoryPipe,\r\n ContactPersonComponent,\r\n CustomerAddressComponent,\r\n LedgersFullscreenComponent,\r\n LedgersWindowComponent,\r\n HomeComponent,\r\n ExternalLinkComponent,\r\n ImageButtonComponent,\r\n PriceComponent,\r\n NumberRangeComponent,\r\n ContactUsDialogComponent,\r\n LedgersGridComponent,\r\n HomeCategoriesComponent,\r\n HomeItemsComponent,\r\n DocumentGridSummaryComponent,\r\n HomeBannerComponent,\r\n GuestAccessComponent,\r\n ExternalQueryDataComponent,\r\n NumberIteratorComponent,\r\n ImpersonatePageComponent,\r\n AccordionComponent,\r\n AdditionalStatusComponent,\r\n TermsOfUseComponent,\r\n AttributeGroupsComponent,\r\n AttributeGroupsGridComponent,\r\n DepositGroupsComponent,\r\n DepositGroupsGridComponent,\r\n ContactUsSubjectsGridComponent,\r\n PriceDisplayOptionComponent,\r\n PriceDisplayOptionListComponent,\r\n PriceDisplayOptionGridComponent,\r\n BusinessOptionsGridComponent,\r\n BusinessOptionsListComponent,\r\n BusinessOptionComponent,\r\n CatalogueOptionComponent,\r\n CatalogueOptionsListComponent,\r\n CatalogueOptionsGridComponent,\r\n CustomerOptionsListComponent,\r\n CustomerOptionsGridComponent,\r\n CustomerOptionComponent,\r\n FilterOptionComponent,\r\n FilterOptionsListComponent,\r\n FilterOptionsGridComponent,\r\n ItemDisplayElementOptionComponent,\r\n ItemDisplayElementOptionsListComponent,\r\n ItemDisplayElementOptionsGridComponent,\r\n ItemDisplayPopupOptionComponent,\r\n ItemDisplayPopupOptionsListComponent,\r\n ItemDisplayPopupOptionsGridComponent,\r\n ItemOptionComponent,\r\n ItemOptionsListComponent,\r\n ItemOptionsGridComponent,\r\n CustomerDetailOptionComponent,\r\n CustomerDetailOptionsListComponent,\r\n CustomerDetailOptionsGridComponent,\r\n PaymentOptionComponent,\r\n PaymentOptionsListComponent,\r\n PaymentOptionsGridComponent,\r\n ShipmentOptionComponent,\r\n ShipmentOptionsListComponent,\r\n ShipmentOptionsGridComponent,\r\n ShipmentMethodsGridComponent,\r\n HomepageOptionComponent,\r\n HomepageOptionsListComponent,\r\n HomepageOptionsGridComponent,\r\n NotificationOptionComponent,\r\n NotificationOptionsListComponent,\r\n NotificationOptionsGridComponent,\r\n DinoSystemOptionComponent,\r\n SystemOptionsListComponent,\r\n SystemOptionsGridComponent,\r\n DimensionConfigurationComponent,\r\n DimensionConfigurationsListComponent,\r\n DimensionConfigurationsGridComponent,\r\n DimensionGridComponent,\r\n DimensionComponent,\r\n DimensionScalesGridComponent,\r\n DimensionValuesGridComponent,\r\n ExternalLinkConfigComponent,\r\n ExternalLinkConfigsGridComponent,\r\n ExternalLinkConfigsListComponent,\r\n ExternalQueryComponent,\r\n ExternalQueriesGridComponent,\r\n ExternalQueriesListComponent,\r\n SpecificationAttributeComponent,\r\n SpecificationAttributesGridComponent,\r\n SpecificationAttributesListComponent,\r\n SpecificationAttributeValuesGridComponent,\r\n TermsOfUseDialogComponent,\r\n CredentialWithSalesSelectorComponent,\r\n ContactUsOptionComponent,\r\n ContactUsOptionsGridComponent,\r\n ContactUsOptionsListComponent,\r\n FeatureOptionComponent,\r\n FeatureOptionsGridComponent,\r\n FeatureOptionsListComponent,\r\n DocumentProcessingListComponent,\r\n DocumentProcessingGridComponent,\r\n DocumentProcessingComponent,\r\n //\r\n ProductCatalogue2Component,\r\n MobileCatalogueComponent,\r\n CategorySelectorComponent,\r\n FloatingCatalogueComponent,\r\n DesktopListComponent,\r\n ListItemComponent2,\r\n GridItemComponent2,\r\n ListItemImageComponent2,\r\n ItemDescriptionComponent,\r\n ItemBadgesComponent,\r\n ItemPrice2Component,\r\n ItemStockComponent,\r\n ItemWishlistComponent,\r\n ItemDeleteComponent,\r\n ItemDimensionsComponent,\r\n ItemQuantityComponent,\r\n DesktopItemPopupComponent,\r\n MobileItemPopupComponent,\r\n SuggestedPromotionsComponent,\r\n SuggestedPromotionsAccordionComponent,\r\n GeneralTabComponent,\r\n ItemMediaComponent,\r\n ItemAttributes2Component,\r\n ItemFiles2Component,\r\n VariationsByDimensionComponent,\r\n SimilarItemsComponent,\r\n QuantityBadgeComponent,\r\n ShoppingWishlistButtonsComponent,\r\n ShoppingCart2Component,\r\n DesktopCheckoutComponent,\r\n MobileCheckoutComponent,\r\n CheckoutNavigatorComponent,\r\n CheckoutCompletedComponent,\r\n CustomerAddressesGridComponent,\r\n CustomerContactPersonsGridComponent,\r\n DocumentStatusComponent,\r\n ItemVariationButtonComponent,\r\n ItemChildrenVisibilityToggleComponent,\r\n CompactItemComponent,\r\n MobileListComponent,\r\n FiltersPanel2Component,\r\n FilterListGroupComponent,\r\n FilterGroupContainerComponent,\r\n GroupOptionsComponent,\r\n SortOptionsComponent,\r\n GeneralTabMobileComponent,\r\n TotalAfterButtonComponent,\r\n CustomerAddressesListComponent,\r\n CustomerContactPersonsListComponent,\r\n CheckoutTermsOfUseDialogComponent,\r\n ChangeCreditCardDialogComponent,\r\n TermsOfUseOptionComponent,\r\n TermsOfUseOptionsListComponent,\r\n TermsOfUseOptionsGridComponent,\r\n AllOrderedItemsGridComponent,\r\n AllOrdersGridComponent,\r\n ItemSearchesGridComponent,\r\n SortGroupAssortmentPanelComponent,\r\n FilterAttributes2Component,\r\n TotalBalanceDinoComponent,\r\n LedgerMobileListComponent,\r\n FormatPriceCurrencyDirective,\r\n FilterAttributes2Component,\r\n PromotionComponent,\r\n PromotionsListComponent,\r\n PromotionsGridComponent,\r\n GiftCardComponent,\r\n GiftCardsListComponent,\r\n GiftCardsGridComponent,\r\n ItemPromotionsComponent,\r\n ItemsPromotionsTabComponent,\r\n SalesPersonOptionComponent,\r\n SalesPersonOptionsListComponent,\r\n SalesPersonOptionsGridComponent,\r\n SelectCustomerDropdownComponent,\r\n ChangeCustomerConfirmDialogComponent,\r\n CouponsComponent,\r\n CodeNameDisplayComponent,\r\n SelectCustomerPopupComponent,\r\n SelectCustomerInfoComponent,\r\n SelectDocumentTypeComponent,\r\n FixedCatalogueComponent,\r\n ShoppingCartCompactComponent,\r\n UltraCompactItemComponent,\r\n ItemEditComponent,\r\n ItemDisableFromPromotion,\r\n ImpersonateDropdownComponent,\r\n BarcodeComponent,\r\n DocumentOptionComponent,\r\n DocumentOptionsListComponent,\r\n DocumentOptionsGridComponent,\r\n ShoppingCartItemEditComponent,\r\n EditSummaryComponent,\r\n ShoppingCartItemEditComponent,\r\n DocumentOptionsGridComponent,\r\n BarcodeComponent,\r\n CustomersListComponent,\r\n CustomersGridComponent,\r\n CustomerDetailsWindowComponent,\r\n CustomerDetailsFullscreenComponent,\r\n CustomersComponent,\r\n ItemActionsComponent,\r\n ItemSalesGridComponent,\r\n LastSalesTabComponent,\r\n PurchaseOrdersTabComponent,\r\n KitItemsTabComponent,\r\n PurchaseOrdersGridComponent,\r\n ItemAvailabilityTabComponent,\r\n ItemAvailabilityGridComponent,\r\n ItemAvailabilityListComponent,\r\n EditShoppingCartItemComponent,\r\n DocumentsComponent,\r\n DocumentListComponent,\r\n DocumentListItemComponent,\r\n DocumentGridComponent,\r\n DocumentComponent,\r\n DocumentDetailsComponent,\r\n DocumentFilterComponent,\r\n CheckoutSignatureComponent,\r\n CheckoutSignatureDialogComponent,\r\n BaseDocumentDialogComponent,\r\n UseBaseDocumentButtonComponent,\r\n CopyToDialogComponent,\r\n RelatedDocumentsDialogComponent,\r\n NumberIterator3Component,\r\n ShoppingCartItemNumbersDialogComponent,\r\n SelectItemNumberDialogComponent,\r\n SeriesOptionComponent,\r\n SeriesOptionsListComponent,\r\n SeriesOptionsGridComponent,\r\n PaymentComponent,\r\n PaymentTypeSelectDialogComponent,\r\n PaymentTypeSelectComponent,\r\n BaseTypePaymentComponent,\r\n WirePaymentComponent,\r\n LaterPaymentComponent,\r\n ChequePaymentComponent,\r\n CashPaymentComponent,\r\n CreditCardPaymentDialogComponent,\r\n CreateReceiptDesktopComponent,\r\n ReceiptGridComponent,\r\n ReceiptComponent,\r\n ReceiptsComponent,\r\n CreateReceiptNavigatorComponent,\r\n ReceiptFilterComponent,\r\n ShareDocumentComponent,\r\n ShareDocumentDialogComponent,\r\n DocumentItemNumbersComponent,\r\n SelectedReceiptDocumentsGridComponent,\r\n ReceiptDocumentToSelectGridComponent,\r\n SelectCustomerMobileListComponent,\r\n CustomerBankDetailsComponent,\r\n DuplicateRepeatDialogComponent,\r\n DuplicateRepeatDocumentGridComponent,\r\n ReceiptListComponent,\r\n ReceiptListItemComponent,\r\n ReceiptRelatedDocumentsComponent,\r\n ReceiptPaymentsComponent,\r\n CreateReceiptMobileComponent,\r\n CreateReceiptAmountsButtonComponent,\r\n SelectedReceiptDocumentsListComponent,\r\n ReceiptDocumentToSelectListComponent,\r\n CreateReceiptLedgerListItemComponent,\r\n PaymentAmountDialogComponent,\r\n EditButtonsComponent,\r\n AgingGridComponent,\r\n AgingListComponent,\r\n AgingFullscreenComponent,\r\n AgingWindowComponent,\r\n DiscountRuleListComponent,\r\n DiscountRuleGridComponent,\r\n DiscountRuleComponent,\r\n DiscountPermissionListComponent,\r\n DiscountPermissionGridComponent,\r\n DiscountPermissionComponent,\r\n PermissionBrandGridComponent,\r\n PermissionVendorGridComponent,\r\n PermissionManufacturerGridComponent,\r\n PermissionItemGridComponent,\r\n PermissionCategoryGridComponent,\r\n SalePeriodListComponent,\r\n SalePeriodGridComponent,\r\n SalePeriodComponent,\r\n SalePeriodPartGridComponent,\r\n SaleTargetListComponent,\r\n SaleTargetGridComponent,\r\n SaleTargetComponent,\r\n SaleTargetLineGridComponent,\r\n SalesSummaryComponent,\r\n AgingCustomersComponent,\r\n AgingCustomersGridComponent,\r\n AgingCustomersListComponent,\r\n CustomerFilterComponent,\r\n CitySelectorComponent,\r\n CustomFieldComponent,\r\n CustomFieldListComponent,\r\n CustomFieldGridComponent,\r\n CustomFieldsetComponent,\r\n CustomFieldsetListComponent,\r\n CustomFieldsetGridComponent,\r\n CustomFormFieldComponent,\r\n CustomFieldsetFormComponent,\r\n CustomFormFieldEditComponent,\r\n CustomItemFieldComponent,\r\n BarcodeExternalDialogComponent,\r\n SalesDataGridComponent,\r\n SalesTargetFilterComponent,\r\n SaleTargetPerformanceComponent,\r\n TargetPerformanceGridComponent,\r\n SalesDataComponent,\r\n ShoppingCartEditModeWarningDialogComponent,\r\n DashboardFilterComponent,\r\n DashboardActiveUsersComponent,\r\n DocumentsBySourceComponent,\r\n DashboardOpenDocumentsComponent,\r\n DashboardActiveCustomersComponent,\r\n DashboardInactiveCustomersComponent,\r\n DashboardDocumentsFromDinoComponent,\r\n DashboardActiveCustomersFromDinoComponent,\r\n DashboardTop10CustomersComponent,\r\n DashboardTop10ItemsComponent,\r\n DashboardTargetsComponent,\r\n SaleAnalysisComponent,\r\n LatestDocumentsComponent,\r\n LatestDocumentsListComponent,\r\n LatestDocumentsGridComponent,\r\n DashboardBalanceComponent,\r\n DashboardBalanceLateComponent,\r\n DashboardWindowComponent,\r\n DashboardFullscreenComponent,\r\n CompleteCheckoutButtonComponent,\r\n CheckoutAttachmentsComponent,\r\n DistributionCategoryComponent,\r\n DistributionCategoryGridComponent,\r\n DistributionCategoryListComponent,\r\n DistributionCycleComponent,\r\n DistributionCycleGridComponent,\r\n DistributionCycleListComponent,\r\n DistributionCycleSelectDialogComponent,\r\n DistributionDatesGenerateDialogComponent,\r\n AddressOptionComponent,\r\n AddressOptionsGridComponent,\r\n AddressOptionsListComponent,\r\n\r\n DocumentFilesComponent,\r\n\tLastSaleInfoComponent,\r\n DistributionDatesGridComponent\r\n];","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class AddonEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Addon\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ExternalQueryField } from './../entities/externalquery.entity';\r\n@Injectable()\r\nexport class ExternalQueryFieldEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ExternalQueryField\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ImageResult } from './../entities/imageresult.entity';\r\nimport { ImageTypeEnums } from './../enums';\r\nimport { ImageSizeEnums } from './../enums';\r\n@Injectable()\r\nexport class ImageEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Image\", api);}\r\n\t\r\n\r\n public GetImage(EntryID: number, ImageType: ImageTypeEnums, ImageSize: ImageSizeEnums, Index: number, Version: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetImage', {EntryID: EntryID, ImageType: ImageType, ImageSize: ImageSize, Index: Index, Version: Version} );\r\n }\r\n\r\n public GetImage2(EntryID: number, ImageType: ImageTypeEnums, ImageSize: ImageSizeEnums, Index: number, Version: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetImage2', {EntryID: EntryID, ImageType: ImageType, ImageSize: ImageSize, Index: Index, Version: Version} );\r\n }\r\n}\r\n\r\n","import { AccountEndpoint } from \"@dino-proxy/endpoints/account.endpoint\";\r\nimport { AddonEndpoint } from \"@dino-proxy/endpoints/addon.endpoint\";\r\nimport { AddressOptionEndpoint } from \"@dino-proxy/endpoints/addressoption.endpoint\";\r\nimport { AdminEndpoint } from \"@dino-proxy/endpoints/admin.endpoint\";\r\nimport { AgingCustomerReportEndpoint } from \"@dino-proxy/endpoints/agingcustomerreport.endpoint\";\r\nimport { AgingReportEndpoint } from \"@dino-proxy/endpoints/agingreport.endpoint\";\r\nimport { AssortmentEndpoint } from \"@dino-proxy/endpoints/assortment.endpoint\";\r\nimport { AttributeGroupEndpoint } from \"@dino-proxy/endpoints/attributegroup.endpoint\";\r\nimport { BankEndpoint } from \"@dino-proxy/endpoints/bank.endpoint\";\r\nimport { BrandEndpoint } from \"@dino-proxy/endpoints/brand.endpoint\";\r\nimport { BusinessOptionEndpoint } from \"@dino-proxy/endpoints/businessoption.endpoint\";\r\nimport { CatalogueOptionEndpoint } from \"@dino-proxy/endpoints/catalogueoption.endpoint\";\r\nimport { CategoryEndpoint } from \"@dino-proxy/endpoints/category.endpoint\";\r\nimport { ContactPersonEndpoint } from \"@dino-proxy/endpoints/contactperson.endpoint\";\r\nimport { ContactUsOptionEndpoint } from \"@dino-proxy/endpoints/contactusoption.endpoint\";\r\nimport { ContactUsSubjectEndpoint } from \"@dino-proxy/endpoints/contactussubject.endpoint\";\r\nimport { CountryEndpoint } from \"@dino-proxy/endpoints/country.endpoint\";\r\nimport { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\nimport { CustomerAddressEndpoint } from \"@dino-proxy/endpoints/customeraddress.endpoint\";\r\nimport { CustomerDetailOptionEndpoint } from \"@dino-proxy/endpoints/customerdetailoption.endpoint\";\r\nimport { CustomerGroupEndpoint } from \"@dino-proxy/endpoints/customergroup.endpoint\";\r\nimport { CustomerOptionEndpoint } from \"@dino-proxy/endpoints/customeroption.endpoint\";\r\nimport { CustomFieldEndpoint } from \"@dino-proxy/endpoints/customfield.endpoint\";\r\nimport { CustomFieldsetEndpoint } from \"@dino-proxy/endpoints/customfieldset.endpoint\";\r\nimport { DashboardEndpoint } from \"@dino-proxy/endpoints/dashboard.endpoint\";\r\nimport { DepositGroupEndpoint } from \"@dino-proxy/endpoints/depositgroup.endpoint\";\r\nimport { DimensionEndpoint } from \"@dino-proxy/endpoints/dimension.endpoint\";\r\nimport { DimensionConfigurationEndpoint } from \"@dino-proxy/endpoints/dimensionconfiguration.endpoint\";\r\nimport { DimensionScaleEndpoint } from \"@dino-proxy/endpoints/dimensionscale.endpoint\";\r\nimport { DimensionValueEndpoint } from \"@dino-proxy/endpoints/dimensionvalue.endpoint\";\r\nimport { DiscountPermissionEndpoint } from \"@dino-proxy/endpoints/discountpermission.endpoint\";\r\nimport { DiscountRuleEndpoint } from \"@dino-proxy/endpoints/discountrule.endpoint \";\r\nimport { DistributionCategoryEndpoint } from \"@dino-proxy/endpoints/distributioncategory.endpoint\";\r\nimport { DistributionCycleEndpoint } from \"@dino-proxy/endpoints/distributioncycle.endpoint\";\r\nimport { DocumentEndpoint } from \"@dino-proxy/endpoints/document.endpoint\";\r\nimport { DocumentOptionEndpoint } from \"@dino-proxy/endpoints/documentoption.endpoint\";\r\nimport { DocumentProcessingEndpoint } from \"@dino-proxy/endpoints/documentprocessing.endpoint\";\r\nimport { ExternalLinkEndpoint } from \"@dino-proxy/endpoints/externallink.endpoint\";\r\nimport { ExternalQueryEndpoint } from \"@dino-proxy/endpoints/externalquery.endpoint\";\r\nimport { ExternalQueryFieldEndpoint } from \"@dino-proxy/endpoints/externalqueryfield.endpoint\";\r\nimport { FeatureOptionEndpoint } from \"@dino-proxy/endpoints/featureoption.endpoint\";\r\nimport { FilterEndpoint } from \"@dino-proxy/endpoints/filter.endpoint\";\r\nimport { FilterAttributeEndpoint } from \"@dino-proxy/endpoints/filterattribute.endpoint\";\r\nimport { FilterOptionEndpoint } from \"@dino-proxy/endpoints/filteroption.endpoint\";\r\nimport { GiftCardEndpoint } from \"@dino-proxy/endpoints/giftcard.endpoint\";\r\nimport { HomepageOptionEndpoint } from \"@dino-proxy/endpoints/homepageoption.endpoint\";\r\nimport { ImageEndpoint } from \"@dino-proxy/endpoints/image.endpoint\";\r\nimport { ItemAttributesEndpoint } from \"@dino-proxy/endpoints/itemattributes.endpoint\";\r\nimport { ItemDisplayElementOptionEndpoint } from \"@dino-proxy/endpoints/itemdisplayelementoption.endpoint\";\r\nimport { ItemDisplayPopupOptionEndpoint } from \"@dino-proxy/endpoints/itemdisplaypopupoption.endpoint\";\r\nimport { ItemOptionEndpoint } from \"@dino-proxy/endpoints/itemoption.endpoint\";\r\nimport { ItemsEndpoint } from \"@dino-proxy/endpoints/items.endpoint\";\r\nimport { ItemSaleEndpoint } from \"@dino-proxy/endpoints/itemsale.endpoint\";\r\nimport { ItemSearchEndpoint } from \"@dino-proxy/endpoints/itemsearch.endpoint\";\r\nimport { LedgerEndpoint } from \"@dino-proxy/endpoints/ledger.endpoint\";\r\nimport { ManufacturerEndpoint } from \"@dino-proxy/endpoints/manufacturer.endpoint\";\r\nimport { NotificationOptionEndpoint } from \"@dino-proxy/endpoints/notificationoption.endpoint\";\r\nimport { PaymentOptionEndpoint } from \"@dino-proxy/endpoints/paymentoption.endpoint\";\r\nimport { PaymentTermEndpoint } from \"@dino-proxy/endpoints/paymentterm.endpoint\";\r\nimport { PriceDisplayOptionEndpoint } from \"@dino-proxy/endpoints/pricedisplayoption.endpoint\";\r\nimport { PromotionEndpoint } from \"@dino-proxy/endpoints/promotion.endpoint\";\r\nimport { ReceiptEndpoint } from \"@dino-proxy/endpoints/receipt.endpoint\";\r\nimport { SaleDataEndpoint } from \"@dino-proxy/endpoints/saledata.endpoint\";\r\nimport { SalePeriodEndpoint } from \"@dino-proxy/endpoints/saleperiod.endpoint\";\r\nimport { SalesPersonEndpoint } from \"@dino-proxy/endpoints/salesperson.endpoint\";\r\nimport { SalesPersonOptionEndpoint } from \"@dino-proxy/endpoints/salespersonoption.endpoint\";\r\nimport { SaleTargetEndpoint } from \"@dino-proxy/endpoints/saletarget.endpoint\";\r\nimport { SaleTargetPerformanceEndpoint } from \"@dino-proxy/endpoints/saletargetperformance.endpoint\";\r\nimport { SeriesEndpoint } from \"@dino-proxy/endpoints/series.endpoint\";\r\nimport { SeriesOptionEndpoint } from \"@dino-proxy/endpoints/seriesoption.endpoint\";\r\nimport { ShipmentMethodEndpoint } from \"@dino-proxy/endpoints/shipmentmethod.endpoint\";\r\nimport { ShipmentOptionEndpoint } from \"@dino-proxy/endpoints/shipmentoption.endpoint\";\r\nimport { ShoppingCartEndpoint } from \"@dino-proxy/endpoints/shoppingcart.endpoint\";\r\nimport { ShoppingPaymentEndpoint } from \"@dino-proxy/endpoints/shoppingpayment.endpoint\";\r\nimport { SpecificationAttributeEndpoint } from \"@dino-proxy/endpoints/specificationattribute.endpoint\";\r\nimport { SpecificationAttributeValueEndpoint } from \"@dino-proxy/endpoints/specificationattributevalue.endpoint\";\r\nimport { StateEndpoint } from \"@dino-proxy/endpoints/state.endpoint\";\r\nimport { SystemOptionEndpoint } from \"@dino-proxy/endpoints/systemoption.endpoint\";\r\nimport { TermsOfUseOptionEndpoint } from \"@dino-proxy/endpoints/termsofuseoption.endpoint\";\r\nimport { VatGroupEndpoint } from \"@dino-proxy/endpoints/vatgroup.endpoint\";\r\nimport { VendorEndpoint } from \"@dino-proxy/endpoints/vendor.endpoint\";\r\nimport { WarehouseEndpoint } from \"@dino-proxy/endpoints/warehouse.endpoint\";\r\nimport { WishlistEndpoint } from \"@dino-proxy/endpoints/wishlist.endpoint\";\r\n\r\nexport const _endpoints = [\r\n AdminEndpoint,\r\n AssortmentEndpoint,\r\n CustomerOptionEndpoint,\r\n CategoryEndpoint,\r\n CustomerGroupEndpoint,\r\n PaymentTermEndpoint,\r\n BrandEndpoint,\r\n VendorEndpoint,\r\n ManufacturerEndpoint,\r\n FilterEndpoint,\r\n FilterAttributeEndpoint,\r\n ItemsEndpoint,\r\n ItemOptionEndpoint,\r\n ItemAttributesEndpoint,\r\n ImageEndpoint,\r\n WishlistEndpoint,\r\n ShoppingCartEndpoint,\r\n ContactPersonEndpoint,\r\n CustomerAddressEndpoint,\r\n StateEndpoint,\r\n CountryEndpoint,\r\n PriceDisplayOptionEndpoint,\r\n CustomerEndpoint,\r\n LedgerEndpoint,\r\n ExternalLinkEndpoint,\r\n DimensionValueEndpoint,\r\n AddonEndpoint,\r\n AttributeGroupEndpoint,\r\n DepositGroupEndpoint,\r\n ContactUsSubjectEndpoint,\r\n BusinessOptionEndpoint,\r\n CatalogueOptionEndpoint,\r\n FilterOptionEndpoint,\r\n ItemDisplayElementOptionEndpoint,\r\n ItemDisplayPopupOptionEndpoint,\r\n CustomerDetailOptionEndpoint,\r\n PaymentOptionEndpoint,\r\n ShipmentOptionEndpoint,\r\n ShipmentMethodEndpoint,\r\n HomepageOptionEndpoint,\r\n NotificationOptionEndpoint,\r\n SystemOptionEndpoint,\r\n DimensionConfigurationEndpoint,\r\n DimensionEndpoint,\r\n DimensionScaleEndpoint,\r\n ExternalLinkEndpoint,\r\n ExternalQueryEndpoint,\r\n ExternalQueryFieldEndpoint,\r\n SpecificationAttributeEndpoint,\r\n SpecificationAttributeValueEndpoint,\r\n ContactUsOptionEndpoint,\r\n FeatureOptionEndpoint,\r\n TermsOfUseOptionEndpoint,\r\n ItemSearchEndpoint,\r\n PromotionEndpoint,\r\n GiftCardEndpoint,\r\n SalesPersonEndpoint,\r\n SalesPersonOptionEndpoint,\r\n DocumentOptionEndpoint,\r\n WarehouseEndpoint,\r\n DocumentProcessingEndpoint,\r\n DocumentEndpoint,\r\n VatGroupEndpoint,\r\n SeriesEndpoint,\r\n SeriesOptionEndpoint,\r\n ShoppingPaymentEndpoint,\r\n BankEndpoint,\r\n AccountEndpoint,\r\n ReceiptEndpoint,\r\n ItemSaleEndpoint,\r\n AgingReportEndpoint,\r\n DiscountPermissionEndpoint,\r\n DiscountRuleEndpoint,\r\n CustomFieldEndpoint,\r\n CustomFieldsetEndpoint,\r\n SalePeriodEndpoint,\r\n SaleTargetEndpoint,\r\n AgingCustomerReportEndpoint,\r\n SaleDataEndpoint,\r\n SaleTargetPerformanceEndpoint,\r\n DashboardEndpoint,\r\n DistributionCategoryEndpoint,\r\n DistributionCycleEndpoint,\r\n AddressOptionEndpoint\r\n];","import { Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DesktopCheckoutComponent } from \"../desktop/desktop-checkout.component\";\r\nimport { MobileCheckoutComponent } from \"../mobile/mobile-checkout.component\";\r\n\r\n@Injectable()\r\nexport class CanDeactivateCheckout2 implements CanDeactivate {\r\n constructor() { }\r\n\r\n canDeactivate(\r\n component: DesktopCheckoutComponent | MobileCheckoutComponent,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState: RouterStateSnapshot\r\n ): Observable | Promise | boolean | UrlTree {\r\n\r\n component.OnPreSaveDetails();\r\n\r\n return true;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable, of, switchMap } from 'rxjs';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { UserInfo } from '@dino-proxy/entities/userinfo.entity';\r\nimport { EnumCredentialTypes } from '@dino-proxy/enums';\r\nimport { UiService } from '@m4u-angular/core/framework/ui.service';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { RestrictedNavigationService } from '@dino-services/restricted-navigation.service';\r\n\r\n// Used to compare route with actual browser route\r\n// Example:\r\n// Path route: 'pages/catalogueN'\r\n// Actual route: 'pages/X_Dino_catalogueN'\r\nconst ROUTE_ADDITIONAL_PATH_LENGTH: number = 7; \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CredentialTypeGuard implements CanActivate {\r\n constructor(\r\n private customerService: CustomerService,\r\n private navigator: NavigatorService,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService,\r\n private uiService: UiService,\r\n private resourcesService: ResourcesService,\r\n private restrictedNavigationService: RestrictedNavigationService\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n const allowedRoles: EnumCredentialTypes[] = route.data['allowedCredentialTypes'] || [];\r\n const isSales = this.customerService.IsCurrentUserSalesPerson();\r\n const isAdmin = this.customerService.IsCurrentUserAdmin();\r\n if (this.isRouteAllowedForCurrentUser(allowedRoles, isSales, isAdmin) \r\n && this.restrictedNavigationService.CanNavigate(\r\n `pages/${route.routeConfig.path.slice(ROUTE_ADDITIONAL_PATH_LENGTH,route.routeConfig.path.length)}`,\r\n isAdmin,\r\n isSales)) {\r\n return of(true);\r\n } else {\r\n const userInfo = this.sessionService.UserInfoDict['Dino'] as UserInfo;\r\n return this.appConfigService.AppConfig.OnGetDefaultRouteParams(userInfo).pipe(\r\n switchMap((response) => {\r\n this.uiService.WarningMessage(this.resourcesService.RC('lblRedirectProhibited', 'Dino', state.url), undefined, 5000, true);\r\n this.navigator.Navigate([response.Route], null, null);\r\n return of(false);\r\n })\r\n );\r\n }\r\n }\r\n\r\n private isRouteAllowedForCurrentUser(allowedRoles: EnumCredentialTypes[], isSales: boolean, isAdmin: boolean): boolean {\r\n if (allowedRoles.includes(EnumCredentialTypes.Admin) && isAdmin) return true;\r\n if (allowedRoles.includes(EnumCredentialTypes.SalePerson) && isSales) return true;\r\n if (allowedRoles.includes(EnumCredentialTypes.User) && !isSales && !isAdmin) return true;\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from \"@angular/router\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { AppConfigService } from \"@m4u-angular/configuration/app.config.service\";\r\nimport { LoginGuard } from \"@m4u-angular/core/framework/login.guard\";\r\nimport { LoginService } from \"@m4u-angular/core/framework/login.service\";\r\nimport { NavigatorService } from \"@m4u-angular/core/framework/navigator.service\";\r\nimport { ResourcesService } from \"@m4u-angular/core/framework/resources.service\";\r\nimport { SessionService } from \"@m4u-angular/core/framework/session.service\";\r\nimport { UiService } from \"@m4u-angular/core/framework/ui.service\";\r\nimport { Observable, of, switchMap } from \"rxjs\";\r\nimport { CredentialTypeGuard } from \"./credential-type.guard\";\r\n\r\n@Injectable()\r\nexport class AuthGuard implements CanActivate {\r\n constructor(\r\n private customerService: CustomerService,\r\n private navigator: NavigatorService,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService,\r\n private uiService: UiService,\r\n private resourcesService: ResourcesService,\r\n private loginService: LoginService,\r\n private restrictedNavigationService: RestrictedNavigationService\r\n ) { }\r\n\r\n public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n let loginGuard = new LoginGuard(\r\n this.sessionService,\r\n this.navigator,\r\n this.loginService);\r\n\r\n let credentialGuard = new CredentialTypeGuard(\r\n this.customerService,\r\n this.navigator,\r\n this.sessionService,\r\n this.appConfigService,\r\n this.uiService,\r\n this.resourcesService,\r\n this.restrictedNavigationService);\r\n\r\n return loginGuard.canActivate(route, state).pipe(switchMap(result => {\r\n if (result) {\r\n return credentialGuard.canActivate(route, state);\r\n } else {\r\n return of(false);\r\n }\r\n }));\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DeviceGuard implements CanActivate {\r\n constructor(\r\n private screenService: ScreenService,\r\n private router: Router,\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n const isMobile = this.screenService.IsMobile();\r\n\r\n if (isMobile && state.url.includes('desktop')) {\r\n const url = state.url.replace('desktop', 'mobile');\r\n this.router.navigateByUrl(url);\r\n return of(false);\r\n }\r\n\r\n if (!isMobile && state.url.includes('mobile')) {\r\n const url = state.url.replace('mobile', 'desktop');\r\n this.router.navigateByUrl(url);\r\n return of(false);\r\n } \r\n \r\n return of(true);\r\n }\r\n}\r\n","import { CanDeactivateCheckout2 } from \"@dino-pages/checkout2/services/can-deactivate-checkout2\";\r\nimport { CategoriesService } from \"@dino-services/categories.service\";\r\nimport { CustomerOptionService } from \"@dino-services/customer-option.service\";\r\nimport { CustomerService } from \"@dino-services/customer.service\";\r\nimport { DocumentService } from \"@dino-services/document.service\";\r\nimport { ImageService } from \"@dino-services/image.service\";\r\nimport { ItemOptionService } from \"@dino-services/item-option.service\";\r\nimport { ItemsFilterService } from \"@dino-services/items-filter.service\";\r\nimport { ItemsService } from \"@dino-services/items.service\";\r\nimport { RestrictedNavigationService } from \"@dino-services/restricted-navigation.service\";\r\nimport { ShoppingCartService } from \"@dino-services/shopping-cart.service\";\r\nimport { SidebarsService } from \"@dino-services/sidebars.service\";\r\nimport { UiComponentService } from \"@dino-services/ui-component.service\";\r\nimport { AuthGuard } from \"../guards/auth.guard\";\r\nimport { CredentialTypeGuard } from \"../guards/credential-type.guard\";\r\nimport { DeviceGuard } from \"../guards/device.guard\";\r\n\r\nexport const _services = [\r\n AuthGuard,\r\n CredentialTypeGuard,\r\n DeviceGuard,\r\n CustomerOptionService,\r\n ItemsFilterService,\r\n ItemOptionService,\r\n ImageService,\r\n ItemsService,\r\n CategoriesService,\r\n CanDeactivateCheckout2,\r\n SidebarsService,\r\n CustomerService,\r\n ShoppingCartService,\r\n DocumentService,\r\n UiComponentService,\r\n RestrictedNavigationService\r\n];","import { Routes } from \"@angular/router\";\r\nimport { GetConfigPath, ROUTE_PATHS } from \"@dino-classes/route-paths\";\r\n// import { AdminDashboardComponent } from \"@dino-pages/admin-dashboard/admin-dashboard.component\";\r\nimport { AgingCustomersComponent } from \"@dino-pages/aging-customers/aging-customers.component\";\r\nimport { AgingFullscreenComponent } from \"@dino-pages/aging/aging-fullscreen.component\";\r\nimport { AgingWindowComponent } from \"@dino-pages/aging/aging-window.component\";\r\nimport { DesktopCheckoutComponent } from \"@dino-pages/checkout2/desktop/desktop-checkout.component\";\r\nimport { MobileCheckoutComponent } from \"@dino-pages/checkout2/mobile/mobile-checkout.component\";\r\nimport { EditShoppingCartItemComponent } from \"@dino-pages/checkout2/pages/edit-shopping-cart-item/edit-shopping-cart-item.component\";\r\nimport { CanDeactivateCheckout2 } from \"@dino-pages/checkout2/services/can-deactivate-checkout2\";\r\nimport { ImpersonatePageComponent } from \"@dino-pages/credential-selector/impersonate-page.component\";\r\nimport { CustomerBankDetailsComponent } from \"@dino-pages/customers/bank-details/customer-bank-details.component\";\r\nimport { CustomerDetailsFullscreenComponent } from \"@dino-pages/customers/customer-details/customer-details-fullscreen.component\";\r\nimport { CustomerDetailsWindowComponent } from \"@dino-pages/customers/customer-details/customer-details-window.component\";\r\nimport { CustomersComponent } from \"@dino-pages/customers/customers.component\";\r\nimport { DashboardFullscreenComponent } from \"@dino-pages/dashboard2/dashboard-fullscreen.component\";\r\nimport { DashboardWindowComponent } from \"@dino-pages/dashboard2/dashboard-window.component\";\r\nimport { DocumentProcessingListComponent } from \"@dino-pages/document-processing/document-processing-list/document-processing-list.component\";\r\nimport { DocumentProcessingComponent } from \"@dino-pages/document-processing/document-processing.component\";\r\nimport { DocumentComponent } from \"@dino-pages/documents/document/document.component\";\r\nimport { DocumentsComponent } from \"@dino-pages/documents/documents.component\";\r\nimport { ExternalLinkComponent } from \"@dino-pages/external-link/external-link.component\";\r\nimport { ExternalQueryDataComponent } from \"@dino-pages/external-query-data/external-query-data.component\";\r\nimport { HomeComponent } from \"@dino-pages/home/home.component\";\r\nimport { LedgersFullscreenComponent } from \"@dino-pages/ledgers/ledgers-fullscreen.component\";\r\nimport { LedgersWindowComponent } from \"@dino-pages/ledgers/ledgers-window.component\";\r\nimport { DesktopItemPopupComponent } from \"@dino-pages/product-catalogue2/item-popup/desktop/desktop-item-popup.component\";\r\nimport { MobileItemPopupComponent } from \"@dino-pages/product-catalogue2/item-popup/mobile/mobile-item-popup.component\";\r\nimport { ProductCatalogue2Component } from \"@dino-pages/product-catalogue2/product-catalogue2.component\";\r\nimport { CreateReceiptDesktopComponent } from \"@dino-pages/receipts/create-receipt/desktop/create-receipt-desktop.component\";\r\nimport { CreateReceiptMobileComponent } from \"@dino-pages/receipts/create-receipt/mobile/create-receipt-mobile.component\";\r\nimport { ReceiptComponent } from \"@dino-pages/receipts/receipt/receipt.component\";\r\nimport { ReceiptsComponent } from \"@dino-pages/receipts/receipts.component\";\r\nimport { SaleTargetPerformanceComponent } from \"@dino-pages/sales/sale-targets/sale-target-performance/sale-target-performance.component\";\r\nimport { SalesDataComponent } from \"@dino-pages/sales/sale-targets/sales-data/sales-data.component\";\r\nimport { SalesSummaryComponent } from \"@dino-pages/sales/sale-targets/sales-summary/sales-summary.component\";\r\nimport { AdminComponent } from \"@dino-pages/settings/admins/admin.component\";\r\nimport { AdminListComponent } from \"@dino-pages/settings/admins/list/admin-list.component\";\r\nimport { AttributeGroupsComponent } from \"@dino-pages/settings/attribute-groups/attribute-groups.component\";\r\nimport { CustomFieldListComponent } from \"@dino-pages/settings/custom-fields/custom-field-list/custom-field-list.component\";\r\nimport { CustomFieldComponent } from \"@dino-pages/settings/custom-fields/custom-field.component\";\r\nimport { CustomFieldsetListComponent } from \"@dino-pages/settings/custom-fieldsets/custom-fieldset-list/custom-fieldset-list.component\";\r\nimport { CustomFieldsetComponent } from \"@dino-pages/settings/custom-fieldsets/custom-fieldset.component\";\r\nimport { DepositGroupsComponent } from \"@dino-pages/settings/deposit-groups/deposit-groups.component\";\r\nimport { DistributionCategoryListComponent } from \"@dino-pages/settings/distribution-categories/distribution-category-list/distribution-category-list.component\";\r\nimport { DistributionCategoryComponent } from \"@dino-pages/settings/distribution-categories/distribution-category.component\";\r\nimport { DistributionCycleListComponent } from \"@dino-pages/settings/distribution-cycles/distribution-cycle-list/distribution-cycle-list.component\";\r\nimport { DistributionCycleComponent } from \"@dino-pages/settings/distribution-cycles/distribution-cycle.component\";\r\nimport { ExternalLinkConfigComponent } from \"@dino-pages/settings/external-links-config/external-link-config.component\";\r\nimport { ExternalLinkConfigsListComponent } from \"@dino-pages/settings/external-links-config/external-link-config/external-link-config-list.component\";\r\nimport { ExternalQueriesListComponent } from \"@dino-pages/settings/external-queries/external-query-list/external-query-list.component\";\r\nimport { ExternalQueryComponent } from \"@dino-pages/settings/external-queries/external-query.component\";\r\nimport { BusinessOptionsListComponent } from \"@dino-pages/settings/options/business-options/business-option-list/business-option-list.component\";\r\nimport { BusinessOptionComponent } from \"@dino-pages/settings/options/business-options/business-option.component\";\r\nimport { CatalogueOptionsListComponent } from \"@dino-pages/settings/options/catalogue-options/catalogue-option-list/catalogue-option-list.component\";\r\nimport { CatalogueOptionComponent } from \"@dino-pages/settings/options/catalogue-options/catalogue-option.component\";\r\nimport { ContactUsOptionsListComponent } from \"@dino-pages/settings/options/contact-us-options/contact-us-option-list/contact-us-option-list.component\";\r\nimport { ContactUsOptionComponent } from \"@dino-pages/settings/options/contact-us-options/contact-us-option.component\";\r\nimport { CustomerDetailOptionsListComponent } from \"@dino-pages/settings/options/customer-detail-options/customer-detail-option-list/customer-detail-option-list.component\";\r\nimport { CustomerDetailOptionComponent } from \"@dino-pages/settings/options/customer-detail-options/customer-detail-option.component\";\r\nimport { CustomerOptionsListComponent } from \"@dino-pages/settings/options/customer-options/customer-option-list/customer-option-list.component\";\r\nimport { CustomerOptionComponent } from \"@dino-pages/settings/options/customer-options/customer-option.component\";\r\nimport { DimensionConfigurationsListComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-configuration-list/dimension-configuration-list.component\";\r\nimport { DimensionConfigurationComponent } from \"@dino-pages/settings/options/dimension-configurations/dimension-configuration.component\";\r\nimport { DimensionComponent } from \"@dino-pages/settings/options/dimension-configurations/dimensions/dimension.component\";\r\nimport { DiscountPermissionListComponent } from \"@dino-pages/settings/options/discount-permissions/discount-permission-list/discount-permission-list.component\";\r\nimport { DiscountPermissionComponent } from \"@dino-pages/settings/options/discount-permissions/discount-permission.component\";\r\nimport { DiscountRuleListComponent } from \"@dino-pages/settings/options/discount-rules/discount-rule-list/discount-rule-list.component\";\r\nimport { DiscountRuleComponent } from \"@dino-pages/settings/options/discount-rules/discount-rule.component\";\r\nimport { DocumentOptionsListComponent } from \"@dino-pages/settings/options/document-options/document-option-list/document-option-list.component\";\r\nimport { DocumentOptionComponent } from \"@dino-pages/settings/options/document-options/document-option.component\";\r\nimport { FeatureOptionsListComponent } from \"@dino-pages/settings/options/feature-options/feature-option-list/feature-option-list.component\";\r\nimport { FeatureOptionComponent } from \"@dino-pages/settings/options/feature-options/feature-option.component\";\r\nimport { FilterOptionsListComponent } from \"@dino-pages/settings/options/filter-options/filter-option-list/filter-option-list.component\";\r\nimport { FilterOptionComponent } from \"@dino-pages/settings/options/filter-options/filter-option.component\";\r\nimport { GiftCardComponent } from \"@dino-pages/settings/options/gift-cards/gift-card.component\";\r\nimport { GiftCardsListComponent } from \"@dino-pages/settings/options/gift-cards/gift-cards-list/gift-cards-list.component\";\r\nimport { HomepageOptionsListComponent } from \"@dino-pages/settings/options/homepage-options/homepage-option-list/homepage-option-list.component\";\r\nimport { HomepageOptionComponent } from \"@dino-pages/settings/options/homepage-options/homepage-option.component\";\r\nimport { ItemDisplayElementOptionsListComponent } from \"@dino-pages/settings/options/item-display-element-options/item-display-element-option-list/item-display-element-option-list.component\";\r\nimport { ItemDisplayElementOptionComponent } from \"@dino-pages/settings/options/item-display-element-options/item-display-element-option.component\";\r\nimport { ItemDisplayPopupOptionsListComponent } from \"@dino-pages/settings/options/item-display-popup-options/item-display-popup-option-list/item-display-popup-option-list.component\";\r\nimport { ItemDisplayPopupOptionComponent } from \"@dino-pages/settings/options/item-display-popup-options/item-display-popup-option.component\";\r\nimport { ItemOptionsListComponent } from \"@dino-pages/settings/options/item-options/item-option-list/item-option-list.component\";\r\nimport { ItemOptionComponent } from \"@dino-pages/settings/options/item-options/item-option.component\";\r\nimport { NotificationOptionsListComponent } from \"@dino-pages/settings/options/notification-options/notification-option-list/notification-option-list.component\";\r\nimport { NotificationOptionComponent } from \"@dino-pages/settings/options/notification-options/notification-option.component\";\r\nimport { PaymentOptionsListComponent } from \"@dino-pages/settings/options/payment-options/payment-option-list/payment-option-list.component\";\r\nimport { PaymentOptionComponent } from \"@dino-pages/settings/options/payment-options/payment-option.component\";\r\nimport { PriceDisplayOptionComponent } from \"@dino-pages/settings/options/price-display-options/price-display-option.component\";\r\nimport { PriceDisplayOptionListComponent } from \"@dino-pages/settings/options/price-display-options/price-display-options-list/price-display-option-list.component\";\r\nimport { PromotionComponent } from \"@dino-pages/settings/options/promotions/promotion.component\";\r\nimport { PromotionsListComponent } from \"@dino-pages/settings/options/promotions/promotions-list/promotions-list.component\";\r\nimport { SalePeriodListComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period-list/sale-period-list.component\";\r\nimport { SalePeriodComponent } from \"@dino-pages/settings/options/sale-targets/sale-periods/sale-period.component\";\r\nimport { SaleTargetListComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target-list/sale-target-list.component\";\r\nimport { SaleTargetComponent } from \"@dino-pages/settings/options/sale-targets/sale-targets/sale-target.component\";\r\nimport { SalesPersonOptionsListComponent } from \"@dino-pages/settings/options/sales-person-options/sales-person-option-list/sales-person-option-list.component\";\r\nimport { SalesPersonOptionComponent } from \"@dino-pages/settings/options/sales-person-options/sales-person-option.component\";\r\nimport { SeriesOptionsListComponent } from \"@dino-pages/settings/options/series-options/series-option-list/series-option-list.component\";\r\nimport { SeriesOptionComponent } from \"@dino-pages/settings/options/series-options/series-option.component\";\r\nimport { ShipmentOptionsListComponent } from \"@dino-pages/settings/options/shipment-options/shipment-option-list/shipment-option-list.component\";\r\nimport { ShipmentOptionComponent } from \"@dino-pages/settings/options/shipment-options/shipment-option.component\";\r\nimport { SystemOptionsListComponent } from \"@dino-pages/settings/options/system-options/system-option-list/system-option-list.component\";\r\nimport { DinoSystemOptionComponent } from \"@dino-pages/settings/options/system-options/system-option.component\";\r\nimport { TermsOfUseOptionsListComponent } from \"@dino-pages/settings/options/terms-of-use-options/terms-of-use-option-list/terms-of-use-option-list.component\";\r\nimport { TermsOfUseOptionComponent } from \"@dino-pages/settings/options/terms-of-use-options/terms-of-use-option.component\";\r\nimport { SpecificationAttributesListComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute-list/specification-attribute-list.component\";\r\nimport { SpecificationAttributeComponent } from \"@dino-pages/settings/specification-attributes/specification-attribute.component\";\r\nimport { SuggestedPromotionsComponent } from \"@dino-pages/shopping-cart/components/suggested-promotions/suggested-promotions.component\";\r\nimport { ShoppingCart2Component } from \"@dino-pages/shopping-cart/shopping-cart2.component\";\r\nimport { TermsOfUseComponent } from \"@dino-pages/terms-of-use/terms-of-use.component\";\r\nimport { WishlistComponent } from \"@dino-pages/wishlist/wishlist.component\";\r\nimport { EnumCredentialTypes } from \"@dino-proxy/enums\";\r\nimport { LoginGuard } from \"@m4u-angular/core/framework/login.guard\";\r\nimport { NotificationTemplateComponent } from \"@m4u-angular/ui/notifications/notification-template/notification-template.component\";\r\nimport { AuthGuard } from \"../guards/auth.guard\";\r\nimport { DeviceGuard } from \"../guards/device.guard\";\r\nimport { AddressOptionsListComponent } from \"@dino-pages/settings/options/address-options/address-option-list/address-option-list.component\";\r\nimport { AddressOptionComponent } from \"@dino-pages/settings/options/address-options/address-option.component\";\r\n\r\n// !!! IMPORTANT!!!\r\n// This list with CUSTOM AuthGuard implementation -> set to RoutesAnonymous to avoid double executiong LoginGuard\r\nexport const _routesProtected: Routes = [\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CATALOGUE),\r\n component: ProductCatalogue2Component,\r\n data: { Menu: 'catalogue2', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.ADMINS),\r\n component: AdminListComponent,\r\n data: { Menu: 'admins_list', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.ADMIN, true),\r\n component: AdminComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.SHOPPING_CART),\r\n component: ShoppingCart2Component,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.WISHLIST),\r\n component: WishlistComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.ITEM_DESKTOP, true),\r\n component: DesktopItemPopupComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.ITEM_MOBILE, true),\r\n component: MobileItemPopupComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.SUGGESTED_PROMOTIONS),\r\n component: SuggestedPromotionsComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CHECKOUT_DESKTOP),\r\n component: DesktopCheckoutComponent,\r\n data: { Menu: 'checkout_desktop', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard],\r\n canDeactivate: [CanDeactivateCheckout2]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CHECKOUT_MOBILE),\r\n component: MobileCheckoutComponent,\r\n data: { Menu: 'checkout_mobile', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard],\r\n canDeactivate: [CanDeactivateCheckout2]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.MY_DETAILSN),\r\n component: CustomerDetailsFullscreenComponent,\r\n data: { Menu: 'mydetailsN', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.LEDGERS_WINDOW),\r\n component: LedgersWindowComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.LEDGERS_FULL),\r\n component: LedgersFullscreenComponent,\r\n data: { Menu: 'ledgers', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.AGING_WINDOW),\r\n component: AgingWindowComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.AGING_FULL),\r\n component: AgingFullscreenComponent,\r\n data: { Menu: 'aging', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.HOME),\r\n component: HomeComponent,\r\n data: { Menu: 'home', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.TERMS_OF_USE),\r\n component: TermsOfUseComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'attribute-groups',\r\n component: AttributeGroupsComponent,\r\n data: { Menu: 'attribute-groups', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'deposit-groups',\r\n component: DepositGroupsComponent,\r\n data: { Menu: 'deposit-groups', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'business-options',\r\n component: BusinessOptionsListComponent,\r\n data: { Menu: 'business-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'business-option/:EntryID',\r\n component: BusinessOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'price-display-options',\r\n component: PriceDisplayOptionListComponent,\r\n data: { Menu: 'price-display-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'price-display-option/:EntryID',\r\n component: PriceDisplayOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'catalogue-options',\r\n component: CatalogueOptionsListComponent,\r\n data: { Menu: 'catalogue-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'catalogue-option/:EntryID',\r\n component: CatalogueOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'customer-options',\r\n component: CustomerOptionsListComponent,\r\n data: { Menu: 'customer-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'customer-option/:EntryID',\r\n component: CustomerOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'filter-options',\r\n component: FilterOptionsListComponent,\r\n data: { Menu: 'filter-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'filter-option/:EntryID',\r\n component: FilterOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-display-element-options',\r\n component: ItemDisplayElementOptionsListComponent,\r\n data: { Menu: 'item-display-element-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-display-element-option/:EntryID',\r\n component: ItemDisplayElementOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-display-popup-options',\r\n component: ItemDisplayPopupOptionsListComponent,\r\n data: { Menu: 'item-display-popup-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-display-popup-option/:EntryID',\r\n component: ItemDisplayPopupOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-options',\r\n component: ItemOptionsListComponent,\r\n data: { Menu: 'item-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'item-option/:EntryID',\r\n component: ItemOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'customer-detail-options',\r\n component: CustomerDetailOptionsListComponent,\r\n data: { Menu: 'customer-detail-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'customer-detail-option/:EntryID',\r\n component: CustomerDetailOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'payment-options',\r\n component: PaymentOptionsListComponent,\r\n data: { Menu: 'payment-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'payment-option/:EntryID',\r\n component: PaymentOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'shipment-options',\r\n component: ShipmentOptionsListComponent,\r\n data: { Menu: 'shipment-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'shipment-option/:EntryID',\r\n component: ShipmentOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'homepage-options',\r\n component: HomepageOptionsListComponent,\r\n data: { Menu: 'homepage-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'homepage-option/:EntryID',\r\n component: HomepageOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'notification-options',\r\n component: NotificationOptionsListComponent,\r\n data: { Menu: 'notification-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'notification-option/:EntryID',\r\n component: NotificationOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dino-system-options',\r\n component: SystemOptionsListComponent,\r\n data: { Menu: 'dino-system-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dino-system-option/:EntryID',\r\n component: DinoSystemOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dimension-configurations',\r\n component: DimensionConfigurationsListComponent,\r\n data: { Menu: 'dimension-configurations', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dimension-configuration/:EntryID',\r\n component: DimensionConfigurationComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dimension/:EntryID',\r\n component: DimensionComponent,\r\n outlet: 'window',\r\n canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'external-link-configs',\r\n component: ExternalLinkConfigsListComponent,\r\n data: { Menu: 'external-link-configs', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'external-link-config/:EntryID',\r\n component: ExternalLinkConfigComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'external-queries-configs',\r\n component: ExternalQueriesListComponent,\r\n data: { Menu: 'external-queries-configs', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'external-query-configs/:EntryID',\r\n component: ExternalQueryComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'specification-attributes',\r\n component: SpecificationAttributesListComponent,\r\n data: { Menu: 'specification-attributes', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'specification-attribute/:EntryID',\r\n component: SpecificationAttributeComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'contact-us-options',\r\n component: ContactUsOptionsListComponent,\r\n data: { Menu: 'contact-us-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'contact-us-option/:EntryID',\r\n component: ContactUsOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'feature-options',\r\n component: FeatureOptionsListComponent,\r\n data: { Menu: 'feature-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'feature-option/:EntryID',\r\n component: FeatureOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DOCUMENT_PROCESSINGS),\r\n component: DocumentProcessingListComponent,\r\n data: { Menu: 'document-processings', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DOCUMENT_PROCESSING, true),\r\n component: DocumentProcessingComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'externallink/:EntryID',\r\n component: ExternalLinkComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin], IsExternal: true },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'externalquery/:EntryID',\r\n component: ExternalQueryDataComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin], IsExternal: true },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'terms-of-use-options',\r\n component: TermsOfUseOptionsListComponent,\r\n data: { Menu: 'terms-of-use-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'terms-of-use-option/:EntryID',\r\n component: TermsOfUseOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.PROMOTIONS),\r\n component: PromotionsListComponent,\r\n data: { Menu: 'promotions', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.PROMOTION, true),\r\n component: PromotionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.GIFT_CARDS),\r\n component: GiftCardsListComponent,\r\n data: { Menu: 'gift-cards', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.GIFT_CARD, true),\r\n component: GiftCardComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sales-person-options',\r\n component: SalesPersonOptionsListComponent,\r\n data: { Menu: 'sales-person-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sales-person-option/:EntryID',\r\n component: SalesPersonOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'document-options',\r\n component: DocumentOptionsListComponent,\r\n data: { Menu: 'document-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'document-option/:EntryID',\r\n component: DocumentOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'series-options',\r\n component: SeriesOptionsListComponent,\r\n data: { Menu: 'series-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'series-option/:EntryID',\r\n component: SeriesOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CUSTOMERS),\r\n component: CustomersComponent,\r\n data: { Menu: 'customers', allowedCredentialTypes: [EnumCredentialTypes.SalePerson] },\r\n canActivate: [AuthGuard]\r\n },\r\n // { path: 'customer-details/:EntryID', component: CustomerDetailsComponent, outlet: 'window', canActivate: [LoginGuard] },\r\n // { path: 'customer-sales-details', component: CustomerDetailsComponent, data: { Menu: 'customerdetails' }, canActivate: [LoginGuard] },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CUSTOMER_DETAILS_WINDOW, true),\r\n component: CustomerDetailsWindowComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CUSTOMER_DETAILS_FULL, true),\r\n component: CustomerDetailsFullscreenComponent,\r\n data: { Menu: 'customerdetails', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.BANK_DETAILS, true),\r\n component: CustomerBankDetailsComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.EDIT_SHOPPING_CART_ITEM),\r\n component: EditShoppingCartItemComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.ORDERS),\r\n component: DocumentsComponent,\r\n data: { Menu: 'orders', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.INVOICES),\r\n component: DocumentsComponent,\r\n data: { Menu: 'invoices', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DELIVERY_NOTES),\r\n component: DocumentsComponent,\r\n data: { Menu: 'deliverynotes', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.QUOTES),\r\n component: DocumentsComponent,\r\n data: { Menu: 'quotes', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.REFUNDS),\r\n component: DocumentsComponent,\r\n data: { Menu: 'refunds', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.RETURN_REQUESTS),\r\n component: DocumentsComponent,\r\n data: { Menu: 'returnrequests', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.RETURNS),\r\n component: DocumentsComponent,\r\n data: { Menu: 'returns', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DOCUMENT),\r\n component: DocumentComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.RECEIPTS),\r\n component: ReceiptsComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.RECEIPT),\r\n component: ReceiptComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CREATE_RECEIPT_DESKTOP),\r\n component: CreateReceiptDesktopComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.CREATE_RECEIPT_MOBILE),\r\n component: CreateReceiptMobileComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard, DeviceGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.IMPERSONATE),\r\n component: ImpersonatePageComponent,\r\n data: { Menu: 'impersonate', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: 'notification-template/:EntryID',\r\n component: NotificationTemplateComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'discount-rules',\r\n component: DiscountRuleListComponent,\r\n data: { Menu: 'discount-rules', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'discount-rule/:EntryID',\r\n component: DiscountRuleComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'discount-permissions',\r\n component: DiscountPermissionListComponent,\r\n data: { Menu: 'discount-permissions', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'discount-permission/:EntryID',\r\n component: DiscountPermissionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sale-periods',\r\n component: SalePeriodListComponent,\r\n data: { Menu: 'sale-periods', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sale-period/:EntryID',\r\n component: SalePeriodComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sale-targets',\r\n component: SaleTargetListComponent,\r\n data: { Menu: 'sale-targets', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sale-target/:EntryID',\r\n component: SaleTargetComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sales-summary',\r\n component: SalesSummaryComponent,\r\n data: { Menu: 'sales-summary', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.AGING_CUSTOMERS_LIST),\r\n component: AgingCustomersComponent,\r\n data: { Menu: 'aging_customers', allowedCredentialTypes: [EnumCredentialTypes.SalePerson] },\r\n canActivate: [AuthGuard],\r\n },\r\n {\r\n path: 'custom-fields',\r\n component: CustomFieldListComponent,\r\n data: { Menu: 'custom-fields', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'custom-field/:EntryID',\r\n component: CustomFieldComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'custom-fieldsets',\r\n component: CustomFieldsetListComponent,\r\n data: { Menu: 'custom-fieldsets', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'custom-fieldset/:EntryID',\r\n component: CustomFieldsetComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sale-target-performance',\r\n component: SaleTargetPerformanceComponent,\r\n data: { Menu: 'sale-target-performance', allowedCredentialTypes: [EnumCredentialTypes.Admin, EnumCredentialTypes.SalePerson] },\r\n canActivate: [AuthGuard]\r\n }, {\r\n path: 'sales-data',\r\n component: SalesDataComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n }, {\r\n path: GetConfigPath(ROUTE_PATHS.DASHBOARD_WINDOW),\r\n component: DashboardWindowComponent,\r\n outlet: 'window',\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DASHBOARD_FULL),\r\n component: DashboardFullscreenComponent,\r\n data: { Menu: 'dashboard', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: GetConfigPath(ROUTE_PATHS.DASHBOARD_FULL_CUSTOMER),\r\n component: DashboardFullscreenComponent,\r\n data: { Menu: 'dashboard_customer', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User, EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'distribution-categories',\r\n component: DistributionCategoryListComponent,\r\n data: { Menu: 'distribution_categories', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'distribution-category/:EntryID',\r\n component: DistributionCategoryComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'distribution-cycles',\r\n component: DistributionCycleListComponent,\r\n data: { Menu: 'distribution_cycles', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'distribution-cycle/:EntryID',\r\n component: DistributionCycleComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n }, \r\n {\r\n path: 'address-options',\r\n component: AddressOptionsListComponent,\r\n data: { Menu: 'address-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'address-option/:EntryID',\r\n component: AddressOptionComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n];","import { MainMenuElement, DefaultRouteParams, LoginExtensionLink } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { DataSourceDirectService } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { AppConfig } from '@m4u-angular/configuration/app.config.model';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { BrandEndpoint } from '@dino-proxy/endpoints/brand.endpoint';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.endpoint';\r\nimport { CountryEndpoint } from '@dino-proxy/endpoints/country.endpoint';\r\nimport { CustomerAddressEndpoint } from '@dino-proxy/endpoints/customeraddress.endpoint';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\nimport { FilterAttributeEndpoint } from '@dino-proxy/endpoints/filterattribute.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { ManufacturerEndpoint } from '@dino-proxy/endpoints/manufacturer.endpoint';\r\nimport { StateEndpoint } from '@dino-proxy/endpoints/state.endpoint';\r\nimport { VendorEndpoint } from '@dino-proxy/endpoints/vendor.endpoint';\r\nimport { EnumDocumentTypes, EnumExternalQueryType, Enums, EnumSystemOptionsZ } from '@dino-proxy/enums';\r\nimport { CategoriesService } from '@dino-services/categories.service';\r\nimport { CustomerOptionService } from '@dino-services/customer-option.service';\r\nimport { ItemOptionService } from '@dino-services/item-option.service';\r\nimport { of, Observable, combineLatest, Subject, Subscription } from 'rxjs';\r\nimport { mergeMap, tap } from 'rxjs/operators';\r\nimport { Lists_EN } from './_resources/LISTS_EN';\r\nimport { Lists_HE } from './_resources/LISTS_HE';\r\nimport { EnumLoginExtensionLinkType } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { GuestAccessComponent } from '@dino-pages/guest-access/guest-access.component';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { UserInfo } from '@dino-proxy/entities/userinfo.entity';\r\nimport { DimensionValueEndpoint } from '@dino-proxy/endpoints/dimensionvalue.endpoint';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { TermsOfUseDialogComponent } from '@dino-pages/home/terms-of-use-dialog/terms-of-use-dialog.component';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { BankEndpoint } from '@dino-proxy/endpoints/bank.endpoint';\r\nimport { FeatureOption } from '@dino-proxy/entities/featureoption.entity';\r\nimport { GetMenuPath, ROUTE_PATHS } from '@dino-classes/route-paths';\r\nimport { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\nimport { ExternalLink } from '@dino-proxy/entities/externallink.entity';\r\nimport { _components } from './configs/components';\r\nimport { _endpoints } from './configs/endpoints';\r\nimport { _services } from './configs/services';\r\nimport { _routesProtected } from './configs/routes-protected';\r\nimport { ShoppingCartEditModeWarningDialogComponent } from '@dino-pages/shopping-cart/components/shopping-cart-edit-mode-dialog/shopping-cart-edit-mode-warning-dialog.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\n\r\nexport class DinoAppConfig extends AppConfig {\r\n private customerChanged$: Subscription;\r\n override ModuleName = 'Dino';\r\n\r\n override Components = _components;\r\n override Endpoints = _endpoints;\r\n override Services = _services;\r\n // !!! IMPORTANT!!!\r\n // This list with CUSTOM AuthGuard implementation -> set to RoutesAnonymous to avoid double executiong LoginGuard\r\n // After updating to Angular 15+, needs to reimplement \"RoutesProtected:... in app.config.service.ts\" to chain -> exec LoginGuard, then other\r\n //override RoutesProtected = _routesProtected;\r\n override RoutesAnonymous = _routesProtected;\r\n\r\n override RoutesWithEmptyLayout = [\r\n { path: 'guest-access', component: GuestAccessComponent },\r\n ];\r\n\r\n // current implementation doesn't allow to have routes with numbers inside\r\n override OnGetMenu = (userInfos?: { [moduleName: string]: any }) => {\r\n\r\n const customerService = AppInjector.get(CustomerService) as CustomerService;\r\n const documentService = AppInjector.get(DocumentService) as DocumentService;\r\n const customerOptionService = AppInjector.get(CustomerOptionService) as CustomerOptionService;\r\n const dinoUser = userInfos['Dino'];\r\n\r\n const isFeatureAllowedAsAdmin = (u: UserInfo) => {\r\n return u.IsAdmin;\r\n };\r\n\r\n const isTermsOfUseMenuAllowedForNonAdmin = (u: UserInfo) => {\r\n return !u.IsAdmin && u.IsEnableTermsOfUseMenu;\r\n };\r\n\r\n const isFeatureAllowed = (flagName: string, checkCustomer: boolean) => {\r\n return (u: UserInfo) => {\r\n return u.FeatureOption[flagName] && (!checkCustomer || customerService?.HasCustomer);\r\n };\r\n };\r\n\r\n const isFeatureAllowedForNonAdmin = (flagName: string, checkCustomer: boolean) => {\r\n return (u: UserInfo) => {\r\n return !u.IsAdmin && isFeatureAllowed(flagName, checkCustomer)(u);\r\n };\r\n };\r\n\r\n const isFeatureAllowedForUser = (flagName: string, checkCustomer: boolean) => {\r\n return (u: UserInfo) => {\r\n return !u.IsAdmin && !u.IsSalesPerson && u.FeatureOption[flagName]\r\n && (!checkCustomer || customerService?.HasCustomer);\r\n };\r\n };\r\n\r\n const isFeatureAllowedForSales = (flagName: string, checkCustomer: boolean) => {\r\n return (u: UserInfo) => {\r\n return u.IsSalesPerson && u.FeatureOption[flagName]\r\n && (!checkCustomer || customerService?.HasCustomer);\r\n };\r\n };\r\n\r\n const isShowCustomerInfo = (onlyForSales: boolean) => {\r\n return (u: UserInfo) => {\r\n return customerService?.HasCustomer\r\n && (onlyForSales ? u.IsSalesPerson : !u.IsSalesPerson)\r\n && (u.FeatureOption.IsEnableMyDetails\r\n || u.FeatureOption.IsEnableLedger\r\n || u.FeatureOption.IsEnableDashboard\r\n || u.FeatureOption.IsEnableAging);\r\n };\r\n }\r\n\r\n const isDocumentAllowedForNonAdmin = (documentType: EnumDocumentTypes) => {\r\n return (u: UserInfo) => {\r\n const perm = documentService.IsDocumentTypeAvailable(documentType);\r\n return !u.IsAdmin && perm.IsAllowView;\r\n };\r\n };\r\n\r\n const isReceiptsAllowedForNonAdmin = () => {\r\n return (u: UserInfo) => {\r\n return (!u.IsAdmin && customerOptionService.GetCustomerOption()?.PaymentOption?.IsAllowReceiptView);\r\n };\r\n };\r\n\r\n const isAllowedForSalesPerson = (u: UserInfo) => {\r\n return u.IsSalesPerson;\r\n }\r\n\r\n const isDocumentsAllowed = (forSales: boolean) => {\r\n return (u: UserInfo) => {\r\n if (u.IsAdmin) return false;\r\n if (forSales && !u.IsSalesPerson) return false;\r\n if (!forSales && u.IsSalesPerson) return false;\r\n const customerOption = customerOptionService.GetCustomerOption();\r\n return customerOption && (customerOption.QuoteOption?.IsAllowView\r\n || customerOption.OrderOption?.IsAllowView\r\n || customerOption.DeliveryNoteOption?.IsAllowView\r\n || customerOption.InvoiceOption?.IsAllowView\r\n || customerOption.ReturnOption?.IsAllowView\r\n || customerOption.RefundOption?.IsAllowView\r\n || customerOption.ReturnRequestOption?.IsAllowView\r\n || customerOption.PaymentOption?.IsAllowReceiptView);\r\n };\r\n }\r\n\r\n const isShowCustomReports = (forSales: boolean, forAdmin: boolean, hasAnyContent: boolean) => {\r\n return (u: UserInfo) => {\r\n if (forAdmin && u.IsAdmin) return true;\r\n if (forSales && !u.IsSalesPerson) return false;\r\n return hasAnyContent;\r\n };\r\n }\r\n\r\n const screenService = AppInjector.get(ScreenService) as ScreenService;\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n\r\n var productCatalogueMenuItem = new MainMenuElement('catalogueN', GetMenuPath(ROUTE_PATHS.CATALOGUE), 'mdi mdi-book-open-outline', null, isFeatureAllowedForNonAdmin('IsEnableCatalogue', false));\r\n productCatalogueMenuItem.text = customerService.IsCurrentUserSalesPerson()\r\n ? resourcesService.RC('lblProductCatalogueSalesPersonName', this.ModuleName)\r\n : resourcesService.RC('Pages.catalogueN', this.ModuleName);\r\n\r\n // Custom Reports menues;\r\n const externalQueries = dinoUser?.FeatureOption?.ExternalQueries?.map(eq => eq.ExternalQuery);\r\n const externalLinks = dinoUser?.FeatureOption?.ExternalLinks?.map(eq => eq.ExternalLink);\r\n const customReportsMenuItems = this.GetExternalMenuItems(externalQueries, externalLinks, dinoUser.IsSalesPerson, false);\r\n const selectedCustomerSalesMenuItems = this.GetExternalMenuItems(externalQueries, externalLinks, false, false, true);\r\n\r\n const baseMenuItems = [\r\n new MainMenuElement('home', GetMenuPath(ROUTE_PATHS.HOME), 'mdi mdi-home', null, isFeatureAllowedForNonAdmin('IsEnableHomePage', true)),\r\n productCatalogueMenuItem,\r\n new MainMenuElement('checkout_desktop', GetMenuPath(ROUTE_PATHS.CHECKOUT_DESKTOP), 'mdi mdi-cart', null, isFeatureAllowedForNonAdmin('IsEnableCheckout', true), null, false),\r\n new MainMenuElement('checkout_mobile', GetMenuPath(ROUTE_PATHS.CHECKOUT_MOBILE), 'mdi mdi-cart', null,\r\n (u: UserInfo) => {\r\n return screenService.IsMobile() && isFeatureAllowedForNonAdmin('IsEnableCheckout', true)(u);\r\n },\r\n null, true),\r\n ]\r\n\r\n const userMenuItems = [\r\n new MainMenuElement('my_information', undefined, 'mdi mdi-card-account-details-star-outline', undefined, isShowCustomerInfo(false), undefined, true, [\r\n new MainMenuElement('mydetailsN', GetMenuPath(ROUTE_PATHS.MY_DETAILSN), 'mdi mdi-card-account-details-star-outline', null, isFeatureAllowedForUser('IsEnableMyDetails', true), null, null, null),\r\n new MainMenuElement('my_ledgers', GetMenuPath(ROUTE_PATHS.LEDGERS_FULL), 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableLedger', true)),\r\n new MainMenuElement('my_aging', GetMenuPath(ROUTE_PATHS.AGING_FULL), 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableAging', true)),\r\n new MainMenuElement('dashboard', GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL_CUSTOMER), 'mdi mdi-monitor-dashboard', null, isFeatureAllowedForNonAdmin('IsEnableDashboard', false), undefined, undefined, undefined, { CustomerSelected: true }),\r\n new MainMenuElement('my_custom_reports', undefined, 'mdi mdi-history', undefined, isShowCustomReports(false, false, customReportsMenuItems.length > 0), undefined, true, [\r\n ...customReportsMenuItems\r\n ]),\r\n ]),\r\n\r\n new MainMenuElement('my_documents', undefined, 'mdi mdi-file-document-multiple-outline', undefined, isDocumentsAllowed(false), undefined, true, [\r\n new MainMenuElement('my_quotes', GetMenuPath(ROUTE_PATHS.QUOTES), 'mdi mdi-text-box-plus-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Quote), null, null, null, { ObjectType: EnumDocumentTypes.Quote }),\r\n new MainMenuElement('my_orders', GetMenuPath(ROUTE_PATHS.ORDERS), 'mdi mdi-file-document-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Order), null, null, null, { ObjectType: EnumDocumentTypes.Order }),\r\n new MainMenuElement('my_deliverynotes', GetMenuPath(ROUTE_PATHS.DELIVERY_NOTES), 'mdi mdi-truck-delivery-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.DeliveryNote), null, null, null, { ObjectType: EnumDocumentTypes.DeliveryNote }),\r\n new MainMenuElement('my_invoices', GetMenuPath(ROUTE_PATHS.INVOICES), 'mdi mdi-file-check-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Invoice), null, null, null, { ObjectType: EnumDocumentTypes.Invoice }),\r\n new MainMenuElement('my_returnrequests', GetMenuPath(ROUTE_PATHS.RETURN_REQUESTS), 'mdi mdi-keyboard-return', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.ReturnRequest), null, null, null, { ObjectType: EnumDocumentTypes.ReturnRequest }),\r\n new MainMenuElement('my_returns', GetMenuPath(ROUTE_PATHS.RETURNS), 'mdi mdi-clipboard-arrow-left', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Return), null, null, null, { ObjectType: EnumDocumentTypes.Return }),\r\n new MainMenuElement('my_refunds', GetMenuPath(ROUTE_PATHS.REFUNDS), 'mdi mdi-cash-refund', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Refund), null, null, null, { ObjectType: EnumDocumentTypes.Refund }),\r\n new MainMenuElement('my_receipts', GetMenuPath(ROUTE_PATHS.RECEIPTS), 'mdi mdi-receipt-outline', null, isReceiptsAllowedForNonAdmin())\r\n ]),\r\n\r\n new MainMenuElement('termsofuse', GetMenuPath(ROUTE_PATHS.TERMS_OF_USE), 'mdi mdi-information', undefined, isTermsOfUseMenuAllowedForNonAdmin),\r\n ];\r\n\r\n const salesMenuItems = [\r\n new MainMenuElement('customers', GetMenuPath(ROUTE_PATHS.CUSTOMERS), 'mdi mdi-account-multiple', null, isAllowedForSalesPerson),\r\n new MainMenuElement('aging_customers', GetMenuPath(ROUTE_PATHS.AGING_CUSTOMERS_LIST), 'mdi mdi-wallet', null, isFeatureAllowedForSales('IsEnableAging', false)),\r\n new MainMenuElement('dashboard', GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL), 'mdi mdi-monitor-dashboard', null, isFeatureAllowedForSales('IsEnableDashboard', false), undefined, undefined, undefined, { CustomerSelected: false }),\r\n\r\n new MainMenuElement('customer_information', undefined, 'mdi mdi-card-account-details-star-outline', undefined, isShowCustomerInfo(true), undefined, true, [\r\n new MainMenuElement('customerdetails', GetMenuPath(ROUTE_PATHS.CUSTOMER_DETAILS_FULL), 'mdi mdi-card-account-details-star-outline', null, isFeatureAllowedForSales('IsEnableMyDetails', true), () => ['current'], null, null),\r\n new MainMenuElement('ledgers', GetMenuPath(ROUTE_PATHS.LEDGERS_FULL), 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableLedger', true)),\r\n new MainMenuElement('aging', GetMenuPath(ROUTE_PATHS.AGING_FULL), 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableAging', true)),\r\n new MainMenuElement('my_custom_reports', undefined, 'mdi mdi-history', undefined, isShowCustomReports(false, false, selectedCustomerSalesMenuItems.length > 0), undefined, true, [\r\n ...selectedCustomerSalesMenuItems\r\n ]),\r\n new MainMenuElement('dashboard_customer', GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL_CUSTOMER), 'mdi mdi-monitor-dashboard', null, isFeatureAllowedForSales('IsEnableDashboard', true), undefined, undefined, undefined, { CustomerSelected: true }),\r\n ]),\r\n\r\n new MainMenuElement('documents', undefined, 'mdi mdi-file-document-multiple-outline', undefined, isDocumentsAllowed(true), undefined, true, [\r\n new MainMenuElement('quotes', GetMenuPath(ROUTE_PATHS.QUOTES), 'mdi mdi-text-box-plus-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Quote), null, null, null, { ObjectType: EnumDocumentTypes.Quote }),\r\n new MainMenuElement('orders', GetMenuPath(ROUTE_PATHS.ORDERS), 'mdi mdi-file-document-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Order), null, null, null, { ObjectType: EnumDocumentTypes.Order }),\r\n new MainMenuElement('deliverynotes', GetMenuPath(ROUTE_PATHS.DELIVERY_NOTES), 'mdi mdi-truck-delivery-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.DeliveryNote), null, null, null, { ObjectType: EnumDocumentTypes.DeliveryNote }),\r\n new MainMenuElement('invoices', GetMenuPath(ROUTE_PATHS.INVOICES), 'mdi mdi-file-check-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Invoice), null, null, null, { ObjectType: EnumDocumentTypes.Invoice }),\r\n new MainMenuElement('returnrequests', GetMenuPath(ROUTE_PATHS.RETURN_REQUESTS), 'mdi mdi-keyboard-return', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.ReturnRequest), null, null, null, { ObjectType: EnumDocumentTypes.ReturnRequest }),\r\n new MainMenuElement('returns', GetMenuPath(ROUTE_PATHS.RETURNS), 'mdi mdi-clipboard-arrow-left', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Return), null, null, null, { ObjectType: EnumDocumentTypes.Return }),\r\n new MainMenuElement('refunds', GetMenuPath(ROUTE_PATHS.REFUNDS), 'mdi mdi-cash-refund', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Refund), null, null, null, { ObjectType: EnumDocumentTypes.Refund }),\r\n new MainMenuElement('receipts', GetMenuPath(ROUTE_PATHS.RECEIPTS), 'mdi mdi-receipt-outline', null, isReceiptsAllowedForNonAdmin())\r\n ]),\r\n\r\n new MainMenuElement('custom_reports', undefined, 'mdi mdi-history', undefined, isShowCustomReports(true, false, customReportsMenuItems.length > 0), undefined, true, [\r\n ...customReportsMenuItems\r\n ]),\r\n\r\n new MainMenuElement('salessummary', GetMenuPath(ROUTE_PATHS.SALES_SUMMARY), 'mdi mdi-reorder-horizontal', null, isFeatureAllowedForNonAdmin('IsEnableSalesSummary', false), undefined, false),\r\n new MainMenuElement('saletargetperformance', GetMenuPath(ROUTE_PATHS.SALE_TARGET_PERFORMANCE), 'mdi mdi-chart-bar', null, isFeatureAllowedForNonAdmin('IsEnableSaleTargetPerformance', false), undefined, true),\r\n\r\n new MainMenuElement('termsofuse', GetMenuPath(ROUTE_PATHS.TERMS_OF_USE), 'mdi mdi-information', undefined, isTermsOfUseMenuAllowedForNonAdmin),\r\n ];\r\n\r\n const adminMenuItems1 = [\r\n new MainMenuElement('dashboard', GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL), 'mdi mdi-monitor-dashboard', null, isFeatureAllowedAsAdmin, undefined, true),\r\n new MainMenuElement('salessummary', GetMenuPath(ROUTE_PATHS.SALES_SUMMARY), 'mdi mdi-reorder-horizontal', null, isFeatureAllowedAsAdmin, undefined, false),\r\n new MainMenuElement('saletargetperformance', GetMenuPath(ROUTE_PATHS.SALE_TARGET_PERFORMANCE), 'mdi mdi-chart-bar', null, isFeatureAllowedAsAdmin, undefined, true),\r\n\r\n new MainMenuElement('user_management', undefined, 'mdi mdi-account-key', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('admins_list', GetMenuPath(ROUTE_PATHS.ADMINS), 'mdi mdi-shield-crown'),\r\n new MainMenuElement('credentials_creation', '/pages/general/credentials-creation', 'mdi mdi-account-circle', undefined, isFeatureAllowedAsAdmin),\r\n new MainMenuElement('credentials_report', '/pages/general/credentials-report', 'mdi mdi-account-circle', undefined),\r\n ]),\r\n\r\n ];\r\n\r\n const adminMenuItems2 = [\r\n new MainMenuElement('promotions_management', undefined, 'mdi mdi-sigma', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('promotions', GetMenuPath(ROUTE_PATHS.PROMOTIONS), 'mdi mdi-cog'),\r\n new MainMenuElement('giftcards', GetMenuPath(ROUTE_PATHS.GIFT_CARDS), 'mdi mdi-cog')\r\n ]),\r\n ];\r\n\r\n const settingsMenuItems1 = [\r\n new MainMenuElement('system_reports', undefined, 'mdi mdi-history', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('credentials_activity_status', '/pages/general/credentials-activity-status', 'mdi mdi-account-circle'),\r\n new MainMenuElement('credential_login_history', '/pages/general/credential-login-history', 'mdi mdi-account-circle', undefined),\r\n new MainMenuElement('request_history', '/pages/general/requests-history', 'mdi mdi-access-point', undefined),\r\n new MainMenuElement('notificationshistory', '/pages/general/notificationshistory', 'dx-icon dx-icon-message'),\r\n new MainMenuElement('documentprocessing', GetMenuPath(ROUTE_PATHS.DOCUMENT_PROCESSINGS), 'mdi mdi-credit-card-settings-outline')\r\n ]),\r\n ];\r\n const settingsMenuItems2 = [\r\n\r\n new MainMenuElement('settings', undefined, 'mdi mdi-cog', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('business_process_options', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('customeroptions', '/pages/customer-options', 'mdi mdi-cog'),\r\n new MainMenuElement('businessoptions', '/pages/business-options', 'mdi mdi-cog'),\r\n new MainMenuElement('documentoptions', '/pages/document-options', 'mdi mdi-cog'),\r\n new MainMenuElement('customerdetailoptions', '/pages/customer-detail-options', 'mdi mdi-cog'),\r\n new MainMenuElement('paymentoptions', '/pages/payment-options', 'mdi mdi-cog'),\r\n new MainMenuElement('addressoptions', '/pages/address-options', 'mdi mdi-cog'),\r\n new MainMenuElement('shipmentoptions', '/pages/shipment-options', 'mdi mdi-cog'),\r\n new MainMenuElement('seriesoptions', '/pages/series-options', 'mdi mdi-cog'),\r\n new MainMenuElement('notificationoptions', '/pages/notification-options', 'mdi mdi-cog'),\r\n ]),\r\n\r\n new MainMenuElement('feature_options', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('featureoptions', '/pages/feature-options', 'mdi mdi-cog'),\r\n new MainMenuElement('catalogueoptions', '/pages/catalogue-options', 'mdi mdi-cog'),\r\n new MainMenuElement('filteroptions', '/pages/filter-options', 'mdi mdi-cog'),\r\n new MainMenuElement('homepageoptions', '/pages/homepage-options', 'mdi mdi-cog'),\r\n new MainMenuElement('externalqueryconfig', '/pages/external-queries-configs', 'mdi mdi-cog'),\r\n new MainMenuElement('contactusoptions', '/pages/contact-us-options', 'mdi mdi-cog'),\r\n new MainMenuElement('termsofuseoptions', '/pages/terms-of-use-options', 'mdi mdi-cog'),\r\n new MainMenuElement('externallinkconfig', '/pages/external-link-configs', 'mdi mdi-cog'),\r\n ]),\r\n\r\n new MainMenuElement('items_configs', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('itemoptions', '/pages/item-options', 'mdi mdi-cog'),\r\n new MainMenuElement('itemdisplayelementoptions', '/pages/item-display-element-options', 'mdi mdi-cog'),\r\n new MainMenuElement('itemdisplaypopupoptions', '/pages/item-display-popup-options', 'mdi mdi-cog'),\r\n new MainMenuElement('pricedisplayoptions', '/pages/price-display-options', 'mdi mdi-cog'),\r\n ]),\r\n\r\n new MainMenuElement('attibutes_dimensions', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('attributegroups', '/pages/attribute-groups', 'mdi mdi-cog'),\r\n new MainMenuElement('specificationattributes', '/pages/specification-attributes', 'mdi mdi-cog'),\r\n new MainMenuElement('dimensionconfigurations', '/pages/dimension-configurations', 'mdi mdi-cog'),\r\n ]),\r\n\r\n new MainMenuElement('sales_person_settings', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('salespersonoptions', '/pages/sales-person-options', 'mdi mdi-cog'),\r\n new MainMenuElement('discountrules', '/pages/discount-rules', 'mdi mdi-cog'),\r\n new MainMenuElement('discountpermissions', '/pages/discount-permissions', 'mdi mdi-cog'),\r\n new MainMenuElement('saleperiods', '/pages/sale-periods', 'mdi mdi-cog'),\r\n new MainMenuElement('saletargets', '/pages/sale-targets', 'mdi mdi-cog'),\r\n ]),\r\n\r\n new MainMenuElement('system_options_folder', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('dinosystemoptions', '/pages/dino-system-options', 'mdi mdi-cog'),\r\n new MainMenuElement('system_options', '/pages/general/system-options', 'mdi mdi-hammer-wrench'),\r\n new MainMenuElement('data_views', '/pages/general/data-views', 'mdi mdi-account-circle', undefined),\r\n ]),\r\n\r\n new MainMenuElement('notification_options_folder', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('notification_servers', '/pages/general/notification-servers', 'mdi mdi-email-send'),\r\n new MainMenuElement('notification_templates', '/pages/general/notification-templates', 'mdi mdi-email-multiple'),\r\n ]),\r\n\r\n new MainMenuElement('misc_settings', undefined, 'mdi mdi-cogs', undefined, undefined, undefined, true, [\r\n new MainMenuElement('depositgroups', '/pages/deposit-groups', 'mdi mdi-cog'),\r\n new MainMenuElement('custom_fields', '/pages/custom-fields', 'mdi mdi-cog'),\r\n new MainMenuElement('custom_field_sets', '/pages/custom-fieldsets', 'mdi mdi-cog'),\r\n new MainMenuElement('distribution_categories', '/pages/distribution-categories', 'mdi mdi-cog'),\r\n new MainMenuElement('distribution_cycles', '/pages/distribution-cycles', 'mdi mdi-cog'),\r\n ])\r\n\r\n ])\r\n ];\r\n\r\n\r\n //!!!! TEMP FIX. CHECK InitMenuItems()\r\n if (!dinoUser || (!dinoUser.IsAdmin && !dinoUser.IsSalesPerson)) {\r\n return of([...baseMenuItems, ...userMenuItems]);\r\n }\r\n if (dinoUser.IsSalesPerson) {\r\n return of([...baseMenuItems, ...salesMenuItems]);\r\n }\r\n\r\n const allLinks$ = new Subject();\r\n const externalLinkEndpoint = AppInjector.get(ExternalLinkEndpoint);\r\n const externalQueryEndpoint = AppInjector.get(ExternalQueryEndpoint);\r\n const queries$ = externalQueryEndpoint.GetList();\r\n const links$ = externalLinkEndpoint.GetList();\r\n \r\n combineLatest(queries$, links$, (queries, links) => ({queries, links}))\r\n .subscribe(pair => {\r\n const adminCustomReportMenuItems = this.GetExternalMenuItems(pair.queries.Entities, pair.links.Entities, false, true);\r\n let customReportMenu = new MainMenuElement('admin_custom_reports', undefined, 'mdi mdi-history', undefined, isShowCustomReports(false, true, true), undefined, true, [\r\n ...adminCustomReportMenuItems\r\n ]);\r\n allLinks$.next([...adminMenuItems1, ...settingsMenuItems1, customReportMenu, ...adminMenuItems2, ...settingsMenuItems2]);\r\n allLinks$.complete();\r\n });\r\n\r\n return allLinks$.asObservable();\r\n };\r\n\r\n private GetExternalMenuItems(queries: ExternalQuery[], links: ExternalLink[], forSales: boolean, forAdmin: boolean, forSelectedSalesCustomer: boolean = false): MainMenuElement[] {\r\n let customReportsMenues = [];\r\n if (queries && queries.length > 0) {\r\n const queryType = forSales ? EnumExternalQueryType.SalesPerson : forAdmin ? EnumExternalQueryType.Admin : EnumExternalQueryType.Customer;\r\n const filteredQueries = queries.filter(q => q.IsActive && q.Type === queryType);\r\n filteredQueries.forEach(query => {\r\n const menuItem = new MainMenuElement(query.Name, `/pages/externalquery/${query.EntryID}`, undefined, undefined, undefined, undefined, undefined, undefined, { ForSelectedCustomer: forSelectedSalesCustomer });\r\n menuItem.text = query['MenuName' + SysGlobals.Language];\r\n customReportsMenues.push(menuItem);\r\n });\r\n }\r\n\r\n if (links && links.length > 0 && !forSelectedSalesCustomer) {\r\n links.forEach(link => {\r\n const menuItem = new MainMenuElement(link.Name, `/pages/externallink/${link.EntryID}`, link.Icon, undefined, undefined);\r\n menuItem.text = link['MenuName' + SysGlobals.Language];\r\n customReportsMenues.push(menuItem);\r\n });\r\n }\r\n\r\n return customReportsMenues;\r\n }\r\n\r\n override OnGetNavbarItems = (userInfos?: { [moduleName: string]: any }) => {\r\n const isFeatureAllowedForNonAdmin = (flagName: string, forNormalUser: boolean, forSalesPerson: boolean) => {\r\n return (u: UserInfo) => {\r\n return (!u.IsAdmin) && (flagName ? u.FeatureOption[flagName] : true)\r\n && (forNormalUser && forSalesPerson ? true : forNormalUser ? !u.IsSalesPerson : forSalesPerson ? u.IsSalesPerson : false);\r\n };\r\n };\r\n\r\n const isFeatureAllowedAsAdmin = () => {\r\n return (u: UserInfo) => {\r\n return u.IsAdmin;\r\n };\r\n };\r\n\r\n return of([\r\n new MainMenuElement('home', GetMenuPath(ROUTE_PATHS.HOME), 'mdi mdi-home', null, isFeatureAllowedForNonAdmin('IsEnableHomePage', true, true)),\r\n new MainMenuElement('catalogueN', GetMenuPath(ROUTE_PATHS.CATALOGUE), 'mdi mdi-book-open-outline', null, isFeatureAllowedForNonAdmin('IsEnableCatalogue', true, true)),\r\n new MainMenuElement('checkout_mobile', GetMenuPath(ROUTE_PATHS.CHECKOUT_MOBILE), 'mdi mdi-speedometer', null, isFeatureAllowedForNonAdmin('IsEnableCheckout', false, true)),\r\n new MainMenuElement('customers', GetMenuPath(ROUTE_PATHS.CUSTOMERS), 'mdi mdi-account-multiple', null, isFeatureAllowedForNonAdmin(null, false, true)),\r\n new MainMenuElement('dashboard', GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL), 'mdi mdi-monitor-dashboard', null, isFeatureAllowedForNonAdmin('IsEnableDashboard', true, false)),\r\n new MainMenuElement('mydetailsN', GetMenuPath(ROUTE_PATHS.MY_DETAILSN), 'mdi mdi-cog-outline', null, isFeatureAllowedForNonAdmin('IsEnableMyDetails', true, false)),\r\n new MainMenuElement('impersonate', GetMenuPath(ROUTE_PATHS.IMPERSONATE), 'mdi mdi-account-multiple', undefined, isFeatureAllowedAsAdmin())\r\n ]);\r\n };\r\n\r\n override OnGetDefaultRouteParams = (userInfo) => {\r\n const defaultRouteParams = new DefaultRouteParams();\r\n const isUserAdmin = userInfo?.IsAdmin;\r\n const isUserSalesPerson = userInfo?.IsSalesPerson;\r\n const featureOption = userInfo?.FeatureOption;\r\n\r\n defaultRouteParams.Route = this.GetDefaultRouteParams(isUserAdmin, isUserSalesPerson, featureOption);\r\n return of(defaultRouteParams);\r\n };\r\n\r\n private GetDefaultRouteParams(isUserAdmin: boolean, isUserSalesPerson: boolean, featureOption: FeatureOption) {\r\n if (isUserAdmin) return GetMenuPath(ROUTE_PATHS.DASHBOARD_FULL);\r\n\r\n if (isUserSalesPerson) {\r\n if (featureOption.IsEnableCatalogue) return GetMenuPath(ROUTE_PATHS.CATALOGUE);\r\n return GetMenuPath(ROUTE_PATHS.CUSTOMERS);\r\n }\r\n\r\n if (featureOption.IsEnableHomePage) return GetMenuPath(ROUTE_PATHS.HOME);\r\n if (featureOption.IsEnableCatalogue) return GetMenuPath(ROUTE_PATHS.CATALOGUE);\r\n if (featureOption?.IsEnableMyDetails) return GetMenuPath(ROUTE_PATHS.MY_DETAILSN);\r\n return GetMenuPath('system/login');\r\n }\r\n\r\n override GetLists = () => [Lists_EN, Lists_HE];\r\n\r\n override OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => {\r\n const dataSources = {};\r\n dataSources['Brands'] = new DataSourceDirectService(BrandEndpoint, 'List');\r\n dataSources['Vendors'] = new DataSourceDirectService(VendorEndpoint, 'List');\r\n dataSources['Manufacturers'] = new DataSourceDirectService(ManufacturerEndpoint, 'List');\r\n dataSources['FilterAttributeGroups'] = new DataSourceDirectService(FilterAttributeEndpoint, 'GetFilterAttributeGroups');\r\n dataSources['ContactPersons'] = new DataSourceDirectService(ContactPersonEndpoint, 'List');\r\n dataSources['CustomerAddresses'] = new DataSourceDirectService(CustomerAddressEndpoint, 'List');\r\n dataSources['DimensionValues'] = new DataSourceDirectService(DimensionValueEndpoint, 'List');\r\n dataSources['Countries'] = new DataSourceDirectService(CountryEndpoint, 'List');\r\n dataSources['States'] = new DataSourceDirectService(StateEndpoint, 'List');\r\n dataSources['Banks'] = new DataSourceDirectService(BankEndpoint, 'List');\r\n dataSources['Currencies'] = new DataSourceDirectService(ItemsEndpoint, 'GetCurrencies');\r\n\r\n return of({ ...dataSources });\r\n };\r\n\r\n override OnInitApplicationAsync = (userInfo?: any): Observable => {\r\n const screenService = AppInjector.get(ScreenService);\r\n screenService.options = { showRefreshMessage: { size: true, orientation: true } };\r\n\r\n const dinoUserInfo = (userInfo && userInfo[this.ModuleName]) ? (userInfo[this.ModuleName] as UserInfo) : null;\r\n\r\n const customerService = AppInjector.get(CustomerService) as CustomerService;\r\n const sysEventsService = AppInjector.get(SysEventsService) as SysEventsService;\r\n const sessionService = AppInjector.get(SessionService) as SessionService;\r\n const dialogService = AppInjector.get(DialogService);\r\n const shoppingCartService = AppInjector.get(ShoppingCartService) as ShoppingCartService;\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n\r\n const initApplicationAction = () => {\r\n const customerOptionService = AppInjector.get(CustomerOptionService);\r\n const customerOption$ = customerOptionService.Initialize();\r\n\r\n const itemOptionService = AppInjector.get(ItemOptionService);\r\n const itemOption$ = itemOptionService.Initialize();\r\n\r\n let setCustomer$ = of(null);\r\n if (dinoUserInfo && !dinoUserInfo.IsAdmin) {\r\n setCustomer$ = customerService.SetCustomer(dinoUserInfo.CustomerID);\r\n } else {\r\n setCustomer$ = customerService.SetCustomer(null);\r\n }\r\n\r\n return combineLatest([customerOption$, itemOption$, setCustomer$]);\r\n };\r\n\r\n this.UnsubscribeAll();\r\n\r\n let initialAction = true;\r\n this.customerChanged$ = customerService.customerChanged$\r\n .subscribe(c => {\r\n\r\n sysEventsService.ReloadMenuItems();\r\n\r\n if (!initialAction) {\r\n if (c.previousCustomerID !== c.customerID) {\r\n this.OnGetGlobalDataSources().subscribe(ds => {\r\n const datasources = {};\r\n Object.keys(ds).forEach(key => datasources[`${this.ModuleName}${key}`] = ds[key]);\r\n sessionService.SetDataSources(datasources);\r\n });\r\n }\r\n }\r\n initialAction = false;\r\n\r\n if (dinoUserInfo && !dinoUserInfo.IsAdmin && c.previousCustomerID !== c.customerID) {\r\n shoppingCartService.checkIsEditMode().subscribe(result => {\r\n if (result?.IsEditMode) {\r\n const documentsEnum = resourcesService.LIST('EnumDocumentTypes', this.ModuleName);\r\n const type = documentsEnum.filter(x => x.Value === result.DocumentType)[0].Text;\r\n const ref = dialogService.open(ShoppingCartEditModeWarningDialogComponent, {\r\n header: resourcesService.RC('titleEditWarning', this.ModuleName, type, result.DocumentNumber.toString()),\r\n width: screenService.IsMobile() ? '90%' : '50%',\r\n styleClass: screenService.IsRTL() ? 'dialog-rtl ref-dialog' : 'ref-dialog ',\r\n contentStyle: { 'overflow': 'auto' },\r\n baseZIndex: 10000\r\n });\r\n }\r\n })\r\n }\r\n });\r\n\r\n if (dinoUserInfo && !(dinoUserInfo).TermsAccepted) {\r\n const termsAcceptedSubject = new Subject();\r\n const termsAccepted$ = termsAcceptedSubject.asObservable();\r\n\r\n const ref = dialogService.open(TermsOfUseDialogComponent, {\r\n header: resourcesService.RC('titleTermsOfUse', this.ModuleName),\r\n width: screenService.IsMobile() ? '90%' : '50%',\r\n styleClass: screenService.IsRTL() ? 'dialog-rtl' : '',\r\n contentStyle: { 'max-height': '2000px', 'overflow': 'auto' },\r\n baseZIndex: 10000\r\n });\r\n\r\n const refSubscription = ref.onClose.subscribe(result => {\r\n\r\n refSubscription && refSubscription.unsubscribe();\r\n ref && ref.close();\r\n\r\n if (result) {\r\n initApplicationAction()\r\n .subscribe(() => {\r\n termsAcceptedSubject.next(true);\r\n });\r\n } else {\r\n termsAcceptedSubject.next(false);\r\n }\r\n });\r\n\r\n return termsAccepted$;\r\n } else {\r\n return initApplicationAction().pipe(mergeMap(() => of(true)));\r\n }\r\n };\r\n\r\n override OnLogoutApplicationAsync = (): Observable => {\r\n this.UnsubscribeAll();\r\n\r\n const customerOptionService = AppInjector.get(CustomerOptionService);\r\n const customerOption$ = customerOptionService.Clear().pipe(tap(x => { }));\r\n\r\n const itemOptionService = AppInjector.get(ItemOptionService);\r\n const itemOption$ = itemOptionService.Clear().pipe(tap(x => { }));\r\n\r\n const categoriesService = AppInjector.get(CategoriesService);\r\n categoriesService.clear();\r\n\r\n const customerService = AppInjector.get(CustomerService) as CustomerService;\r\n const setCustomer$ = customerService.SetCustomer(null);\r\n\r\n return combineLatest([customerOption$, itemOption$, setCustomer$]).pipe(mergeMap(() => of(true)));\r\n };\r\n\r\n override OnGetAppLoginExtensionLinks = () => {\r\n const frameworkService = AppInjector.get(FrameworkService);\r\n const isEnableGuestAccess = frameworkService.SystemOptionFlag('IsEnableGuestAccess');\r\n return isEnableGuestAccess ? of([{\r\n Name: 'titleGuestAccess',\r\n Link: '/pages/guest-access',\r\n Type: EnumLoginExtensionLinkType.ButtonLink,\r\n ModuleName: this.ModuleName\r\n } as LoginExtensionLink]) : of([]);\r\n };\r\n\r\n override OnLoginPage = (): Observable => {\r\n const screenService = AppInjector.get(ScreenService);\r\n screenService.options = { showRefreshMessage: { size: true, orientation: true } };\r\n\r\n return of(true);\r\n };\r\n\r\n override ShowBreadcrumb = () => { return true; }\r\n\r\n private UnsubscribeAll() {\r\n if (this.customerChanged$ && !this.customerChanged$.closed) {\r\n this.customerChanged$.unsubscribe();\r\n }\r\n }\r\n\r\n SystemOptions = EnumSystemOptionsZ;\r\n override Enums = Enums;\r\n}\r\n\r\nexport const appConfig: AppConfig = new DinoAppConfig();\r\n","import { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumToggle, EnumLoginExtensionLinkType, EnumMessageBoxTypes, EnumWindowSizes, EnumPrintingType } from '@core/framework/sysenums.enum';\r\nimport { BasePageComponent } from '../component/BasePageComponent';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseState, DataGroupInfo } from '../entities/BaseEntities';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '../component/BaseComponent';\r\n\r\nexport class StringMapElement {\r\n Old: string;\r\n New: string;\r\n}\r\n\r\nexport class BaseCustomizationElementFilter {\r\n Component: string | string[];\r\n Name: string | string[];\r\n User: number | number[];\r\n}\r\n\r\nexport class BaseCustomizationElementLogic {\r\n Hide: boolean;\r\n HideOnMobile: boolean;\r\n HideOnDesktop: boolean;\r\n}\r\n\r\nexport class BaseCustomizationElement {\r\n Filter: BaseCustomizationElementFilter;\r\n Logic: BaseCustomizationElementLogic;\r\n}\r\n\r\nexport class FieldCustomizationElementLogic extends BaseCustomizationElementLogic {\r\n ReadOnly: boolean;\r\n Required: boolean;\r\n Label: string;\r\n DefaultValue: string;\r\n HideValues: string[];\r\n ValidationFunction: (Entity: BaseEntity, State: BaseState) => boolean;\r\n ValidationMessage: string;\r\n}\r\n\r\nexport class ComponentCustomizationElementFilter extends BaseCustomizationElementFilter {\r\n Columns: string[];\r\n}\r\n\r\nexport class FieldCustomizationElement extends BaseCustomizationElement {\r\n override Logic: FieldCustomizationElementLogic;\r\n}\r\n\r\nexport class ComponentCustomization extends BaseCustomizationElement {\r\n override Filter: ComponentCustomizationElementFilter;\r\n}\r\n\r\nexport class EntitySavedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n public Action: EnumCRUDActions\r\n ) {\r\n }\r\n}\r\n\r\nexport class EntityLoadedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n ) {\r\n }\r\n}\r\n\r\n\r\nexport class ViewModeElement {\r\n viewmode: any;\r\n visible?: boolean;\r\n text: string;\r\n callback: any;\r\n}\r\n\r\nexport class ContextMenuElement {\r\n constructor(\r\n public text: string,\r\n public onClick: () => any,\r\n public visible?: boolean | (() => boolean),\r\n public icon?: string\r\n ) { }\r\n}\r\n\r\nexport class MainMenuElement {\r\n public visible = false;\r\n public text: string;\r\n public moduleName: string;\r\n\r\n constructor(\r\n public menu: string,\r\n public path: string,\r\n public icon: string,\r\n public permission?: string,\r\n public permissionFunction?: (userInfo?: any) => boolean,\r\n public pathParams?: (userInfo?: any) => any[],\r\n public isVisibleOnMobile?: boolean,\r\n public items?: MainMenuElement[],\r\n public queryParams?: {},\r\n public showAsBottomSheet?: boolean,\r\n public click?: () => void,\r\n public isAssetIcon?: boolean\r\n ) { }\r\n}\r\n\r\n\r\n\r\nexport class DataGroupInfoHeader extends DataGroupInfo {\r\n constructor(\r\n public override Name: string,\r\n public override Value: string,\r\n public override TotalRows = 0,\r\n ) {\r\n super(Name, Value, TotalRows); \r\n }\r\n public Toggle: EnumToggle = EnumToggle.Out;\r\n public DataSource: BaseDataSourceAbstract;\r\n public Items: BaseEntity[];\r\n}\r\n\r\n\r\n\r\nexport class FieldInfo {\r\n constructor(\r\n public Name: string,\r\n public Translation: string) { }\r\n}\r\n\r\n\r\nexport class MessageBoxCustomButton {\r\n Text: string;\r\n ButtonID: number;\r\n TabIndex?: number;\r\n}\r\n\r\nexport class LoginExtensionLink {\r\n Name: string;\r\n Link: string;\r\n Type: EnumLoginExtensionLinkType;\r\n ModuleName: string;\r\n}\r\n\r\nexport class DefaultRouteParams {\r\n Route: string = '';\r\n Params: any;\r\n}\r\n\r\nexport class ToolbarSettings {\r\n PageComponentName: string;\r\n Page: BasePageComponent;\r\n\r\n Title: string;\r\n Subtitle: string;\r\n SubtitleTemplate: TemplateRef;\r\n\r\n ShowMenuButton: boolean;\r\n ShowBackButton: boolean;\r\n BackButtonClick: () => void;\r\n ViewModes: ViewModeElement[];\r\n ShowCloseButton: boolean;\r\n CloseButtonClick: () => void;\r\n OnGetPreviewTitle: () => string = () => '';\r\n\r\n OnGetContextMenuItems: () => ContextMenuElement[];\r\n ContextMenuTitle: string;\r\n ShowContextMenuAsUsualOnMobile: boolean = false;\r\n\r\n IsAllowFilter: boolean = false;\r\n IsAllowExport: boolean = false;\r\n IsAllowPrint: boolean = false;\r\n IsAllowShare: boolean = false;\r\n IsAllowNotifications: boolean = false;\r\n IsSupportHistory: boolean = false;\r\n ShowButtonsText: boolean = false;\r\n GridExtender: GridExtender | (() => GridExtender);\r\n\r\n FilterPanelWidth: EnumWindowSizes;\r\n\r\n OnPrintButtonClick: (e) => void;\r\n OnShareButtonClick: (e) => void;\r\n OnTitleClick: () => void;\r\n\r\n CustomFilterCssClass: string;\r\n}\r\n\r\nexport class InjectableComponentOptions> {\r\n TargetModuleName: string;\r\n TargetComponentName: string;\r\n TargetComponentType?: 'contact-us';\r\n ButtonText: string;\r\n ButtonIcon: string;\r\n ShowInToolbarOnMobile: boolean;\r\n IsVisibleButton: (page: BasePageComponent) => boolean;\r\n ComponentType: (new (A: ServiceBagService, ComponentName: string, StateType: (new () => BaseState)) => TComponentType);\r\n}\r\n\r\nexport class MessageBoxOptions {\r\n constructor(public Type: EnumMessageBoxTypes, public Prompt: string) {\r\n\r\n }\r\n}\r\n\r\nexport class ShareableEntity {\r\n constructor(public PageType: EnumPrintingType, public EntityType: (new () => BaseEntity), public PageComponents: ((new (...args: any[]) => BaseComponent)) []) { }\r\n}","import { AfterViewInit, ContentChildren, ViewChildren, ContentChild, OnChanges, OnDestroy, OnInit, QueryList, \r\n SimpleChanges, ViewChild, Component } from '@angular/core';\r\nimport { DxDataGridComponent, DxTabsComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { EnumCRUDActions, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseResponse, BaseState, CompanyInfo, GenericListEntity } from '../entities/BaseEntities';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs } from '../classes/BaseClasses';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { IBaseComponent, IBaseModuleComponent } from './IBaseComponent';\r\nimport { dxValidationGroupResult } from 'devextreme/ui/validation_group';\r\nimport { UiService } from '@core/framework/ui.service';\r\n\r\n@Component({\r\n selector: 'base-component',\r\n template: '
'\r\n})\r\n/** Base component with state */\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges, IBaseComponent, IBaseModuleComponent {\r\n //Class members\r\n public State: TState = {} as TState;\r\n public DataSources: BaseDataSourceAbstract[] = {} as BaseDataSourceAbstract[];\r\n\r\n public ModuleName: string = this.A.AppConfigService.getModuleNameByInstance(this);\r\n\r\n private subscribtionOnEntitySaved: Subscription;\r\n private subscribtionOnEntityLoaded: Subscription;\r\n private subscribtionOnReloadComponent: Subscription;\r\n private registeredSubscriptions: Subscription[] = [];\r\n private registeredInitComponentHandlers: (() => void)[] = [];\r\n\r\n //Child component iterators and combiners.\r\n //Since content may be injected from outside, consider both options here\r\n @ViewChild('FocusOnMe') private FocusOnMe_V: any;\r\n @ViewChildren(DxValidationGroupComponent) private validationGroups: QueryList;\r\n @ContentChild('FocusOnMe') private FocusOnMe_C: any;\r\n private get FocusOnMe(): any {\r\n return Utils.CombineChild(this.FocusOnMe_V, this.FocusOnMe_C); \r\n }\r\n @ViewChildren(SectionComponent) private Sections_V: QueryList;\r\n @ContentChildren(SectionComponent) private Sections_C: QueryList;\r\n private get Sections(): SectionComponent[] {\r\n return Utils.CombineChildren(this.Sections_V, this.Sections_C); \r\n }\r\n @ViewChildren(DxTabsComponent) Tabs: QueryList;\r\n @ViewChildren(DxDataGridComponent) Grids: QueryList;\r\n\r\n //Overrides - for usage by actual components\r\n protected OnInitComponent() { }\r\n protected OnInitComponentFinished() { }\r\n protected OnStartInitCycle() { }\r\n protected OnDestroyComponent() { }\r\n protected OnInitDataSources() { }\r\n protected OnInitState() { }\r\n // eslint-disable-next-line max-len\r\n protected OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) { }\r\n protected OnExternalEntityLoaded(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity) { }\r\n protected OnInputPropertiesChanged(changes: SimpleChanges) { }\r\n protected OnPropertiesChanged() {}\r\n protected OnGetCustomComponentStateName(): string {\r\n return undefined; \r\n }\r\n protected IsAutoFocusEnabled(): boolean {\r\n return true; \r\n }\r\n protected IsUseFinishCycleChangeDetection(): boolean {\r\n return false; \r\n }\r\n\r\n //Internal overrides - for usage by BaseComponent* framework classes only\r\n protected OnInitComponentInternal() { }\r\n protected OnInitComponentFinishedInternal() { }\r\n protected OnInitComponentFinishedAfterDetectInternal() { }\r\n protected OnStartInitCycleInternal() { }\r\n protected OnDestroyComponentInternal() { }\r\n\r\n constructor\r\n (\r\n public A: ServiceBagService,\r\n public ComponentName: string,\r\n protected StateType: (new () => TState)\r\n ) {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n }\r\n\r\n\r\n //Return name used for state, configuration, etc\r\n public get ComponentStateName(): string {\r\n const sCustom: string = this.OnGetCustomComponentStateName();\r\n return sCustom != undefined ? sCustom : this.ComponentName;\r\n }\r\n\r\n protected InitState() {\r\n //Init state\r\n this.State = { ...Utils.GetNewInstance(this.StateType), ...this.State };\r\n\r\n //Attempt to load saved state\r\n let bStateLoaded: boolean;\r\n if (!SysGlobals.IsResetState) bStateLoaded = this.LoadState();\r\n SysGlobals.IsResetState = false;\r\n\r\n //If no saved state was loaded, init fresh\r\n if (!bStateLoaded) {\r\n this.OnInitState();\r\n if (this.DoValidatorReset()) {\r\n this.validationGroups?.forEach(validationGroup => {\r\n validationGroup?.instance?.reset();\r\n });\r\n }\r\n }\r\n\r\n //Set\r\n SysGlobals.CurrentState = this.State;\r\n }\r\n\r\n //Run internal change detection, in cases when Angular does not detect on its own. For instance, when changing references inside State\r\n protected DetectChanges() {\r\n if (this.A.ChangeDetector == undefined) return;\r\n if ((this.A.ChangeDetector as any).destroyed) return;\r\n this.A.ChangeDetector.detectChanges();\r\n }\r\n\r\n public get UI(): UiService {\r\n return this.A.UI;\r\n }\r\n\r\n public get UserInfo(): any {\r\n return this.ModuleName && this.A.Session.UserInfoDict[this.ModuleName];\r\n }\r\n\r\n //This construction is required so that the component can access this member\r\n public DS(Name: string): BaseDataSourceAbstract {\r\n return this.DataSources[Name] \r\n ? this.DataSources[Name] \r\n : this.A.Session.DataSources \r\n ? this.A.Session.DataSources[`${this.ModuleName}${Name}`] \r\n : null;\r\n }\r\n\r\n public get Enums(): any {\r\n return this.A.Enums;\r\n }\r\n\r\n public get SysEnums(): SysEnumsService {\r\n return this.A.SysEnums;\r\n }\r\n\r\n public LIST(sListName): GenericListEntity[] {\r\n return this.A.ResourcesService.LIST(sListName, this.ModuleName);\r\n }\r\n\r\n public LISTITEM(sListName, sValue): string {\r\n return this.A.ResourcesService.LISTITEM(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public LISTITEMX(sListName, sValue): GenericListEntity {\r\n return this.A.ResourcesService.LISTITEMX(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public RC(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, this.ModuleName, ...args);\r\n }\r\n\r\n public RCF(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, '', ...args);\r\n }\r\n\r\n public get Framework(): FrameworkService {\r\n return this.A.Framework;\r\n }\r\n\r\n public CustomBuild(build: string, execute: () => void) {\r\n if (this.Framework.IsCustomBuild(build)) execute();\r\n }\r\n\r\n public IsCustomBuild(build: string): boolean {\r\n return this.Framework.IsCustomBuild(build);\r\n }\r\n\r\n //Preserve state into global variable\r\n SaveState() {\r\n SysGlobals.PageStates[this.ComponentStateName] = this.State;\r\n }\r\n\r\n //Load state from global variable\r\n protected LoadState(): boolean {\r\n const oState = SysGlobals.PageStates[this.ComponentStateName];\r\n if (oState == undefined) return false;\r\n this.State = Utils.CloneObject(oState);\r\n return true;\r\n }\r\n\r\n\r\n //Go to route\r\n public Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false) {\r\n //Preserve current state\r\n if (this.IsNeedSaveState(params)) this.SaveState();\r\n return this.A.Navigator.Navigate(params, optionalParams);\r\n }\r\n\r\n private IsNeedSaveState(params: any[]) {\r\n const path = params[0] as string;\r\n return !path.includes('system/');\r\n }\r\n\r\n //Go back\r\n public NavigateBack() {\r\n this.A.RouteHistoryService.GoBack();\r\n return Promise.resolve(true);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.OnInputPropertiesChanged(changes);\r\n }\r\n\r\n ngDoCheck() {\r\n this.OnPropertiesChanged();\r\n }\r\n\r\n //Attach events\r\n private SubscribeEvents() {\r\n this.subscribtionOnEntitySaved = this.A.SysEvents.OnEntitySaved.subscribe(\r\n (e: EntitySavedEventArgs) => this.OnExternalEntitySaved(e.Entity, e.Type, e.Action));\r\n this.subscribtionOnEntityLoaded = this.A.SysEvents.OnEntityLoaded.subscribe(\r\n (e: EntityLoadedEventArgs) => this.OnExternalEntityLoaded(e.Entity, e.Type));\r\n this.subscribtionOnReloadComponent = this.A.SysEvents.OnReloadComponent.subscribe(\r\n (sComponentName: string) => this.OnReloadComponent(sComponentName));\r\n }\r\n\r\n //Detach events\r\n private UnsubscribeEvents() {\r\n this.subscribtionOnEntitySaved && this.subscribtionOnEntitySaved.unsubscribe();\r\n this.subscribtionOnEntityLoaded && this.subscribtionOnEntityLoaded.unsubscribe();\r\n this.subscribtionOnReloadComponent && this.subscribtionOnReloadComponent.unsubscribe();\r\n }\r\n\r\n //Reload event handler\r\n protected OnReloadComponent(sComponentName: string) {\r\n if (this.ComponentName == sComponentName) this.ReloadComponent();\r\n }\r\n\r\n //Fully reload the component, as if user just navigated to it\r\n //Use SetTimeout in order for the navigation changes to be applied\r\n protected ReloadComponent(sComponentName: string = undefined) {\r\n if (sComponentName == undefined || sComponentName == this.ComponentName) {\r\n //Reload the current component\r\n setTimeout(() => {\r\n this.RunDestroyCycle(false);\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }, 100);\r\n } else {\r\n //Send a message to reload a different one\r\n this.A.Navigator.ReloadComponent(sComponentName);\r\n }\r\n }\r\n\r\n //Lifecycle event executors\r\n protected RunInitStartCycle(bFromAngularEvent: boolean) {\r\n this.RunInitStartCycleInternal(); \r\n }\r\n protected RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n this.RunInitFinishCycleInternal(); \r\n }\r\n protected RunDestroyCycle(bFromAngularEvent: boolean) {\r\n this.RunDestroyCycleInternal(); \r\n }\r\n\r\n //Lifecycle event hooks\r\n ngOnInit() {\r\n this.RunInitStartCycle(true); \r\n }\r\n ngAfterViewInit() {\r\n this.RunInitFinishCycle(true); \r\n }\r\n ngOnDestroy() {\r\n this.UnsubscribeRegisteredSubscriptions();\r\n this.RunDestroyCycle(true); \r\n }\r\n\r\n //Component initialization start cylce\r\n private RunInitStartCycleInternal() {\r\n //Before life-cycle events for child component overrides\r\n this.OnStartInitCycleInternal();\r\n this.OnStartInitCycle();\r\n\r\n //Page initialization lifecycle\r\n this.SubscribeEvents();\r\n this.InitState();\r\n this.OnInitDataSources();\r\n this.OnInitComponentInternal();\r\n this.ExecuteInitComponentHandler();\r\n this.OnInitComponent();\r\n }\r\n\r\n //Component initialization finish cylce\r\n private RunInitFinishCycleInternal() {\r\n //Focus on first textbox\r\n this.InitFocus();\r\n\r\n //Allow override\r\n this.OnInitComponentFinishedInternal();\r\n this.OnInitComponentFinished();\r\n\r\n //Run detection since FieldCustomizations set some values on the controls after view has been checked\r\n //!!! Code below -> PERFORMANCE GAP.\r\n //if (SysGlobals.ComponentCustomizations?.length || SysGlobals.FieldCustomizations?.length) {\r\n if (this.IsUseFinishCycleChangeDetection()) {\r\n this.DetectChanges(); \r\n }\r\n\r\n //Allow override after detect\r\n this.OnInitComponentFinishedAfterDetectInternal();\r\n\r\n this.CustomizeComponentsVisibility();\r\n }\r\n\r\n CustomizeComponentsVisibility() {\r\n if (!SysGlobals.ComponentCustomizations) return;\r\n\r\n //Customize components if already on the page\r\n this.A.CustomizationService.SetComponentCustomizations(this.Grids.toArray(), this.ComponentStateName);\r\n this.A.CustomizationService.SetComponentCustomizations(this.Sections_V.toArray(), this.ComponentStateName);\r\n const tabsItems = this.Tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n\r\n //Customize components after they will appear on the page by some conditions\r\n this.Grids.changes.subscribe((grids) => {\r\n this.A.CustomizationService.SetComponentCustomizations(grids.toArray(), this.ComponentStateName);\r\n });\r\n this.Sections_V.changes.subscribe((sections) => {\r\n this.A.CustomizationService.SetComponentCustomizations(sections.toArray(), this.ComponentStateName);\r\n });\r\n this.Tabs.changes.subscribe((tabs) => {\r\n const tabsItems = tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n });\r\n }\r\n\r\n //Destruction cycle\r\n private RunDestroyCycleInternal() {\r\n this.UnsubscribeEvents();\r\n this.UnsubscribeRegisteredSubscriptions();\r\n\r\n //Overrides\r\n this.OnDestroyComponentInternal();\r\n this.OnDestroyComponent();\r\n }\r\n\r\n //Focus on the marked control\r\n public InitFocus() {\r\n if (this.FocusOnMe && this.FocusOnMe.instance && this.IsAutoFocusEnabled()) setTimeout(() => this.FocusOnMe.instance.focus(), 500);\r\n }\r\n\r\n //Generic executer for observable\r\n protected Do(serviceResponse: Observable, bShowSuccessMessage = true, \r\n after?: (response: T) => void, fail?: (response: T) => void) {\r\n this.Framework.Do(serviceResponse, bShowSuccessMessage, after, fail);\r\n }\r\n\r\n //Lock controls. Use setTimeout since it's usually called after all kinds of values are changed, to allow DetectChanges to run before\r\n public LockControls(bLock: boolean) {\r\n setTimeout(() => {\r\n this.Sections.forEach(x => x.LockControls(bLock));\r\n });\r\n }\r\n\r\n //Reset the validation.\r\n protected ResetValidation() {\r\n this.Sections.forEach(x => x.ResetValidation());\r\n }\r\n\r\n //todo: rename it \r\n protected AcceptGridChanges(): Promise[] {\r\n const gridValidations = new Array>();\r\n this.Sections.forEach(x => x.AcceptGridChanges().forEach(v => gridValidations.push(v)));\r\n return gridValidations;\r\n }\r\n\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.Framework.SystemOptionFlag(OptionName);\r\n }\r\n\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.Framework.SystemOption(OptionName);\r\n }\r\n\r\n //Raise an event to notify potential subscribers that the entity was saved\r\n //This is in the base class since different components might be using it, not only entity ones\r\n protected NotifyEntitySaved(Entity: BaseEntity, Type: new () => BaseEntity, Action: EnumCRUDActions = EnumCRUDActions.CreateOrUpdate) {\r\n const args = new EntitySavedEventArgs(Entity, Type, Action);\r\n this.A.EntityService.SetLastSavedEntity(args);\r\n this.A.SysEvents.NotifyEntitySaved(args);\r\n }\r\n\r\n protected NotifyEntityLoaded(Entity: BaseEntity, Type: new () => BaseEntity) {\r\n this.A.SysEvents.OnEntityLoaded.emit(new EntityLoadedEventArgs(Entity, Type));\r\n }\r\n\r\n protected DoValidatorReset(): boolean {\r\n return true;\r\n }\r\n\r\n public get THIS(): BaseComponent {\r\n return this;\r\n }\r\n\r\n //Validate the group, and focus on the first elemt\r\n public ValidateValidationGroup(validationGroup: DxValidationGroupComponent, beforeMoveFocus?: () => void): Promise {\r\n //Validate\r\n const result = validationGroup.instance.validate();\r\n if (result.status === 'pending') return new Promise((resolve) => {\r\n (>result.complete).then(res => resolve(res.isValid));\r\n });\r\n\r\n return new Promise((resolve) => {\r\n if (result.isValid) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n if (beforeMoveFocus) beforeMoveFocus();\r\n\r\n //Focus and return error. Use SetTimeout since beforeMoveFocus may take some time to reflect\r\n setTimeout(() => {\r\n (result.brokenRules[0] as any).validator.focus();\r\n //Call validate method after focus again to redraw controls for correct validation error message position\r\n setTimeout(() => validationGroup.instance.validate(), 0);\r\n }, 100);\r\n resolve(false);\r\n });\r\n }\r\n\r\n //Shortcut to specify formats\r\n public get F(): CompanyInfo {\r\n return this.A.Framework.CompanyInfo;\r\n }\r\n\r\n //Return whether user has one of the permissions\r\n public IsAllow(permissions: string[]) {\r\n if (!permissions || permissions.length == 0) return true;\r\n return permissions.some((p) => this.UserInfo && this.UserInfo.hasOwnProperty('IsAllow' + p) && this.UserInfo['IsAllow' + p]);\r\n }\r\n\r\n //Filter out events that are not generated by UI\r\n //Include special way to force event by passing e==true\r\n protected IsUIEvent(e: any): boolean {\r\n if (e == true) return true;\r\n return (e != undefined && e.event != undefined);\r\n }\r\n\r\n //Bind context this to the event. It cannot be done other way\r\n protected BindHandler(sHandlerName: string) {\r\n if (this[sHandlerName] == undefined) throw (`Invalid handler ${sHandlerName} was specified`);\r\n this[sHandlerName] = this[sHandlerName].bind(this);\r\n }\r\n\r\n public RegisterSubscription(subscription: Subscription): Subscription {\r\n !this.registeredSubscriptions.includes(subscription) && this.registeredSubscriptions.push(subscription);\r\n return subscription;\r\n }\r\n\r\n public RegisterInitComponentHandler(handler: () => void) {\r\n this.registeredInitComponentHandlers.push(handler);\r\n }\r\n\r\n private UnsubscribeRegisteredSubscriptions() {\r\n //\r\n //console.log('UnsubscribeRegisteredSubscriptions: ' + this.registeredSubscriptions.length);\r\n //\r\n this.registeredSubscriptions.forEach(s => {\r\n s && !s.closed && s.unsubscribe();\r\n });\r\n }\r\n\r\n private ExecuteInitComponentHandler() {\r\n this.registeredInitComponentHandlers.forEach(h => {\r\n h && h();\r\n });\r\n }\r\n}\r\n","import { BasePageComponent } from '../../base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '../../base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '../framework/sysenums.enum';\r\nimport DxDataGrid from 'devextreme/ui/data_grid';\r\n\r\nexport class GridHelper {\r\n\r\n public static RefreshGridHeight(grid: DxDataGrid, page?: BasePageComponent) {\r\n if (grid && this.GetRowCount(grid) > 0 && grid.option('dataSource') && !(grid as any)._disposed) {\r\n const height = this.GetGridHeightRelativeToPage(grid, page);\r\n const currentHeight = grid.option('height');\r\n if (height !== currentHeight) grid.option('height', height);\r\n }\r\n }\r\n\r\n public static GetGridHeightRelativeToPage(grid: DxDataGrid, page?: BasePageComponent): any {\r\n const gridRect = grid.element().getBoundingClientRect();\r\n // If grid is empty there is no need to fit the full screen height\r\n if (this.GetRowCount(grid) === 0) return 'auto';\r\n\r\n // Calculate grid height fit to the page\r\n let height = window.innerHeight - gridRect.top;\r\n if (page && (page.DisplayMode === EnumPageDisplayModes.Window || page.DisplayMode === EnumPageDisplayModes.Dialog)) {\r\n const bottom = document.querySelector('.m4u-popup .page-body.dx-scrollview')?.getBoundingClientRect()?.bottom || 0;\r\n const bottomIndent = window.innerHeight - bottom;\r\n height -= bottomIndent;\r\n } else {\r\n // Get page footer height\r\n const pageFooters = document.querySelectorAll('.page-container m4u-footer');\r\n const pageFooter = pageFooters[pageFooters.length - 1];\r\n const pageFooterHeight = pageFooter && pageFooter['offsetParent'] \r\n && (pageFooter['offsetParent'].offsetHeight - pageFooter['offsetTop']) || 0;\r\n height -= pageFooterHeight;\r\n }\r\n\r\n // Get layout padding\r\n const pageContainers = document.getElementsByClassName('page-body');\r\n if (!pageContainers || !pageContainers.length) return 'auto';\r\n\r\n const currentLayoutPadding = +(document?.defaultView\r\n ?.getComputedStyle(pageContainers[pageContainers.length - 1], '')\r\n ?.getPropertyValue('padding-bottom')?.match(/\\d/g)?.join('') || 0);\r\n // If less than header and one row add window height\r\n return (height < 160 ? height + window.innerHeight : height) - currentLayoutPadding; // Layout padding, page footer\r\n }\r\n\r\n private static GetRowCount(grid: DxDataGrid): number {\r\n const iCount: number = grid.totalCount();\r\n return iCount == -1 ? grid.getVisibleRows().length : iCount;\r\n }\r\n}","\r\nimport { Component, ComponentFactoryResolver, ComponentRef, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DxContextMenuComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseState, BaseEntity } from './../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport dxButton from 'devextreme/ui/button';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { ContextMenuElement } from '../classes/BaseClasses';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridHelper } from '@m4u-angular/core/helpers/GridHelper';\r\n\r\n@Component({\r\n selector: 'base-grid',\r\n template: '
'\r\n})\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseGridComponent extends BaseComponent implements IGridComponent {\r\n private _gridToolbarRef: ComponentRef;\r\n private _gridToolbarComponent: GridToolbarComponent;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n private _dataSource: BaseDataSourceAbstract | any[];\r\n @Input() set DataSource(value: BaseDataSourceAbstract | any[]) {\r\n this._dataSource = value;\r\n if (value) this.InitDataSource();\r\n }\r\n get DataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n private _showAddButton: boolean;\r\n @Input() set ShowAddButton(value: boolean) {\r\n this._showAddButton = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.ShowAddButton = this._showAddButton);\r\n }\r\n get ShowAddButton() {\r\n return this._showAddButton;\r\n }\r\n\r\n private _addButtonText: string;\r\n @Input() set AddButtonText(value: string) {\r\n this._addButtonText = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonText = this._addButtonText);\r\n }\r\n get AddButtonText() {\r\n return this._addButtonText;\r\n }\r\n\r\n private _title: string;\r\n @Input() set Title(value: string) {\r\n this._title = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.Title = this._title);\r\n }\r\n get Title() {\r\n return this._title;\r\n }\r\n\r\n private _addButtonNavParams: any;\r\n @Input() set AddButtonNavParams(value: any) {\r\n this._addButtonNavParams = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonNavParams = this._addButtonNavParams);\r\n }\r\n get AddButtonNavParams() {\r\n return this._addButtonNavParams;\r\n }\r\n\r\n @Input() set Visible(value: boolean) {\r\n this.grid && (this.grid.visible = value);\r\n }\r\n\r\n @Input() IsAutoHeight: boolean;\r\n @Input() Page: BasePageComponent;\r\n @Input() AddButtonNavPath: string;\r\n @Input() StartExtraButtonsTemplate: TemplateRef;\r\n @Input() EndExtraButtonsTemplate: TemplateRef;\r\n\r\n @ViewChild(DxDataGridComponent) protected grid: DxDataGridComponent;\r\n @ViewChild(DxDataGridComponent, { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get G(): GridExtender {\r\n return this.gridAny && this.gridAny.G;\r\n }\r\n\r\n private _isUpdateScrollPosition: boolean = false;\r\n\r\n protected AfterInit() { }\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.A.SysEvents.SetLoadPanelState(true);\r\n this._isUpdateScrollPosition = this.A.Screen.IsRTL();\r\n this.RegisterSubscription(this.A.SysEvents.MenuPositon.subscribe(() => this.SetScrollPosition()));\r\n }\r\n\r\n InitDataSource() {\r\n this.AfterInit();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this._gridToolbarComponent = this.CreateGridToolbarComponent();\r\n\r\n this._subscriptions.push(this.grid.onContentReady.subscribe(() => {\r\n setTimeout(() => this.RefreshGridHeight());\r\n // this.SetScrollPosition();\r\n // Get context menu items without putting data there, just to know if any exists\r\n const contextMenuItems = this.GetGridRowContextMenu();\r\n // If no context menu items then no need to add column at all\r\n if (!contextMenuItems || !contextMenuItems.length) return;\r\n\r\n // TODO: better to use addColumn API method.\r\n const columns = this.grid.instance.option('columns');\r\n const gridColumns = columns.map((column: Column) => ({\r\n ...column,\r\n visible: column.type === 'buttons' ? column.visible : this.grid.instance.columnOption(column.dataField, 'visible'),\r\n width: column.type === 'buttons' ? column.width : this.grid.instance.columnOption(column.dataField, 'width'),\r\n visibleIndex: column.type === 'buttons' ? column.visibleIndex : this.grid.instance.columnOption(column.dataField, 'visibleIndex'),\r\n groupIndex: column.type === 'buttons' ? column.groupIndex : this.grid.instance.columnOption(column.dataField, 'groupIndex')\r\n }));\r\n\r\n const gridRowContextMenuColumn = gridColumns.find(x => x.name == 'gridRowContextMenu');\r\n if (!gridRowContextMenuColumn) {\r\n const columnOptions = {\r\n name: 'gridRowContextMenu',\r\n showInColumnChooser: false,\r\n type: 'buttons',\r\n cellTemplate: this.GridRowContextMenu,\r\n search: {\r\n enabled: false\r\n },\r\n cssClass: 'context-menu-column',\r\n allowResizing: false,\r\n allowReordering: false,\r\n width: 32\r\n } as any;\r\n gridColumns.push(columnOptions);\r\n (this.grid.instance as any).option('columns', gridColumns);\r\n }\r\n }));\r\n\r\n //this._subscriptions.push(this.grid.onOptionChanged.subscribe((e) => {\r\n // if (e.name !== 'dataSource') return;\r\n\r\n // this.grid?.instance?.getScrollable()?.scrollTo({ top: 0 });\r\n // this.grid?.instance?.repaint();\r\n //}));\r\n\r\n this.A.SysEvents.SetLoadPanelState(false);\r\n }\r\n\r\n GridRowContextMenu = (container, options) => {\r\n if (options.row.rowType !== 'data') return;\r\n\r\n const contextMenuItems = this.GetGridRowContextMenu(options);\r\n if (!contextMenuItems.length || !contextMenuItems.some(x => x.visible == null || x.visible)) return;\r\n\r\n const div = document.createElement('div');\r\n container.appendChild(div);\r\n\r\n const contextMenuButton = new dxButton(div, {\r\n icon: 'mdi mdi-dots-vertical',\r\n elementAttr: { class: 'grid-row-context-menu-button btn-size-small' },\r\n onClick: (event) => {\r\n event.event?.stopPropagation();\r\n const contextMenu = this.CreateContextMenuComponent();\r\n contextMenu.items = contextMenuItems.map(x => {\r\n const visible = typeof x.visible == 'function' ? x.visible() : x.visible;\r\n return {\r\n ...x,\r\n visible: visible\r\n };\r\n });\r\n contextMenu.target = div;\r\n contextMenu.visible = true;\r\n }\r\n });\r\n };\r\n\r\n private CreateContextMenuComponent() {\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(DxContextMenuComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n return componentRef.instance;\r\n }\r\n\r\n // Please make sure that options?.row?.rowData or options?.data is using with '?' \r\n // (for example, options?.row?.rowData?.EntryID) when overriding this method\r\n protected GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [];\r\n }\r\n\r\n RefreshGridHeight() {\r\n if (this.IsAutoHeight) GridHelper.RefreshGridHeight(this.grid.instance, this.Page);\r\n }\r\n\r\n SetScrollPosition() {\r\n setTimeout(() => {\r\n if (!this._isUpdateScrollPosition) return;\r\n\r\n const scrollable = this.grid.instance.getScrollable();\r\n if (!scrollable) return;\r\n\r\n const maxScrollLeft = scrollable.scrollWidth();\r\n scrollable.scrollTo({\r\n x: maxScrollLeft\r\n });\r\n }, 150);\r\n }\r\n\r\n override Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false): Promise {\r\n if (this.Page != undefined) (this.Page as any).SaveState();\r\n return super.Navigate(params, optionalParams, bSaveState, bSaveCurrentLocation);\r\n }\r\n\r\n private CreateGridToolbarComponent(): GridToolbarComponent {\r\n if (!this.Title && !this.ShowAddButton && !this.StartExtraButtonsTemplate && !this.EndExtraButtonsTemplate) return;\r\n\r\n const previousElement = this.containerRef.element.nativeElement.parentElement.previousSibling;\r\n if (previousElement?.tagName?.toLowerCase() === 'm4u-grid-toolbar') previousElement.remove();\r\n\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(GridToolbarComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n componentRef.instance.Grid = this.grid;\r\n componentRef.instance.ShowAddButton = this.ShowAddButton;\r\n componentRef.instance.Title = this.Title;\r\n componentRef.instance.AddButtonNavPath = this.AddButtonNavPath;\r\n componentRef.instance.AddButtonNavParams = this.AddButtonNavParams;\r\n componentRef.instance.StartExtraButtonsTemplate = this.StartExtraButtonsTemplate;\r\n componentRef.instance.EndExtraButtonsTemplate = this.EndExtraButtonsTemplate;\r\n componentRef.instance.AddButtonText = this.AddButtonText;\r\n\r\n this.containerRef.element.nativeElement.parentElement.before(componentRef.location.nativeElement);\r\n this._gridToolbarRef = componentRef;\r\n return componentRef.instance;\r\n }\r\n\r\n protected OnReorder(e, lines) {\r\n const visibleRows = e.component.getVisibleRows();\r\n const toIndex = lines.indexOf(visibleRows[e.toIndex].data);\r\n const fromIndex = lines.indexOf(e.itemData);\r\n lines.splice(fromIndex, 1);\r\n lines.splice(toIndex, 0, e.itemData);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._gridToolbarRef?.destroy();\r\n }\r\n}\r\n\r\n\r\nexport interface IGridComponent {\r\n readonly G: GridExtender;\r\n}\r\n","import { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseState, HistoryChangesSet, BaseEntitiesResponse, BaseEntityResponse, FileView, SharingInformation, BaseResponse, RenderedTemplate } from '../entities/BaseEntities';\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { Observable, map, tap, Subscription } from 'rxjs';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { Component, ComponentFactoryResolver, ContentChildren, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FieldFormComponent } from '@m4u-angular/ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { DxCheckBoxComponent } from 'devextreme-angular';\r\nimport { BaseEndpoint } from '../endpoint/BaseEndpoint';\r\n\r\n@Component({\r\n selector: 'base-page-crud-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageCRUDComponent> extends BasePageComponent {\r\n //Mode\r\n public IsAddMode: boolean;\r\n public IsSaving: boolean = false;\r\n private IsDuplicateMode: boolean;\r\n protected EntityEntryID: number;\r\n\r\n //Overrides\r\n protected OnEntitySaved() { }\r\n protected OnEntityLoaded() { }\r\n protected OnEntityDeleted() { }\r\n protected OnEntityNew() { }\r\n protected OnEntityValidate(): boolean {\r\n return true; \r\n }\r\n protected OnEntityInitObjectName(): string {\r\n return undefined; \r\n }\r\n protected OnEntityDuplicated() { }\r\n protected OnEntityPrepareForSave() { }\r\n protected OnEntityConfirmSave(resumeSave: () => void) {\r\n resumeSave(); \r\n }\r\n protected OnIsAllowDuplicate() {\r\n return false; \r\n }\r\n protected IsAllowNavbar() {\r\n return false; \r\n }\r\n protected OnGetEndpoint(): BaseEndpointCRUD {\r\n return this.Endpoint; \r\n }\r\n\r\n // Functions validation the entity\r\n private EntityValidations: (() => Observable)[] = [];\r\n private _subscriptions: Subscription[] = [];\r\n\r\n @ViewChildren(FieldFormComponent) private Fields_V: QueryList;\r\n @ContentChildren(FieldFormComponent) private Fields_C: QueryList;\r\n protected get Fields(): FieldFormComponent[] {\r\n return Utils.CombineChildren(this.Fields_V, this.Fields_C); \r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n PageName: string,\r\n EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n protected Endpoint: TEndpoint,\r\n DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.Window,\r\n EntityMode: EnumPageEntitySources = EnumPageEntitySources.CRUD\r\n ) {\r\n super(A, PageName, EntityType, StateType, DisplayMode, EntityMode);\r\n }\r\n\r\n //This is done here since before this place, ViewChildren is not initiallized\r\n //DetectChanges is called in base class\r\n override OnInitComponentFinishedInternal() {\r\n if (this.IsAddMode) this.SetFieldDefaultValues();\r\n super.OnInitComponentFinishedInternal();\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n super.OnInitComponentFinishedAfterDetectInternal();\r\n this.SetDefaultFieldsLabels();\r\n }\r\n\r\n //Actually initialize the component\r\n override OnInitComponentInternal() {\r\n this.IsDuplicateMode = this.QueryParams?.IsDuplicate == 'true' || this.QueryParams?.IsDuplicate === true;\r\n\r\n //Perform base initialization\r\n super.OnInitComponentInternal();\r\n\r\n //Read params from route snapshot\r\n const sParam: string = this.EntityEntryID || this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n //Reset flags\r\n this.IsAddMode = false;\r\n this.IsLoading = true;\r\n\r\n //Fire Onnew or OnLoad event\r\n if (sParam == 'new') {\r\n this.StartNewEntity();\r\n } else {\r\n if (+sParam > 0) {\r\n if (!this.EntityEntryID) this.EntityEntryID = +sParam;\r\n this.LoadEntity(+sParam);\r\n } else {\r\n this.UI.UnexpectedMessage('Invalid route was specified');\r\n }\r\n }\r\n\r\n if (this.OnIsAllowDuplicate() && !this.IsAddMode) {\r\n this.ContextMenuDefault.push({\r\n text: this.RC('titleDuplicate'),\r\n visible: true,\r\n onClick: this.OnDuplicateInternal.bind(this)\r\n });\r\n }\r\n\r\n this._subscriptions.push(this.A.SysEvents.Toolbar.subscribe(toolbarSettings => {\r\n if (!toolbarSettings || !this.ToolbarSettings ||toolbarSettings.PageComponentName != this.ToolbarSettings.PageComponentName) return;\r\n\r\n this.SetDefaultFieldsLabels();\r\n }));\r\n }\r\n\r\n protected override OnShare(): (sharingInformation: SharingInformation) => Observable> {\r\n return (sharingInformation) => {\r\n sharingInformation && (sharingInformation.EntityEntryID = this.EntityEntryID);\r\n return this.Endpoint.Share(sharingInformation);\r\n }\r\n }\r\n\r\n protected override OnGetRenderedTemplate(): (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable> {\r\n return (notificationTemplateID, deliveryOption) => this.Endpoint.GetRenderedTemplate(this.EntityEntryID, notificationTemplateID, deliveryOption);\r\n }\r\n\r\n //Load an existing entity\r\n //InitEntity is called here as well since load is asynchronous event and we need \r\n //the entity in existing state in order not to have undefined references in the template\r\n protected LoadEntity(iEntryID: number) {\r\n this.InitEntity();\r\n this.SetEntity(this.EntityType, this.OnGetEndpoint().Get(iEntryID), false, () => this.ReflectEntityLoaded());\r\n }\r\n\r\n //Perform entity validation\r\n protected ValidateEntity(): Promise {\r\n if (!this.OnEntityValidate()) return new Promise((response) => response(false));\r\n\r\n return new Promise((resolve) => {\r\n const validations = this.AcceptGridChanges().concat(this.EntityValidations.map((x) => x().toPromise()));\r\n\r\n //if no grids\r\n if (!validations.length) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n //wait for all validations\r\n Promise.all(validations).then((validationResults: []) => {\r\n //if all validations true\r\n if (validationResults.filter(r => r === false).length === 0)\r\n resolve(true);\r\n else\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityLoaded() {\r\n this.IsAddMode = false;\r\n this.OnEntityLoaded();\r\n this.NotifyEntityLoaded(this.Entity, this.EntityType);\r\n this.NotifyReloadTitle();\r\n //this.RefreshEntityOriginal()\r\n this.IsLoading = false;\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntitySaved() {\r\n this.OnEntitySaved();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, this.IsAddMode ? EnumCRUDActions.Create : EnumCRUDActions.Update);\r\n this.IsAddMode = false;\r\n this.IsSaving = false;\r\n //this.RefreshEntityOriginal();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityDeleted() {\r\n this.OnEntityDeleted();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Delete);\r\n this.NavigateBack();\r\n }\r\n\r\n //Event handler for validating and saving current entity, DON'T override it\r\n public OnSave() {\r\n this.OnEntityPrepareForSave();\r\n this.ValidateEntity().then(isValid => {\r\n if (isValid) {\r\n this.OnEntityConfirmSave(() => this.OnDoSave());\r\n } else {\r\n this.IsDuplicateMode = false;\r\n }\r\n });\r\n }\r\n\r\n //default save implementation, can be overriden\r\n protected OnDoSave() {\r\n this.IsSaving = true;\r\n this.SetEntity(this.EntityType, this.Endpoint.Save(this.Entity), true, (_) => this.ReflectEntitySaved(), (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteEntity();\r\n }\r\n\r\n DeleteEntity() {\r\n this.Do(this.Endpoint.Delete(this.Entity.EntryID), true, () => this.ReflectEntityDeleted());\r\n }\r\n\r\n //Create a new entity\r\n protected StartNewEntity() {\r\n this.IsAddMode = true;\r\n this.OnEntityNew();\r\n this.RefreshEntityOriginal();\r\n this.IsLoading = false;\r\n this.SubscribeOnEntityChanges();\r\n }\r\n\r\n protected override InitEntity() {\r\n\r\n //Save global entity before it will be empty in base logic\r\n let duplicatedEntity = null;\r\n\r\n if (this.IsDuplicateMode) {\r\n const currentEntity = SysGlobals.CurrentEntity as TEntity;\r\n if (currentEntity) {\r\n duplicatedEntity = Utils.MapObject(this.EntityType, currentEntity);\r\n duplicatedEntity.EntryID = -1;\r\n }\r\n }\r\n\r\n super.InitEntity();\r\n\r\n // Duplicate entity to current\r\n if (this.IsDuplicateMode && duplicatedEntity) {\r\n this.Entity = Utils.MapObject(this.EntityType, duplicatedEntity);\r\n this.OnEntityDuplicated();\r\n\r\n this.IsDuplicateMode = false;\r\n }\r\n }\r\n\r\n public SetFieldDefaultValues() {\r\n this.A.SysEvents.OnSetDefaults.emit();\r\n }\r\n\r\n //Return title with document number\r\n protected override OnInitTitle(): string {\r\n const sObjectName: string = this.GetEntityObjectName();\r\n return `${this.GetDefaultTitle()}${(sObjectName ? (' - ' + sObjectName) : '')}`;\r\n }\r\n\r\n //Return entity object name allowing overide\r\n public GetEntityObjectName(): string {\r\n const sCustomObjectName: string = this.OnEntityInitObjectName();\r\n return sCustomObjectName ? sCustomObjectName : this.GetDefaultEntityObjectName();\r\n }\r\n\r\n public override OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) {\r\n // Set DocEntry in the injectable component\r\n injectableComponent.TargetDocEntry = this.EntityEntryID;\r\n // Get validation function for the entity from the injectable component\r\n this.EntityValidations.push(injectableComponent.IsValidEntity);\r\n }\r\n\r\n //Return default name for the object\r\n private GetDefaultEntityObjectName(): string {\r\n return (this.Entity != null && this.Entity.EntryID > 0 ? `${this.Entity.EntryID}` : '');\r\n }\r\n\r\n OnDuplicateInternal() {\r\n const currentRoute = this.A.Navigator.GetCurrentRouteWithoutParams();\r\n this.A.Navigator.Navigate([`${currentRoute}/new`], { IsDuplicate: true });\r\n }\r\n\r\n override OnGetHistoryInternal() {\r\n return this.Endpoint.GetHistory(this.Entity.EntryID)\r\n .pipe(\r\n tap(h => {\r\n if (!h.IsSuccess) {\r\n this.UI.StopMessage(h.ResponseMessage); \r\n } \r\n }),\r\n map(h => h.Entities)\r\n );\r\n }\r\n\r\n private _fieldsCount: number;\r\n private _fieldsNames: string[];\r\n protected override OnPropertiesChanged(): void {\r\n if (this._fieldsCount !== this.Fields.length) {\r\n const currentFieldNames = this.Fields.map(x => x.Name);\r\n if (JSON.stringify(this._fieldsNames) != JSON.stringify(currentFieldNames)) this.SetDefaultFieldsLabels();\r\n }\r\n }\r\n\r\n SetDefaultFieldsLabels() {\r\n this._fieldsNames = this.Fields.map(x => x.Name);\r\n this._fieldsCount = this.Fields.length;\r\n setTimeout(() => this.Fields.forEach(field => {\r\n if (Utils.IsEmpty(this.Entity.TypeName)) return;\r\n\r\n const control = field.GetEditorControl();\r\n const fieldLabel = this.RC(`BL.${this.Entity.TypeName}.${field.Name}`);\r\n\r\n if (control instanceof DxCheckBoxComponent) {\r\n Utils.IsEmpty(control.text) && Utils.IsEmpty(field.Label) && (control.text = fieldLabel);\r\n } else {\r\n Utils.IsEmpty(field.Label) && (field.Label = fieldLabel);\r\n }\r\n }));\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n super.OnDestroyComponentInternal();\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n}\r\n","import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport validationEngine from 'devextreme/ui/validation_engine';\r\nimport { Observable, Subject, Subscription, of, mergeMap } from 'rxjs';\r\nimport { ContextMenuElement, ToolbarSettings, ViewModeElement } from '../classes/BaseClasses';\r\nimport { EnumApplicationMode, EnumFilterPanelActions, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseEntityResponse, BaseResponse, BaseState, FileView, HistoryChangesSet, SharingInformation, RenderedTemplate } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\n\r\n@Component({\r\n selector: 'base-page-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageComponent extends BaseComponent {\r\n //Entity bindings\r\n @Input() public Entity: TEntity = {} as TEntity;\r\n public EntityOriginal: TEntity = {} as TEntity;\r\n\r\n //Flags\r\n public IsLoading: boolean;\r\n private _isDirtyEntity: boolean = false;\r\n private _isDirtyCustom: boolean = false;\r\n public OnIsDirtyDisabled() {\r\n return false;\r\n }\r\n\r\n //Primary links\r\n public ToolbarSettings: ToolbarSettings;\r\n\r\n //Major fields\r\n public QueryParams: any;\r\n public ContextMenuDefault: ContextMenuElement[] = [];\r\n protected EntityTypes: string[];\r\n\r\n //Subscriptions\r\n private onScreenSizeChanged$Subscription: Subscription;\r\n private onFilterPanel$Subscription: Subscription;\r\n private onEntityChange$Subscription: Subscription;\r\n private pageHistory$Subscription: Subscription;\r\n\r\n //Overrides\r\n protected OnInitEntity() { }\r\n protected OnInitTitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitSubtitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitContextMenus(): ContextMenuElement[] {\r\n return undefined;\r\n }\r\n protected OnInitViewModes(): ViewModeElement[] {\r\n return undefined;\r\n }\r\n protected OnInitDefaultViewModeID(): any {\r\n return undefined;\r\n }\r\n public OnClose() {\r\n return true;\r\n }\r\n protected OnSubmitPage() { }\r\n protected OnApplyFilter() { }\r\n protected OnClearFilter() { }\r\n protected OnReadyFilter() { }\r\n protected OnGetContextMenuTitle(): string {\r\n return '';\r\n }\r\n public OnGetFilterDescription(): string {\r\n return '';\r\n }\r\n protected OnGetPrintTitle(): string {\r\n return '';\r\n }\r\n public OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) { }\r\n public OnGetHistoryCustom(): Observable {\r\n return of(undefined);\r\n }\r\n public OnGetHistoryInternal(): Observable {\r\n return of(undefined);\r\n }\r\n\r\n\r\n private _showAsWindowOnMobile: boolean;\r\n get ShowAsWindowOnMobile() {\r\n return this._showAsWindowOnMobile || this.OnShowAsWindowOnMobile();\r\n }\r\n protected OnShowAsWindowOnMobile() {\r\n return false;\r\n }\r\n\r\n @ViewChild(DxValidationGroupComponent) protected validationGroup: DxValidationGroupComponent;\r\n @ViewChild(PageLayoutComponent) protected layout: PageLayoutComponent;\r\n\r\n constructor\r\n (\r\n public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n public DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.FullScreen,\r\n public EntityMode: EnumPageEntitySources = EnumPageEntitySources.Internal\r\n ) {\r\n super(A, ComponentName, StateType);\r\n\r\n if (this.A.Screen.IsMobile() && DisplayMode == EnumPageDisplayModes.Window && !this.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.BottomSheet;\r\n }\r\n this.BindHandler('NavigateBack');\r\n }\r\n\r\n public get IsDirty(): boolean {\r\n return !this.OnIsDirtyDisabled() && (this._isDirtyEntity || this._isDirtyCustom);\r\n }\r\n\r\n public SetDirty() {\r\n this._isDirtyCustom = true;\r\n }\r\n\r\n //Run initialization cycle\r\n protected override RunInitStartCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitStartCycle(bFromAngularEvent);\r\n }\r\n protected override RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitFinishCycle(bFromAngularEvent);\r\n }\r\n protected override RunDestroyCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunDestroyCycle(bFromAngularEvent);\r\n }\r\n private IsRunCycle(bFromAngularEvent: boolean) {\r\n return !(bFromAngularEvent && this.DisplayMode == EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n //Initialize page\r\n override OnInitComponentInternal() {\r\n super.OnInitComponentInternal();\r\n this.InitEntity();\r\n\r\n // check that it is redundant\r\n /*this.onScreenSizeChanged$Subscription = this.A.Screen.ScreenSize$\r\n .subscribe(() => {\r\n this.ReloadToolbar();\r\n });*/\r\n\r\n this.pageHistory$Subscription = this.A.RouteHistoryService.PageHistory$.subscribe((historyItem) => {\r\n if (this instanceof historyItem.Component) {\r\n historyItem.Title = this.GetTitle();\r\n historyItem.ComponentName = this.ComponentName;\r\n this.A.RouteHistoryService.UpdateHistoryItem(historyItem);\r\n }\r\n });\r\n\r\n this.onFilterPanel$Subscription = this.A.SysEvents.FilterPanel\r\n .subscribe(action => {\r\n switch (action) {\r\n case EnumFilterPanelActions.Apply:\r\n this.OnApplyFilter();\r\n break;\r\n case EnumFilterPanelActions.Clear:\r\n this.OnClearFilter();\r\n break;\r\n case EnumFilterPanelActions.Ready:\r\n this.OnReadyFilter();\r\n break;\r\n }\r\n });\r\n\r\n if (this.A.Screen.IsMobile() && this.DisplayMode == EnumPageDisplayModes.BottomSheet && !this.ShowAsWindowOnMobile) {\r\n this.m_IsDialogVisible = this.m_IsDialogRendered = true;\r\n }\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n this.onScreenSizeChanged$Subscription && this.onScreenSizeChanged$Subscription.unsubscribe();\r\n this.onFilterPanel$Subscription && this.onFilterPanel$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.pageHistory$Subscription && this.pageHistory$Subscription.unsubscribe();\r\n }\r\n\r\n override OnStartInitCycleInternal() {\r\n //Query params are not supported for dialog and bottom sheet\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return;\r\n //Get renamed query params\r\n this.QueryParams = this.A.Navigator.GetQueryParams(this.A.Navigator.IsCurrentRouteWindow());\r\n\r\n if (this.A.Screen.IsMobile() && this.QueryParams && this.DisplayMode === EnumPageDisplayModes.BottomSheet && this.QueryParams.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.Window;\r\n this._showAsWindowOnMobile = true;\r\n }\r\n }\r\n\r\n override OnInitComponentFinishedInternal() {\r\n this.InitToolbarSettings();\r\n this.NotifyReloadTitle();\r\n\r\n //if (this.PageLayout) {\r\n // const containerRef = this.PageLayout.containerRef;\r\n // const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n\r\n // SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n // if (x.TargetModuleName === this.ModuleName && x.TargetComponentName === this.ComponentName) {\r\n // // Resolve an injectable component\r\n // const componentFactory = componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n // const componentRef = containerRef.createComponent>(componentFactory);\r\n // // Set fields\r\n // componentRef.instance.TargetComponentName = this.ComponentName;\r\n // componentRef.instance.TargetAppName = this.ModuleName;\r\n // componentRef.instance.EntityType = this.EntityType;\r\n\r\n // // Handle the injectable component on high levels\r\n // this.OnInitInjectableComponent(componentRef.instance);\r\n\r\n // if (this.A.Screen.IsDesktop()) {\r\n // // Add buttons to toolbar\r\n // const buttonSettings = {\r\n // Type: 'normal',\r\n // Text: x.ButtonText,\r\n // Click: () => { componentRef.instance.BaseAction(); }\r\n // };\r\n // this.PageLayout.ToolbarButtons.push(buttonSettings);\r\n\r\n // // Give buttons settings to ths injectable component\r\n // componentRef.instance.ButtonSettings = buttonSettings;\r\n // } else {\r\n // this.ContextMenuDefault.push({\r\n // text: x.ButtonText,\r\n // onClick: () => { componentRef.instance.BaseAction(); }\r\n // });\r\n // }\r\n\r\n // }\r\n // });\r\n //}\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) return;\r\n\r\n //Reset the validation\r\n this.ResetValidation();\r\n }\r\n\r\n public RefreshEntityOriginal() {\r\n this.EntityOriginal = Utils.MapObject(this.EntityType, this.Entity);\r\n this._isDirtyEntity = false;\r\n this._isDirtyCustom = false;\r\n }\r\n\r\n //Initialize an empty entity\r\n protected InitEntity() {\r\n if (this.EntityMode == EnumPageEntitySources.External) return;\r\n this.Entity = Utils.GetNewInstance(this.EntityType);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n this.OnInitEntity();\r\n this.RefreshEntityOriginal();\r\n }\r\n\r\n //Apply a new entity to the page\r\n protected SetEntity(type: (new () => TEntity), serviceResponse: Observable>, bShowSuccessMessage: boolean = false, after?: (response: BaseEntityResponse) => void, fail?: (response: BaseEntityResponse) => void) {\r\n this.Do(serviceResponse, bShowSuccessMessage, (response: BaseEntityResponse) => {\r\n //Set entities\r\n this.Entity = Utils.MapObject(type, response.Entity);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n\r\n //Save original (after event on purpose, to allow comparing with previous state)\r\n this.RefreshEntityOriginal();\r\n\r\n //subscribe on entity changes\r\n this.SubscribeOnEntityChanges();\r\n\r\n //Post-load event\r\n if (after != undefined) after(response);\r\n }, fail);\r\n }\r\n\r\n protected SubscribeOnEntityChanges() {\r\n if (this.OnIsDirtyDisabled()) return;\r\n const changed = new Subject();\r\n\r\n //add proxy for emiting changes\r\n this.Entity = Utils.DeepProxy(this.Entity, changed) as TEntity;\r\n\r\n //add subscription for handling changes\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription = changed.subscribe((_) => {\r\n this._isDirtyEntity = !Utils.IsEquals(this.Entity, this.EntityOriginal, true);\r\n });\r\n }\r\n\r\n //Return default title for the page\r\n //If defined using menu path, use it. \r\n //If not, fallback to component name\r\n protected GetDefaultTitle(): string {\r\n let sTitle: string;\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) sTitle = this.RC(`$$Pages.${SysGlobals.MenuPath}`);\r\n if (sTitle == undefined) sTitle = this.RC(`Pages.${this.ComponentStateName}`);\r\n return sTitle;\r\n }\r\n\r\n //Return the title for the component\r\n public GetTitle(): string {\r\n const sCustomTitle: string = this.OnInitTitle();\r\n const sFinalTitle: string = sCustomTitle ? sCustomTitle : this.GetDefaultTitle();\r\n return sFinalTitle;\r\n }\r\n\r\n public GetSubtitle(): string {\r\n const customSubtitle = this.OnInitSubtitle();\r\n return customSubtitle || '';\r\n }\r\n\r\n //Return context menu to the toolbar\r\n public GetContextMenus(): ContextMenuElement[] {\r\n let contextMenu = this.OnInitContextMenus();\r\n if (contextMenu === undefined) {\r\n contextMenu = [];\r\n }\r\n\r\n contextMenu = this.ContextMenuDefault.concat(contextMenu);\r\n\r\n return contextMenu;\r\n }\r\n\r\n\r\n //Return context menu to the toolbar\r\n public GetViewModes(): ViewModeElement[] {\r\n return this.OnInitViewModes();\r\n }\r\n\r\n public GetDefaultViewModeID(): any {\r\n\r\n return this.OnInitDefaultViewModeID();\r\n }\r\n\r\n //Signal toolbar to reload the title\r\n protected NotifyReloadTitle() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected RepaintToolbar() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected ReloadToolbar() {\r\n this.InitToolbarSettings();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n InitToolbarSettings() {\r\n this.ToolbarSettings = new ToolbarSettings;\r\n this.ToolbarSettings.BackButtonClick = this.NavigateBack;\r\n this.ToolbarSettings.PageComponentName = this.ComponentName;\r\n this.ToolbarSettings.Page = this;\r\n this.ToolbarSettings.OnGetContextMenuItems = () => this.GetContextMenus();\r\n this.ToolbarSettings.ContextMenuTitle = this.OnGetContextMenuTitle();\r\n this.ToolbarSettings.ViewModes = this.GetViewModes();\r\n this.ToolbarSettings.CloseButtonClick = () => this.ClosePage();\r\n this.ToolbarSettings.OnShareButtonClick = (e) => {\r\n this.A.ShareService.OpenShareDialog(this.ComponentName, this.EntityOriginal?.TypeName, this.OnGetRenderedTemplate() , this.OnShare());\r\n };\r\n\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n if (customToolbarSettings) this.ToolbarSettings = { ...this.ToolbarSettings, ...customToolbarSettings };\r\n }\r\n\r\n protected OnShare(): (sharingInformation: SharingInformation) => Observable> {\r\n return null;\r\n }\r\n\r\n protected OnGetRenderedTemplate(): (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable> {\r\n return this.A.ShareService.GetDefaultOnGetRenderedTemplate();\r\n }\r\n\r\n protected SetToolbarTitle() {\r\n if (this.ToolbarSettings == undefined) return;\r\n this.ToolbarSettings.Title = this.GetTitle();\r\n this.ToolbarSettings.Subtitle = this.GetSubtitle();\r\n\r\n this.A.RouteHistoryService.SetHistoryItemTitle(this.ComponentName, this.ToolbarSettings.Title);\r\n }\r\n\r\n protected SetToolbarButtonsVisibility() {\r\n if (this.ToolbarSettings == undefined) return;\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n this.ToolbarSettings.ShowMenuButton = customToolbarSettings?.ShowMenuButton != null\r\n ? customToolbarSettings.ShowMenuButton\r\n : this.A.Screen.IsMobile() && this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n this.ToolbarSettings.ShowBackButton = customToolbarSettings?.ShowBackButton != null\r\n ? customToolbarSettings.ShowBackButton\r\n : !this.A.AppConfigService.AppConfig.ShowBreadcrumb() && (\r\n (this.IsShowAsFullScreen() && this.A.RouteHistoryService.HistoryLength > 1) ||\r\n (this.DisplayMode == EnumPageDisplayModes.Window && this.A.RouteHistoryService.HasHistoryForWindow())\r\n );\r\n this.ToolbarSettings.ShowCloseButton = customToolbarSettings?.ShowCloseButton != null\r\n ? customToolbarSettings.ShowCloseButton\r\n : !this.IsShowAsFullScreen() && (this.DisplayMode == EnumPageDisplayModes.Window || this.DisplayMode == EnumPageDisplayModes.Dialog)\r\n || this.DisplayMode == EnumPageDisplayModes.BottomSheet;\r\n this.ToolbarSettings.IsAllowNotifications = customToolbarSettings?.IsAllowNotifications != null\r\n ? customToolbarSettings.IsAllowNotifications\r\n : this.A.AppConfigService.AppConfig.IsAllowNotifications && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return undefined;\r\n }\r\n\r\n protected override DoValidatorReset(): boolean {\r\n return !this.Entity || !this.Entity.EntryID;\r\n }\r\n\r\n //*IsDialogRendered is to prevent *ngIf from removing the content and causes unexplainable errors\r\n private m_IsDialogRendered: boolean;\r\n public get IsDialogRendered(): boolean {\r\n return this.m_IsDialogRendered;\r\n }\r\n\r\n //This is an indication for the template whether it is visible at the moment\r\n private m_IsDialogVisible: boolean;\r\n public get IsDialogVisible(): boolean {\r\n return this.m_IsDialogVisible;\r\n }\r\n\r\n private _showDialogAsBottomSheet: boolean;\r\n public get ShowDialogAsBottomSheet(): boolean {\r\n return this._showDialogAsBottomSheet;\r\n }\r\n\r\n //Must be executed to initialize the dialog, before setting any values to it\r\n //The reason we have this is that because the same dialog might be reused many times\r\n public InitDialog(InitialEntity?: TEntity) {\r\n if (InitialEntity != undefined) this.Entity = InitialEntity;\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }\r\n\r\n //Show the component as a dialog\r\n private m_DialogCompletedHandler: (e: any) => void;\r\n private m_DialogCanceledHandler: () => void;\r\n private ShowDialog(DialogCompletedHandler: (e: any) => void, DialogCanceledHandler?: () => void) {\r\n //Check\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog && this.DisplayMode != EnumPageDisplayModes.BottomSheet)\r\n throw new Error('Your page is not a dialog, use navigation methods instead');\r\n\r\n //Reload title since it may be dependant on state that was loaded so far\r\n this.NotifyReloadTitle();\r\n\r\n //Set visibility flags and handler\r\n this.m_IsDialogVisible = true;\r\n this.m_IsDialogRendered = true;\r\n this.m_DialogCompletedHandler = DialogCompletedHandler;\r\n this.m_DialogCanceledHandler = DialogCanceledHandler;\r\n }\r\n\r\n //Combine both methods for cases when no initial state data has to be set\r\n public ShowDialogShort(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n showAsUsualOnMobile?: boolean,\r\n initialEntity?: TEntity | any) {\r\n if (this.A.Screen.IsMobile() && !showAsUsualOnMobile) {\r\n this._showDialogAsBottomSheet = true;\r\n }\r\n\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n public ShowBottomSheet(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n initialEntity?: TEntity | any) {\r\n\r\n this._showDialogAsBottomSheet = true;\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n //Close dialog and raise the callback to parent\r\n public CloseDialogWithSuccess(e?: any) {\r\n this.HideDialog();\r\n if (this.m_DialogCompletedHandler) this.m_DialogCompletedHandler(e);\r\n }\r\n\r\n //Close dialog without any event\r\n public CloseDialogWithCancel() {\r\n this.HideDialog();\r\n if (this.m_DialogCanceledHandler) this.m_DialogCanceledHandler();\r\n }\r\n\r\n //Hide the dialog\r\n private HideDialog() {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n\r\n //if (this.validationGroup && this.validationGroup.instance) {\r\n // const result = validationEngine.validateGroup(this.validationGroup.instance);\r\n // result.isValid && this.validationGroup.instance.reset();\r\n //}\r\n\r\n this.m_IsDialogVisible = false;\r\n this.RunDestroyCycle(false);\r\n }\r\n\r\n //public ScrollToTop() {\r\n // this.PageLayout.scroll.instance.scrollTo(0);\r\n //}\r\n\r\n public IsShowAsFullScreen(): boolean {\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.A.Screen.IsMobile();\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? true : false;\r\n }\r\n\r\n //Closes page, whether dialog or window\r\n public ClosePage() {\r\n if (this.OnClose()) {\r\n switch (this.DisplayMode) {\r\n case EnumPageDisplayModes.Window:\r\n this.A.RouteHistoryService.CloseWindow();\r\n return;\r\n case EnumPageDisplayModes.Dialog:\r\n this.CloseDialogWithCancel();\r\n return;\r\n case EnumPageDisplayModes.BottomSheet:\r\n if (this._showDialogAsBottomSheet) {\r\n this._showDialogAsBottomSheet = false;\r\n this.CloseDialogWithCancel();\r\n } else {\r\n this.A.RouteHistoryService.CloseWindow();\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.A.AppConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n public get ClientHeight(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.height || 0;\r\n }\r\n\r\n public get ClientWidth(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.width || 0;\r\n }\r\n\r\n private GetLastPageBodyElement() {\r\n const pageBodyElements = document.querySelectorAll(`.${this.ComponentName} .page-body`);\r\n return pageBodyElements && pageBodyElements.length > 0 ? pageBodyElements[pageBodyElements.length - 1] : null;\r\n }\r\n\r\n public ShowPreview(pdfData: string | Blob, fileName: string) {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, true, pdfData, fileName);\r\n }\r\n\r\n public HidePreview() {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, false);\r\n }\r\n\r\n public GetHistory(): Observable {\r\n return this.OnGetHistoryCustom().pipe(\r\n mergeMap(h => {\r\n if (!h) {\r\n return this.OnGetHistoryInternal();\r\n }\r\n return of(h);\r\n }));\r\n }\r\n}\r\n","import { ChangeDetectorRef, Injectable, Optional } from \"@angular/core\";\r\nimport { FrameworkService } from \"@core/framework/framework.service\";\r\nimport { NavigatorService } from \"@core/framework/navigator.service\";\r\nimport { SysEventsService } from \"@core/framework/sysevents.service\";\r\nimport { SysEnumsService } from \"@core/framework/sysenums.enum\";\r\nimport { GenericListEndpoint } from \"@core/endpoints/genericlist.endpoint\";\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { EntityService } from '@m4u-angular/core/framework/entity.service';\r\nimport { ShareService } from \"@core/framework/share.service\";\r\n\r\n@Injectable()\r\nexport class ServiceBagService {\r\n Enums: any = {};\r\n constructor(\r\n public Framework: FrameworkService,\r\n @Optional() public ChangeDetector: ChangeDetectorRef,\r\n public GenericListEndpoint: GenericListEndpoint,\r\n public SysEnums: SysEnumsService,\r\n public Session: SessionService,\r\n public Navigator: NavigatorService,\r\n public SysEvents: SysEventsService,\r\n public ResourcesService: ResourcesService,\r\n public AppConfigService: AppConfigService,\r\n public CustomizationService: CustomizationService,\r\n public Screen: ScreenService,\r\n public UI: UiService,\r\n public RouteHistoryService: RouteHistoryService,\r\n public EntityService: EntityService,\r\n public ShareService: ShareService) {\r\n this.Enums = this.AppConfigService.AppConfig.Enums;\r\n }\r\n\r\n}\r\n\r\nexport const ServiceBagServices =\r\n [\r\n ServiceBagService,\r\n NavigatorService\r\n ]\r\n","import { APIGatewayService } from '@core/gateway/APIGateway.service';\r\nimport CustomStore from \"devextreme/data/custom_store\";\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { Observable } from 'rxjs';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\n\r\n\r\nexport class BaseDataStoreReadOnly extends BaseDataStoreAbstract\r\n{\r\n private api: APIGatewayService;\r\n\r\n constructor(\r\n private ControllerName?: string,\r\n private ActionName?: string,\r\n private QueryParams?: any,\r\n private customLoadAction?: (options?: DataLoadOptions) => Observable,\r\n private customGetAction?: (Value: any) => Observable,\r\n // @ts-ignore\r\n private OnLoadedHandler?: (Data: any[]) => void,\r\n private IsRaw: boolean = true,\r\n // @ts-ignore\r\n private KeyFieldName: any = \"EntryID\")\r\n {\r\n //Base\r\n super();\r\n\r\n //Cannot inject in constructor since we create the class manually\r\n this.api = AppInjector.get(APIGatewayService);\r\n\r\n //Create custom store. Separated because of ByKey callback, does not work if put together conditionally\r\n if (this.IsRaw)\r\n {\r\n this.m_store = new CustomStore({\r\n key: KeyFieldName,\r\n loadMode: \"raw\",\r\n load: () => this.ImplementLoad(undefined),\r\n onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}\r\n });\r\n\r\n }\r\n else\r\n {\r\n this.m_store = new CustomStore({\r\n key: KeyFieldName,\r\n loadMode: \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}\r\n });\r\n }\r\n \r\n\r\n }\r\n\r\n //Perform the actual load\r\n private ImplementLoad(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n if (this.customLoadAction == undefined)\r\n {\r\n return this.ShapeResponse(this.api.ExecuteGetAction(this.ControllerName, this.ActionName, { ...this.QueryParams, ...options.GetLoadOptions() }));\r\n }\r\n else\r\n {\r\n return this.ShapeResponse(this.customLoadAction(options));\r\n }\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.customGetAction(Value));\r\n }\r\n}\r\n","import { BaseEntity } from '../entities/BaseEntities';\r\nimport CustomStore from \"devextreme/data/custom_store\";\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\n\r\n\r\nexport class BaseDataStoreCRUD extends BaseDataStoreAbstract\r\n{\r\n constructor(private endpoint: BaseEndpointCRUD)\r\n {\r\n //Call base\r\n super();\r\n\r\n this.m_store = new CustomStore({\r\n key: \"EntryID\",\r\n loadMode: \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n totalCount: (loadOptions) => this.ImplementTotalCount(loadOptions)\r\n });\r\n }\r\n\r\n //Perform the actual load\r\n private ImplementLoad(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n //Return data from the service\r\n return this.ShapeResponse(this.endpoint.GetList(options));\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.endpoint.Get(Value));\r\n }\r\n\r\n private ImplementTotalCount(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n //Return data from the service\r\n return this.ShapeResponse(this.endpoint.Count(options));\r\n }\r\n}","import CustomStore from \"devextreme/data/custom_store\";\r\nimport DataSource from \"devextreme/data/data_source\";\r\nimport { Observable, from, of } from \"rxjs\";\r\nimport { BaseEntity } from \"../entities/BaseEntities\";\r\nimport { BaseDataStoreAbstract } from \"./BaseDataStoreAbstract\";\r\n\r\nexport abstract class BaseDataSourceAbstract\r\n{\r\n private m_DataSource: DataSource;\r\n\r\n constructor(private m_DataStore: BaseDataStoreAbstract, customOptions?:any)\r\n {\r\n \r\n this.m_DataSource = new DataSource(\r\n {\r\n ...\r\n {\r\n store: m_DataStore.Store,\r\n pageSize: 30\r\n },\r\n ...\r\n customOptions\r\n });\r\n }\r\n\r\n public get IsLoaded(): boolean {\r\n return this.m_DataSource.isLoaded();\r\n }\r\n\r\n public get Data(): DataSource\r\n {\r\n return this.m_DataSource;\r\n }\r\n\r\n public get Store(): CustomStore\r\n {\r\n return this.m_DataStore.Store;\r\n }\r\n\r\n public get Items(): any[]\r\n {\r\n if (!this.IsLoaded) this.m_DataSource.load();\r\n return this.m_DataSource.items();\r\n }\r\n\r\n public GetItemsAsync(): Observable\r\n {\r\n this.m_DataSource.paginate(false);\r\n if (!this.IsLoaded) return from(this.m_DataSource.load().then(items => items));\r\n return of(this.m_DataSource.items());\r\n }\r\n\r\n public FindAsync(Key: any): Observable\r\n {\r\n if (Key == null || Key == undefined) \r\n {\r\n console.error(\"Trying to find an empty key\");\r\n };\r\n return from(this.Store.byKey(Key));\r\n }\r\n\r\n //Performs synchronous search on the datasource. Can be used only with raw datasources that has already been loaded\r\n public Find(Key: any): TEntity\r\n {\r\n return (this.Data.items() as TEntity[]).find(x => x.EntryID == Key);\r\n }\r\n\r\n public GetCount(): Observable\r\n {\r\n return from(this.Store.totalCount(undefined));\r\n }\r\n\r\n public Reload() : Observable\r\n {\r\n return from(this.Data.reload());\r\n }\r\n\r\n public AddEventListener(eventName: string, action: (e?: any) => void) {\r\n this.m_DataSource.on(eventName as any, action);\r\n }\r\n}\r\n","import { BaseDataStoreReadOnly } from \"./BaseDataStoreReadOnly\";\r\nimport { BaseEntity } from \"../entities/BaseEntities\";\r\nimport { BaseDataStoreCRUD } from \"./BaseDataStoreCRUD\";\r\nimport { BaseEndpointCRUD } from \"../endpoint/BaseEndpointCRUD\";\r\nimport { BaseDataSourceAbstract } from \"./BaseDataSourceAbstract\";\r\nimport { BaseDataStoreAbstract } from \"./BaseDataStoreAbstract\";\r\nimport { Observable } from \"rxjs\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { DataLoadOptions } from \"./DataLoadOptions\";\r\nimport { Utils } from \"@core/helpers/Utils\";\r\nimport { GenericListEndpoint } from \"@core/endpoints/genericlist.endpoint\";\r\nimport { BaseEndpoint } from '../endpoint/BaseEndpoint';\r\nimport { Type } from '@angular/core';\r\nimport { BaseDataStoreCRUDServer } from \"./BaseDataStoreCRUDServer\";\r\n\r\n\r\n\r\n/*\r\n The idea is as follows:\r\n There are 2 objects - datasource and datastore\r\n Datastore defines the data\r\n Datasource defines the query to the data\r\n In reality, they are linked close together\r\n There are 6 datastore types to help construction them fast\r\n Each also creates a new datastore inside\r\n\r\n Basically the choices are between :\r\n 1. Calling a method on the WebAPI directly (Direct, DirectService)\r\n 2. Calling a method on a service in code (CustomAction)\r\n 3. Accessing a generic list data provider (GenericListI, GenericListS)\r\n 4. Accessing the data through a CRUD service's Load() for it's respective entity\r\n\r\nThe datasources can be defined in two places:\r\n1. In the component constructor - in the DataSources array \r\n2. In Init.ts, defined as a global datasource that is accessible from all components\r\n\r\nThe data is loaded into the datasource once per it's lifetime\r\nThere are 3 types of datasources - \"stupid/raw\" and \"smart\" ones:\r\n1. The stupid datasources only need to provide the data once using a method that returns BaseEntitiesResponse. \r\n Further processing is done by the datasource itself. \r\n This means that the server always must return the full dataset\r\n\r\n2. The smart datasources need to provide data multiple times depending on the user-entered value\r\n The data filtering and paging will be done on the server and a small subset will be returned\r\n To implement this, two methods must be provided \r\n 1. A method that takes DataLoadOptions and returns BaseEntitiesResponse\r\n 2. A method that returns an object by it's id\r\n\r\n\r\n*** A word about GenericListProvider ***\r\n * The GenericList functions are implemented to work in both methods\r\n * \r\n \r\n \r\n */\r\n\r\n\r\n\r\n\r\n//Completely custom\r\nexport class DataSourceCustom extends BaseDataSourceAbstract {\r\n constructor(store: BaseDataStoreAbstract) {\r\n super(store);\r\n }\r\n}\r\n\r\n//Create datasource based on CRUD service\r\nexport class DataSourceEndpointCRUD extends BaseDataSourceAbstract {\r\n constructor(service: BaseEndpointCRUD, customOptions?: any) {\r\n super(new BaseDataStoreCRUD(service), customOptions);\r\n }\r\n}\r\n\r\n//Create serverside datasource based on CRUD service\r\nexport class ServerSideDataSourceEndpointCRUD extends BaseDataSourceAbstract {\r\n constructor(service: BaseEndpointCRUD, customOptions?: any, customLoadAction?: (options: DataLoadOptions) => Observable) {\r\n super(new BaseDataStoreCRUDServer(service, false, customLoadAction), customOptions);\r\n }\r\n}\r\n\r\n\r\n//Datasource that is directly bound to a controller action on the server\r\nexport class DataSourceDirect extends BaseDataSourceAbstract {\r\n constructor(ControllerName: string, ActionName: string, QueryString?: string, customOptions?: any) {\r\n super(new BaseDataStoreReadOnly(ControllerName, ActionName, QueryString), customOptions);\r\n }\r\n}\r\n//Datasource that is directly bound to a controller action on the server, taking the controller name from an existing service that represents it\r\nexport class DataSourceDirectService extends BaseDataSourceAbstract {\r\n constructor(serviceType: Type, ActionName: string, QueryString?: string, customOptions?: any, isRaw: boolean = true) {\r\n const controllerName = AppInjector.get(serviceType).ControllerName;\r\n super(new BaseDataStoreReadOnly(controllerName, ActionName, QueryString, undefined, undefined, undefined, isRaw), customOptions);\r\n }\r\n}\r\n\r\n\r\n//Datasource that is bound to a function returning the data\r\nexport class DataSourceCustomAction extends BaseDataSourceAbstract {\r\n constructor(\r\n customLoadAction: (options: DataLoadOptions) => Observable,\r\n customGetAction?: (Value: any) => Observable,\r\n OnLoadedHandler?: (Data: any[]) => void,\r\n IsRaw: boolean = true,\r\n customOptions?: any,\r\n keyExpr?: any) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n customLoadAction,\r\n customGetAction,\r\n OnLoadedHandler,\r\n IsRaw,\r\n keyExpr),\r\n customOptions);\r\n }\r\n}\r\n\r\n//Datasource bound to a generic list (string)\r\nexport class DataSourceGenericListS extends BaseDataSourceAbstract {\r\n constructor(DataSourceName: string, IsRaw: boolean = true) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n (options) => AppInjector.get(GenericListEndpoint).GetList(DataSourceName, options),\r\n IsRaw ? undefined : (Value) => AppInjector.get(GenericListEndpoint).GetByValue(DataSourceName, Value),\r\n undefined,\r\n IsRaw,\r\n \"Value\"\r\n ),\r\n {\r\n sort: \"Text\"\r\n });\r\n }\r\n}\r\n\r\n//Datasource bound to a generic list (numeric)\r\nexport class DataSourceGenericListI extends BaseDataSourceAbstract {\r\n constructor(DataSourceName: string, IsRaw: boolean = true) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n //Function that gets the data\r\n (options) => AppInjector.get(GenericListEndpoint).GetList(DataSourceName, options),\r\n IsRaw ? undefined : (Value) => AppInjector.get(GenericListEndpoint).GetByValue(DataSourceName, Value),\r\n undefined,\r\n IsRaw,\r\n \"Value\"\r\n ),\r\n {\r\n //Function that maps the data\r\n map: (item) => Utils.MapAsNumeric(item),\r\n sort: \"Text\"\r\n });\r\n }\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n"," import CustomStore from \"devextreme/data/custom_store\";\r\n\r\nimport { BaseEntitiesResponse, BaseEntity, BaseDataResponse, BaseResponse, BaseEntityResponse } from \"../entities/BaseEntities\";\r\nimport { FrameworkService } from \"@core/framework/framework.service\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { map, Observable } from 'rxjs';\r\n import {UiService} from '@core/framework/ui.service';\r\n\r\n\r\nexport abstract class BaseDataStoreAbstract\r\n{\r\n protected m_store: CustomStore;\r\n public get Store(): CustomStore\r\n {\r\n return this.m_store;\r\n }\r\n\r\n //Convert the response we get from our webservice to what devexpress is expecting (array of objects)\r\n protected ShapeResponse(response: Observable): any\r\n {\r\n return response.pipe(\r\n map((resultObject: any) =>\r\n {\r\n //Make sure result is success\r\n if (!(resultObject as BaseResponse).IsSuccess)\r\n {\r\n AppInjector.get(UiService).UnexpectedMessage((resultObject as BaseResponse).ResponseMessage);\r\n return [];\r\n }\r\n\r\n //Return the internal field\r\n if ((resultObject as BaseEntitiesResponse).Entities != undefined) return (resultObject as BaseEntitiesResponse).Entities;\r\n if ((resultObject as BaseDataResponse).Data != undefined) return (resultObject as BaseDataResponse).Data;\r\n if ((resultObject as BaseEntityResponse).Entity != undefined) return (resultObject as BaseEntityResponse).Entity;\r\n\r\n //If got here, something is wrong\r\n console.error(resultObject);\r\n console.error(\"Invalid response was returned\");\r\n return [];\r\n })).toPromise();\r\n } \r\n}\r\n","import { BaseEntity, BaseResponse } from '../entities/BaseEntities';\r\nimport CustomStore from 'devextreme/data/custom_store';\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\nimport { map } from \"rxjs/operators\";\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport {UiService} from '@core/framework/ui.service';\r\n\r\nexport class BaseDataStoreCRUDServer extends BaseDataStoreAbstract\r\n{\r\n\r\n // @ts-ignore\r\n constructor(private endpoint: BaseEndpointCRUD, private isRaw: boolean = true, private customLoadAction?: (options?: DataLoadOptions) => Observable)\r\n {\r\n //Call base\r\n super();\r\n\r\n this.m_store = new CustomStore({\r\n key: \"EntryID\",\r\n loadMode: isRaw ? \"raw\": \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n update: (key, entity) => this.ImplementUpdate(key, entity),\r\n remove: (key) => this.ImplementRemove(key),\r\n insert: (entity) => this.ImplementInsert(entity)\r\n });\r\n }\r\n\r\n private ImplementLoad(loadOptions): Promise {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n if (this.customLoadAction == undefined) {\r\n return this.ShapeResponse(this.endpoint.GetList(options));\r\n }\r\n else {\r\n return this.ShapeResponse(this.customLoadAction(options));\r\n }\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.endpoint.Get(Value));\r\n }\r\n\r\n private ImplementInsert(entity: TEntity)\r\n {\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n }\r\n\r\n private ImplementUpdate(key: number, newEntity: TEntity): Promise\r\n {\r\n let data = >(this.Store).__rawData;\r\n if (data) {\r\n const oldEntity = data.filter(r => r.EntryID === key)[0];\r\n const entity = { ...oldEntity, ...newEntity };\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n }\r\n\r\n return this.Store.byKey(key).then((value) => {\r\n const oldEntity = value;\r\n const entity = { ...oldEntity, ...newEntity };\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n });\r\n }\r\n\r\n private ImplementRemove(entryID: number): Promise\r\n {\r\n return this.endpoint.Delete(entryID).pipe(\r\n map((resultObject: any) =>\r\n {\r\n //Make sure result is success\r\n if (!(resultObject as BaseResponse).IsSuccess)\r\n {\r\n AppInjector.get(UiService).StopMessage((resultObject as BaseResponse).ResponseMessage);\r\n return false;\r\n }\r\n })).toPromise();\r\n }\r\n}\r\n","import { Utils } from \"@core/helpers/Utils\";\r\n\r\nexport class DataLoadOptions\r\n{\r\n\r\n //Member variables\r\n private Search: string\r\n private SearchFields: string[]\r\n private Sort: string\r\n private IsSortDescending: boolean;\r\n private Skip: number\r\n private Take: number\r\n private ComplexFilter: string;\r\n private DistinctField: string\r\n\r\n //Convert the loadOptions received from DevExpress controls to a structure we can recognize\r\n constructor(loadOptions: any)\r\n {\r\n //If empty object was passed, means we in raw mode and do not need this at all\r\n if (loadOptions == undefined) return;\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.searchValue))\r\n {\r\n this.Search = loadOptions.searchValue;\r\n this.SearchFields = loadOptions.searchExpr;\r\n }\r\n\r\n //Parse complex filter\r\n if (!Utils.IsEmpty(loadOptions.filter) && typeof loadOptions.filter !== 'function')\r\n {\r\n this.ComplexFilter = (JSON.stringify({ Filter: loadOptions.filter }));\r\n }\r\n\r\n //Parse sort - can come as an array or simple field name\r\n if (!Utils.IsEmpty(loadOptions.sort) )\r\n {\r\n if (Array.isArray(loadOptions.sort))\r\n {\r\n this.Sort = loadOptions.sort[0].selector;\r\n this.IsSortDescending = loadOptions.sort[0].desc;\r\n }\r\n else\r\n {\r\n this.Sort = loadOptions.sort;\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.dataField)) this.DistinctField = loadOptions.dataField;\r\n\r\n\r\n //Parse take/skip\r\n if (!Utils.IsEmpty(loadOptions.skip)) this.Skip = loadOptions.skip;\r\n if (!Utils.IsEmpty(loadOptions.take)) this.Take = loadOptions.take;\r\n\r\n }\r\n \r\n //Return the load options as a query string \r\n public GetLoadOptions(): any\r\n {\r\n\r\n //Sort+Search\r\n var result: any = {};\r\n if (!Utils.IsEmpty(this.Search) && !Utils.IsEmpty(this.SearchFields))\r\n {\r\n result.DLOSearch = Utils.ConvertStringToBase64(this.Search);\r\n result.DLOSearchFields = Utils.ConvertStringToBase64(this.SearchFields.toString());\r\n }\r\n if (!Utils.IsEmpty(this.Sort))\r\n {\r\n result.DLOSort = this.Sort;\r\n if (this.IsSortDescending) result.DLOIsSortDescending = 1;\r\n }\r\n\r\n //Skip+Take\r\n if (this.Skip > 0) result.DLOSkip = this.Skip;\r\n if (this.Take > 0) result.DLOTake = this.Take;\r\n\r\n if (!Utils.IsEmpty(this.ComplexFilter)) result.DLOComplexFilter = Utils.ConvertStringToBase64(this.ComplexFilter);\r\n if (!Utils.IsEmpty(this.DistinctField)) result.DLODistinctField = Utils.ConvertStringToBase64(this.DistinctField);\r\n\r\n return result;\r\n }\r\n\r\n\r\n}\r\n","import { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { IBaseModuleComponent } from '../component/IBaseComponent';\r\nimport { Inject, InjectionToken } from \"@angular/core\"; \r\n\r\nexport const EMPTY_STRING_TOKEN = new InjectionToken('name');\r\n\r\nexport abstract class BaseEndpoint implements IBaseModuleComponent {\r\n ControllerName: string;\r\n\r\n ModuleName: string = AppInjector.get(AppConfigService).getModuleNameByInstance(this);\r\n\r\n constructor(\r\n @Inject(EMPTY_STRING_TOKEN) ControllerName: string,\r\n protected api: APIGatewayService) {\r\n this.ControllerName = this.ModuleName ? `${this.ModuleName}/${ControllerName}` : ControllerName;\r\n }\r\n\r\n GetControllerURL(): string {\r\n return this.api.GetAPIURL() + this.ControllerName;\r\n }\r\n\r\n}","import { BaseEndpoint } from \"./BaseEndpoint\";\r\nimport { BaseEntity, BaseEntitiesResponse, BaseEntityResponse, BaseResponse, BaseDataResponse, HistoryChangesSet, SharingInformation, FileView, RenderedTemplate } from \"../entities/BaseEntities\";\r\nimport { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DataLoadOptions } from \"../datalayer/DataLoadOptions\";\r\nimport { EnumNotificationDeliveryOptions } from \"@core/framework/sysenums.enum\";\r\n\r\n\r\nexport abstract class BaseEndpointCRUD extends BaseEndpoint {\r\n constructor(ControllerName: string, protected override api: APIGatewayService) {\r\n super(ControllerName, api);\r\n }\r\n\r\n public Get(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Get', { EntryID: EntryID }); }\r\n public GetShallow(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetShallow', { EntryID: EntryID }); }\r\n public GetList(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'List', options ? options.GetLoadOptions() : undefined); }\r\n public GetListShallow(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'ListShallow', options ? options.GetLoadOptions() : undefined); }\r\n public Save(Entity: TEntity): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'Save', Entity); }\r\n public SaveBatch(Entities: TEntity[]): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'SaveBatch', Entities as any); }\r\n public Delete(EntryID: number): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'Delete', { EntryID: EntryID }); }\r\n public DeleteBatch(EntryIDs: number[]): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'DeleteBatch', { EntryIDs: EntryIDs }); }\r\n public IsExists(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsExists', { EntryID: EntryID }); }\r\n public IsDeletable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsDeletable', { EntryID: EntryID }); }\r\n public IsEditable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsEditable', { EntryID: EntryID }); }\r\n public Count(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Count', options ? options.GetLoadOptions() : undefined); }\r\n public GetHistory(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetHistory', { EntryID: EntryID }); }\r\n public GetRenderedTemplate(EntryID: number, NotificationTemplateID: number, DeliveryOption: EnumNotificationDeliveryOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetRenderedTemplate', { EntryID: EntryID, NotificationTemplateID: NotificationTemplateID, DeliveryOption: DeliveryOption }); }\r\n public Share(sharingInformation: SharingInformation): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'Share', sharingInformation as any); }\r\n\r\n}\r\n","import {\r\n EnumCheckCredentialsResult,\r\n EnumInfoUTypes,\r\n EnumLoginSecureKeyTypes,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\r\n HistoryEventTypesEnum,\r\n EnumSystemOptionDataTypes, EnumUserLoginStatus, EnumLocalizationTypes, EnumNotificationTemplateEditingMode, EnumPrintingType,\r\n EnumLogLevel\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport class BaseState { }\r\nexport class BaseEntity {\r\n EntryID: number;\r\n TypeName?: string;\r\n}\r\n\r\nexport class BaseResponse {\r\n IsSuccess: boolean;\r\n ResponseCode: number;\r\n ResponseMessage: string;\r\n ResponseExtendedMessage: string;\r\n}\r\n\r\nexport class KeyValueEntity extends BaseEntity {\r\n Key: string;\r\n Value: string;\r\n}\r\n\r\nexport class GenericListEntity extends BaseEntity {\r\n constructor(\r\n public Value?: string,\r\n public Text?: string,\r\n public Description?: string,\r\n public SortOrder?: number\r\n ) { super(); }\r\n}\r\n\r\n\r\n//Response types prototypes - for single entity, list of entities, and single data field response\r\nexport class BaseEntityResponse extends BaseResponse { Entity: TEntity; }\r\nexport class BaseEntitiesResponse extends BaseResponse { Entities: TEntity[] }\r\nexport class BaseDataResponse extends BaseResponse { Data: TData; }\r\n\r\nexport class CredentialsCheckResponse {\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public UserName: string;\r\n}\r\n\r\n\r\nexport class CredentialActivityStatus extends BaseEntity {\r\n DisplayUserName: string;\r\n LastUseDate: Date;\r\n IsOnline: boolean;\r\n}\r\n\r\n\r\nexport class LoginParams extends BaseEntity {\r\n public UserName: string\r\n public SecureKey: string\r\n public SecureKeyType: EnumLoginSecureKeyTypes;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Language: string;\r\n public NewPassword: string;\r\n public TaxNumber: string;\r\n public ClientFingerprint: string;\r\n}\r\n\r\nexport class PasswordRecoveryParams extends BaseEntity {\r\n public UserName: string\r\n public Address: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Token: string;\r\n public Language: string;\r\n public NewPassword: string;\r\n\r\n}\r\n\r\nexport class CompanyInfo extends BaseEntity {\r\n public DecimalSeparator: string\r\n public ThousandsSeparator: string\r\n\r\n public NumberGeneral: string\r\n public NumberPercent: string\r\n public NumberPrice: string\r\n public NumberQuantity: string\r\n public NumberRate: string\r\n public NumberSum: string\r\n\r\n public DateFormatShort: string\r\n public DateFormatLong: string\r\n public DateFormatCompact: string\r\n public DateFormatFull: string\r\n public TimeFormatLong: string\r\n public TimeFormatShort: string\r\n public DefaultVatGroupCode: string;\r\n\r\n public CurrencyLocal: string\r\n public CurrencySystem: string\r\n\r\n public VatPercent: number;\r\n public IsVatLiable: boolean;\r\n\r\n public ServerVersion: string;\r\n public ClientVersion: string;\r\n public SBOVersion: string;\r\n public LocalizationType: EnumLocalizationTypes;\r\n}\r\n\r\nexport class ClientException extends BaseEntity {\r\n Type: string\r\n Message: string\r\n StackTrace: string\r\n\r\n Device: string;\r\n DeviceType: string\r\n Browser: string\r\n BrowserVersion: string\r\n OS: string\r\n OSVersion: string\r\n}\r\n\r\nexport class DataGroupInfo extends BaseEntity {\r\n constructor(\r\n public Name: string,\r\n public Value: string,\r\n public TotalRows = 0,\r\n ) { super(); }\r\n}\r\n\r\nexport class ItemPriceInfo extends BaseEntity {\r\n Price: number;\r\n DiscountPercent: number;\r\n Currency: string;\r\n}\r\n\r\n\r\nexport class Media extends BaseEntity {\r\n ImageBase64: string;\r\n ImageBytes: number[];\r\n VideoBytes: number[];\r\n VideoDataUrl: any;\r\n}\r\n\r\nexport class WebAPICredential extends BaseEntity {\r\n UserName: string;\r\n Password: string;\r\n Type: number;\r\n IsActive: boolean = true;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class WebAPIAllowedIP extends BaseEntity {\r\n CredentialID: number;\r\n IPRangeStart: string;\r\n IPRangeEnd: string;\r\n}\r\n\r\nexport class WebAPICredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsActive: boolean;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class CredentialExternalInfo extends BaseEntity {\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: true;\r\n Type: number;\r\n}\r\n\r\nexport class AttachedFile extends BaseEntity {\r\n public Name: string;\r\n public Extension: string;\r\n public NewFile: File;\r\n public Size: number;\r\n public IconStyle: string;\r\n public IsDisplayedAsImage: boolean;\r\n public Date: Date;\r\n public IsAllowDeleteForcely: boolean;\r\n}\r\n\r\nexport class UploadFile extends BaseEntity {\r\n public Name: string;\r\n public Type: string;\r\n public Data: any;\r\n public Buffer: ArrayBuffer;\r\n public File: File;\r\n}\r\n\r\nexport class CommonSettingEntity extends BaseEntity {\r\n public Name: string;\r\n public Description: string;\r\n}\r\n\r\nexport class NotificationView extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\r\n public Subject: string;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public Address: string;\r\n public CCAddress: string;\r\n public BccAddress: string;\r\n public NotificationTemplateID: number;\r\n public ReadDate: Date;\r\n public SharedFileUID: string;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public UserName: string;\r\n public NotificationTemplateName: string;\r\n public IsAutomatic: boolean;\r\n public IsDeleted: boolean;\r\n}\r\n\r\nexport class Notification extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\r\n public Subject: string;\r\n public Body: string;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public Address: string;\r\n public CCAddress: string;\r\n public BccAddress: string;\r\n public ExternalReferenceID: any;\r\n public NotificationTemplateID: number;\r\n public ReadDate: Date;\r\n public IsRead: boolean;\r\n public TargetCredentialID: number;\r\n public SharedFileUID: string;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public NotificationTemplateName: string;\r\n public FailureDescription: string;\r\n public RelatedObjectType: string;\r\n public RelatedObjectID: number;\r\n public PopupShowStatus: EnumPopupShowStatuses;\r\n public IsAutomatic: boolean;\r\n public IsDeleted: boolean;\r\n}\r\n\r\nexport class NotificationListParams extends BaseEntity {\r\n public Address: string;\r\n public UntilDate: Date;\r\n public FromDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Template: string;\r\n public NotificationDispatchID: number;\r\n}\r\n\r\nexport class NotificationDispatchListParams extends BaseEntity {\r\n public FromDate: Date;\r\n public UntilDate: Date;\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public Statuses: EnumNotificationStatuses[];\r\n public TemplateID: number;\r\n public CreatedByName: string\r\n public NotificationTemplateName: string;\r\n}\r\n\r\nexport class SendNotificationDispatchParams extends BaseEntity\r\n{\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public NotificationTemplateID: number;\r\n public Name: string;\r\n public Description: string;\r\n public Subject: string;\r\n public Body: string;\r\n public RecipientIDs: number[];\r\n public Header: string;\r\n public IsSimplifiedHtmlBodyEdit: boolean;\r\n}\r\n\r\nexport class NotificationServer extends BaseEntity {\r\n public SMTPServer: string;\r\n public SMTPPort: number;\r\n public SMTPUserName: string;\r\n public SMTPPassword: string;\r\n public SMTPUseSSL: boolean;\r\n public SMSEndpoint: string;\r\n public SMSUserName: string;\r\n public SMSPassword: string;\r\n public SMSToken: string;\r\n public SMSEndPointIsInforU: EnumInfoUTypes;\r\n}\r\n\r\nexport class NotificationTemplate extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n public Subject: string;\r\n public HTMLBody: string;\r\n public FromEmailDisplay: string;\r\n public FromEmail: string;\r\n public FromPhone: string;\r\n public SMSBody: string;\r\n public WhatsAppBody: string;\r\n public PushMessageBody: string;\r\n public NotificationServerID: number;\r\n public IsUserCustomTemplate: boolean;\r\n public EntityBindingPageType: EnumPrintingType;\r\n public EditingMode: EnumNotificationTemplateEditingMode;\r\n public EntityType: string;\r\n public PageName: string;\r\n public CrystalTemplateFileID: number;\r\n public IsSharePdf: boolean;\r\n public FileNameFormat: string;\r\n public CrystalTemplateFileView: FileView = new FileView;\r\n}\r\n\r\nexport class NotificationDispatch extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public Status: EnumNotificationStatuses;\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public NotificationTemplateID: number;\r\n public Name: string;\r\n public Description: string;\r\n public CanCancel: boolean;\r\n}\r\n\r\nexport class FileView extends BaseEntity {\r\n public FileData: number[] = [];\r\n public Name: string;\r\n public FullName: string;\r\n public Extension: string;\r\n public ContentType: string;\r\n}\r\n\r\nexport class NotificationTemplateView extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n}\r\n\r\nexport class NotificationTemplateListView extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n public IsSupportSharing: boolean;\r\n public IsSupportEmail: boolean;\r\n public IsSupportSMS: boolean;\r\n public IsSupportWhatsapp: boolean;\r\n public EntityType: string;\r\n public PageName: string;\r\n public EditingMode: EnumNotificationTemplateEditingMode;\r\n public EntityBindingPageType: EnumPrintingType;\r\n}\r\n\r\nexport class RenderedTemplate extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public CcAddress: string;\r\n public BccAddress: string;\r\n}\r\n\r\nexport class SharingInformation extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public PrefixBody: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public EntityEntryID: number;\r\n public Entities: BaseEntity[] = [];\r\n public NotificationTempalteID: number;\r\n public AttachmentUniqueID: number;\r\n public Address: string;\r\n public CcAddress: string;\r\n public BccAddress: string;\r\n}\r\n\r\nexport class PushMessageListParams extends BaseEntity {\r\n public IsLoadAllNotifications: boolean;\r\n}\r\n\r\nexport class NotificationTestParams extends BaseEntity {\r\n public NotificationServerID: number;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public FromAddress: string;\r\n public Address: string;\r\n}\r\n\r\nexport class CredentialLoginParams extends BaseEntity {\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n public Status: EnumUserLoginStatus;\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialLogin extends BaseEntity {\r\n public ClientUserName: string;\r\n public CredentialType: number;\r\n public StartDate: Date;\r\n public LastUseDate: Date;\r\n public Status: EnumUserLoginStatus;\r\n public ClientIPAddress: string;\r\n public ImpersonateByID: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialCheckResponse extends BaseEntity {\r\n public IsExists: boolean;\r\n public HasPhone: boolean;\r\n public HasEmail: boolean;\r\n}\r\n\r\nexport class SaveCredentialsParams extends BaseEntity {\r\n public CredentialID: number;\r\n public UserName: string;\r\n public Password: string;\r\n public Type: number;\r\n public IsActive: boolean;\r\n public MFAMethod: EnumMFAMethods;\r\n public IsRestrictByIP: boolean;\r\n public IsExcludeFromMFA: boolean;\r\n public WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class SystemOptionEntity extends BaseEntity {\r\n public OptionName: string;\r\n public Value: string;\r\n public SectionInfo: string;\r\n public IsServer: boolean;\r\n public IsClient: boolean;\r\n public ModuleName: string;\r\n\r\n public SectionIndex: number;\r\n public ValueNumber: number;\r\n public ValueBoolean: boolean;\r\n public IsDeleted: boolean;\r\n public DataType: EnumSystemOptionDataTypes;\r\n public DefaultIsClient: boolean;\r\n}\r\n\r\nexport class CredentialType extends BaseEntity {\r\n public Value: number;\r\n public Text: string;\r\n}\r\n\r\nexport class WebAPIRequestListParams extends BaseEntity {\r\n CredentialID: number;\r\n ModuleName: string\r\n Controller: string;\r\n Action: string;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\nexport class WebAPIRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class HistoryChangesSet extends BaseEntity {\r\n public CreatedDate: Date;\r\n public CreatedBy: number;\r\n public Changeset: number;\r\n public CredentialName: string;\r\n public HistoryChanges: HistoryChangeDetails[];\r\n public HistoryLineChanges: HistoryChangeDetails[];\r\n}\r\n\r\nexport class HistoryChangeDetails extends BaseEntity {\r\n public Action: HistoryEventTypesEnum;\r\n public FieldName: string;\r\n public NewValue: string;\r\n public OldValue: string;\r\n public EntityType: string;\r\n public EntityEntryID: number;\r\n public EntityLineID: number;\r\n public Name: string;\r\n}\r\n\r\nexport class WebAPILoginResponse extends BaseEntity {\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public SessionID: string;\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public DisplayUserName: string;\r\n public DisplayUserDescription: string;\r\n public UserInfo: any[] = [];\r\n}\r\n\r\nexport class SystemCredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: boolean;\r\n LastUseDate: Date;\r\n}\r\n\r\nexport class AdditionalInfoMetadata {\r\n Caption: string;\r\n}\r\n\r\nexport class CredentialsCheckerMetadata extends BaseEntity {\r\n AdditionalInfo1: AdditionalInfoMetadata;\r\n AdditionalInfo2: AdditionalInfoMetadata;\r\n AdditionalInfo3: AdditionalInfoMetadata;\r\n AdditionalInfo4: AdditionalInfoMetadata;\r\n AdditionalInfo5: AdditionalInfoMetadata;\r\n}\r\n\r\nexport class CreateCredentialsParams extends BaseEntity {\r\n public DeliveryOption: number;\r\n public UserCreationOption: number;\r\n public Language: string;\r\n public CredentialsForCreation: CredentialExternalInfo[];\r\n}\r\n\r\nexport class SystemCredentialParams extends BaseEntity {\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n public IsActive: boolean;\r\n public IsPendingWelcome: boolean;\r\n public IsLockedOut: boolean;\r\n public CredentialFilter: number;\r\n}\r\n\r\nexport class DataEditorView extends BaseEntity {\r\n public ObjectName: string;\r\n public DViewsDuration: number;\r\n public XViewsDuration: number;\r\n public DViewsDBName: string;\r\n public XViewsBName: string;\r\n public IsValid: boolean;\r\n public IsOverriden: boolean;\r\n public Error?: string;\r\n}\r\n\r\nexport class RemoteRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class RemoteRequestListParams extends BaseEntity {\r\n Controllers?: string[];\r\n Actions?: string[];\r\n Methods?: string[];\r\n Statuses?: number[];\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n}\r\n\r\nexport class Log extends BaseEntity {\r\n Level: EnumLogLevel;\r\n Title: string;\r\n Body: string;\r\n RelatedObjectType: string;\r\n RelatedObjectID: string;\r\n}\r\n\r\nexport class LogParams extends BaseEntity {\r\n RelatedObjectType: string;\r\n RelatedObjectID: number;\r\n Level: EnumLogLevel;\r\n}","import { RC, ResourcesService } from '@core/framework/resources.service';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { exportDataGrid } from 'devextreme/excel_exporter';\r\nimport { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter';\r\nimport { Format, formatDate, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { Workbook } from 'exceljs';\r\nimport saveAs from 'file-saver';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseComponent } from '../component/BaseComponent';\r\nimport { BaseEntity, BaseState } from '../entities/BaseEntities';\r\nimport { IBaseComponent, IBaseModuleComponent } from './../component/IBaseComponent';\r\nimport { jsPDF } from 'jspdf';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\nexport class GridCellEditHandlers {\r\n constructor(\r\n public BeforeEdit?: string,\r\n public AfterEdit?: string,\r\n public AfterEditPromise?: string,\r\n public AfterEditAsync?: string\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditParams {\r\n constructor(\r\n public value: any,\r\n public rowData: any,\r\n public changes: any,\r\n public rowIndex: number\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditAsyncParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionsParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionHandlers {\r\n public that?: any;\r\n constructor(public QueryEditCell?: string, public QueryShowCell?: string) {}\r\n}\r\n\r\nclass DefferedPromise extends Promise {\r\n constructor() {\r\n let resolve, reject;\r\n super((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n this.Resolve = resolve;\r\n this.Reject = reject;\r\n }\r\n Resolve: (value?: T | PromiseLike) => void;\r\n Reject: (reason?: any) => void;\r\n}\r\n\r\nexport class GridExtender {\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get CurrentRowIndex(): number {\r\n return this.currentRowIndex;\r\n }\r\n\r\n public constructor(\r\n grid: DxDataGridComponent,\r\n mode: EnumGridModes,\r\n allowCustomization: boolean,\r\n allowAdvancedFilters: boolean,\r\n component: IBaseComponent,\r\n entityTypeName: string\r\n ) {\r\n this.grid = grid;\r\n this.Mode = mode;\r\n this.AllowCustomization = allowCustomization;\r\n this.AllowAdvancedFilters = allowAdvancedFilters;\r\n this.Component = component;\r\n this.EntityTypeName = entityTypeName;\r\n this.isValid.Resolve(true);\r\n }\r\n public get CurrentEntityTypeName() {\r\n if (!this._entityTypeName) {\r\n if (!Utils.IsEmpty(this.EntityTypeName)) {\r\n this._entityTypeName = this.EntityTypeName;\r\n } else {\r\n const entityType = (this.Component as any)?.EntityType;\r\n if (!entityType) {\r\n return;\r\n }\r\n\r\n const entityInstance = new entityType();\r\n this._entityTypeName = entityInstance && (entityInstance as BaseEntity).TypeName;\r\n }\r\n }\r\n return this._entityTypeName;\r\n }\r\n // Subscribtions\r\n private subscribtions: Subscription[] = [];\r\n\r\n // Other\r\n private MapEventsEdit: { [ColumnName: string]: GridCellEditHandlers } = {};\r\n private MapEventsOptions: { [ColumnName: string]: GridCellOptionHandlers } = {};\r\n private currentRowIndex: number;\r\n public Mode: EnumGridModes;\r\n private AllowCustomization: boolean;\r\n private AllowAdvancedFilters: boolean;\r\n private BeforePrintDataGridOptions: any;\r\n private BeforePrintRefs: {\r\n body: any[];\r\n gridParent: HTMLElement | null;\r\n gridEl: HTMLElement | null;\r\n } = {\r\n body: [],\r\n gridEl: null,\r\n gridParent: null\r\n };\r\n\r\n private Component: IBaseComponent;\r\n private isValid: DefferedPromise = new DefferedPromise();\r\n public IsAutoResizingEnabled = true; // auto grid resizing\r\n public EntityTypeName: string;\r\n\r\n // Link main objects\r\n public grid: DxDataGridComponent;\r\n\r\n private _resourceService = AppInjector.get(ResourcesService);\r\n private _appConfigService = AppInjector.get(AppConfigService);\r\n\r\n private _entityTypeName: string;\r\n\r\n // InitCompactMode(compactModeValue: boolean) {\r\n // const compactModeClass = 'grid-compact-mode';\r\n // const gridClassList = this.grid.instance.element().classList;\r\n // compactModeValue ? gridClassList.add(compactModeClass) : gridClassList.remove(compactModeClass);\r\n // this.grid.instance.repaint();\r\n // }\r\n\r\n // Shortcut for grid editing\r\n public Get(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.cellValue(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public Set(ColumnName: string, RowIndex: number, oValue: any) {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n this.grid.instance.cellValue(RowIndex, ColumnName, oValue);\r\n }\r\n }\r\n\r\n public AcceptChanges() {\r\n this.grid.instance.saveEditData();\r\n }\r\n\r\n public HasEditData() {\r\n return this.grid.instance.hasEditData();\r\n }\r\n\r\n public CancelEditData() {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n public SetGridFilter(ColumnName: string, ComparisonOperator: string, oValue: any) {\r\n this.grid.instance.filter([ColumnName, ComparisonOperator, oValue]);\r\n }\r\n\r\n public Refresh() {\r\n return this.grid.instance.refresh();\r\n }\r\n\r\n public GetSelectedRowKeys(): number[] {\r\n return this.grid.instance.getSelectedRowKeys();\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns data considering changes that were made but not saved yet\r\n public GetData(ColumnName: string, e: GridCellEditParams | any): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n return e.changes[ColumnName] !== undefined\r\n ? e.changes[ColumnName]\r\n : e.rowData[ColumnName];\r\n } else {\r\n return e[ColumnName];\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns previous data for this column\r\n public GetPrevData(ColumnName: string, e: GridCellEditParams | GridCellEditAsyncParams): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n return e.rowData[ColumnName];\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with rowData object\r\n // Provides safe column checking\r\n public SetData(ColumnName: string, oValue: any, e: GridCellEditParams | any) {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n e.changes[ColumnName] = oValue;\r\n } else {\r\n e[ColumnName] = oValue;\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public GotoCell(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.editCell(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Check if column exists\r\n public IsColumnExists(ColumnName: string): any {\r\n if (this.GetColumn(ColumnName) === undefined) {\r\n throw new Error(`Column ${ColumnName} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n // Return column by name\r\n public GetColumn(ColumnName: string): any {\r\n return this.grid.columns.find((x: any) => x.dataField === ColumnName);\r\n }\r\n\r\n public SetColumnVisibility(ColumnName: string, visible: boolean): void {\r\n this.grid.instance.columnOption(ColumnName, 'visible', visible);\r\n }\r\n\r\n // Check if row exists\r\n public IsRowExists(RowIndex: number): any {\r\n const iCount: number = this.GetRowCount();\r\n if (RowIndex < 0 || (RowIndex > iCount && iCount !== -1)) {\r\n throw new Error(`Row ${RowIndex} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n public GetRowCount(): number {\r\n const iCount: number = this.grid.instance.totalCount();\r\n return iCount === -1 ? this.grid.instance.getVisibleRows().length : iCount;\r\n }\r\n\r\n private IsRowsExists() {\r\n return (\r\n this.grid.instance.totalCount() > 0 || this.grid.instance.getVisibleRows().length > 0\r\n );\r\n }\r\n\r\n public async ExportExcel() {\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [\r\n framework.CompanyInfo.NumberPrice,\r\n framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate,\r\n framework.CompanyInfo.NumberPercent\r\n ];\r\n const exportFormat = 'xlsx';\r\n const gridExport = (this.grid.export as any) ?? {};\r\n const { customizeExcelCell, onAfterExporting } = gridExport;\r\n\r\n this.grid.instance.beginUpdate();\r\n this.grid.instance.option('loadPanel.enabled', false);\r\n this.grid.instance.endUpdate();\r\n\r\n this.grid.instance.beginUpdate();\r\n // Trigger native export event\r\n this.grid.onExporting.emit({\r\n component: this.grid.instance,\r\n element: this.grid.instance.element(),\r\n format: exportFormat,\r\n selectedRowsOnly: false\r\n });\r\n\r\n setTimeout(async () => {\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet('Main sheet');\r\n\r\n function parseNumberValue(v: unknown, format?: Format) {\r\n if (format && typeof v === 'string') {\r\n return parseNumber(v, format);\r\n }\r\n\r\n return v;\r\n }\r\n\r\n await exportDataGrid({\r\n component: this.grid.instance,\r\n worksheet: worksheet,\r\n ...this.grid.export,\r\n customizeCell: options => {\r\n const { gridCell, excelCell } = options;\r\n const { value, column, rowType } = gridCell;\r\n const { dataType } = column;\r\n\r\n const isGroupRow = rowType === 'group';\r\n const isDataRow = rowType === 'data';\r\n const isTotalRow = rowType === 'totalFooter';\r\n\r\n if (dataType === 'number' && isGroupRow) {\r\n excelCell.value = parseNumberValue(excelCell.value, column.format);\r\n }\r\n\r\n if (dataType === 'string' && isGroupRow) {\r\n if (typeof value === 'string') {\r\n const [, caption] = value.split(';');\r\n excelCell.value = caption ?? value;\r\n }\r\n }\r\n\r\n if (isDataRow && dataType === 'date' && column.format) {\r\n excelCell.value = formatDate(value, column.format);\r\n }\r\n\r\n if (isDataRow || isTotalRow || isGroupRow) {\r\n if (typeof column.format === 'string') {\r\n excelCell.numFmt = column.format;\r\n\r\n // TODO: need to keep number type as number. Aligment for number is right.\r\n if (formats.includes(column.format)) {\r\n excelCell.alignment = 'right';\r\n }\r\n }\r\n }\r\n\r\n if (customizeExcelCell) {\r\n customizeExcelCell(options);\r\n }\r\n }\r\n });\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n if (onAfterExporting) {\r\n onAfterExporting({ component: this.grid.instance });\r\n }\r\n\r\n this.grid.instance.endUpdate();\r\n\r\n this.grid.instance.beginUpdate();\r\n this.grid.instance.option('loadPanel.enabled', 'auto');\r\n this.grid.instance.endUpdate();\r\n\r\n saveAs(\r\n new Blob([buffer], { type: 'application/octet-stream' }),\r\n `${this.grid.export?.texts?.exportTo}.${exportFormat}`\r\n );\r\n }, 0);\r\n }\r\n\r\n // Handler to remove current row\r\n RemoveCurrentRow(e) {\r\n if (!this.IsRowDeletable(e)) {\r\n return;\r\n }\r\n\r\n this.grid.instance.deleteRow(e.rowIndex);\r\n }\r\n\r\n // Handler for new row creation\r\n CreateNewRow() {\r\n if (!this.IsNewRowCreatable()) {\r\n return;\r\n }\r\n\r\n if (!this.grid.instance.hasEditData()) {\r\n this.grid.instance.addRow();\r\n } else {\r\n this.grid.instance\r\n .saveEditData()\r\n .then(() => this.grid.instance.addRow())\r\n .catch(() => {\r\n AppInjector.get(UiService).InfoMessage(RC('msgFinishEditing'));\r\n });\r\n }\r\n this.grid.instance.focus(this.grid.instance.getCellElement(0, 0));\r\n }\r\n\r\n // Bind context this to the event. It cannot be done other way\r\n private BindHandler(that: any, ColumnName: string, sHandlerName: string) {\r\n if (sHandlerName === undefined) {\r\n return;\r\n }\r\n\r\n if (that[sHandlerName] === undefined) {\r\n throw new Error(`Invalid handler was specified for ${ColumnName}`);\r\n }\r\n that[sHandlerName] = that[sHandlerName].bind(that);\r\n }\r\n\r\n /*\r\n * Attach handler event:\r\n * We have 4 events to choose from:\r\n * 1 - Before event - can be used for custom validation and such (not sure if needed yet). Can return false to prevent default operation\r\n * 2 - After event - can be used to update e.changes (by G.EditSet) directly on the row. Can return false to prevent default operation\r\n * 3 - AfterPromise event - can be used to return a promise that devextreme grid built-in mechanism will resolve\r\n * the promise can still set values using e.changes (throug G.EditSet) directly on the row\r\n * 4 - AfterAsync event - this one is fired after grid has finished processing, and value has been saved to the underlying row\r\n * this can be used for operations that relly on the underlying row value for their processing\r\n * This handler can not longer access the e.changes, but it has access to the rowIndex and can modify rows directly\r\n * as any other operation using G.Set\r\n */\r\n public AttachColumnEditHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellEditHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsEdit[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n this.BindHandler(that, ColumnName, Handlers.BeforeEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditPromise);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditAsync);\r\n\r\n // Bind the event to the column\r\n const column = this.GetColumn(ColumnName);\r\n column.setCellValue = this.ColumnEditHandler.bind(this, that, ColumnName, undefined);\r\n }\r\n\r\n /*\r\n * Attach event handler:\r\n * We have 2 events to choose from:\r\n * 1 - QueryEditCell - handler should return false if cell should not be editable\r\n * 2 - QueryPaintCell - handler should return false if cell should not be visible\r\n */\r\n public AttachColumnOptionsHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellOptionHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsOptions[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n Handlers.that = that;\r\n this.BindHandler(that, ColumnName, Handlers.QueryEditCell);\r\n this.BindHandler(that, ColumnName, Handlers.QueryShowCell);\r\n\r\n // Bind form.customizeItem function to allow hiding items in form\r\n // Perform the binding only once\r\n if (this.grid.editing.form === undefined) {\r\n this.grid.editing.form = {};\r\n }\r\n\r\n if (this.grid.editing.form.customizeItem === undefined) {\r\n this.grid.editing.form.customizeItem = this.ColumnCustomizeItemHandler.bind(this, that);\r\n }\r\n }\r\n\r\n // Hide items in form edit mode\r\n private ColumnCustomizeItemHandler(that, item) {\r\n // See that we have a handler\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[item.dataField];\r\n if (handlers === undefined || handlers.QueryShowCell === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler\r\n const row = this.grid.instance.getVisibleRows()[this.currentRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(item.dataField, row),\r\n row,\r\n this.currentRowIndex\r\n );\r\n const bPaint = handlers.that[handlers.QueryShowCell](args);\r\n\r\n // Set value\r\n item.visible = bPaint;\r\n }\r\n\r\n // Raise dependant events when newData is set by the handler\r\n // This is done for consistancy - the same event handling mechanism can handle also value changes as a result of other event handlers,\r\n // just like it happens when using cellValue programatically from Async handler, or just outside code\r\n // This procedure determines the changes made based on the previous version of newData (originalDate) and calls the matching handlers\r\n // for each column that such change took place\r\n private RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData) {\r\n // Get list of values that were updated during this handler - compare new vs original\r\n const columnsUpdated: string[] = [];\r\n for (const key in newData) {\r\n if (\r\n key !== ColumnName &&\r\n (originalData === undefined || newData[key] !== originalData[key])\r\n ) {\r\n columnsUpdated.push(key);\r\n }\r\n }\r\n\r\n // Preserve state at this event\r\n originalData = Utils.CloneObject(newData);\r\n\r\n // Process only those that were updated\r\n for (const column of columnsUpdated) {\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[column];\r\n if (handlers === undefined) {\r\n continue;\r\n }\r\n\r\n // Raise event\r\n this.ColumnEditHandler(\r\n that,\r\n column,\r\n originalData,\r\n newData,\r\n newData[column],\r\n currentRowData\r\n );\r\n }\r\n }\r\n\r\n private ColumnEditHandler(that, ColumnName, originalData, newData, value, currentRowData) {\r\n\r\n // Ignore initial settings\r\n // When user resets a test field, data is set to \"\"\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n console.log(`Editing cell: ${ColumnName} new value: ${value}`);\r\n // if (ColumnName == 'ItemDescription') debugger;\r\n\r\n // Prepare\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[ColumnName];\r\n const args: GridCellEditParams = new GridCellEditParams(\r\n value,\r\n currentRowData,\r\n newData,\r\n undefined\r\n );\r\n\r\n // Execute the before event. If it returns false, exit\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n if (handlers.BeforeEdit !== undefined) {\r\n const handlerBefore = that[handlers.BeforeEdit];\r\n if (!handlerBefore(args)) {\r\n return;\r\n }\r\n }\r\n\r\n // Set value just on the column that was really edited\r\n // (basically execute the default behaviour)\r\n if (originalData === undefined) {\r\n this.grid.instance.columnOption(ColumnName).defaultSetCellValue(newData, value);\r\n }\r\n\r\n // Execute after event.\r\n if (handlers.AfterEdit !== undefined) {\r\n const handlerAfter = that[handlers.AfterEdit];\r\n handlerAfter(args);\r\n this.RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData);\r\n }\r\n\r\n // Execute the after event asynchronically\r\n // This is to be used for cases when we need the editable value to be already set in the grid\r\n // In such case, any modifications that need to be done, should be done only using G.Set and not through changes, since\r\n // changes was already updated at this point.\r\n if (handlers.AfterEditAsync !== undefined) {\r\n const argsAsync = new GridCellEditAsyncParams(\r\n args.value,\r\n args.rowData,\r\n this.currentRowIndex\r\n );\r\n if (argsAsync.rowIndex !== -1) {\r\n const handlerAsync = that[handlers.AfterEditAsync];\r\n setTimeout(() => handlerAsync(argsAsync), 100);\r\n }\r\n }\r\n\r\n // Execute the after event.\r\n // Handler must call resolve() inside\r\n // It is here after the async event on purpose -\r\n // since if user has specified both the regular and async event, the regular event must return a promise\r\n // At any case, the order of the regular and async events is random and should not be relied upon\r\n if (handlers.AfterEditPromise !== undefined) {\r\n const handlerPromise = that[handlers.AfterEditPromise];\r\n return new Promise(resolve => {\r\n const finalize = () => {\r\n this.RaiseDependantEvents(\r\n that,\r\n ColumnName,\r\n originalData,\r\n newData,\r\n currentRowData\r\n );\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n resolve(true);\r\n };\r\n handlerPromise(args, finalize.bind(this));\r\n });\r\n }\r\n\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n }\r\n\r\n // Returns whether new row can be created now\r\n public IsNewRowCreatable(): boolean {\r\n const method: any = this.grid.editing.allowAdding;\r\n let bResult;\r\n if (method instanceof Function) {\r\n bResult = method();\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Returns whether row can be edited now\r\n public IsRowEditable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowUpdating);\r\n }\r\n\r\n // Returns whether row can be deleted now\r\n public IsRowDeletable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowDeleting);\r\n }\r\n\r\n // Check if the operation is allowed for the row\r\n // Executes the bound function\r\n private IsRowEditableOrUpdatable(e: any, method: any): boolean {\r\n let bResult: boolean;\r\n\r\n const args = {\r\n component: this.grid.instance,\r\n row: {\r\n rowType: e.rowType,\r\n data: e.data\r\n }\r\n };\r\n if (method instanceof Function) {\r\n bResult = method(args);\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Enable editing on click\r\n private OnRowClick(e) {\r\n if (!this.IsRowEditable(e)) {\r\n return;\r\n }\r\n\r\n if (this.grid.instance.hasEditData()) {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n this.grid.instance.editRow(e.rowIndex);\r\n }\r\n\r\n // Preserve current row\r\n // getRowIndexByKey will return -1 if it's a new row. For cellValue purposes, we can use 0 for that\r\n private OnEditingStart(e) {\r\n this.currentRowIndex = e.component.getRowIndexByKey(e.key);\r\n if (this.currentRowIndex === -1) {\r\n this.currentRowIndex = 0;\r\n }\r\n }\r\n\r\n // When adding new row, set the row index\r\n private OnInitNewRow(e) {\r\n this.currentRowIndex = 0;\r\n }\r\n\r\n // Add readonly class to rows that cannot be edited\r\n private OnRowPrepared(e) {\r\n if (e.rowType !== 'data' && e.rowType !== 'detail') {\r\n return;\r\n }\r\n\r\n if (!this.IsRowEditable(e)) {\r\n e.rowElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Various adjustments to editor\r\n private OnEditorPreparing(e) {\r\n if (e.parentType !== 'dataRow') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handlers\r\n // If painting not allowed, editing is disabled as well\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.dataField, e.row.data),\r\n e.row.data,\r\n this.currentRowIndex\r\n );\r\n let bAllowEdit =\r\n handlers.QueryEditCell !== undefined\r\n ? handlers.that[handlers.QueryEditCell](args)\r\n : true;\r\n const bPaint =\r\n handlers.QueryShowCell !== undefined\r\n ? handlers.that[handlers.QueryShowCell](args)\r\n : true;\r\n if (!bPaint) {\r\n bAllowEdit = false;\r\n }\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n\r\n // If both painting and editing is now allowed, and we're in cell mode, don't even create the editor\r\n // Otherwise, set it to readonly\r\n // This way, cells that are not pained will not show editor even when focusing on them\r\n if (this.grid.editing.mode === 'cell' && !bPaint) {\r\n e.cancel = true;\r\n } else {\r\n e.editorOptions.readOnly = true;\r\n e.editorOptions.tabIndex = -1;\r\n }\r\n }\r\n\r\n // Make cell as readonly and hide\r\n private OnCellPrepared(e) {\r\n // Handle rows only\r\n if (e.rowType !== 'data') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.column.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler, and mark as readonly\r\n if (handlers.QueryEditCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryEditCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Execute handler, and mark as invisible\r\n if (handlers.QueryShowCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryShowCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('m4u-hide-text');\r\n }\r\n }\r\n }\r\n\r\n // See if need to skip column\r\n private OnFocusCellChanging(e) {\r\n // See if moving forward or backward\r\n const bForward: boolean =\r\n e.newColumnIndex > e.prevColumnIndex || e.newRowIndex > e.prevRowIndex;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // See if this is a special column. Skip them\r\n const bSpecial = e.columns[e.newColumnIndex].type !== undefined ? true : false;\r\n if (!bSpecial) {\r\n // Get column focus is moving to\r\n const sColumnName: string = e.columns[e.newColumnIndex].dataField;\r\n\r\n // See if we have handlers for this column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[sColumnName];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler. If editing is allowed, we can break execution\r\n const row = e.rows[e.newRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(sColumnName, row),\r\n row,\r\n e.newRowIndex\r\n );\r\n const bAllowEdit: boolean = handlers.that[handlers.QueryEditCell](args);\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n }\r\n\r\n // When moving forward\r\n if (bForward) {\r\n // When not last column - move to next\r\n if (e.newColumnIndex < e.columns.length - 1) {\r\n e.newColumnIndex += 1;\r\n } else {\r\n e.newColumnIndex = 0;\r\n e.newRowIndex += 1;\r\n }\r\n } else {\r\n // When not first column - move to prev\r\n if (e.newColumnIndex > 0) {\r\n e.newColumnIndex -= 1;\r\n } else {\r\n e.newColumnIndex = e.columns.length - 1;\r\n e.newRowIndex -= 1;\r\n }\r\n }\r\n }\r\n }\r\n // !!!THIS IS WORKING BECAUSE OF PROMISE VALUE IS IMMUTABLE AFTER RESOLVE/REJECT\r\n // validation sequence is:\r\n // create new deferred for IsValid\r\n // trigger grid's saveEditData\r\n // if grid in EDIT mode\r\n // then OnRowValidating will be triggered where IsValid will be resolved\r\n // else saveEditData().then will be called and IsValid will be resolved;\r\n\r\n public ValidateGrid(): Promise {\r\n this.isValid = new DefferedPromise();\r\n this.grid.instance.saveEditData().then(() => this.isValid.Resolve(true));\r\n return this.isValid;\r\n }\r\n\r\n private OnRowValidating(e) {\r\n if (e.status === 'pending') {\r\n e.promise.then(result => this.isValid.Resolve(result.isValid));\r\n } else {\r\n this.isValid.Resolve(e.isValid);\r\n }\r\n }\r\n\r\n // Sync column visibility and order in form with the one set by the user\r\n private OnOptionChanged(e) {\r\n if (e.name === 'columns') {\r\n this.SetColumnsCaption();\r\n }\r\n\r\n if (e.name === 'columns' && (e.fullName.endsWith('visible') || e.fullName.endsWith('visibleIndex'))) {\r\n this.grid.instance.beginUpdate();\r\n for (let i = 0; i < this.grid.instance.columnCount(); i++) {\r\n const colAny = this.grid.instance.columnOption(i);\r\n\r\n this.grid.instance.columnOption(i, {\r\n formItem: {\r\n visible: colAny.visible,\r\n visibleIndex: colAny.visibleIndex\r\n }\r\n });\r\n }\r\n this.grid.instance.endUpdate();\r\n }\r\n }\r\n\r\n // Initialization entry point\r\n public InitGrid() {\r\n this.InitGridGeneral();\r\n switch (this.Mode) {\r\n case EnumGridModes.Editable:\r\n this.InitGridEditable();\r\n break;\r\n case EnumGridModes.Report:\r\n this.InitGridReport();\r\n break;\r\n case EnumGridModes.Lines:\r\n this.InitGridLines();\r\n break;\r\n }\r\n }\r\n\r\n // Generic stuff for all grids\r\n private InitGridGeneral() {\r\n this.grid.allowColumnReordering = this.AllowCustomization;\r\n this.grid.allowColumnResizing = this.AllowCustomization;\r\n\r\n const stateStoring = this.grid.stateStoring;\r\n this.grid.stateStoring = {\r\n storageKey:\r\n stateStoring?.storageKey || `${this.Component.ComponentStateName}.Grid.State`,\r\n enabled: this.AllowCustomization\r\n };\r\n\r\n // Set file name for excel export\r\n if (!this.grid.export || this.grid.export?.texts?.exportTo === 'DataGrid') {\r\n let sFileName: string = this.Component.ComponentStateName.replace(\r\n 'Component',\r\n ''\r\n ).replace('Grid', '');\r\n if (sFileName.endsWith('s')) {\r\n sFileName += 'es';\r\n } else {\r\n sFileName += 's';\r\n }\r\n this.grid.export = { texts: { exportTo: sFileName } }; // { fileName: sFileName };\r\n }\r\n\r\n // Add class to grid if it's clickable\r\n const grid = this.grid;\r\n this.subscribtions.push(\r\n this.grid.onInitialized.subscribe(e => {\r\n const gridRowClickEvent = grid.onRowClick;\r\n if ((gridRowClickEvent && gridRowClickEvent.observed) || grid.focusedRowEnabled) {\r\n e.element.classList.add('grid-row-clickable');\r\n }\r\n\r\n // HACK use custom props for saving custom grid config\r\n (this.grid.instance as any).AllowCustomization = this.AllowCustomization;\r\n (this.grid.instance as any).AllowAdvancedFilters = this.AllowAdvancedFilters;\r\n\r\n this.SetColumnsCaption();\r\n })\r\n );\r\n }\r\n\r\n private SetColumnsCaption() {\r\n const gridColumns = this.grid.instance.option('columns') || [];\r\n gridColumns.forEach((column: Column) => this.SetColumnCaption(column));\r\n }\r\n\r\n private SetColumnCaption(column: Column) {\r\n if (Utils.IsEmpty(this.CurrentEntityTypeName) || Utils.IsEmpty(column.dataField) || !Utils.IsEmpty(column.caption)) {\r\n return;\r\n }\r\n\r\n const resourceName = `BL.${this.CurrentEntityTypeName}.${column.dataField}`;\r\n const caption = this._resourceService.RC(resourceName, (this.Component as any as IBaseModuleComponent).ModuleName);\r\n this.grid.instance.columnOption(column.dataField, 'caption', caption);\r\n }\r\n\r\n public Print(): void {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n const doc = new jsPDF({\r\n orientation: 'l',\r\n putOnlyUsedFonts: true\r\n });\r\n\r\n doc.addFont('assets/fonts/Assistant-Regular.ttf', 'Assistant', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Light.ttf', 'Assistant-Light', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Medium.ttf', 'Assistant-Medium', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Bold.ttf', 'Assistant', 'bold');\r\n doc.setTextColor('#294D92');\r\n\r\n const [title, printTitle, filterDescription] = this.GetPrintHeaderInfo();\r\n\r\n const arrFilterDescription = filterDescription.split('\\n');\r\n let yPosition = 16;\r\n if (title) {\r\n doc.setFontSize(28);\r\n doc.setFont('Assistant-Medium');\r\n const titleWidth = this.GetTextWidth(title, 28, 500);\r\n const titleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - titleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(title), titleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n doc.setFontSize(14);\r\n doc.setFont('Assistant-Light');\r\n if (printTitle) {\r\n const printTitleWidth = this.GetTextWidth(printTitle, 14, 300);\r\n const printTitleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - printTitleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(printTitle), printTitleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n if (arrFilterDescription) {\r\n for (let i = 0; i < arrFilterDescription.length; i++) {\r\n if (Utils.NZ(arrFilterDescription[i]) === '') {\r\n continue;\r\n }\r\n\r\n const filterDescriptionWidth = this.GetTextWidth(arrFilterDescription[i], 14, 300);\r\n const filterDescriptionXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - filterDescriptionWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(arrFilterDescription[i]), filterDescriptionXPosition, yPosition);\r\n if (i < arrFilterDescription.length - 1) {\r\n yPosition += 8;\r\n }\r\n }\r\n }\r\n\r\n const printLogoPath = this.GetPrintLogoPath();\r\n const iconXPosition = screen.IsRTL() ? 14 : doc.internal.pageSize.width - 34;\r\n doc.addImage(printLogoPath, 'jpeg', iconXPosition, 8, 20, 20);\r\n\r\n doc.setFontSize(16);\r\n doc.setFont('Assistant');\r\n exportToPdf({\r\n jsPDFDocument: doc,\r\n component: this.grid.instance,\r\n topLeft: { x: 0, y: yPosition - 4 },\r\n customizeCell: ({ gridCell, pdfCell }) => {\r\n pdfCell.textColor = '#294D92';\r\n pdfCell.borderColor = '#D2DAE8';\r\n pdfCell.borderWidth = 1;\r\n pdfCell.drawLeftBorder = false;\r\n pdfCell.drawRightBorder = false;\r\n if (gridCell.rowType === 'header') {\r\n pdfCell.backgroundColor = '#E5EAF2';\r\n pdfCell.font = { name: 'Assistant', size: 10, style: 'bold' };\r\n }\r\n if (gridCell.rowType === 'group') {\r\n const summaryCellValue =\r\n gridCell.groupSummaryItems &&\r\n gridCell.groupSummaryItems\r\n .map(x => {\r\n const column = gridCell.column as any;\r\n return column && column.parseValue\r\n ? column.parseValue(x.value)\r\n : x.value;\r\n })\r\n .filter(x => x && x !== 0)\r\n .map(x => formatNumber(x, gridCell.column?.format))\r\n .join(';');\r\n const lookupValue =\r\n gridCell.column?.lookup &&\r\n gridCell.column?.lookup.calculateCellValue(gridCell.value);\r\n const complexCellValue =\r\n gridCell.value && gridCell.value.includes && gridCell.value.includes(';')\r\n ? gridCell.value.split(';')[1]\r\n : gridCell.value;\r\n const formattedValue =\r\n gridCell.column?.dataType === 'date'\r\n ? formatDate(complexCellValue, gridCell.column?.format)\r\n : complexCellValue?.toString();\r\n const resultValue = lookupValue || formattedValue;\r\n pdfCell.text =\r\n summaryCellValue && resultValue\r\n ? resultValue\r\n : summaryCellValue || resultValue;\r\n }\r\n if (\r\n !screen.IsRTL() &&\r\n gridCell.rowType === 'data' &&\r\n gridCell.value &&\r\n Utils.ContainsHebrewLetters(gridCell.value)\r\n ) {\r\n pdfCell.text = this.ReverseHebrewText(gridCell.value);\r\n }\r\n const gridExport = this.grid.export as any;\r\n if (gridExport?.customizePdfCell) {\r\n gridExport.customizePdfCell({ gridCell, pdfCell });\r\n }\r\n }\r\n }).then(() => {\r\n window.open(doc.output('bloburl').toString());\r\n });\r\n\r\n return;\r\n }\r\n\r\n private GetPrintHeaderInfo() {\r\n const Page = (this.Component as any).Page;\r\n if (!Page) {\r\n return ['', '', ''];\r\n }\r\n\r\n const title = Page.GetTitle();\r\n const printTitle = Page.OnGetPrintTitle();\r\n const filterDescription = Page.OnGetFilterDescription();\r\n\r\n return [title, printTitle, filterDescription];\r\n }\r\n\r\n private GetTextWidth(text: string, fontSize: number, fontWeight: number) {\r\n const div = document.createElement('div');\r\n div.innerHTML = text;\r\n div.style.fontSize = `${fontSize}px`;\r\n div.style.fontWeight = `${fontWeight}`;\r\n div.style.position = 'absolute';\r\n div.style.height = 'auto';\r\n div.style.width = 'auto';\r\n div.style.whiteSpace = 'nowrap';\r\n div.style.visibility = 'hidden';\r\n const appContainer = document.querySelector('.app-container');\r\n appContainer.appendChild(div);\r\n const textWidth = div.clientWidth + 1;\r\n appContainer.removeChild(div);\r\n return textWidth;\r\n }\r\n\r\n private ReverseHebrewText(text: string) {\r\n return !Utils.ContainsHebrewLetters(text) ? text : text.split('').reverse().join('');\r\n }\r\n\r\n private GetPrintLogoPath(): string {\r\n const appConfig = AppInjector.get(AppConfigService);\r\n\r\n const projectAssetsFolder = `assets/projects/${appConfig.AppConfig.ModuleName.toLowerCase()}`;\r\n const projectPrintLogoPath = `${projectAssetsFolder}/print-logo.png`;\r\n const customProjectPrintLogoPath =\r\n appConfig.M4UConfig.customBuild &&\r\n `${projectAssetsFolder}/print-logo_${appConfig.M4UConfig.customBuild}.png`;\r\n\r\n return customProjectPrintLogoPath && Utils.IsIconExists(customProjectPrintLogoPath)\r\n ? customProjectPrintLogoPath\r\n : Utils.IsIconExists(projectPrintLogoPath)\r\n ? projectPrintLogoPath\r\n : 'assets/icons/icon-96x96.png';\r\n }\r\n\r\n // Initialize report grid\r\n private InitGridReport() {\r\n // Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n }\r\n\r\n // Initialize editable grid\r\n private InitGridEditable() {\r\n //Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n \r\n //Add delete column that looks normal\r\n this.grid.columns = [\r\n {\r\n type: 'buttons',\r\n width: 32,\r\n allowReordering: false,\r\n allowResizing: false,\r\n buttons: [{ name: 'delete' }]\r\n }\r\n ];\r\n\r\n if (!this.grid.sorting) {\r\n this.grid.sorting = {};\r\n }\r\n this.grid.sorting.mode = 'none';\r\n\r\n if (!this.grid.paging) {\r\n this.grid.paging = {};\r\n }\r\n this.grid.paging.pageSize = 99999;\r\n\r\n // Subscribe to events\r\n this.subscribtions.push(this.grid.onRowClick.subscribe(e => this.OnRowClick(e)));\r\n this.subscribtions.push(this.grid.onEditingStart.subscribe(e => this.OnEditingStart(e)));\r\n this.subscribtions.push(this.grid.onInitNewRow.subscribe(e => this.OnInitNewRow(e)));\r\n this.subscribtions.push(\r\n this.grid.onEditorPreparing.subscribe(e => this.OnEditorPreparing(e))\r\n );\r\n this.subscribtions.push(\r\n this.grid.onFocusedCellChanging.subscribe(e => this.OnFocusCellChanging(e))\r\n );\r\n this.subscribtions.push(this.grid.onCellPrepared.subscribe(e => this.OnCellPrepared(e)));\r\n this.subscribtions.push(this.grid.onOptionChanged.subscribe(e => this.OnOptionChanged(e)));\r\n this.subscribtions.push(this.grid.onRowPrepared.subscribe(e => this.OnRowPrepared(e)));\r\n this.subscribtions.push(this.grid.onRowValidating.subscribe(e => this.OnRowValidating(e)));\r\n }\r\n\r\n private InitGridLines() {\r\n this.InitGridReport();\r\n\r\n // tslint:disable-next-line:no-unused-expression\r\n this.grid &&\r\n this.grid.instance &&\r\n (this.grid.instance as any).option({\r\n 'selection.mode': 'single',\r\n 'selection.deferred': true,\r\n hoverStateEnabled: true\r\n });\r\n }\r\n\r\n // Unsubscribe\r\n public DestroyGrid() {\r\n this.subscribtions.forEach(o => o.unsubscribe());\r\n }\r\n\r\n OnDoubleSizePopup(e, data) {\r\n if (this.grid.editing.mode === 'form') {\r\n return;\r\n }\r\n\r\n const iWidth: number = data.column.visibleWidth * 2;\r\n e.component._popup.option('width', iWidth);\r\n }\r\n\r\n public OnGridClick() {\r\n if (!this.IsRowsExists()) {\r\n this.CreateNewRow();\r\n }\r\n }\r\n\r\n public GetDataLoadOptions(): DataLoadOptions {\r\n const dataSource = this.grid?.dataSource as DataSource;\r\n if (!dataSource?.loadOptions) return;\r\n const gridLoadOptions = dataSource.loadOptions();\r\n gridLoadOptions.filter = this.grid.instance.getCombinedFilter()\r\n const dataLoadOptions = new DataLoadOptions(gridLoadOptions);\r\n return dataLoadOptions;\r\n }\r\n}\r\n","import { Directive, HostListener, Input, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from './Grid.extender';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { IBaseComponent } from './../component/IBaseComponent';\r\nimport { IGridComponent } from '../component/BaseGridComponent';\r\n\r\n@Directive({ selector: '[configGrid]' })\r\nexport class M4UConfigGridDirective implements OnDestroy {\r\n //Set default options\r\n private grid: DxDataGridComponent;\r\n public get gridAny(): any { return this.grid; }\r\n // @ts-ignore\r\n constructor(private c: DxDataGridComponent) {\r\n this.grid = c;\r\n }\r\n\r\n //Set name (no instance yet), set directly\r\n private _Component: IBaseComponent;\r\n get Component(): IBaseComponent { return this._Component; }\r\n @Input() set Component(value: IBaseComponent) {\r\n this._Component = value;\r\n this.InitExtender();\r\n }\r\n\r\n //Initialize - should be only called once\r\n private _Mode: EnumGridModes;\r\n get Mode(): EnumGridModes { return this._Mode; }\r\n @Input() set Mode(value: EnumGridModes) {\r\n this._Mode = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _AllowCustomization: boolean = false;\r\n get AllowCustomization(): boolean { return this._AllowCustomization; }\r\n @Input() set AllowCustomization(value: boolean) {\r\n this._AllowCustomization = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _AllowAdvancedFilters: boolean = false;\r\n get AllowAdvancedFilters(): boolean { return this._AllowAdvancedFilters; }\r\n @Input() set AllowAdvancedFilters(value: boolean) {\r\n this._AllowAdvancedFilters = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _Name: string;\r\n get Name(): string { return this._Name; }\r\n @Input() set Name(name: string) {\r\n this._Name = name;\r\n this.gridAny.Name = this._Name;\r\n }\r\n\r\n private _entityTypeName: string;\r\n @Input() set EntityTypeName(value: string) {\r\n this._entityTypeName = value;\r\n this.InitExtender();\r\n }\r\n get EntityTypeName() { return this._entityTypeName; }\r\n\r\n //Perform initialization once all mandatory properties are set\r\n private InitExtender() {\r\n if (this.Mode == undefined || this.Component == undefined || this.AllowCustomization == undefined || this.AllowAdvancedFilters == undefined) return;\r\n this.gridAny.G = new GridExtender(this.grid, this.Mode, this.AllowCustomization, this.AllowAdvancedFilters, this.Component, this.EntityTypeName);\r\n this.gridAny.G.InitGrid();\r\n }\r\n\r\n private get G(): GridExtender { return this.gridAny.G; }\r\n\r\n //Create new row when no rows exist\r\n @HostListener('click', ['$event'])\r\n onClick() {\r\n this.G.OnGridClick();\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.G && this.G.DestroyGrid();\r\n }\r\n\r\n}\r\n\r\n//use this directive to get descendants grid from custom components\r\n@Directive({\r\n selector: '[gridWrapper]'\r\n})\r\nexport class GridWrapperDirective {\r\n constructor(private vcRef: ViewContainerRef) { }\r\n\r\n public get G(): GridExtender {\r\n const component = this.vcRef[\"_data\"].componentView.component;\r\n\r\n return component.G;\r\n }\r\n}\r\n","import { IBaseModuleComponent } from '../component/IBaseComponent';\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { ServiceBagService } from '../component/ServiceBag';\r\nimport { Observable, observable, pipe, tap } from 'rxjs';\r\nimport { BaseResponse } from '../entities/BaseEntities';\r\n\r\nexport class BaseService implements IBaseModuleComponent {\r\n ModuleName: string = AppInjector.get(AppConfigService).getModuleNameByInstance(this);\r\n\r\n get UserInfo(): any {\r\n const session = AppInjector.get(SessionService);\r\n return this.ModuleName ? session.UserInfoDict[this.ModuleName] : session.UserInfos[0];\r\n }\r\n\r\n public get UI(): UiService {\r\n const serviceBagService = AppInjector.get(ServiceBagService);\r\n return serviceBagService.UI;\r\n }\r\n\r\n public RC(value, ...args: string[] | number[]): string {\r\n const serviceBagService = AppInjector.get(ServiceBagService);\r\n return serviceBagService.ResourcesService.RC(value, this.ModuleName, ...args);\r\n }\r\n\r\n protected handleResponse() {\r\n return (observable: Observable) => {\r\n return observable.pipe(tap((response) => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n }));\r\n };\r\n }\r\n}","export const M4UCities : string[] =\r\n [\r\n 'אבו ג\\'ווייעד (שבט)',\r\n 'אבו גוש',\r\n 'אבו סנאן',\r\n 'אבו סריחאן (שבט)',\r\n 'אבו עבדון (שבט)',\r\n 'אבו עמאר (שבט)',\r\n 'אבו עמרה (שבט)',\r\n 'אבו קורינאת (שבט)',\r\n 'אבו קרינאת (יישוב)',\r\n 'אבו רובייעה (שבט)',\r\n 'אבו רוקייק (שבט)',\r\n 'אבו תלול',\r\n 'אבטין',\r\n 'אבטליון',\r\n 'אביאל',\r\n 'אביבים',\r\n 'אביגדור',\r\n 'אביחיל',\r\n 'אביטל',\r\n 'אביעזר',\r\n 'אבירים',\r\n 'אבן יהודה',\r\n 'אבן מנחם',\r\n 'אבן ספיר',\r\n 'אבן שמואל',\r\n 'אבני איתן',\r\n 'אבני חפץ',\r\n 'אבנת',\r\n 'אבשלום',\r\n 'אדורה',\r\n 'אדירים',\r\n 'אדמית',\r\n 'אדרת',\r\n 'אודים',\r\n 'אודם',\r\n 'אוהד',\r\n 'אום אל-פחם',\r\n 'אום אל-קוטוף',\r\n 'אום בטין',\r\n 'אומן',\r\n 'אומץ',\r\n 'אופקים',\r\n 'אור הגנוז',\r\n 'אור הנר',\r\n 'אור יהודה',\r\n 'אור עקיבא',\r\n 'אורה',\r\n 'אורות',\r\n 'אורטל',\r\n 'אורים',\r\n 'אורנים',\r\n 'אורנית',\r\n 'אושה',\r\n 'אזור',\r\n 'אחווה',\r\n 'אחוזם',\r\n 'אחוזת ברק',\r\n 'אחיהוד',\r\n 'אחיטוב',\r\n 'אחיסמך',\r\n 'אחיעזר',\r\n 'אטרש (שבט)',\r\n 'איבים',\r\n 'אייל',\r\n 'איילת השחר',\r\n 'אילון',\r\n 'אילות',\r\n 'אילניה',\r\n 'אילת',\r\n 'אירוס',\r\n 'איתמר',\r\n 'איתן',\r\n 'איתנים',\r\n 'אכסאל',\r\n 'אל סייד',\r\n 'אל-עזי',\r\n 'אל-עריאן',\r\n 'אל-רום',\r\n 'אלומה',\r\n 'אלומות',\r\n 'אלון הגליל',\r\n 'אלון מורה',\r\n 'אלון שבות',\r\n 'אלוני אבא',\r\n 'אלוני הבשן',\r\n 'אלוני יצחק',\r\n 'אלונים',\r\n 'אלי-עד',\r\n 'אליאב',\r\n 'אליכין',\r\n 'אליפז',\r\n 'אליפלט',\r\n 'אליקים',\r\n 'אלישיב',\r\n 'אלישמע',\r\n 'אלמגור',\r\n 'אלמוג',\r\n 'אלעד',\r\n 'אלעזר',\r\n 'אלפי מנשה',\r\n 'אלקוש',\r\n 'אלקנה',\r\n 'אמונים',\r\n 'אמירים',\r\n 'אמנון',\r\n 'אמציה',\r\n 'אניעם',\r\n 'אסד (שבט)',\r\n 'אספר',\r\n 'אעבלין',\r\n 'אעצם (שבט)',\r\n 'אפיניש (שבט)',\r\n 'אפיק',\r\n 'אפיקים',\r\n 'אפק',\r\n 'אפרת',\r\n 'ארבל',\r\n 'ארגמן',\r\n 'ארז',\r\n 'אריאל',\r\n 'ארסוף',\r\n 'אשבול',\r\n 'אשבל',\r\n 'אשדוד',\r\n 'אשדות יעקב (איחוד)',\r\n 'אשדות יעקב (מאוחד)',\r\n 'אשחר',\r\n 'אשכולות',\r\n 'אשל הנשיא',\r\n 'אשלים',\r\n 'אשקלון',\r\n 'אשרת',\r\n 'אשתאול',\r\n 'אתגר',\r\n 'באקה אל-גרביה',\r\n 'באר אורה',\r\n 'באר גנים',\r\n 'באר טוביה',\r\n 'באר יעקב',\r\n 'באר מילכה',\r\n 'באר שבע',\r\n 'בארות יצחק',\r\n 'בארותיים',\r\n 'בארי',\r\n 'בוסתן הגליל',\r\n 'בועיינה-נוג\\'ידאת',\r\n 'בוקעאתא',\r\n 'בורגתה',\r\n 'בחן',\r\n 'בטחה',\r\n 'ביצרון',\r\n 'ביר אל-מכסור',\r\n 'ביר הדאג\\'',\r\n 'ביריה',\r\n 'בית אורן',\r\n 'בית אל',\r\n 'בית אלעזרי',\r\n 'בית אלפא',\r\n 'בית אריה',\r\n 'בית ברל',\r\n 'בית ג\\'ן',\r\n 'בית גוברין',\r\n 'בית גמליאל',\r\n 'בית דגן',\r\n 'בית הגדי',\r\n 'בית הלוי',\r\n 'בית הלל',\r\n 'בית העמק',\r\n 'בית הערבה',\r\n 'בית השיטה',\r\n 'בית זיד',\r\n 'בית זית',\r\n 'בית זרע',\r\n 'בית חורון',\r\n 'בית חירות',\r\n 'בית חלקיה',\r\n 'בית חנן',\r\n 'בית חנניה',\r\n 'בית חשמונאי',\r\n 'בית יהושע',\r\n 'בית יוסף',\r\n 'בית ינאי',\r\n 'בית יצחק-שער חפר',\r\n 'בית לחם הגלילית',\r\n 'בית מאיר',\r\n 'בית נחמיה',\r\n 'בית ניר',\r\n 'בית נקופה',\r\n 'בית עובד',\r\n 'בית עוזיאל',\r\n 'בית עזרא',\r\n 'בית עריף',\r\n 'בית צבי',\r\n 'בית קמה',\r\n 'בית קשת',\r\n 'בית רבן',\r\n 'בית רימון',\r\n 'בית שאן',\r\n 'בית שמש',\r\n 'בית שערים',\r\n 'בית שקמה',\r\n 'ביתן אהרן',\r\n 'ביתר עילית',\r\n 'בלפוריה',\r\n 'בן זכאי',\r\n 'בן עמי',\r\n 'בן שמן (כפר נוער)',\r\n 'בן שמן (מושב)',\r\n 'בני ברק',\r\n 'בני דקלים',\r\n 'בני דרום',\r\n 'בני דרור',\r\n 'בני יהודה',\r\n 'בני נצרים',\r\n 'בני עטרות',\r\n 'בני עי\"ש',\r\n 'בני ציון',\r\n 'בני ראם',\r\n 'בניה',\r\n 'בנימינה-גבעת עדה',\r\n 'בסמ\"ה',\r\n 'בסמת טבעון',\r\n 'בענה',\r\n 'בצרה',\r\n 'בצת',\r\n 'בקוע',\r\n 'בקעות',\r\n 'בר גיורא',\r\n 'בר יוחאי',\r\n 'ברוכין',\r\n 'ברור חיל',\r\n 'ברוש',\r\n 'ברכה',\r\n 'ברכיה',\r\n 'ברעם',\r\n 'ברק',\r\n 'ברקאי',\r\n 'ברקן',\r\n 'ברקת',\r\n 'בת הדר',\r\n 'בת חן',\r\n 'בת חפר',\r\n 'בת חצור',\r\n 'בת ים',\r\n 'בת עין',\r\n 'בת שלמה',\r\n 'ג\\'דיידה-מכר',\r\n 'ג\\'ולס',\r\n 'ג\\'לג\\'וליה',\r\n 'ג\\'נאביב (שבט)',\r\n 'ג\\'סר א-זרקא',\r\n 'ג\\'ש (גוש חלב)',\r\n 'ג\\'ת',\r\n 'גאולי תימן',\r\n 'גאולים',\r\n 'גאליה',\r\n 'גבולות',\r\n 'גבים',\r\n 'גבע',\r\n 'גבע בנימין',\r\n 'גבע כרמל',\r\n 'גבעולים',\r\n 'גבעון החדשה',\r\n 'גבעות בר',\r\n 'גבעת אבני',\r\n 'גבעת אלה',\r\n 'גבעת ברנר',\r\n 'גבעת השלושה',\r\n 'גבעת זאב',\r\n 'גבעת ח\"ן',\r\n 'גבעת חיים (איחוד)',\r\n 'גבעת חיים (מאוחד)',\r\n 'גבעת יואב',\r\n 'גבעת יערים',\r\n 'גבעת ישעיהו',\r\n 'גבעת כ\"ח',\r\n 'גבעת ניל\"י',\r\n 'גבעת עוז',\r\n 'גבעת שמואל',\r\n 'גבעת שמש',\r\n 'גבעת שפירא',\r\n 'גבעתי',\r\n 'גבעתיים',\r\n 'גברעם',\r\n 'גבת',\r\n 'גדות',\r\n 'גדיש',\r\n 'גדעונה',\r\n 'גדרה',\r\n 'גונן',\r\n 'גורן',\r\n 'גורנות הגליל',\r\n 'גזית',\r\n 'גזר',\r\n 'גיאה',\r\n 'גיבתון',\r\n 'גיזו',\r\n 'גילון',\r\n 'גילת',\r\n 'גינוסר',\r\n 'גיניגר',\r\n 'גינתון',\r\n 'גיתה',\r\n 'גיתית',\r\n 'גלאון',\r\n 'גלגל',\r\n 'גליל ים',\r\n 'גלעד (אבן יצחק)',\r\n 'גמזו',\r\n 'גן הדרום',\r\n 'גן השומרון',\r\n 'גן חיים',\r\n 'גן יאשיה',\r\n 'גן יבנה',\r\n 'גן נר',\r\n 'גן שורק',\r\n 'גן שלמה',\r\n 'גן שמואל',\r\n 'גנות',\r\n 'גנות הדר',\r\n 'גני הדר',\r\n 'גני טל',\r\n 'גני יוחנן',\r\n 'גני מודיעין',\r\n 'גני עם',\r\n 'גני תקווה',\r\n 'געש',\r\n 'געתון',\r\n 'גפן',\r\n 'גרופית',\r\n 'גשור',\r\n 'גשר',\r\n 'גשר הזיו',\r\n 'גת (קיבוץ)',\r\n 'גת רימון',\r\n 'דאלית אל-כרמל',\r\n 'דבורה',\r\n 'דבוריה',\r\n 'דבירה',\r\n 'דברת',\r\n 'דגניה א\\'',\r\n 'דגניה ב\\'',\r\n 'דוב\"ב',\r\n 'דולב',\r\n 'דור',\r\n 'דורות',\r\n 'דחי',\r\n 'דייר אל-אסד',\r\n 'דייר חנא',\r\n 'דייר ראפאת',\r\n 'דימונה',\r\n 'דישון',\r\n 'דליה',\r\n 'דלתון',\r\n 'דמיידה',\r\n 'דן',\r\n 'דפנה',\r\n 'דקל',\r\n 'דריג\\'את',\r\n 'האון',\r\n 'הבונים',\r\n 'הגושרים',\r\n 'הדר עם',\r\n 'הוד השרון',\r\n 'הודיה',\r\n 'הודיות',\r\n 'הוואשלה (שבט)',\r\n 'הוזייל (שבט)',\r\n 'הושעיה',\r\n 'הזורע',\r\n 'הזורעים',\r\n 'החותרים',\r\n 'היוגב',\r\n 'הילה',\r\n 'המעפיל',\r\n 'הסוללים',\r\n 'העוגן',\r\n 'הר אדר',\r\n 'הר גילה',\r\n 'הר עמשא',\r\n 'הראל',\r\n 'הרדוף',\r\n 'הרצליה',\r\n 'הררית',\r\n 'ורד יריחו',\r\n 'ורדון',\r\n 'זבארגה (שבט)',\r\n 'זבדיאל',\r\n 'זוהר',\r\n 'זיקים',\r\n 'זיתן',\r\n 'זכרון יעקב',\r\n 'זכריה',\r\n 'זמר',\r\n 'זמרת',\r\n 'זנוח',\r\n 'זרועה',\r\n 'זרזיר',\r\n 'זרחיה',\r\n 'ח\\'ואלד',\r\n 'ח\\'ואלד (שבט)',\r\n 'חבצלת השרון',\r\n 'חבר',\r\n 'חברון',\r\n 'חגור',\r\n 'חגי',\r\n 'חגלה',\r\n 'חד-נס',\r\n 'חדיד',\r\n 'חדרה',\r\n 'חוג\\'ייראת (ד\\'הרה)',\r\n 'חולדה',\r\n 'חולון',\r\n 'חולית',\r\n 'חולתה',\r\n 'חוסן',\r\n 'חוסנייה',\r\n 'חופית',\r\n 'חוקוק',\r\n 'חורה',\r\n 'חורפיש',\r\n 'חורשים',\r\n 'חזון',\r\n 'חיבת ציון',\r\n 'חיננית',\r\n 'חיפה',\r\n 'חירות',\r\n 'חלוץ',\r\n 'חלץ',\r\n 'חמאם',\r\n 'חמד',\r\n 'חמדיה',\r\n 'חמדת',\r\n 'חמרה',\r\n 'חניאל',\r\n 'חניתה',\r\n 'חנתון',\r\n 'חספין',\r\n 'חפץ חיים',\r\n 'חפצי-בה',\r\n 'חצב',\r\n 'חצבה',\r\n 'חצור הגלילית',\r\n 'חצור-אשדוד',\r\n 'חצר בארותיים',\r\n 'חצרות חולדה',\r\n 'חצרות יסף',\r\n 'חצרות כ\"ח',\r\n 'חצרים',\r\n 'חרב לאת',\r\n 'חרוצים',\r\n 'חריש',\r\n 'חרמש',\r\n 'חרשים',\r\n 'חשמונאים',\r\n 'טבריה',\r\n 'טובא-זנגריה',\r\n 'טורעאן',\r\n 'טייבה',\r\n 'טייבה (בעמק)',\r\n 'טירה',\r\n 'טירת יהודה',\r\n 'טירת כרמל',\r\n 'טירת צבי',\r\n 'טל שחר',\r\n 'טל-אל',\r\n 'טללים',\r\n 'טלמון',\r\n 'טמרה',\r\n 'טמרה (יזרעאל)',\r\n 'טנא',\r\n 'טפחות',\r\n 'יאנוח-ג\\'ת',\r\n 'יבול',\r\n 'יבנאל',\r\n 'יבנה',\r\n 'יגור',\r\n 'יגל',\r\n 'יד בנימין',\r\n 'יד השמונה',\r\n 'יד חנה',\r\n 'יד מרדכי',\r\n 'יד נתן',\r\n 'יד רמב\"ם',\r\n 'ידידה',\r\n 'יהוד-מונוסון',\r\n 'יהל',\r\n 'יובל',\r\n 'יובלים',\r\n 'יודפת',\r\n 'יונתן',\r\n 'יושיביה',\r\n 'יזרעאל',\r\n 'יחיעם',\r\n 'יטבתה',\r\n 'ייט\"ב',\r\n 'יכיני',\r\n 'ינוב',\r\n 'ינון',\r\n 'יסוד המעלה',\r\n 'יסודות',\r\n 'יסעור',\r\n 'יעד',\r\n 'יעל',\r\n 'יעף',\r\n 'יערה',\r\n 'יפיע',\r\n 'יפית',\r\n 'יפעת',\r\n 'יפתח',\r\n 'יצהר',\r\n 'יציץ',\r\n 'יקום',\r\n 'יקיר',\r\n 'יקנעם (מושבה)',\r\n 'יקנעם עילית',\r\n 'יראון',\r\n 'ירדנה',\r\n 'ירוחם',\r\n 'ירושלים',\r\n 'ירחיב',\r\n 'ירכא',\r\n 'ירקונה',\r\n 'ישע',\r\n 'ישעי',\r\n 'ישרש',\r\n 'יתד',\r\n 'יתיר',\r\n 'כאבול',\r\n 'כאוכב אבו אל-היג\\'א',\r\n 'כברי',\r\n 'כדורי',\r\n 'כדיתה',\r\n 'כוכב השחר',\r\n 'כוכב יאיר',\r\n 'כוכב יעקב',\r\n 'כוכב מיכאל',\r\n 'כורזים',\r\n 'כחל',\r\n 'כחלה',\r\n 'כיסופים',\r\n 'כישור',\r\n 'כליל',\r\n 'כלנית',\r\n 'כמאנה',\r\n 'כמהין',\r\n 'כמון',\r\n 'כנות',\r\n 'כנף',\r\n 'כנרת (מושבה)',\r\n 'כנרת (קבוצה)',\r\n 'כסיפה',\r\n 'כסלון',\r\n 'כסרא-סמיע',\r\n 'כעביה-טבאש-חג\\'אג\\'רה',\r\n 'כפר אביב',\r\n 'כפר אדומים',\r\n 'כפר אוריה',\r\n 'כפר אחים',\r\n 'כפר ביאליק',\r\n 'כפר ביל\"ו',\r\n 'כפר בלום',\r\n 'כפר בן נון',\r\n 'כפר ברא',\r\n 'כפר ברוך',\r\n 'כפר גדעון',\r\n 'כפר גלים',\r\n 'כפר גליקסון',\r\n 'כפר גלעדי',\r\n 'כפר דניאל',\r\n 'כפר האורנים',\r\n 'כפר החורש',\r\n 'כפר המכבי',\r\n 'כפר הנגיד',\r\n 'כפר הנוער הדתי',\r\n 'כפר הנשיא',\r\n 'כפר הס',\r\n 'כפר הרא\"ה',\r\n 'כפר הרי\"ף',\r\n 'כפר ויתקין',\r\n 'כפר ורבורג',\r\n 'כפר ורדים',\r\n 'כפר זוהרים',\r\n 'כפר זיתים',\r\n 'כפר חב\"ד',\r\n 'כפר חושן',\r\n 'כפר חיטים',\r\n 'כפר חיים',\r\n 'כפר חנניה',\r\n 'כפר חסידים א\\'',\r\n 'כפר חסידים ב\\'',\r\n 'כפר חרוב',\r\n 'כפר טרומן',\r\n 'כפר יאסיף',\r\n 'כפר ידידיה',\r\n 'כפר יהושע',\r\n 'כפר יונה',\r\n 'כפר יחזקאל',\r\n 'כפר יעבץ',\r\n 'כפר כמא',\r\n 'כפר כנא',\r\n 'כפר מונש',\r\n 'כפר מימון',\r\n 'כפר מל\"ל',\r\n 'כפר מנדא',\r\n 'כפר מנחם',\r\n 'כפר מסריק',\r\n 'כפר מצר',\r\n 'כפר מרדכי',\r\n 'כפר נטר',\r\n 'כפר סאלד',\r\n 'כפר סבא',\r\n 'כפר סילבר',\r\n 'כפר סירקין',\r\n 'כפר עבודה',\r\n 'כפר עזה',\r\n 'כפר עציון',\r\n 'כפר פינס',\r\n 'כפר קאסם',\r\n 'כפר קיש',\r\n 'כפר קרע',\r\n 'כפר ראש הנקרה',\r\n 'כפר רוזנואלד (זרעית)',\r\n 'כפר רופין',\r\n 'כפר רות',\r\n 'כפר שמאי',\r\n 'כפר שמואל',\r\n 'כפר שמריהו',\r\n 'כפר תבור',\r\n 'כפר תפוח',\r\n 'כרי דשא',\r\n 'כרכום',\r\n 'כרם בן זמרה',\r\n 'כרם בן שמן',\r\n 'כרם יבנה (ישיבה)',\r\n 'כרם מהר\"ל',\r\n 'כרם שלום',\r\n 'כרמי יוסף',\r\n 'כרמי צור',\r\n 'כרמי קטיף',\r\n 'כרמיאל',\r\n 'כרמיה',\r\n 'כרמים',\r\n 'כרמל',\r\n 'לא רשום',\r\n 'לבון',\r\n 'לביא',\r\n 'לבנים',\r\n 'להב',\r\n 'להבות הבשן',\r\n 'להבות חביבה',\r\n 'להבים',\r\n 'לוד',\r\n 'לוזית',\r\n 'לוחמי הגיטאות',\r\n 'לוטם',\r\n 'לוטן',\r\n 'לימן',\r\n 'לכיש',\r\n 'לפיד',\r\n 'לפידות',\r\n 'לקיה',\r\n 'מאור',\r\n 'מאיר שפיה',\r\n 'מבוא ביתר',\r\n 'מבוא דותן',\r\n 'מבוא חורון',\r\n 'מבוא חמה',\r\n 'מבוא מודיעים',\r\n 'מבואות ים',\r\n 'מבועים',\r\n 'מבטחים',\r\n 'מבקיעים',\r\n 'מבשרת ציון',\r\n 'מג\\'ד אל-כרום',\r\n 'מג\\'דל שמס',\r\n 'מגאר',\r\n 'מגדים',\r\n 'מגדל',\r\n 'מגדל העמק',\r\n 'מגדל עוז',\r\n 'מגדלים',\r\n 'מגידו',\r\n 'מגל',\r\n 'מגן',\r\n 'מגן שאול',\r\n 'מגשימים',\r\n 'מדרך עוז',\r\n 'מדרשת בן גוריון',\r\n 'מדרשת רופין',\r\n 'מודיעין עילית',\r\n 'מודיעין-מכבים-רעות',\r\n 'מולדת',\r\n 'מוצא עילית',\r\n 'מוקייבלה',\r\n 'מורן',\r\n 'מורשת',\r\n 'מזור',\r\n 'מזכרת בתיה',\r\n 'מזרע',\r\n 'מזרעה',\r\n 'מחולה',\r\n 'מחנה הילה',\r\n 'מחנה טלי',\r\n 'מחנה יהודית',\r\n 'מחנה יוכבד',\r\n 'מחנה יפה',\r\n 'מחנה יתיר',\r\n 'מחנה מרים',\r\n 'מחנה תל נוף',\r\n 'מחניים',\r\n 'מחסיה',\r\n 'מטולה',\r\n 'מטע',\r\n 'מי עמי',\r\n 'מיטב',\r\n 'מייסר',\r\n 'מיצר',\r\n 'מירב',\r\n 'מירון',\r\n 'מישר',\r\n 'מיתר',\r\n 'מכורה',\r\n 'מכחול',\r\n 'מכמורת',\r\n 'מכמנים',\r\n 'מלאה',\r\n 'מלילות',\r\n 'מלכיה',\r\n 'מלכישוע',\r\n 'מנוחה',\r\n 'מנוף',\r\n 'מנות',\r\n 'מנחמיה',\r\n 'מנרה',\r\n 'מנשית זבדה',\r\n 'מסד',\r\n 'מסדה',\r\n 'מסילות',\r\n 'מסילת ציון',\r\n 'מסלול',\r\n 'מסעדה',\r\n 'מסעודין אל-עזאזמה',\r\n 'מעברות',\r\n 'מעגלים',\r\n 'מעגן',\r\n 'מעגן מיכאל',\r\n 'מעוז חיים',\r\n 'מעון',\r\n 'מעונה',\r\n 'מעיליא',\r\n 'מעין ברוך',\r\n 'מעין צבי',\r\n 'מעלה אדומים',\r\n 'מעלה אפרים',\r\n 'מעלה גלבוע',\r\n 'מעלה גמלא',\r\n 'מעלה החמישה',\r\n 'מעלה לבונה',\r\n 'מעלה מכמש',\r\n 'מעלה עירון',\r\n 'מעלה עמוס',\r\n 'מעלה שומרון',\r\n 'מעלות-תרשיחא',\r\n 'מענית',\r\n 'מעש',\r\n 'מפלסים',\r\n 'מצדות יהודה',\r\n 'מצובה',\r\n 'מצליח',\r\n 'מצפה',\r\n 'מצפה אבי\"ב',\r\n 'מצפה אילן',\r\n 'מצפה יריחו',\r\n 'מצפה נטופה',\r\n 'מצפה רמון',\r\n 'מצפה שלם',\r\n 'מצר',\r\n 'מקווה ישראל',\r\n 'מרגליות',\r\n 'מרום גולן',\r\n 'מרחב עם',\r\n 'מרחביה (מושב)',\r\n 'מרחביה (קיבוץ)',\r\n 'מרכז שפירא',\r\n 'משאבי שדה',\r\n 'משגב דב',\r\n 'משגב עם',\r\n 'משהד',\r\n 'משואה',\r\n 'משואות יצחק',\r\n 'משכיות',\r\n 'משמר איילון',\r\n 'משמר דוד',\r\n 'משמר הירדן',\r\n 'משמר הנגב',\r\n 'משמר העמק',\r\n 'משמר השבעה',\r\n 'משמר השרון',\r\n 'משמרות',\r\n 'משמרת',\r\n 'משען',\r\n 'מתן',\r\n 'מתת',\r\n 'מתתיהו',\r\n 'נאות גולן',\r\n 'נאות הכיכר',\r\n 'נאות מרדכי',\r\n 'נאות סמדר',\r\n 'נאעורה',\r\n 'נבטים',\r\n 'נגבה',\r\n 'נגוהות',\r\n 'נהורה',\r\n 'נהלל',\r\n 'נהריה',\r\n 'נוב',\r\n 'נוגה',\r\n 'נוה צוף',\r\n 'נווה',\r\n 'נווה אבות',\r\n 'נווה אור',\r\n 'נווה אטי\"ב',\r\n 'נווה אילן',\r\n 'נווה איתן',\r\n 'נווה דניאל',\r\n 'נווה זוהר',\r\n 'נווה זיו',\r\n 'נווה חריף',\r\n 'נווה ים',\r\n 'נווה ימין',\r\n 'נווה ירק',\r\n 'נווה מבטח',\r\n 'נווה מיכאל',\r\n 'נווה שלום',\r\n 'נועם',\r\n 'נוף איילון',\r\n 'נוף הגליל',\r\n 'נופים',\r\n 'נופית',\r\n 'נופך',\r\n 'נוקדים',\r\n 'נורדיה',\r\n 'נורית',\r\n 'נחושה',\r\n 'נחל עוז',\r\n 'נחלה',\r\n 'נחליאל',\r\n 'נחלים',\r\n 'נחם',\r\n 'נחף',\r\n 'נחשולים',\r\n 'נחשון',\r\n 'נחשונים',\r\n 'נטועה',\r\n 'נטור',\r\n 'נטע',\r\n 'נטעים',\r\n 'נטף',\r\n 'ניין',\r\n 'ניל\"י',\r\n 'ניצן',\r\n 'ניצן ב\\'',\r\n 'ניצנה (קהילת חינוך)',\r\n 'ניצני סיני',\r\n 'ניצני עוז',\r\n 'ניצנים',\r\n 'ניר אליהו',\r\n 'ניר בנים',\r\n 'ניר גלים',\r\n 'ניר דוד (תל עמל)',\r\n 'ניר ח\"ן',\r\n 'ניר יפה',\r\n 'ניר יצחק',\r\n 'ניר ישראל',\r\n 'ניר משה',\r\n 'ניר עוז',\r\n 'ניר עם',\r\n 'ניר עציון',\r\n 'ניר עקיבא',\r\n 'ניר צבי',\r\n 'נירים',\r\n 'נירית',\r\n 'נמרוד',\r\n 'נס הרים',\r\n 'נס עמים',\r\n 'נס ציונה',\r\n 'נעורים',\r\n 'נעלה',\r\n 'נעמ\"ה',\r\n 'נען',\r\n 'נערן',\r\n 'נצאצרה (שבט)',\r\n 'נצר חזני',\r\n 'נצר סרני',\r\n 'נצרת',\r\n 'נשר',\r\n 'נתיב הגדוד',\r\n 'נתיב הל\"ה',\r\n 'נתיב העשרה',\r\n 'נתיב השיירה',\r\n 'נתיבות',\r\n 'נתניה',\r\n 'סאג\\'ור',\r\n 'סאסא',\r\n 'סביון',\r\n 'סגולה',\r\n 'סואעד (חמרייה)',\r\n 'סואעד (כמאנה) (שבט)',\r\n 'סולם',\r\n 'סוסיה',\r\n 'סופה',\r\n 'סח\\'נין',\r\n 'סייד (שבט)',\r\n 'סלמה',\r\n 'סלעית',\r\n 'סמר',\r\n 'סנסנה',\r\n 'סעד',\r\n 'סעוה',\r\n 'סער',\r\n 'ספיר',\r\n 'סתריה',\r\n 'ע\\'ג\\'ר',\r\n 'עבדון',\r\n 'עברון',\r\n 'עגור',\r\n 'עדי',\r\n 'עדנים',\r\n 'עוזה',\r\n 'עוזייר',\r\n 'עולש',\r\n 'עומר',\r\n 'עופר',\r\n 'עופרה',\r\n 'עוצם',\r\n 'עוקבי (בנו עוקבה)',\r\n 'עזוז',\r\n 'עזר',\r\n 'עזריאל',\r\n 'עזריה',\r\n 'עזריקם',\r\n 'עטאוונה (שבט)',\r\n 'עטרת',\r\n 'עידן',\r\n 'עיילבון',\r\n 'עיינות',\r\n 'עילוט',\r\n 'עין איילה',\r\n 'עין אל-אסד',\r\n 'עין גב',\r\n 'עין גדי',\r\n 'עין דור',\r\n 'עין הבשור',\r\n 'עין הוד',\r\n 'עין החורש',\r\n 'עין המפרץ',\r\n 'עין הנצי\"ב',\r\n 'עין העמק',\r\n 'עין השופט',\r\n 'עין השלושה',\r\n 'עין ורד',\r\n 'עין זיוון',\r\n 'עין חוד',\r\n 'עין חצבה',\r\n 'עין חרוד (איחוד)',\r\n 'עין חרוד (מאוחד)',\r\n 'עין יהב',\r\n 'עין יעקב',\r\n 'עין כרם-בי\"ס חקלאי',\r\n 'עין כרמל',\r\n 'עין מאהל',\r\n 'עין נקובא',\r\n 'עין עירון',\r\n 'עין צורים',\r\n 'עין קנייא',\r\n 'עין ראפה',\r\n 'עין שמר',\r\n 'עין שריד',\r\n 'עין תמר',\r\n 'עינת',\r\n 'עיר אובות',\r\n 'עכו',\r\n 'עלומים',\r\n 'עלי',\r\n 'עלי זהב',\r\n 'עלמה',\r\n 'עלמון',\r\n 'עמוקה',\r\n 'עמיחי',\r\n 'עמינדב',\r\n 'עמיעד',\r\n 'עמיעוז',\r\n 'עמיקם',\r\n 'עמיר',\r\n 'עמנואל',\r\n 'עמקה',\r\n 'ענב',\r\n 'עספיא',\r\n 'עפולה',\r\n 'עץ אפרים',\r\n 'עצמון שגב',\r\n 'עראבה',\r\n 'עראמשה',\r\n 'ערב אל נעים',\r\n 'ערד',\r\n 'ערוגות',\r\n 'ערערה',\r\n 'ערערה-בנגב',\r\n 'עשרת',\r\n 'עתלית',\r\n 'עתניאל',\r\n 'פארן',\r\n 'פדואל',\r\n 'פדויים',\r\n 'פדיה',\r\n 'פוריה - כפר עבודה',\r\n 'פוריה - נווה עובד',\r\n 'פוריה עילית',\r\n 'פוריידיס',\r\n 'פורת',\r\n 'פטיש',\r\n 'פלך',\r\n 'פלמחים',\r\n 'פני חבר',\r\n 'פסגות',\r\n 'פסוטה',\r\n 'פעמי תש\"ז',\r\n 'פצאל',\r\n 'פקיעין (בוקייעה)',\r\n 'פקיעין חדשה',\r\n 'פרדס חנה-כרכור',\r\n 'פרדסיה',\r\n 'פרוד',\r\n 'פרזון',\r\n 'פרי גן',\r\n 'פתח תקווה',\r\n 'פתחיה',\r\n 'צאלים',\r\n 'צביה',\r\n 'צבעון',\r\n 'צובה',\r\n 'צוחר',\r\n 'צופיה',\r\n 'צופים',\r\n 'צופית',\r\n 'צופר',\r\n 'צוקי ים',\r\n 'צוקים',\r\n 'צור הדסה',\r\n 'צור יצחק',\r\n 'צור משה',\r\n 'צור נתן',\r\n 'צוריאל',\r\n 'צורית',\r\n 'ציפורי',\r\n 'צלפון',\r\n 'צנדלה',\r\n 'צפריה',\r\n 'צפרירים',\r\n 'צפת',\r\n 'צרופה',\r\n 'צרעה',\r\n 'קבועה (שבט)',\r\n 'קבוצת יבנה',\r\n 'קדומים',\r\n 'קדימה-צורן',\r\n 'קדמה',\r\n 'קדמת צבי',\r\n 'קדר',\r\n 'קדרון',\r\n 'קדרים',\r\n 'קודייראת א-צאנע(שבט)',\r\n 'קוואעין (שבט)',\r\n 'קוממיות',\r\n 'קורנית',\r\n 'קטורה',\r\n 'קיסריה',\r\n 'קלחים',\r\n 'קליה',\r\n 'קלנסווה',\r\n 'קלע',\r\n 'קציר',\r\n 'קצר א-סר',\r\n 'קצרין',\r\n 'קרית אונו',\r\n 'קרית ארבע',\r\n 'קרית אתא',\r\n 'קרית ביאליק',\r\n 'קרית גת',\r\n 'קרית טבעון',\r\n 'קרית ים',\r\n 'קרית יערים',\r\n 'קרית יערים(מוסד)',\r\n 'קרית מוצקין',\r\n 'קרית מלאכי',\r\n 'קרית נטפים',\r\n 'קרית ענבים',\r\n 'קרית עקרון',\r\n 'קרית שלמה',\r\n 'קרית שמונה',\r\n 'קרני שומרון',\r\n 'קשת',\r\n 'ראמה',\r\n 'ראס אל-עין',\r\n 'ראס עלי',\r\n 'ראש העין',\r\n 'ראש פינה',\r\n 'ראש צורים',\r\n 'ראשון לציון',\r\n 'רבבה',\r\n 'רבדים',\r\n 'רביבים',\r\n 'רביד',\r\n 'רגבה',\r\n 'רגבים',\r\n 'רהט',\r\n 'רווחה',\r\n 'רוויה',\r\n 'רוח מדבר',\r\n 'רוחמה',\r\n 'רומאנה',\r\n 'רומת הייב',\r\n 'רועי',\r\n 'רותם',\r\n 'רחוב',\r\n 'רחובות',\r\n 'רחלים',\r\n 'ריחאניה',\r\n 'ריחן',\r\n 'ריינה',\r\n 'רימונים',\r\n 'רינתיה',\r\n 'רכסים',\r\n 'רם-און',\r\n 'רמות',\r\n 'רמות השבים',\r\n 'רמות מאיר',\r\n 'רמות מנשה',\r\n 'רמות נפתלי',\r\n 'רמלה',\r\n 'רמת גן',\r\n 'רמת דוד',\r\n 'רמת הכובש',\r\n 'רמת השופט',\r\n 'רמת השרון',\r\n 'רמת יוחנן',\r\n 'רמת ישי',\r\n 'רמת מגשימים',\r\n 'רמת צבי',\r\n 'רמת רזיאל',\r\n 'רמת רחל',\r\n 'רנן',\r\n 'רעים',\r\n 'רעננה',\r\n 'רקפת',\r\n 'רשפון',\r\n 'רשפים',\r\n 'רתמים',\r\n 'שאר ישוב',\r\n 'שבי דרום',\r\n 'שבי ציון',\r\n 'שבי שומרון',\r\n 'שבלי - אום אל-גנם',\r\n 'שגב-שלום',\r\n 'שדה אילן',\r\n 'שדה אליהו',\r\n 'שדה אליעזר',\r\n 'שדה בוקר',\r\n 'שדה דוד',\r\n 'שדה ורבורג',\r\n 'שדה יואב',\r\n 'שדה יעקב',\r\n 'שדה יצחק',\r\n 'שדה משה',\r\n 'שדה נחום',\r\n 'שדה נחמיה',\r\n 'שדה ניצן',\r\n 'שדה עוזיהו',\r\n 'שדה צבי',\r\n 'שדות ים',\r\n 'שדות מיכה',\r\n 'שדי אברהם',\r\n 'שדי חמד',\r\n 'שדי תרומות',\r\n 'שדמה',\r\n 'שדמות דבורה',\r\n 'שדמות מחולה',\r\n 'שדרות',\r\n 'שואבה',\r\n 'שובה',\r\n 'שובל',\r\n 'שוהם',\r\n 'שומרה',\r\n 'שומריה',\r\n 'שוקדה',\r\n 'שורש',\r\n 'שורשים',\r\n 'שושנת העמקים',\r\n 'שזור',\r\n 'שחר',\r\n 'שחרות',\r\n 'שיבולים',\r\n 'שיטים',\r\n 'שייח\\' דנון',\r\n 'שילה',\r\n 'שילת',\r\n 'שכניה',\r\n 'שלווה',\r\n 'שלווה במדבר',\r\n 'שלוחות',\r\n 'שלומי',\r\n 'שלומית',\r\n 'שמיר',\r\n 'שמעה',\r\n 'שמרת',\r\n 'שמשית',\r\n 'שני',\r\n 'שניר',\r\n 'שעב',\r\n 'שעורים',\r\n 'שעל',\r\n 'שעלבים',\r\n 'שער אפרים',\r\n 'שער הגולן',\r\n 'שער העמקים',\r\n 'שער מנשה',\r\n 'שערי תקווה',\r\n 'שפיים',\r\n 'שפיר',\r\n 'שפר',\r\n 'שפרעם',\r\n 'שקד',\r\n 'שקף',\r\n 'שרונה',\r\n 'שריגים (לי-און)',\r\n 'שריד',\r\n 'שרשרת',\r\n 'שתולה',\r\n 'שתולים',\r\n 'תאשור',\r\n 'תדהר',\r\n 'תובל',\r\n 'תומר',\r\n 'תושיה',\r\n 'תימורים',\r\n 'תירוש',\r\n 'תל אביב - יפו',\r\n 'תל יוסף',\r\n 'תל יצחק',\r\n 'תל מונד',\r\n 'תל עדשים',\r\n 'תל קציר',\r\n 'תל שבע',\r\n 'תל תאומים',\r\n 'תלם',\r\n 'תלמי אליהו',\r\n 'תלמי אלעזר',\r\n 'תלמי ביל\"ו',\r\n 'תלמי יוסף',\r\n 'תלמי יחיאל',\r\n 'תלמי יפה',\r\n 'תלמים',\r\n 'תמרת',\r\n 'תנובות',\r\n 'תעוז',\r\n 'תפרח',\r\n 'תקומה',\r\n 'תקוע',\r\n 'תראבין א-צאנע (שבט)',\r\n 'תראבין א-צאנע(ישוב)',\r\n 'תרום'\r\n ];","import { Observable, of } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DefaultRouteParams, InjectableComponentOptions, LoginExtensionLink, MainMenuElement, ShareableEntity } from '@base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { Routes } from '@angular/router';\r\nimport { EnumApplicationMode } from '@core/framework/sysenums.enum';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n//Injection token for application configuration\r\nexport const APP_CONFIG = new InjectionToken('app.config');\r\n\r\nexport class AppConfig {\r\n //Module name. Can be obtained from server WebApi project name without 'WebAPI' prefix\r\n ModuleName: string = '';\r\n //Project name that was set up in menahel4u.json. No need to override, it is set automatically\r\n ProjectName: string = '';\r\n //Application Mode\r\n Mode: EnumApplicationMode = EnumApplicationMode.Standard;\r\n //Turn on/off notifications\r\n IsAllowNotifications: boolean;\r\n //Turn on/off breadcrumb\r\n ShowBreadcrumb: () => boolean = () => false;\r\n\r\n //Array of components\r\n Components = [];\r\n //Array of entry components\r\n EntryComponents = [];\r\n //Array of endpoints\r\n Endpoints = [];\r\n //Array of services\r\n Services = [];\r\n //Array of routes\r\n RoutesProtected: Routes = [];\r\n RoutesAnonymous: Routes = [];\r\n //\r\n RoutesWithEmptyLayout: Routes = [];\r\n //\r\n SupportLegacyDisplaySizes: boolean = false;\r\n\r\n //Get menu function\r\n OnGetMenu = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get navbar items for mobile menu\r\n OnGetNavbarItems = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get default route path with params function\r\n OnGetDefaultRouteParams = (userInfo?: any): Observable => of({} as DefaultRouteParams);\r\n //Get login page extension links function\r\n OnGetAppLoginExtensionLinks = (): Observable => of([]);\r\n //Get global datasources function\r\n OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => of({});\r\n //Get home page instead of system/login\r\n OnGetHomePagePath = () => '';\r\n\r\n //Application lifecycle functions\r\n //On init application function\r\n OnInitApplicationAsync = (userInfo?: any): Observable => of(true);\r\n //On logout application function\r\n OnLogoutApplicationAsync = (): Observable => of(true);\r\n //On login page. Provides posibility to config/exec an additional functionality\r\n OnLoginPage = () => of(true);\r\n\r\n //Get injectable components options\r\n GetInjectableComponentOptions = (): Observable>[]> => of([]);\r\n\r\n //Get lists\r\n GetLists = (): any[] => [];\r\n\r\n //Module enums object\r\n Enums: any = {};\r\n\r\n // List of entities which can have default share button\r\n ShareableEntities: ShareableEntity[] = [];\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { combineLatest, forkJoin, of } from 'rxjs';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { APP_CONFIG, AppConfig } from './app.config.model';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { EnumLanguages } from '@core/framework/sysenums.enum';\r\nimport { LoginGuard } from '@m4u-angular/core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@m4u-angular/core/framework/confirm-cancel.guard';\r\nimport { BaseDataResponse } from '../base/entities/BaseEntities';\r\n\r\nexport interface VersionDescriptor {\r\n moduleName: string;\r\n major: number;\r\n minor: number;\r\n build: number;\r\n builds: number[];\r\n}\r\n\r\nexport interface AppBuildConfig {\r\n deploymentPort: string;\r\n deploymentLocation: string;\r\n deploymentApiRoot: string;\r\n customBuild: string;\r\n isRegisterServiceWorker: boolean;\r\n title: string;\r\n standaloneApplicationApiUrl: string;\r\n projects: [{\r\n [key: string]: {}\r\n }];\r\n languages: string[];\r\n [key: string]: any;\r\n}\r\n\r\n@Injectable()\r\nexport class AppConfigService {\r\n public AppConfig: AppConfig;\r\n public M4UConfig: AppBuildConfig;\r\n public Resources: any[];\r\n public CustomResources: any[];\r\n\r\n constructor(@Inject(APP_CONFIG) appConfig) {\r\n this.AppConfig = appConfig;\r\n this.M4UConfig = AppConfigService.loadM4UConfig();\r\n this.Resources = AppConfigService._resources;\r\n this.CustomResources = AppConfigService._customResources;\r\n }\r\n\r\n //Get module name by component, endpoint or service instance\r\n getModuleNameByInstance = (instance): string => {\r\n //If instance is in application components return its module name\r\n const componentInstance = this.AppConfig.Components.find(c => instance instanceof c);\r\n if (componentInstance) return (componentInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application endpoints return its module name\r\n const endpointInstance = this.AppConfig.Endpoints.find(e => instance instanceof e);\r\n if (endpointInstance) return (endpointInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application services return its module name\r\n const serviceInstance = this.AppConfig.Services.find(s => {\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) return instance instanceof s['useClass'];\r\n if (s.hasOwnProperty('useValue')) return instance instanceof s['useValue'];\r\n return false;\r\n }\r\n return instance instanceof s;\r\n });\r\n if (serviceInstance) return (serviceInstance as IBaseModuleComponent).ModuleName;\r\n\r\n return '';\r\n }\r\n\r\n getModulesVersion = (): VersionDescriptor[] => {\r\n AppConfigService.loadM4UConfig();\r\n const result = Object.keys(AppConfigService._m4uConfig.projects).map(projectName => {\r\n const path = `assets/projects/${projectName}/version.json`;\r\n let version = Utils.LoadJsonFile(path);\r\n if (version) {\r\n version.moduleName = projectName;\r\n version.build = version.builds && version.builds.length ? Math.max(...version.builds) : 1;\r\n } else {\r\n version = { moduleName: projectName, major: 0, minor: 0, build: 0, builds: [] } as VersionDescriptor;\r\n }\r\n return version;\r\n });\r\n return result;\r\n }\r\n\r\n private static _m4uConfig: AppBuildConfig;\r\n static loadM4UConfig() {\r\n if (!this._m4uConfig) {\r\n this._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\r\n this._m4uConfig.deploymentPort = this.GetDeploymentPort();\r\n this._m4uConfig.deploymentLocation = this.GetDeploymentLocation(); \r\n }\r\n return this._m4uConfig;\r\n }\r\n\r\n //Return real port in case it's development one\r\n private static GetDeploymentPort() : string\r\n {\r\n return this.IsDevelopmentPort() ? (location.protocol == 'http:' ? '4444' : '44333') : location.port;\r\n }\r\n\r\n //Check whether this is our special development port\r\n private static IsDevelopmentPort() : boolean\r\n {\r\n return (location.port == '4200' || location.port == '4201');\r\n }\r\n\r\n \r\n //We are calling the server using a relative path here, with a special override for development environment to switch the port\r\n private static GetDeploymentLocationAPIURL() : string\r\n {\r\n const sRelativePath = 'api/System/DeploymentLocation';\r\n if(this.IsDevelopmentPort()) return `http://${location.hostname}:${this.GetDeploymentPort()}/${sRelativePath}`;\r\n return sRelativePath;\r\n }\r\n\r\n //Obtain the deployment server-side location (IIS virtual directory name, basically) by calling the server\r\n private static GetDeploymentLocation() : string\r\n {\r\n const oDeploymentLocation: BaseDataResponse = Utils.LoadJsonFile(this.GetDeploymentLocationAPIURL());\r\n if (oDeploymentLocation != null && oDeploymentLocation.IsSuccess) return oDeploymentLocation.Data; else return '';\r\n }\r\n\r\n //Application config variable to avoid several times loading\r\n private static _appConfig: AppConfig;\r\n static loadConfig(): AppConfig {\r\n //If already loaded just return\r\n if (this._appConfig) return this._appConfig;\r\n\r\n const m4uConfig = this.loadM4UConfig();\r\n //Validation for any project in menahel4u configuration file\r\n if (!m4uConfig.projects || !m4uConfig.projects) {\r\n throw new Error(\"There should be at least one project in menahel4u.json\");\r\n }\r\n\r\n const configs = [];\r\n //Load application configuration for each project in menahel4u configuration file\r\n Object.keys(m4uConfig.projects).forEach(projectName => {\r\n const appConfigModule = require(`projects/${projectName}/_app.config`);\r\n appConfigModule.appConfig.ProjectName = projectName;\r\n configs.push(appConfigModule.appConfig);\r\n });\r\n this.loadResources(configs);\r\n //Merge all the projects application configuration files into one\r\n this._appConfig = this.mergeConfigs(configs);\r\n return this._appConfig;\r\n }\r\n\r\n private static getRoutes(_configs: AppConfig[], routeNames: string) {\r\n return _configs.map(x => x)\r\n .reduce((arr, el) => {\r\n const routes = el[routeNames];\r\n routes.forEach(r => {\r\n //Set module name for routes with CommonSetting component and its data\r\n if (r.data && r.data.DataSource) {\r\n (r.component as any as IBaseModuleComponent).ModuleName = el.ModuleName;\r\n r.data.ModuleName = el.ModuleName;\r\n }\r\n //Get current route component\r\n const routeComponent = r.component as any as IBaseModuleComponent;\r\n //Get current route component module name\r\n const moduleNameWithPrefix = routeComponent && routeComponent.ModuleName\r\n ? `${routeComponent.ModuleName}_`\r\n : '';\r\n //Set route path depends on its component module name\r\n r.path = `${moduleNameWithPrefix}${r.path}`;\r\n });\r\n return arr.concat(routes);\r\n }, [])\r\n }\r\n\r\n //Merge application configuration files into one\r\n static mergeConfigs(configs: AppConfig[]): AppConfig {\r\n //Set module name for each of the project components, endpoints and services before application starts\r\n configs.forEach(x => {\r\n x.Components.forEach(c => (c as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Endpoints.forEach(e => (e as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Services.forEach(s => {\r\n let service;\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) service = s['useClass'];\r\n if (s.hasOwnProperty('useValue')) service = s['useValue'];\r\n } else service = s;\r\n (service as IBaseModuleComponent).ModuleName = x.ModuleName;\r\n });\r\n });\r\n return {\r\n //Join all the projects module names by ','\r\n OnGetHomePagePath: function () {\r\n let routes = [...this.RoutesWithEmptyLayout, ...this.RoutesAnonymous, ...this.RoutesProtected].filter(x => x?.data?.IsHomePage);\r\n return routes.length > 0 ? routes[0].path : '';\r\n },\r\n ModuleName: configs.map(x => x.ModuleName).join(),\r\n //Join all the projects project names by ','\r\n ProjectName: configs.map(x => x.ProjectName).join(),\r\n //Get application mode from the first app config file\r\n Mode: configs[0].Mode,\r\n //Get notifications available from the first app config file\r\n IsAllowNotifications: configs[0].IsAllowNotifications,\r\n //Get breadcrumb available from the first app config file\r\n ShowBreadcrumb: configs[0].ShowBreadcrumb,\r\n\r\n //Merge all the projects components into one array\r\n Components: configs.map(x => x.Components).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects entry components into one array\r\n EntryComponents: configs.map(x => x.EntryComponents).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects endpoints into one array\r\n Endpoints: configs.map(x => x.Endpoints).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects services into one array\r\n Services: configs.map(x => x.Services).reduce((arr, el) => arr.concat(el), []),\r\n\r\n //Merge all the projects routes into one array and add module name prefix for each of the route\r\n RoutesProtected: this.getRoutes(configs, 'RoutesProtected')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canActivate: [LoginGuard, ...(item.canActivate || [])], canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesAnonymous: this.getRoutes(configs, 'RoutesAnonymous')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesWithEmptyLayout: this.getRoutes(configs, 'RoutesWithEmptyLayout'),\r\n\r\n SupportLegacyDisplaySizes: configs.findIndex(x => !!x.SupportLegacyDisplaySizes) !== -1,\r\n\r\n OnInitApplicationAsync: (userInfo?: any) => {\r\n //Merge all the projects on init application functions into one\r\n return combineLatest(configs.map(x => x.OnInitApplicationAsync(userInfo)))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n\r\n //Merge all the projects on logout application functions into one\r\n OnLogoutApplicationAsync: () => combineLatest(\r\n configs.map(x => x.OnLogoutApplicationAsync()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true))\r\n ),\r\n\r\n //Merge all the projects data sources into one array and add module name prefix for each of the datasources\r\n OnGetGlobalDataSources: () => {\r\n let dssObservables = configs.map(x => x.OnGetGlobalDataSources());\r\n return forkJoin(dssObservables)\r\n .pipe(mergeMap(dss => {\r\n let result = {};\r\n dss.forEach((ds: { [id: string]: BaseDataSourceAbstract }, idx) => {\r\n Object.keys(ds).forEach(key => result[`${configs[idx].ModuleName}${key}`] = ds[key]);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Get the default routes params from the first of the application configuration files\r\n OnGetDefaultRouteParams: configs[0].OnGetDefaultRouteParams,\r\n\r\n //Merge all the projects on get login extension links functions into one\r\n OnGetAppLoginExtensionLinks: () => {\r\n let linksObservables = configs.map(x => x.OnGetAppLoginExtensionLinks());\r\n return forkJoin(linksObservables)\r\n .pipe(mergeMap(links => {\r\n let result = [];\r\n links.forEach((link, idx) => {\r\n link.forEach(linkItem => this.setMenuModuleName(linkItem, configs[idx].ModuleName));\r\n result = result.concat(link);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects menus into one array and add module name prefix for each of the menu and its child\r\n OnGetMenu: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetMenu(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects navbar items into one array and add module name prefix for each of the navbar\r\n OnGetNavbarItems: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetNavbarItems(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n GetLists: () => {\r\n let result = [];\r\n configs.forEach(x => {\r\n const lists = x.GetLists();\r\n lists.forEach(l => l.Properties.ModuleName = x.ModuleName);\r\n result = result.concat(lists);\r\n });\r\n return result;\r\n },\r\n\r\n GetInjectableComponentOptions: () => {\r\n let observables = configs.map(x => x.GetInjectableComponentOptions());\r\n return forkJoin(observables).pipe(mergeMap((options) => {\r\n let result = [];\r\n options.forEach((option) => { result = result.concat(option); })\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects enums into one object\r\n Enums: configs.map(x => x.Enums)\r\n .reduce((obj, el) => Object.assign(obj, el), {}),\r\n\r\n OnLoginPage: () => {\r\n return combineLatest(configs.map(x => x.OnLoginPage()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n\r\n ShareableEntities: configs.map(x => x.ShareableEntities).flat(1),\r\n } as AppConfig\r\n }\r\n\r\n //Set module name for the menu and its child\r\n static setMenuModuleName(menu, moduleName) {\r\n menu.moduleName = moduleName;\r\n menu.menu = moduleName + '.' + menu.menu;\r\n if (menu.items) menu.items.forEach(subMenu => this.setMenuModuleName(subMenu, moduleName));\r\n }\r\n\r\n //Merge resources function\r\n private static _resources: any[];\r\n private static _customResources: any[];\r\n static loadResources(configs: AppConfig[]) {\r\n this._resources = [];\r\n this._customResources = [];\r\n const languages = Object.values(EnumLanguages);\r\n const randomNoCacheParam = Math.random();\r\n\r\n configs.forEach(x => {\r\n languages.forEach(language => {\r\n if (this._m4uConfig.customBuild) {\r\n let path = `assets/i18n/${x.ProjectName}/${language}_${this._m4uConfig.customBuild}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const customResource = Utils.LoadJsonFile(path) as any;\r\n if (customResource) {\r\n customResource.Properties.ModuleName = x.ModuleName;\r\n this._customResources.push(customResource);\r\n }\r\n }\r\n\r\n let path = `assets/i18n/${x.ProjectName}/${language}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const resource = Utils.LoadJsonFile(path) as any;\r\n if (resource) {\r\n resource.Properties.ModuleName = x.ModuleName;\r\n this._resources.push(resource);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public static GetLoadedLanguages(): string[] {\r\n let languages: string[]=[];\r\n for (var i = 0; i <= this._resources.length - 1; i++) {\r\n languages.push(this._resources[i].Properties.Language)\r\n }\r\n return languages;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntityResponse, FileView } from '@base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpoint } from \"@m4u-angular/base/endpoint/BaseEndpoint\";\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class FileEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"File\", api);\r\n }\r\n\r\n public GetView(uid: string, loadFile: boolean): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetView', { uid: uid, loadFile: loadFile });\r\n }\r\n\r\n public GetViewByID(entryID: number, loadFile: boolean): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetViewByID', { entryID: entryID, loadFile: loadFile });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { GenericListEntity, BaseEntitiesResponse, BaseEntityResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { DataLoadOptions } from \"@base/datalayer/DataLoadOptions\";\r\n\r\n@Injectable()\r\nexport class GenericListEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"GenericList\", api);\r\n }\r\n\r\n\r\n public GetList(DataSourceName: string, options?: DataLoadOptions): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetList', options ? { ...{ DataSourceName: DataSourceName }, ...options.GetLoadOptions() } : {DataSourceName:DataSourceName});\r\n }\r\n \r\n public GetByValue(DataSourceName: string, Value: string): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetByValue', { DataSourceName: DataSourceName, Value: Value });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, WebAPILoginResponse, BaseResponse, CredentialActivityStatus,\r\n PasswordRecoveryParams, CredentialExternalInfo, WebAPICredentialInfo, \r\n CredentialCheckResponse, SaveCredentialsParams, CredentialsCheckResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { EnumNotificationDeliveryOptions, EnumMFAMethods } from \"../framework/sysenums.enum\";\r\n\r\n\r\n@Injectable()\r\nexport class LoginEndpoint extends BaseEndpoint\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService)\r\n {\r\n super(\"Login\", api);\r\n }\r\n\r\n public Login(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'Login', Params);\r\n }\r\n\r\n public ChangePasswordExpired(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordExpired', Params);\r\n }\r\n\r\n public Logout(): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'Logout');\r\n }\r\n \r\n public VerifyPasswordComplexity(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyPasswordComplexity', Params);\r\n }\r\n\r\n public ChangePassword(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePassword', Params);\r\n }\r\n\r\n public RecoverPassword(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'RecoverPassword', Params);\r\n }\r\n\r\n public VerifyRecoveryToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyRecoveryToken', Params);\r\n }\r\n\r\n public ChangePasswordByToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordByToken', Params);\r\n }\r\n\r\n public SendOtp(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendOtp', Params);\r\n }\r\n\r\n public GetCredentialInfo(CredentialID: number, CredentialType: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetCredentialInfo', { CredentialID: CredentialID, CredentialType: CredentialType });\r\n }\r\n\r\n public GetExternalInfo(CredentialID: number, CredentialType: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetExternalInfo', { CredentialID: CredentialID, CredentialType: CredentialType });\r\n }\r\n\r\n public GenerateRandomPassword(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GenerateRandomPassword');\r\n }\r\n\r\n public GetOAuthRedirectURL(ReturnURL: string): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetOAuthRedirectURL', {ReturnURL: ReturnURL});\r\n }\r\n\r\n public SaveCredentials(params: SaveCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveCredentials', params);\r\n }\r\n\r\n public SetCredentialIsActive(CredentialID: number, IsActive: boolean): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'SetCredentialIsActive', { CredentialID: CredentialID, IsActive: IsActive });\r\n }\r\n\r\n public UnlockCredentials(CredentialID: number): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'UnlockCredentials', { CredentialID: CredentialID });\r\n }\r\n\r\n public WelcomeUser(CredentialID: number, DeliveryOptions: EnumNotificationDeliveryOptions, Address: string,Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'WelcomeUser', { CredentialID: CredentialID, DeliveryOptions: DeliveryOptions, Address: Address, Language: Language});\r\n }\r\n\r\n public CheckUserName(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckUserName', Params);\r\n }\r\n\r\n public ChangeLanguage(Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ChangeLanguage', { Language: Language});\r\n }\r\n\r\n public ImpersonateLogin(credentialID: number): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ImpersonateLogin', { credentialID: credentialID });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseResponse, NotificationServer, NotificationTestParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable } from 'rxjs';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\n\r\n@Injectable()\r\nexport class NotificationServerEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {super(\"NotificationServer\", api);}\r\n \r\n public TestNotificationServer(Params: NotificationTestParams): Observable {\r\n return this.api.ExecutePostAction(this.ControllerName, 'TestNotificationServer', Params);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseDataResponse, BaseEntitiesResponse, NotificationTemplate, NotificationTemplateListView } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationTemplateEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {\r\n super('NotificationTemplate', api);\r\n }\r\n\r\n public UpdateIsUserCustomTemplate(oTemplate: NotificationTemplate): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'UpdateIsUserCustomTemplate', oTemplate);\r\n }\r\n\r\n public GetListViews(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetListViews', {});\r\n }\r\n}","import { HttpContext } from '@angular/common/http';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseResponse, GenericListEntity, Notification, NotificationListParams, PushMessageListParams } from \"@base/entities/BaseEntities\";\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable, ReplaySubject, tap } from \"rxjs\";\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class PushMessageEndpoint extends BaseEndpointCRUD {\r\n \r\n private _notificationReadSubject = new ReplaySubject(1);\r\n public NotificationRead$ = this._notificationReadSubject.asObservable();\r\n\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"PushMessage\", api);\r\n }\r\n \r\n public GetPushMessages(Params: PushMessageListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetPushMessages', Params, options?.GetLoadOptions());\r\n }\r\n public GetPushMessagesUnread(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPushMessagesUnread', undefined, undefined, undefined,\r\n { 'ignoreLoadingBar': 'true' }, new HttpContext().set(SysGlobals.IgnoreSessionRefreshRequestToken, true));\r\n }\r\n public ReadPushNotification(notificationID: number): Observable {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ReadPushMessage', null, { notificationID: notificationID })\r\n .pipe(tap(() => this._notificationReadSubject.next(true)));\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseEntityResponse, GenericListEntity, Notification, NotificationListParams, NotificationTemplateListView, RenderedTemplate } from '@base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpoint } from \"@m4u-angular/base/endpoint/BaseEndpoint\";\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\n\r\n\r\n@Injectable()\r\nexport class ShareEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"Share\", api);\r\n }\r\n\r\n public GetRenderedTemplate(NotificationTemplateID: number, DeliveryOption: EnumNotificationDeliveryOptions): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetRenderedTemplate', { NotificationTemplateID: NotificationTemplateID, DeliveryOption: DeliveryOption });\r\n }\r\n\r\n public GetNotificationsTemplates(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetNotificationsTemplates', {});\r\n }\r\n}\r\n","import { BaseDataResponse } from '../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemOptionsEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"SystemOptions\", api);\r\n }\r\n\r\n public GetOptions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetOptions');\r\n }\r\n\r\n public SaveOptions(options: SystemOptionEntity[]): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveOptions', options, undefined);\r\n }\r\n\r\n}\r\n","import { BaseDataResponse } from './../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport {BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"System\", api);\r\n }\r\n \r\n\r\n //Get company info\r\n public GetCompanyInfo(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"CompanyInfo\");\r\n }\r\n\r\n //Get the settings\r\n public GetSystemOptions(ModuleName: string | null = null): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"SystemOptions\", { ModuleName: ModuleName });\r\n }\r\n public StoreMID(mid: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"StoreMID\", { MID: mid } );\r\n }\r\n\r\n //Keep session alive\r\n public KeepAlive(): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"KeepAlive\");\r\n }\r\n\r\n public GetEntitiesResources(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetEntitiesResources');\r\n }\r\n}\r\n","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, ComponentRef, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BottomSheetContextMenuComponent } from '@m4u-angular/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { BottomSheetListComponent } from '@m4u-angular/ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumWindowSizes } from './sysenums.enum';\r\n\r\nexport class BottomSheetContentParams {\r\n Name: string = 'Default';\r\n Content: Type | TemplateRef;\r\n Title: string;\r\n Class: string;\r\n ContentParams?: any;\r\n Height?: EnumWindowSizes;\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetListParams {\r\n Title: string;\r\n DataSource: BaseDataSourceAbstract | any[];\r\n IsMultiSelection: boolean;\r\n ValueExpr: string = 'EntryID';\r\n DisplayExpr: string | ((item) => string) = 'Name';\r\n ListTemplate: TemplateRef;\r\n Value: any;\r\n IsSearchEnabled: boolean;\r\n SearchExpr: string[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetContextMenuParams {\r\n Title: string;\r\n Items: ContextMenuElement[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport interface IBottomSheetComponent {\r\n Context: BottomSheetDialogComponent;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BottomSheetService {\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) { }\r\n\r\n Show(contentParams: BottomSheetContentParams, keepAlive?: boolean) {\r\n const bottomSheet = this.CreateBottomSheetInstance();\r\n const bottomSheetDialog = bottomSheet.instance;\r\n bottomSheetDialog.ContentPortal = this.ResolveContent(contentParams.Content);\r\n bottomSheetDialog.Title = contentParams.Title;\r\n bottomSheetDialog.Class = contentParams.Class;\r\n bottomSheetDialog.ContentParams = {\r\n ...contentParams.ContentParams,\r\n Context: bottomSheetDialog\r\n };\r\n bottomSheetDialog.Height = contentParams.Height || EnumWindowSizes.WindowAutoSize;\r\n bottomSheetDialog.OnClose = () => {\r\n !keepAlive && bottomSheet.destroy();\r\n return true;\r\n };\r\n \r\n const randomName = Math.random().toString(36).substring(2, 5);\r\n bottomSheetDialog.ComponentName = `${bottomSheetDialog.ComponentName}_${contentParams.Name}_${randomName}`;\r\n\r\n bottomSheetDialog.ShowBottomSheet(contentParams.OnCompleted, contentParams.OnCanceled);\r\n }\r\n\r\n ShowList(listParams: BottomSheetListParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetList';\r\n contentParams.Content = BottomSheetListComponent;\r\n contentParams.Title = listParams.Title;\r\n contentParams.ContentParams = {\r\n ListParams: listParams\r\n };\r\n contentParams.OnCompleted = listParams.OnCompleted;\r\n contentParams.OnCanceled = listParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n ShowContextMenu(contextMenuParams: BottomSheetContextMenuParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetContextMenu';\r\n contentParams.Content = BottomSheetContextMenuComponent;\r\n contentParams.Title = contextMenuParams.Title;\r\n contentParams.ContentParams = {\r\n MenuItems: contextMenuParams.Items\r\n };\r\n contentParams.OnCompleted = contextMenuParams.OnCompleted;\r\n contentParams.OnCanceled = contextMenuParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n private CreateBottomSheetInstance(): ComponentRef {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(BottomSheetDialogComponent);\r\n const bottomSheetDialogComponent = this.ViewContainerRef.createComponent(componentFactory);\r\n return bottomSheetDialogComponent;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\nconst CLIENT_FINGERPRINT_STORAGE_NAME = 'ClientFingetprint';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ClientFingerprintService {\r\n constructor(private localStorageService: LocalStorageService) { }\r\n\r\n GetClientFingerprint() {\r\n let clientFingetprint = this.localStorageService.GetItem(CLIENT_FINGERPRINT_STORAGE_NAME);\r\n if (!clientFingetprint) {\r\n const clientFingetprintInt = Math.round(Math.random() * 1000000000);\r\n clientFingetprint = clientFingetprintInt.toString();\r\n this.localStorageService.SetItem(CLIENT_FINGERPRINT_STORAGE_NAME, clientFingetprint);\r\n }\r\n return clientFingetprint;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanDeactivate } from '@angular/router';\r\nimport { BaseEntity, BaseState } from \"../../base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"../../base/component/BasePageComponent\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { MessageBoxOptions } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EnumMessageBoxTypes } from './sysenums.enum';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class ConfirmCancelGuard implements CanDeactivate> {\r\n constructor(private framework: FrameworkService, private resourceService: ResourcesService, private sysEvents: SysEventsService, private ui: UiService) {\r\n\r\n }\r\n canDeactivate(page: BasePageComponent) {\r\n if (page instanceof BasePageCRUDComponent && !page.OnIsDirtyDisabled() && page.IsDirty) {\r\n const options = new MessageBoxOptions(EnumMessageBoxTypes.YesNo, this.resourceService.RC('titleLeavePageConfirmation'));\r\n this.ui.OpenMessageBox(options);\r\n return this.sysEvents.CloseMessageBoxSubject;\r\n }\r\n return of(true);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { SessionService } from './session.service';\r\nimport { ScreenService } from './screen.service';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { Utils } from '../helpers/Utils';\r\nimport Validator from \"devextreme/ui/validator\";\r\nimport { BaseCustomizationElement, ComponentCustomization, FieldCustomizationElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Injectable()\r\nexport class CustomizationService {\r\n FieldsCustomizations: { [key: string]: FieldCustomizationElement[] } = {};\r\n ComponentsCustomizations: { [key: string]: ComponentCustomization[] } = {};\r\n\r\n constructor(private screenService: ScreenService,\r\n private sessionService: SessionService) {\r\n }\r\n\r\n /* Components customization */\r\n\r\n SetComponentCustomizations(components: any[], parentComponentName: string) {\r\n components.forEach(x => {\r\n let customizations = this.GetComponentCustomizations(x, parentComponentName);\r\n if (!customizations.length) return;\r\n\r\n if (x instanceof DxDataGridComponent) {\r\n //Separate customizations for columns and all the grid\r\n const [columnsCustomizations, gridCustomizations] = this.GetSeparatedGridCustomizations(customizations);\r\n //Hide grid columns\r\n this.HideGridColumns(x, columnsCustomizations);\r\n //Set customizations as grid customizations to check if need to hide all the grid\r\n customizations = gridCustomizations;\r\n }\r\n if (this.IsNeedToHideElement(customizations)) x.visible = false;\r\n });\r\n }\r\n\r\n GetComponentCustomizations(component: any, parentComponentName: string) {\r\n const componentName = component.Name;\r\n //Validate name is set - throw a clear exception to help find the component\r\n if (!componentName) {\r\n const componentType = component instanceof DxDataGridComponent\r\n ? 'data grid' : component.hasOwnProperty('index')\r\n ? 'tab' : 'section';\r\n throw new Error(`You forgot to define a name for some ${componentType} in ${parentComponentName} component`);\r\n }\r\n\r\n const componentKey = `${parentComponentName}_${componentName}`;\r\n\r\n if (!this.ComponentsCustomizations[componentKey]) {\r\n const fieldCustomizations = SysGlobals.ComponentCustomizations\r\n ? SysGlobals.ComponentCustomizations\r\n .filter(this.FilterCustomizations(parentComponentName, componentName))\r\n : [];\r\n this.ComponentsCustomizations[componentKey] = fieldCustomizations;\r\n }\r\n\r\n return this.ComponentsCustomizations[componentKey];\r\n }\r\n\r\n GetSeparatedGridCustomizations(customizations: ComponentCustomization[]) {\r\n return customizations\r\n .reduce((result, element) => {\r\n result[!!element.Filter.Columns ? 0 : 1].push(element);\r\n return result;\r\n }, [[], []]);\r\n }\r\n\r\n HideGridColumns(grid: DxDataGridComponent, customizations: ComponentCustomization[]) {\r\n //Get column names that need to hide\r\n const columns = grid.columns.filter((column: any) => {\r\n const columnCustomizations = customizations\r\n .filter(c => c.Filter.Columns && c.Filter.Columns.find(z => z == column.dataField));\r\n return this.IsNeedToHideElement(columnCustomizations);\r\n }).map((x: any) => x.dataField);\r\n\r\n if (columns.length) {\r\n //Remove columns that need to hide from grid\r\n const updatedColumns = grid.columns\r\n .filter((c: any) => columns.indexOf(c.dataField) < 0);\r\n grid.instance.option('columns', updatedColumns);\r\n }\r\n }\r\n\r\n /* Fields customization */\r\n\r\n public SetFieldDefaultValue(fieldComponent: FieldFormComponent) {\r\n //Skip\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Get default value\r\n const oDefaults = relevantCustomizations.filter(x => x.Logic.DefaultValue != undefined);\r\n if (!oDefaults.length) return;\r\n\r\n //Get control\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Set value to control\r\n if (!control.value) control.value = oDefaults[oDefaults.length - 1].Logic.DefaultValue;\r\n }\r\n\r\n //Configures the customizations\r\n public SetFieldCustomizations(fieldComponent: FieldFormComponent) {\r\n //Get customizations\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Set label\r\n const oLabels = relevantCustomizations.filter(x => !Utils.IsEmpty(x.Logic.Label));\r\n if (oLabels.length) fieldComponent.Label = oLabels[oLabels.length - 1].Logic.Label;\r\n\r\n //Get relevant editor control\r\n //If none exists, the rest of the customizations do not apply\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Get hide lists values customizations\r\n const oFieldFilters = relevantCustomizations.filter(x => x.Logic.HideValues != undefined);\r\n\r\n //Hide\r\n if (!oFieldFilters.length && this.IsNeedToHideElement(relevantCustomizations)) fieldComponent.IsHide = true;\r\n\r\n //Hide lists values by text\r\n if (oFieldFilters.length && control.items && this.IsNeedToHideElement(relevantCustomizations)) {\r\n control.items = control.items.filter(x => oFieldFilters[oFieldFilters.length - 1].Logic.HideValues.indexOf(x.Text) < 0);\r\n }\r\n\r\n //Get instance, rules, and validator\r\n const oElement = control.instance.element();\r\n let validatorInstance = Validator.getInstance(oElement) as Validator;\r\n\r\n //Make readonly\r\n if (relevantCustomizations.filter(x => x.Logic.ReadOnly).length > 0) control.readOnly = true;\r\n\r\n //Set mandatory rule\r\n const oMandatory = relevantCustomizations.filter(x => x.Logic.Required);\r\n if (oMandatory.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\");\r\n rules.push({ type: \"required\" });\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n\r\n //Set custom validation rules\r\n const oCustomValidations = relevantCustomizations.filter(x => x.Logic.ValidationFunction);\r\n if (oCustomValidations.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\") as any[];\r\n oCustomValidations.forEach(oValidation => rules.push(\r\n {\r\n type: \"custom\",\r\n validationCallback: this.OnFieldValidation,\r\n message: oValidation.Logic.ValidationMessage,\r\n ValidationFunction: oValidation.Logic.ValidationFunction\r\n }));\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n }\r\n\r\n OnFieldValidation(e): boolean {\r\n return e.rule.ValidationFunction(e.value, SysGlobals.CurrentEntity, SysGlobals.CurrentState);\r\n }\r\n\r\n //Returns the relevant customizations for this field\r\n private GetRelevantCustomizations(fieldComponent: FieldFormComponent): FieldCustomizationElement[] {\r\n //Validate component is set - throw a clear exception to help find the component\r\n if (fieldComponent.Component == undefined || fieldComponent.Name == undefined) {\r\n throw new Error(`You forgot to define a component binding or name for this field - ${fieldComponent.Name != undefined ? fieldComponent.Name : fieldComponent.Label}`);\r\n }\r\n\r\n const fieldKey = `${fieldComponent.Component.ComponentStateName}_${fieldComponent.Name}`;\r\n\r\n if (!this.FieldsCustomizations[fieldKey]) {\r\n const fieldCustomizations = SysGlobals.FieldCustomizations\r\n ? SysGlobals.FieldCustomizations\r\n .filter(this.FilterCustomizations(fieldComponent.Component.ComponentStateName, fieldComponent.Name))\r\n : [];\r\n this.FieldsCustomizations[fieldKey] = fieldCustomizations;\r\n }\r\n\r\n return this.FieldsCustomizations[fieldKey];\r\n }\r\n\r\n /* Common functions */\r\n\r\n private FilterCustomizations(componentName: string, elementName: string) {\r\n return x => {\r\n if (!x.Filter.Component || !x.Filter.Name) return false;\r\n\r\n //Check component\r\n if (x.Filter.Component != '*') {\r\n if (Array.isArray(x.Filter.Component)) {\r\n if (!x.Filter.Component.find(z => z == componentName)) return false;\r\n } else {\r\n if (x.Filter.Component != componentName) return false;\r\n }\r\n }\r\n\r\n //Check element\r\n if (x.Filter.Name != '*') {\r\n if (Array.isArray(x.Filter.Name)) {\r\n if (!x.Filter.Name.find(z => z == elementName)) return false;\r\n } else {\r\n if (x.Filter.Name != elementName) return false;\r\n }\r\n }\r\n\r\n //Check user\r\n if (x.Filter.User && (x.Filter.User as any) != '*') {\r\n if (Array.isArray(x.Filter.User)) {\r\n if (!x.Filter.User.find(z => z == this.sessionService.CurrentUserID)) return false;\r\n } else {\r\n if (x.Filter.User != this.sessionService.CurrentUserID) return false;\r\n }\r\n }\r\n\r\n //If got here - means customization applies here\r\n return true;\r\n };\r\n }\r\n\r\n IsNeedToHideElement(customizations: BaseCustomizationElement[]) {\r\n return customizations.filter(c => c.Logic.Hide).length\r\n || (this.screenService.IsDesktop() && customizations.filter(c => c.Logic.HideOnDesktop).length)\r\n || (this.screenService.IsMobile() && customizations.filter(c => c.Logic.HideOnMobile).length)\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport DateBox from 'devextreme/ui/date_box';\r\nimport ListBox from 'devextreme/ui/list';\r\nimport NumberBox from 'devextreme/ui/number_box';\r\nimport Popup from 'devextreme/ui/popup';\r\nimport RadioGroup from 'devextreme/ui/radio_group';\r\nimport SelectBox from 'devextreme/ui/select_box';\r\nimport TagBox from 'devextreme/ui/tag_box';\r\nimport TextArea from 'devextreme/ui/text_area';\r\nimport TextBox from 'devextreme/ui/text_box';\r\nimport Chart from 'devextreme/viz/chart';\r\nimport Funnel from 'devextreme/viz/funnel';\r\nimport PieChart from 'devextreme/viz/pie_chart';\r\nimport CheckBox from 'devextreme/ui/check_box';\r\nimport LoadPanel from 'devextreme/ui/load_panel';\r\nimport DropDownButton from 'devextreme/ui/drop_down_button';\r\nimport TreeList from 'devextreme/ui/tree_list';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { SetGridDefaults } from '@base/grid/Grid.defaults';\r\nimport { FrameworkService } from './framework.service';\r\nimport { RC } from './resources.service';\r\nimport globalConfig from 'devextreme/core/config';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport repaintFloatingActionButton from 'devextreme/ui/speed_dial_action/repaint_floating_action_button';\r\nimport dxValidator from 'devextreme/ui/validator';\r\nimport { BottomSheetListParams, BottomSheetService } from './bottom-sheet.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ScreenService } from './screen.service';\r\nimport { SetPivotGridDefaults } from '@base/pivotgrid/PivotGrid.defaults';\r\n\r\n@Injectable()\r\nexport class DevExpressService {\r\n //Load DevExpress stuff\r\n public InitializeDevExpress(framework: FrameworkService) {\r\n const screenService = AppInjector.get(ScreenService);\r\n\r\n //Defaults for grid\r\n SetGridDefaults();\r\n\r\n //Defaults for pivotgrid\r\n SetPivotGridDefaults();\r\n\r\n this.SetFloatingButtonsDefault();\r\n\r\n //Defaults for textboxes \r\n TextBox.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n inputAttr: { autocomplete: 'new-password' },\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always',\r\n stylingMode: 'underlined',\r\n onContentReady: (e) => {\r\n const element = e?.component?.element();\r\n element && element.addEventListener('wheel', (e) => {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n });\r\n }\r\n }\r\n });\r\n\r\n TextArea.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n autoResizeEnabled: true,\r\n stylingMode: 'underlined',\r\n //minHeight: 30,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Defaults for numbertboxes\r\n NumberBox.defaultOptions({\r\n options:\r\n {\r\n step: 0,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n stylingMode: 'underlined',\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for dates\r\n DateBox.defaultOptions({\r\n options:\r\n {\r\n type: 'date',\r\n pickerType: screenService.IsMobile() || screenService.IsTablet() ? 'native' : 'calendar',\r\n displayFormat: framework.CompanyInfo.DateFormatLong,\r\n useMaskBehavior: true,\r\n min: '1900-01-01',\r\n max: '2100-12-31',\r\n stylingMode: 'underlined',\r\n calendarOptions: { showTodayButton: true },\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.addEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onClosed: (e) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.removeEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n },\r\n });\r\n\r\n\r\n\r\n\r\n //Set default options for select boxes\r\n SelectBox.defaultOptions({\r\n options:\r\n {\r\n inputAttr: { autocomplete: 'new-password' },\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n placeholder: '',\r\n stylingMode: 'underlined',\r\n dropDownOptions: { container: '.app-container' },\r\n searchTimeout: 100, //Without this, tabbing works bad since value is not looked up\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, false),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n TagBox.defaultOptions(\r\n {\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n placeholder: '',\r\n showSelectionControls: true,\r\n multiline: false,\r\n stylingMode: 'underlined',\r\n maxDisplayedTags: screenService.IsDesktop() ? 8 : 4,\r\n applyValueMode: 'useButtons',\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, true),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for list boxes\r\n ListBox.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n pageLoadMode: 'scrollBottom',\r\n activeStateEnabled: false,\r\n stylingMode: 'underlined',\r\n searchTimeout: 500,\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n RadioGroup.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n layout: 'horizontal',\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Basically just for messageboxes\r\n Popup.defaultOptions({\r\n options:\r\n {\r\n showTitle: true,\r\n showCloseButton: true,\r\n dragEnabled: false,\r\n hideOnOutsideClick: true,\r\n container: '.app-container'\r\n }\r\n });\r\n\r\n\r\n\r\n\r\n PieChart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n resolveLabelOverlapping: 'shift',\r\n type: 'doughnut',\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n }\r\n }\r\n });\r\n\r\n Chart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n\r\n argumentAxis:\r\n {\r\n label:\r\n {\r\n overlappingBehavior: 'rotate',\r\n rotationAngle: 270\r\n }\r\n }\r\n }\r\n });\r\n\r\n Funnel.defaultOptions({\r\n options:\r\n {\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: false\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n }\r\n });\r\n\r\n CheckBox.defaultOptions({\r\n options:\r\n {\r\n onInitialized: function () {\r\n if ((this as any)._options.option('value') == null) {\r\n (this as any)._options.option('value', false);\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n LoadPanel.defaultOptions({\r\n options:\r\n {\r\n showIndicator: true,\r\n showPane: true,\r\n shading: true,\r\n message: RC('msgLoading'),\r\n shadingColor: 'rgba(0,0,0,0.4)'\r\n }\r\n });\r\n\r\n DropDownButton.defaultOptions({\r\n options:\r\n {\r\n showArrowIcon: screenService.IsDesktop()\r\n }\r\n });\r\n\r\n TreeList.defaultOptions({\r\n options: {\r\n showBorders: true\r\n }\r\n });\r\n\r\n dxValidator.defaultOptions({\r\n options: {\r\n validationRules: [{\r\n type: 'required',\r\n message: RC('errorRequiredMessage')\r\n }]\r\n }\r\n });\r\n }\r\n\r\n public SetFloatingButtonsDefault() {\r\n globalConfig({\r\n floatingActionButtonConfig: {\r\n icon: 'menu',\r\n position: SysGlobals.Language == EnumLanguages.Hebrew\r\n ? {\r\n at: 'left bottom',\r\n my: 'left bottom',\r\n offset: '16 -16'\r\n }\r\n : undefined\r\n }\r\n });\r\n\r\n repaintFloatingActionButton();\r\n }\r\n\r\n private OnFocusIn(e) {\r\n const oElement = e.element.querySelector('input');\r\n if (oElement != undefined) oElement.select();\r\n }\r\n\r\n private OnChangeInputDirection(e) {\r\n const event = e.event;\r\n if (event.ctrlKey && event.key === 'Shift') {\r\n const bRTL = event.location === 2 ? true : false;\r\n e.component.option('rtlEnabled', bRTL);\r\n e.component.option('inputAttr',\r\n {\r\n class: bRTL ? 'm4u-force-text-right' : 'm4u-force-text-left',\r\n dir: bRTL ? 'rtl' : 'ltr'\r\n });\r\n e.component.focus();\r\n }\r\n }\r\n\r\n private GetDateBoxTodayButton(e: any) {\r\n const popupContentId = e.component && e.component._popupContentId;\r\n if (!popupContentId) return null;\r\n const popupContentSelector = `#${popupContentId}.dx-popup-content`;\r\n let todayButton = document.querySelector(`${popupContentSelector} .dx-calendar-today-button`);\r\n if (!todayButton) {\r\n todayButton = document.querySelector(`${popupContentSelector} + .dx-popup-bottom .dx-button-today`);\r\n }\r\n return todayButton;\r\n }\r\n\r\n private SetTodaysDate(e: any) {\r\n let todaysDate = new Date();\r\n const originalDate = e.component.option('value') && (new Date(e.component.option('value')));\r\n if (originalDate) {\r\n const originalHours = originalDate.getHours();\r\n const originalMinutes = originalDate.getMinutes();\r\n todaysDate.setHours(originalHours, originalMinutes);\r\n } else {\r\n todaysDate = DateHelpers.ToDateOnly(todaysDate);\r\n }\r\n e.component.option('value', todaysDate);\r\n }\r\n\r\n private OnCloseDateBox(e: any) {\r\n e.component && e.component.close();\r\n }\r\n\r\n private ShowBottomSheetList(e, isMultiSelection: boolean) {\r\n // Open as default select-box if it is Desktop view\r\n const detector = AppInjector.get(DeviceDetectorService);\r\n if (detector.isDesktop()) return;\r\n // Open as usual if dropDownOptions.showAsBottomSheet = false\r\n const dropDownOptions = e.component.option('dropDownOptions');\r\n if (dropDownOptions && dropDownOptions.hasOwnProperty('showAsBottomSheet') && !dropDownOptions.showAsBottomSheet) return;\r\n // Hide default select-box\r\n document.querySelector(`#${e.component._popupContentId}`).parentElement.style.display = 'none';\r\n e.component.option('opened', false);\r\n //(document.querySelector('.dx-selectbox-popup-wrapper .dx-overlay-content') as any).style.display = 'none';\r\n // Open as bottom sheet\r\n const bottomSheetService = AppInjector.get(BottomSheetService);\r\n const dataSource = e.component.option('dataSource') || e.component.option('items');\r\n\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = e.component.option('placeholder');\r\n listParams.DataSource = dataSource;\r\n listParams.IsMultiSelection = isMultiSelection;\r\n listParams.ValueExpr = e.component.option('valueExpr');\r\n listParams.DisplayExpr = e.component.option('displayExpr');\r\n listParams.Value = e.component.option('selectedItems') || [];\r\n listParams.IsSearchEnabled = e.component.option('searchEnabled');\r\n listParams.SearchExpr = e.component.option('searchExpr') || [e.component.option('displayExpr')];\r\n listParams.OnCompleted = (result) => {\r\n result.event && e.component._saveValueChangeEvent(result.event)\r\n e.component.option('value', result?.value);\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n listParams.OnCanceled = () => {\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n\r\n // Disable search directive and default search if bottom sheet list search enabled\r\n if (listParams.IsSearchEnabled) {\r\n setTimeout(() => e.component.option('searchEnabled', false));\r\n }\r\n\r\n bottomSheetService.ShowList(listParams);\r\n }\r\n}\r\n","import DataGrid from 'devextreme/ui/data_grid';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { RC } from '@m4u-angular/core/framework/resources.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nexport function SetGridDefaults() {\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n const localStorageService = AppInjector.get(LocalStorageService);\r\n\r\n DataGrid.defaultOptions\r\n ({\r\n options:\r\n {\r\n columnResizingMode: 'nextColumn',\r\n allowColumnResizing: true,\r\n allowColumnReordering: true,\r\n columnHidingEnabled: true,\r\n columnAutoWidth: true,\r\n dateSerializationFormat: 'yyyy-MM-dd',\r\n hoverStateEnabled: true,\r\n showBorders: true,\r\n showRowLines: true,\r\n renderAsync: true,\r\n\r\n stateStoring:\r\n {\r\n enabled: true,\r\n type: 'custom',\r\n savingTimeout: 1000,\r\n storageKey: '',\r\n\r\n customSave(state) {\r\n state.selectionFilter = state.selectedRowKeys = state.searchText = undefined;\r\n if (state.columns)\r\n for (const column of state.columns) {\r\n delete column.filterType;\r\n delete column.filterValues;\r\n delete column.filterValue;\r\n delete column.sortOrder;\r\n delete column.sortIndex;\r\n }\r\n localStorageService.SetItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorageService.GetItem(this.storageKey || 'storage'));\r\n }\r\n },\r\n\r\n columnChooser:\r\n {\r\n enabled: true,\r\n height: 400,\r\n mode: 'select',\r\n search: {\r\n enabled: true\r\n }\r\n },\r\n\r\n headerFilter:\r\n {\r\n height: 400,\r\n container: '.app-container',\r\n search: {\r\n enabled: true\r\n },\r\n visible: false\r\n },\r\n\r\n scrolling:\r\n {\r\n mode: 'infinite',\r\n preloadEnabled: true,\r\n useNative: false\r\n },\r\n\r\n export:\r\n {\r\n excelFilterEnabled: true,\r\n },\r\n\r\n remoteOperations:\r\n {\r\n filtering: true,\r\n paging: true,\r\n sorting: true,\r\n },\r\n\r\n\r\n editing:\r\n {\r\n useIcons: true,\r\n selectTextOnEditStart: !Detector.isMobile(),\r\n\r\n //Show as 2 columns even on small screens to make it more clear that is a row\r\n form:\r\n {\r\n colCountByScreen:\r\n {\r\n xs: 2\r\n }\r\n }\r\n },\r\n\r\n searchPanel: {\r\n width: '100%'\r\n },\r\n\r\n //Hide all items in the toolbar besides search (shown because of excel export, column chooser, add button)\r\n onToolbarPreparing: (e) => {\r\n const { items } = e.toolbarOptions;\r\n const newItems = items.filter(item => item.isCustom); // get custom items\r\n const instance = e.component.instance();\r\n\r\n if (instance.AllowCustomization) {\r\n const widget = items.find(x => x.name === 'columnChooserButton');\r\n widget.options.icon = 'm4u-icon m4u-icon-eye';\r\n newItems.push({\r\n ...widget,\r\n location: 'after'\r\n });\r\n }\r\n\r\n if (instance.option('searchPanel.visible')) {\r\n const widget = items.find(x => x.name === 'searchPanel');\r\n newItems.push({\r\n ...widget,\r\n location: 'center'\r\n });\r\n }\r\n\r\n if (instance.option('groupPanel.visible')) {\r\n instance.option('groupPanel.emptyPanelText', RC('lblGroupPanel'));\r\n const widget = items.find(x => x.name === 'groupPanel');\r\n\r\n //let groupingCount = 0;\r\n //for (var i = 0; i < instance.columnCount(); i++) {\r\n // const groupIndex = instance.columnOption(i, \"groupIndex\");\r\n // if (groupIndex != undefined && groupIndex >= 0) {\r\n // groupingCount++;\r\n // }\r\n //}\r\n //if (groupingCount === 0) {\r\n // const tooltip = document.createElement('div');\r\n // tooltip.classList.add('group-panel-tooltip-container');\r\n \r\n // const tooltipIcon = document.createElement('i');\r\n // tooltipIcon.classList.add('group-panel-tooltip-icon');\r\n // tooltipIcon.classList.add('mdi');\r\n // tooltipIcon.classList.add('mdi-information-outline');\r\n\r\n // const tooltipText = document.createElement('span');\r\n // tooltipText.classList.add('group-panel-tooltip-text');\r\n // tooltipText.append(RC('groupPanelTooltipText'));\r\n\r\n // tooltipIcon.appendChild(tooltipText);\r\n // tooltip.appendChild(tooltipIcon);\r\n \r\n // newItems.push({\r\n // name: 'tooltip',\r\n // options: {\r\n // icon: 'mdi mdi-information-outline',\r\n // widget: 'dxButton'\r\n // },\r\n // template: () => tooltip,\r\n // isCustom: true,\r\n // location: 'before'\r\n // });\r\n //}\r\n\r\n newItems.push({\r\n ...widget,\r\n location: 'before'\r\n });\r\n }\r\n\r\n if (!newItems.length) {\r\n e.element.classList.add('m4u-hidegridtoolbar');\r\n }\r\n\r\n e.toolbarOptions.items = newItems;\r\n },\r\n\r\n onContentReady: (e) => {\r\n const gridSummary = e.component.option('summary');\r\n let rowsCount = e.component.totalCount();\r\n rowsCount = rowsCount == -1 ? e.component.getVisibleRows().length : rowsCount;\r\n if (gridSummary && gridSummary.totalItems\r\n && gridSummary.totalItems.length && rowsCount > 0) e.element.classList.add('grid-has-summary');\r\n const screen = AppInjector.get(ScreenService);\r\n // this is official suggestion of devextreme support\r\n const columnChooserView = e.component.getView('columnChooserView');\r\n if (columnChooserView.element() && !columnChooserView._popupContainer) {\r\n columnChooserView._initializePopupContainer();\r\n columnChooserView.render();\r\n const position = screen.IsRTL() //SysGlobals.Language == EnumLanguages.Hebrew\r\n ? { of: e.element, at: 'left top', my: 'left top', offset: '0 50' }\r\n : { of: e.element, my: 'right top', at: 'right top', offset: '0 50' };\r\n columnChooserView._popupContainer.option('position', position);\r\n }\r\n },\r\n\r\n onRowPrepared: (e) => {\r\n if (e.rowType === 'group') {\r\n if (e.groupIndex > 0) {\r\n e.rowElement.classList.add('child-row');\r\n }\r\n if (e.isExpanded) e.rowElement.classList.add('row-expanded');\r\n }\r\n },\r\n\r\n onRowExpanded: (e) => {\r\n if (!e.key || (Array.isArray(e.key) && !e.key.every(i => i !== undefined))) return;\r\n\r\n const getItemByKey = (items: Array, key: Array) => {\r\n if (!(items && key)) {\r\n return undefined; \r\n }\r\n let item: any = { items: items };\r\n for (let i = 0; i < key.length && item; i++) {\r\n item = item.items.find(itm => itm.key === key[i]);\r\n }\r\n return item;\r\n };\r\n\r\n const expandRecursively = (grid, item, parentKey) => {\r\n if (!item) {\r\n return; \r\n }\r\n grid.expandRow(parentKey);\r\n const itemsCount = (item.items ? item.items.length : 0) + (item.collapsedItems ? item.collapsedItems.length : 0);\r\n\r\n if (itemsCount === 1) {\r\n if (item.items) {\r\n expandRecursively(grid, item.items[0], [...parentKey, item.items[0].key]);\r\n }\r\n if (item.collapsedItems) {\r\n expandRecursively(grid, item.collapsedItems[0], [...parentKey, item.collapsedItems[0].key]);\r\n }\r\n }\r\n };\r\n\r\n expandRecursively(e.component, getItemByKey(e.component.getDataSource()?.items(), e.key), e.key);\r\n },\r\n //Apply common properties on all columns\r\n customizeColumns(columns) {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n columns.forEach(oCol => {\r\n // Customize sorting and filtering\r\n if (oCol.allowSorting !== undefined) {\r\n oCol.allowFiltering = oCol.allowSorting;\r\n }\r\n\r\n if (oCol.search === undefined || !oCol.search.enabled) {\r\n oCol.search = {\r\n enabled: true\r\n };\r\n }\r\n\r\n //Take lookup columns\r\n if (oCol.lookup != undefined) {\r\n\r\n //Set default values\r\n if (oCol.lookup.valueExpr == undefined) oCol.lookup.valueExpr = 'Value';\r\n if (oCol.lookup.displayExpr == undefined) oCol.lookup.displayExpr = 'Text';\r\n\r\n //Take only columns with defined datasource, and ignore those where datasource is an array of values (usually coming from LIST())\r\n //Take columns that can be filtered\r\n if (oCol.allowFiltering && oCol.lookup.dataSource != undefined && !(oCol.lookup.dataSource instanceof Array)) {\r\n\r\n //Set the sorting for header filter from display expression\r\n oCol.lookup.dataSource =\r\n {\r\n store: oCol.lookup.dataSource,\r\n sort: oCol.lookup.displayExpr\r\n };\r\n }\r\n }\r\n\r\n //Init sub-settings for clearer code below\r\n if (oCol.formItem == undefined) oCol.formItem = {};\r\n if (oCol.editorOptions == undefined) oCol.editorOptions = {};\r\n\r\n\r\n //Hidden columns should not be shown in column chooser either\r\n //Use showInColumnChooser for \"system\" columns\r\n //if (oCol.showInColumnChooser == false) oCol.visible = false;\r\n\r\n //Hidden columns should not be shown in form mode either\r\n oCol.formItem.visible = oCol.visible;\r\n oCol.formItem.visibleIndex = oCol.visibleIndex;\r\n\r\n //Set format on editors as well\r\n if (oCol.format != undefined) {\r\n //Set for normal editors\r\n oCol.editorOptions.format = oCol.format;\r\n\r\n //Set for form editing mode\r\n oCol.formItem.format = oCol.format;\r\n }\r\n\r\n if (oCol.type === 'buttons') {\r\n oCol.cssClass = `${oCol.cssClass || ''} fixed-column`;\r\n oCol.minWidth = oCol.minWidth || 32;\r\n oCol.allowResizing = false;\r\n oCol.allowReordering = false;\r\n oCol.allowGrouping = false;\r\n }\r\n });\r\n },\r\n\r\n onCellPrepared: (e) => {\r\n //Add class to the boolean columns to change devexpress \"center\" alignment\r\n if (e.column.dataType === 'boolean') { // && (e.rowType === 'header' || (e.rowType === 'data' && e.row.isNewRow))) {\r\n e.cellElement.classList.add('dx-column-boolean-type');\r\n }\r\n if (e.column.dataType === 'number') {\r\n e.cellElement.classList.add('dx-column-number-type');\r\n\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [framework.CompanyInfo.NumberPrice, framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate, framework.CompanyInfo.NumberPercent];\r\n if (formats.indexOf(e.column.format) >= 0) {\r\n e.cellElement.classList.add('dx-column-number-formatted');\r\n }\r\n }\r\n //Add tooltip to the header\r\n if (e.rowType === 'header' && e.column.caption) {\r\n e.cellElement.title = e.column.caption;\r\n }\r\n },\r\n\r\n onContextMenuPreparing: (e) => {\r\n if (e.target == 'header') {\r\n // e.items can be undefined\r\n if (!e.items) e.items = [];\r\n const grid = e.component;\r\n const gridInstance = grid.instance();\r\n const columns = grid.option('columns') as any[];\r\n const isAllowCustomization = (gridInstance as any).AllowCustomization;\r\n const isAllowAdvancedFilters = (gridInstance as any).AllowAdvancedFilters;\r\n\r\n if (isAllowCustomization) {\r\n\r\n // Add a Hide Column menu item\r\n if (e.column.allowHiding) {\r\n e.items.push({\r\n text: RC('lblHideColumn'),\r\n icon: ' mdi mdi-eye-off',\r\n onItemClick: () => {\r\n grid.columnOption(e.column.dataField, 'visible', false);\r\n grid.refresh();\r\n }\r\n });\r\n }\r\n\r\n e.items.push({\r\n text: RC('lblShowHiddenColumns'),\r\n icon: ' mdi mdi-eye',\r\n onItemClick: () => {\r\n columns.forEach(c => {\r\n if (!c.groupCellTemplate) grid.columnOption(c.dataField, 'visible', true);\r\n });\r\n grid.refresh();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblColumnChooser'),\r\n icon: ' mdi mdi-cog',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n 'columnChooser.mode': 'select',\r\n 'columnChooser.search.enabled': true,\r\n });\r\n gridInstance.showColumnChooser();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblRestoreDefaultView'),\r\n icon: ' mdi mdi-cog-refresh',\r\n onItemClick: () => {\r\n const storageKey = gridInstance.option('stateStoring.storageKey') || 'storage';\r\n localStorageService.RemoveItem(storageKey);\r\n gridInstance.state({});\r\n }\r\n });\r\n }\r\n const filterVisible = gridInstance.option('headerFilter.visible');\r\n const { column } = e;\r\n\r\n if (isAllowAdvancedFilters) {\r\n e.items.push({\r\n text: filterVisible ? RC('lblHideGridFilter') : RC('lblShowGridFilter'),\r\n icon: ' mdi mdi-filter-variant',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n headerFilter: {\r\n visible: !filterVisible,\r\n search: {\r\n enabled: true\r\n }\r\n }\r\n });\r\n\r\n if (filterVisible) {\r\n gridInstance.clearFilter();\r\n } else {\r\n //show filter popup\r\n if (column.allowFiltering !== false) {\r\n gridInstance.getController('headerFilter').showHeaderFilterMenu(column.index);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n }\r\n });\r\n}\r\n","import { LocalStorageService } from \"@m4u-angular/core/framework/local-storage.service\";\r\nimport { AppInjector } from \"@m4u-angular/core/injector/injector.module\";\r\nimport PivotGrid, { Properties } from \"devextreme/ui/pivot_grid\";\r\n\r\nexport function SetPivotGridDefaults() {\r\n const localStorageService = AppInjector.get(LocalStorageService);\r\n\r\n PivotGrid.defaultOptions\r\n ({\r\n options:\r\n {\r\n stateStoring:\r\n {\r\n enabled: true,\r\n type: 'custom',\r\n savingTimeout: 1000,\r\n storageKey: '',\r\n\r\n customSave(state) {\r\n for (const field of state.fields) { \r\n if (field.area === 'filter') {\r\n delete field.filterValues;\r\n }\r\n }\r\n localStorageService.SetItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorageService.GetItem(this.storageKey || 'storage'));\r\n }\r\n },\r\n }\r\n });\r\n}","import { Injectable } from '@angular/core';\r\nimport { EntitySavedEventArgs } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SavedEntityInfo {\r\n public Entity: BaseEntity;\r\n public Type: new () => BaseEntity;\r\n public Field: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityService {\r\n\r\n private _savedEntity: SavedEntityInfo;\r\n private _isEnabled: boolean;\r\n private _field: string;\r\n\r\n constructor() {}\r\n\r\n Activate(field?: string) {\r\n if (!this._isEnabled) this._isEnabled = true;\r\n this._field = field;\r\n }\r\n\r\n SetLastSavedEntity(entitySavedArgs: EntitySavedEventArgs) {\r\n if (!this._isEnabled) return;\r\n\r\n this._savedEntity = new SavedEntityInfo();\r\n this._savedEntity.Entity = entitySavedArgs.Entity;\r\n this._savedEntity.Type = entitySavedArgs.Type;\r\n this._savedEntity.Field = this._field;\r\n }\r\n\r\n GetLastSavedEntity(field?: string, type?: new () => BaseEntity): SavedEntityInfo {\r\n if (!this._isEnabled) return new SavedEntityInfo;\r\n if ((field && this._savedEntity?.Field != field) || (type && this._savedEntity.Type != type)) {\r\n return;\r\n }\r\n\r\n const entity = { ...this._savedEntity };\r\n this.Deactivate();\r\n \r\n return entity;\r\n }\r\n\r\n private Deactivate() {\r\n this._savedEntity = null;\r\n this._isEnabled = false;\r\n this._field = null;\r\n }\r\n}","export const ResourcesDEVX_HE =\r\n {\r\n \"he\":\r\n {\r\n \"Yes\": \"כן\",\r\n \"No\": \"לא\",\r\n \"Cancel\": \"בטל\",\r\n \"Clear\": \"נקה\",\r\n \"Done\": \"סיים\",\r\n \"Loading\": \"טוען...\",\r\n \"Select\": \"בחר\",\r\n \"Search\": \"חפש\",\r\n \"Back\": \"חזור\",\r\n \"OK\": \"אישור\",\r\n\r\n \"dxCollectionWidget-noDataText\": \"אין נתונים\",\r\n\r\n \"validation-required\": \"השדה הינו חובה\",\r\n \"validation-required-formatted\": \"שדה {0} הוא חובה\",\r\n \"validation-numeric\": \"הערך חייב להיות מספר\",\r\n \"validation-numeric-formatted\": \"{0} חייב להיות מספר\",\r\n \"validation-range\": \"הערך מחוץ לתווך שהוגדר\",\r\n \"validation-range-formatted\": \"{0} מחוץ לתווך שהוגדר\",\r\n \"validation-stringLength\": \"האורך לא תקין\",\r\n \"validation-stringLength-formatted\": \"האורך של {0} לא תקין\",\r\n \"validation-custom\": \"הערך לא תקין\",\r\n \"validation-custom-formatted\": \"{0} לא תקין\",\r\n \"validation-compare\": \"הערכים לא זהים\",\r\n \"validation-compare-formatted\": \"{0} לא זהה\",\r\n \"validation-pattern\": \"הערך לא תואם את התבנית שהוגדרה\",\r\n \"validation-pattern-formatted\": \"{0} לא תואם את התבנית שהוגדרה\",\r\n \"validation-email\": \"כתובת אימייל לא חוקית\",\r\n \"validation-email-formatted\": \"{0} הוא כתובת אימייל לא חוקית\",\r\n \"validation-mask\": \"הערך לא תואם בתבנית שהוגדרה\",\r\n\r\n \"dxLookup-searchPlaceholder\": \"מספר תווים מינימאלי: {0}\",\r\n\r\n \"dxList-pullingDownText\": \"משוך למטה על מנת לרענן...\",\r\n \"dxList-pulledDownText\": \"שחרר לרענן...\",\r\n \"dxList-refreshingText\": \"מרענן...\",\r\n \"dxList-pageLoadingText\": \"טוען...\",\r\n \"dxList-nextButtonText\": \"עוד\",\r\n \"dxList-selectAll\": \"בחר כולם\",\r\n \"dxListEditDecorator-delete\": \"מחק\",\r\n \"dxListEditDecorator-more\": \"עוד\",\r\n\r\n \"dxScrollView-pullingDownText\": \"משוך למטה על מנת לרענן...\",\r\n \"dxScrollView-pulledDownText\": \"שחרר לרענן...\",\r\n \"dxScrollView-refreshingText\": \"מרענן...\",\r\n \"dxScrollView-reachBottomText\": \"טוען...\",\r\n\r\n \"dxDateBox-simulatedDataPickerTitleTime\": \"בחר שעה\",\r\n \"dxDateBox-simulatedDataPickerTitleDate\": \"בחר תאריך\",\r\n \"dxDateBox-simulatedDataPickerTitleDateTime\": \"בחר תאריך ושעה\",\r\n \"dxDateBox-validation-datetime\": \"הערך חייב להיות תאריך או שעה\",\r\n\r\n \"dxFileUploader-selectFile\": \"Select file\",\r\n \"dxFileUploader-dropFile\": \"or Drop file here\",\r\n \"dxFileUploader-bytes\": \"bytes\",\r\n \"dxFileUploader-kb\": \"kb\",\r\n \"dxFileUploader-Mb\": \"Mb\",\r\n \"dxFileUploader-Gb\": \"Gb\",\r\n \"dxFileUploader-upload\": \"Upload\",\r\n \"dxFileUploader-uploaded\": \"Uploaded\",\r\n \"dxFileUploader-readyToUpload\": \"Ready to upload\",\r\n \"dxFileUploader-uploadFailedMessage\": \"Upload failed\",\r\n \"dxFileUploader-invalidFileExtension\": \"File type is not allowed\",\r\n \"dxFileUploader-invalidMaxFileSize\": \"File is too large\",\r\n \"dxFileUploader-invalidMinFileSize\": \"File is too small\",\r\n\r\n \"dxRangeSlider-ariaFrom\": \"מ\",\r\n \"dxRangeSlider-ariaTill\": \"עד\",\r\n \"dxSwitch-switchedOnText\": \"דלוק\",\r\n \"dxSwitch-switchedOffText\": \"כבוי\",\r\n\r\n \"dxForm-optionalMark\": \"אופציונאלי\",\r\n \"dxForm-requiredMessage\": \"{0} הינו חובה\",\r\n\r\n \"dxNumberBox-invalidValueMessage\": \"הערך חייב להיות מספר\",\r\n\r\n \"dxDataGrid-columnChooserTitle\": \"בחירת עמודות\",\r\n \"dxDataGrid-columnChooserEmptyText\": \"Drag a column here to hide it\",\r\n \"dxDataGrid-groupContinuesMessage\": \"Continues on the next page\",\r\n \"dxDataGrid-groupContinuedMessage\": \"Continued from the previous page\",\r\n \"dxDataGrid-groupHeaderText\": \"קבץ לפי עמודה זו\",\r\n \"dxDataGrid-ungroupHeaderText\": \"בטל קיבוץ\",\r\n \"dxDataGrid-ungroupAllText\": \"בטל קיבוץ עמודות\",\r\n \"dxDataGrid-editingEditRow\": \"ערוך\",\r\n \"dxDataGrid-editingSaveRowChanges\": \"שמור שינויים\",\r\n \"dxDataGrid-editingCancelRowChanges\": \"בטל\",\r\n \"dxDataGrid-editingDeleteRow\": \"Delete\",\r\n \"dxDataGrid-editingUndeleteRow\": \"Undelete\",\r\n \"dxDataGrid-editingConfirmDeleteMessage\": \"האם אתה בטוח שברצונך למחוק רשומה זו?\",\r\n \"dxDataGrid-validationCancelChanges\": \"בטל שינוים\",\r\n \"dxDataGrid-groupPanelEmptyText\": \"גרור עמודה לכאן על מנת לקבץ לפיה\",\r\n \"dxDataGrid-noDataText\": \"אין נתונים\",\r\n \"dxDataGrid-searchPanelPlaceholder\": \"חפש\",\r\n \"dxDataGrid-filterRowShowAllText\": \"(All)\",\r\n \"dxDataGrid-filterRowResetOperationText\": \"Reset\",\r\n \"dxDataGrid-filterRowOperationEquals\": \"Equals\",\r\n \"dxDataGrid-filterRowOperationNotEquals\": \"Does not equal\",\r\n \"dxDataGrid-filterRowOperationLess\": \"Less than\",\r\n \"dxDataGrid-filterRowOperationLessOrEquals\": \"Less than or equal to\",\r\n \"dxDataGrid-filterRowOperationGreater\": \"Greater than\",\r\n \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Greater than or equal to\",\r\n \"dxDataGrid-filterRowOperationStartsWith\": \"Starts with\",\r\n \"dxDataGrid-filterRowOperationContains\": \"Contains\",\r\n \"dxDataGrid-filterRowOperationNotContains\": \"Does not contain\",\r\n \"dxDataGrid-filterRowOperationEndsWith\": \"Ends with\",\r\n \"dxDataGrid-filterRowOperationBetween\": \"Between\",\r\n \"dxDataGrid-filterRowOperationBetweenStartText\": \"Start\",\r\n \"dxDataGrid-filterRowOperationBetweenEndText\": \"End\",\r\n \"dxDataGrid-applyFilterText\": \"Apply filter\",\r\n \"dxDataGrid-trueText\": \"כן\",\r\n \"dxDataGrid-falseText\": \"לא\",\r\n \"dxDataGrid-sortingAscendingText\": \"מיין בסדר עולה\",\r\n \"dxDataGrid-sortingDescendingText\": \"מיין בסדר יורד\",\r\n \"dxDataGrid-sortingClearText\": \"אפס מיון\",\r\n \"dxDataGrid-editingSaveAllChanges\": \"שמור שינויים\",\r\n \"dxDataGrid-editingCancelAllChanges\": \"בטל שינויים\",\r\n \"dxDataGrid-editingAddRow\": \"הוסף רשומה\",\r\n \"dxDataGrid-summaryMin\": \"Min: {0}\",\r\n \"dxDataGrid-summaryMinOtherColumn\": \"Min of {1} is {0}\",\r\n \"dxDataGrid-summaryMax\": \"Max: {0}\",\r\n \"dxDataGrid-summaryMaxOtherColumn\": \"Max of {1} is {0}\",\r\n \"dxDataGrid-summaryAvg\": \"Avg: {0}\",\r\n \"dxDataGrid-summaryAvgOtherColumn\": \"Avg of {1} is {0}\",\r\n \"dxDataGrid-summarySum\": \"Sum: {0}\",\r\n \"dxDataGrid-summarySumOtherColumn\": \"Sum of {1} is {0}\",\r\n \"dxDataGrid-summaryCount\": \"Count: {0}\",\r\n \"dxDataGrid-columnFixingFix\": \"Fix\",\r\n \"dxDataGrid-columnFixingUnfix\": \"Unfix\",\r\n \"dxDataGrid-columnFixingLeftPosition\": \"To the left\",\r\n \"dxDataGrid-columnFixingRightPosition\": \"To the right\",\r\n \"dxDataGrid-exportTo\": \"Export\",\r\n \"dxDataGrid-exportToExcel\": \"Export to Excel file\",\r\n \"dxDataGrid-excelFormat\": \"Excel file\",\r\n \"dxDataGrid-selectedRows\": \"Selected rows\",\r\n \"dxDataGrid-exportSelectedRows\": \"Export selected rows\",\r\n \"dxDataGrid-exportAll\": \"Export all data\",\r\n \"dxDataGrid-headerFilterEmptyValue\": \"(ריקים)\",\r\n \"dxDataGrid-headerFilterOK\": \"אישור\",\r\n \"dxDataGrid-headerFilterCancel\": \"ביטול\",\r\n \"dxDataGrid-ariaColumn\": \"Column\",\r\n \"dxDataGrid-ariaValue\": \"Value\",\r\n \"dxDataGrid-ariaFilterCell\": \"Filter cell\",\r\n \"dxDataGrid-ariaCollapse\": \"Collapse\",\r\n \"dxDataGrid-ariaExpand\": \"Expand\",\r\n \"dxDataGrid-ariaDataGrid\": \"Data grid\",\r\n \"dxDataGrid-ariaSearchInGrid\": \"Search in data grid\",\r\n \"dxDataGrid-ariaSelectAll\": \"Select all\",\r\n \"dxDataGrid-ariaSelectRow\": \"Select row\",\r\n \"dxDataGrid-filterBuilderPopupTitle\": \"Filter Builder\",\r\n \"dxDataGrid-filterPanelCreateFilter\": \"Create Filter\",\r\n \"dxDataGrid-filterPanelClearFilter\": \"Clear\",\r\n \"dxDataGrid-filterPanelFilterEnabledHint\": \"Enable the filter\",\r\n\r\n \"dxTreeList-ariaTreeList\": \"Tree list\",\r\n \"dxTreeList-editingAddRowToNode\": \"Add\",\r\n\r\n \"dxPager-infoText\": \"Page {0} of {1} ({2} items)\",\r\n \"dxPager-pagesCountText\": \"of\",\r\n\r\n \"dxPivotGrid-grandTotal\": \"Grand Total\",\r\n \"dxPivotGrid-total\": \"{0} Total\",\r\n \"dxPivotGrid-fieldChooserTitle\": \"Field Chooser\",\r\n \"dxPivotGrid-showFieldChooser\": \"Show Field Chooser\",\r\n \"dxPivotGrid-expandAll\": \"Expand All\",\r\n \"dxPivotGrid-collapseAll\": \"Collapse All\",\r\n \"dxPivotGrid-sortColumnBySummary\": \"Sort \\\"{0}\\\" by This Column\",\r\n \"dxPivotGrid-sortRowBySummary\": \"Sort \\\"{0}\\\" by This Row\",\r\n \"dxPivotGrid-removeAllSorting\": \"Remove All Sorting\",\r\n \"dxPivotGrid-dataNotAvailable\": \"N/A\",\r\n \"dxPivotGrid-rowFields\": \"Row Fields\",\r\n \"dxPivotGrid-columnFields\": \"Column Fields\",\r\n \"dxPivotGrid-dataFields\": \"Data Fields\",\r\n \"dxPivotGrid-filterFields\": \"Filter Fields\",\r\n \"dxPivotGrid-allFields\": \"All Fields\",\r\n \"dxPivotGrid-columnFieldArea\": \"Drop Column Fields Here\",\r\n \"dxPivotGrid-dataFieldArea\": \"Drop Data Fields Here\",\r\n \"dxPivotGrid-rowFieldArea\": \"Drop Row Fields Here\",\r\n \"dxPivotGrid-filterFieldArea\": \"Drop Filter Fields Here\",\r\n\r\n \"dxScheduler-editorLabelTitle\": \"Subject\",\r\n \"dxScheduler-editorLabelStartDate\": \"Start Date\",\r\n \"dxScheduler-editorLabelEndDate\": \"End Date\",\r\n \"dxScheduler-editorLabelDescription\": \"Description\",\r\n \"dxScheduler-editorLabelRecurrence\": \"Repeat\",\r\n\r\n \"dxScheduler-openAppointment\": \"Open appointment\",\r\n\r\n \"dxScheduler-recurrenceNever\": \"Never\",\r\n \"dxScheduler-recurrenceDaily\": \"Daily\",\r\n \"dxScheduler-recurrenceWeekly\": \"Weekly\",\r\n \"dxScheduler-recurrenceMonthly\": \"Monthly\",\r\n \"dxScheduler-recurrenceYearly\": \"Yearly\",\r\n\r\n \"dxScheduler-recurrenceEvery\": \"Every\",\r\n \"dxScheduler-recurrenceEnd\": \"End repeat\",\r\n \"dxScheduler-recurrenceAfter\": \"After\",\r\n \"dxScheduler-recurrenceOn\": \"On\",\r\n\r\n \"dxScheduler-recurrenceRepeatDaily\": \"day(s)\",\r\n \"dxScheduler-recurrenceRepeatWeekly\": \"week(s)\",\r\n \"dxScheduler-recurrenceRepeatMonthly\": \"month(s)\",\r\n \"dxScheduler-recurrenceRepeatYearly\": \"year(s)\",\r\n\r\n \"dxScheduler-switcherDay\": \"Day\",\r\n \"dxScheduler-switcherWeek\": \"Week\",\r\n \"dxScheduler-switcherWorkWeek\": \"Work Week\",\r\n \"dxScheduler-switcherMonth\": \"Month\",\r\n\r\n \"dxScheduler-switcherAgenda\": \"Agenda\",\r\n\r\n \"dxScheduler-switcherTimelineDay\": \"Timeline Day\",\r\n \"dxScheduler-switcherTimelineWeek\": \"Timeline Week\",\r\n \"dxScheduler-switcherTimelineWorkWeek\": \"Timeline Work Week\",\r\n \"dxScheduler-switcherTimelineMonth\": \"Timeline Month\",\r\n\r\n \"dxScheduler-recurrenceRepeatOnDate\": \"on date\",\r\n \"dxScheduler-recurrenceRepeatCount\": \"occurrence(s)\",\r\n \"dxScheduler-allDay\": \"All day\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditMessage\": \"Do you want to edit only this appointment or the whole series?\",\r\n \"dxScheduler-confirmRecurrenceDeleteMessage\": \"Do you want to delete only this appointment or the whole series?\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditSeries\": \"Edit series\",\r\n \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Delete series\",\r\n \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Edit appointment\",\r\n \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Delete appointment\",\r\n\r\n \"dxScheduler-noTimezoneTitle\": \"No timezone\",\r\n \"dxScheduler-moreAppointments\": \"{0} more\",\r\n\r\n \"dxCalendar-todayButtonText\": \"Today\",\r\n \"dxCalendar-ariaWidgetName\": \"Calendar\",\r\n\r\n \"dxColorView-ariaRed\": \"אדום\",\r\n \"dxColorView-ariaGreen\": \"ירוק\",\r\n \"dxColorView-ariaBlue\": \"כחול\",\r\n \"dxColorView-ariaAlpha\": \"שקיפות\",\r\n \"dxColorView-ariaHex\": \"קוד צבע\",\r\n\r\n \"dxTagBox-selected\": \"{0} נבחר\",\r\n \"dxTagBox-allSelected\": \"הכל נבחר ({0})\",\r\n \"dxTagBox-moreSelected\": \"{0} עוד\",\r\n\r\n \"vizExport-printingButtonText\": \"Print\",\r\n \"vizExport-titleMenuText\": \"Exporting/Printing\",\r\n \"vizExport-exportButtonText\": \"{0} file\",\r\n\r\n \"dxFilterBuilder-and\": \"And\",\r\n \"dxFilterBuilder-or\": \"Or\",\r\n \"dxFilterBuilder-notAnd\": \"Not And\",\r\n \"dxFilterBuilder-notOr\": \"Not Or\",\r\n \"dxFilterBuilder-addCondition\": \"Add Condition\",\r\n \"dxFilterBuilder-addGroup\": \"Add Group\",\r\n \"dxFilterBuilder-enterValueText\": \"\",\r\n \"dxFilterBuilder-filterOperationEquals\": \"Equals\",\r\n \"dxFilterBuilder-filterOperationNotEquals\": \"Does not equal\",\r\n \"dxFilterBuilder-filterOperationLess\": \"Is less than\",\r\n \"dxFilterBuilder-filterOperationLessOrEquals\": \"Is less than or equal to\",\r\n \"dxFilterBuilder-filterOperationGreater\": \"Is greater than\",\r\n \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Is greater than or equal to\",\r\n \"dxFilterBuilder-filterOperationStartsWith\": \"Starts with\",\r\n \"dxFilterBuilder-filterOperationContains\": \"Contains\",\r\n \"dxFilterBuilder-filterOperationNotContains\": \"Does not contain\",\r\n \"dxFilterBuilder-filterOperationEndsWith\": \"Ends with\",\r\n \"dxFilterBuilder-filterOperationIsBlank\": \"Is blank\",\r\n \"dxFilterBuilder-filterOperationIsNotBlank\": \"Is not blank\",\r\n \"dxFilterBuilder-filterOperationBetween\": \"Is between\",\r\n \"dxFilterBuilder-filterOperationAnyOf\": \"Is any of\",\r\n \"dxFilterBuilder-filterOperationNoneOf\": \"Is none of\",\r\n\r\n \"dxHtmlEditor-dialogColorCaption\": \"Change Font Color\",\r\n \"dxHtmlEditor-dialogBackgroundCaption\": \"Change Background Color\",\r\n \"dxHtmlEditor-dialogLinkCaption\": \"Add Link\",\r\n \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogLinkTextField\": \"Text\",\r\n \"dxHtmlEditor-dialogLinkTargetField\": \"Open link in new window\",\r\n \"dxHtmlEditor-dialogImageCaption\": \"Add Image\",\r\n \"dxHtmlEditor-dialogImageUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogImageAltField\": \"Alternate text\",\r\n \"dxHtmlEditor-dialogImageWidthField\": \"Width (px)\",\r\n \"dxHtmlEditor-dialogImageHeightField\": \"Height (px)\",\r\n \"dxHtmlEditor-heading\": \"Heading\",\r\n \"dxHtmlEditor-normalText\": \"Normal text\"\r\n }\r\n }\r\n","export const ResourcesDEVX_ES =\r\n{\r\n \"es\": {\r\n \"Yes\": \"Sí\",\r\n \"No\": \"No\",\r\n \"Cancel\": \"Cancelar\",\r\n \"CheckState\": \"Check state\",\r\n \"Close\": \"Cerca\",\r\n \"Clear\": \"Limpiar\",\r\n \"Done\": \"Hecho\",\r\n \"Loading\": \"Cargando...\",\r\n \"Select\": \"Seleccionar...\",\r\n \"Search\": \"Buscar\",\r\n \"Back\": \"Volver\",\r\n \"OK\": \"Aceptar\",\r\n\r\n \"dxCollectionWidget-noDataText\": \"Sin datos para mostrar\",\r\n\r\n \"dxDropDownEditor-selectLabel\": \"Seleccionar\",\r\n\r\n \"validation-required\": \"Obligatorio\",\r\n \"validation-required-formatted\": \"{0} es obligatorio\",\r\n \"validation-numeric\": \"Valor debe ser un número\",\r\n \"validation-numeric-formatted\": \"{0} debe ser un número\",\r\n \"validation-range\": \"Valor fuera de rango\",\r\n \"validation-range-formatted\": \"{0} fuera de rango\",\r\n \"validation-stringLength\": \"El tamaño del valor es incorrecto\",\r\n \"validation-stringLength-formatted\": \"El tamaño de {0} es incorrecto\",\r\n \"validation-custom\": \"Valor inválido\",\r\n \"validation-custom-formatted\": \"{0} inválido\",\r\n \"validation-async\": \"Valor inválido\",\r\n \"validation-async-formatted\": \"{0} inválido\",\r\n \"validation-compare\": \"Valores no coinciden\",\r\n \"validation-compare-formatted\": \"{0} no coinciden\",\r\n \"validation-pattern\": \"Valor no coincide con el patrón\",\r\n \"validation-pattern-formatted\": \"{0} no coincide con el patrón\",\r\n \"validation-email\": \"Email inválido\",\r\n \"validation-email-formatted\": \"{0} inválido\",\r\n \"validation-mask\": \"Valor inválido\",\r\n\r\n \"dxLookup-searchPlaceholder\": \"Cantidad mínima de caracteres: {0}\",\r\n\r\n \"dxList-pullingDownText\": \"Desliza hacia abajo para actualizar...\",\r\n \"dxList-pulledDownText\": \"Suelta para actualizar...\",\r\n \"dxList-refreshingText\": \"Actualizando...\",\r\n \"dxList-pageLoadingText\": \"Cargando...\",\r\n \"dxList-nextButtonText\": \"Más\",\r\n \"dxList-selectAll\": \"Seleccionar Todo\",\r\n \"dxList-listAriaLabel\": \"Items\",\r\n \"dxList-listAriaLabel-deletable\": \"Deletable items\",\r\n \"dxListEditDecorator-delete\": \"Eliminar\",\r\n \"dxListEditDecorator-more\": \"Más\",\r\n \"dxList-selectAll-indeterminate\": \"Half-checked\",\r\n \"dxList-selectAll-checked\": \"Checked\",\r\n \"dxList-selectAll-notChecked\": \"Not checked\",\r\n\r\n \"dxScrollView-pullingDownText\": \"Desliza hacia abajo para actualizar...\",\r\n \"dxScrollView-pulledDownText\": \"Suelta para actualizar...\",\r\n \"dxScrollView-refreshingText\": \"Actualizando...\",\r\n \"dxScrollView-reachBottomText\": \"Cargando...\",\r\n\r\n \"dxDateBox-simulatedDataPickerTitleTime\": \"Seleccione hora\",\r\n \"dxDateBox-simulatedDataPickerTitleDate\": \"Seleccione fecha\",\r\n \"dxDateBox-simulatedDataPickerTitleDateTime\": \"Seleccione fecha y hora\",\r\n \"dxDateBox-validation-datetime\": \"Valor debe ser una fecha u hora\",\r\n\r\n \"dxDateRangeBox-invalidStartDateMessage\": \"Start value must be a date\",\r\n \"dxDateRangeBox-invalidEndDateMessage\": \"End value must be a date\",\r\n \"dxDateRangeBox-startDateOutOfRangeMessage\": \"Start date is out of range\",\r\n \"dxDateRangeBox-endDateOutOfRangeMessage\": \"End date is out of range\",\r\n \"dxDateRangeBox-startDateLabel\": \"Fecha inicial\",\r\n \"dxDateRangeBox-endDateLabel\": \"Fecha final\",\r\n\r\n \"dxFileUploader-selectFile\": \"Seleccionar archivo\",\r\n \"dxFileUploader-dropFile\": \"o arrastre un archivo aquí\",\r\n \"dxFileUploader-bytes\": \"bytes\",\r\n \"dxFileUploader-kb\": \"KB\",\r\n \"dxFileUploader-Mb\": \"MB\",\r\n \"dxFileUploader-Gb\": \"GB\",\r\n \"dxFileUploader-upload\": \"Subir\",\r\n \"dxFileUploader-uploaded\": \"Subido\",\r\n \"dxFileUploader-readyToUpload\": \"Listo para subir\",\r\n \"dxFileUploader-uploadAbortedMessage\": \"Upload cancelled\",\r\n \"dxFileUploader-uploadFailedMessage\": \"Falla ao subir\",\r\n \"dxFileUploader-invalidFileExtension\": \"Tipo de archivo no está permitido\",\r\n \"dxFileUploader-invalidMaxFileSize\": \"Archivo es muy grande\",\r\n \"dxFileUploader-invalidMinFileSize\": \"Archivo es muy pequeño\",\r\n\r\n \"dxRangeSlider-ariaFrom\": \"Desde\",\r\n \"dxRangeSlider-ariaTill\": \"Hasta\",\r\n \"dxSwitch-switchedOnText\": \"ENCENDIDO\",\r\n \"dxSwitch-switchedOffText\": \"APAGADO\",\r\n\r\n \"dxForm-optionalMark\": \"opcional\",\r\n \"dxForm-requiredMessage\": \"{0} es obligatorio\",\r\n\r\n \"dxNumberBox-invalidValueMessage\": \"Valor debe ser un número\",\r\n \"dxNumberBox-noDataText\": \"Sin datos\",\r\n\r\n \"dxDataGrid-emptyHeaderWithColumnChooserText\": \"Use {0} to display columns\",\r\n \"dxDataGrid-emptyHeaderWithGroupPanelText\": \"Drag a column from the group panel here\",\r\n \"dxDataGrid-emptyHeaderWithColumnChooserAndGroupPanelText\": \"Use {0} or drag a column from the group panel\",\r\n \"dxDataGrid-emptyHeaderColumnChooserText\": \"column chooser\",\r\n \"dxDataGrid-columnChooserTitle\": \"Selector de Columnas\",\r\n \"dxDataGrid-columnChooserEmptyText\": \"Arrastra una columna aquí para ocultarla\",\r\n \"dxDataGrid-groupContinuesMessage\": \"Continúa en la página siguiente\",\r\n \"dxDataGrid-groupContinuedMessage\": \"Continuación de la página anterior\",\r\n \"dxDataGrid-groupHeaderText\": \"Agrupar por esta columna\",\r\n \"dxDataGrid-ungroupHeaderText\": \"Desagrupar\",\r\n \"dxDataGrid-ungroupAllText\": \"Desagrupar Todo\",\r\n \"dxDataGrid-editingEditRow\": \"Modificar\",\r\n \"dxDataGrid-editingSaveRowChanges\": \"Guardar\",\r\n \"dxDataGrid-editingCancelRowChanges\": \"Cancelar\",\r\n \"dxDataGrid-editingDeleteRow\": \"Eliminar\",\r\n \"dxDataGrid-editingUndeleteRow\": \"Recuperar\",\r\n \"dxDataGrid-editingConfirmDeleteMessage\": \"¿Está seguro que desea eliminar este registro?\",\r\n \"dxDataGrid-validationCancelChanges\": \"Cancelar cambios\",\r\n \"dxDataGrid-groupPanelEmptyText\": \"Arrastra una columna aquí para agrupar por ella\",\r\n \"dxDataGrid-noDataText\": \"Sin datos\",\r\n \"dxDataGrid-searchPanelPlaceholder\": \"Buscar...\",\r\n \"dxDataGrid-filterRowShowAllText\": \"(Todos)\",\r\n \"dxDataGrid-filterRowResetOperationText\": \"Reestablecer\",\r\n \"dxDataGrid-filterRowOperationEquals\": \"Igual\",\r\n \"dxDataGrid-filterRowOperationNotEquals\": \"No es igual\",\r\n \"dxDataGrid-filterRowOperationLess\": \"Menor que\",\r\n \"dxDataGrid-filterRowOperationLessOrEquals\": \"Menor o igual a\",\r\n \"dxDataGrid-filterRowOperationGreater\": \"Mayor que\",\r\n \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Mayor o igual a\",\r\n \"dxDataGrid-filterRowOperationStartsWith\": \"Empieza con\",\r\n \"dxDataGrid-filterRowOperationContains\": \"Contiene\",\r\n \"dxDataGrid-filterRowOperationNotContains\": \"No contiene\",\r\n \"dxDataGrid-filterRowOperationEndsWith\": \"Termina con\",\r\n \"dxDataGrid-filterRowOperationBetween\": \"Entre\",\r\n \"dxDataGrid-filterRowOperationBetweenStartText\": \"Inicio\",\r\n \"dxDataGrid-filterRowOperationBetweenEndText\": \"Fin\",\r\n \"dxDataGrid-ariaSearchBox\": \"Search box\",\r\n \"dxDataGrid-applyFilterText\": \"Filtrar\",\r\n \"dxDataGrid-trueText\": \"verdadero\",\r\n \"dxDataGrid-falseText\": \"falso\",\r\n \"dxDataGrid-sortingAscendingText\": \"Orden Ascendente\",\r\n \"dxDataGrid-sortingDescendingText\": \"Orden Descendente\",\r\n \"dxDataGrid-sortingClearText\": \"Limpiar Ordenamiento\",\r\n \"dxDataGrid-ariaNotSortedColumn\": \"Not sorted column\",\r\n \"dxDataGrid-ariaSortedAscendingColumn\": \"Column sorted in ascending order\",\r\n \"dxDataGrid-ariaSortedDescendingColumn\": \"Column sorted in descending order\",\r\n \"dxDataGrid-ariaSortIndex\": \"Sort index {0}\",\r\n \"dxDataGrid-editingSaveAllChanges\": \"Guardar cambios\",\r\n \"dxDataGrid-editingCancelAllChanges\": \"Descartar cambios\",\r\n \"dxDataGrid-editingAddRow\": \"Agregar una fila\",\r\n \"dxDataGrid-summaryMin\": \"Mín: {0}\",\r\n \"dxDataGrid-summaryMinOtherColumn\": \"Mín de {1} es {0}\",\r\n \"dxDataGrid-summaryMax\": \"Máx: {0}\",\r\n \"dxDataGrid-summaryMaxOtherColumn\": \"Máx de {1} es {0}\",\r\n \"dxDataGrid-summaryAvg\": \"Prom: {0}\",\r\n \"dxDataGrid-summaryAvgOtherColumn\": \"Prom de {1} es {0}\",\r\n \"dxDataGrid-summarySum\": \"Suma: {0}\",\r\n \"dxDataGrid-summarySumOtherColumn\": \"Suma de {1} es {0}\",\r\n \"dxDataGrid-summaryCount\": \"Cantidad: {0}\",\r\n \"dxDataGrid-columnFixingFix\": \"Anclar\",\r\n \"dxDataGrid-columnFixingUnfix\": \"Desanclar\",\r\n \"dxDataGrid-columnFixingLeftPosition\": \"A la izquierda\",\r\n \"dxDataGrid-columnFixingRightPosition\": \"A la derecha\",\r\n \"dxDataGrid-exportTo\": \"Exportar\",\r\n \"dxDataGrid-exportToExcel\": \"Exportar a archivo Excel\",\r\n \"dxDataGrid-exporting\": \"Exportar...\",\r\n \"dxDataGrid-excelFormat\": \"Archivo Excel\",\r\n \"dxDataGrid-selectedRows\": \"Filas seleccionadas\",\r\n \"dxDataGrid-exportSelectedRows\": \"Exportar filas seleccionadas a {0}\",\r\n \"dxDataGrid-exportAll\": \"Exportar todo a {0}\",\r\n \"dxDataGrid-headerFilterLabel\": \"Filter options\",\r\n \"dxDataGrid-headerFilterIndicatorLabel\": \"Show filter options for column '{0}'\",\r\n \"dxDataGrid-headerFilterEmptyValue\": \"(Vacio)\",\r\n \"dxDataGrid-headerFilterOK\": \"Aceptar\",\r\n \"dxDataGrid-headerFilterCancel\": \"Cancelar\",\r\n \"dxDataGrid-ariaAdaptiveCollapse\": \"Hide additional data\",\r\n \"dxDataGrid-ariaAdaptiveExpand\": \"Display additional data\",\r\n \"dxDataGrid-ariaColumn\": \"Columna\",\r\n \"dxDataGrid-ariaColumnHeader\": \"Column header\",\r\n \"dxDataGrid-ariaValue\": \"Valor\",\r\n \"dxDataGrid-ariaError\": \"Error\",\r\n \"dxDataGrid-ariaRevertButton\": \"Press Escape to discard the changes\",\r\n \"dxDataGrid-ariaFilterCell\": \"Celda de filtro\",\r\n \"dxDataGrid-ariaCollapse\": \"Colapsar\",\r\n \"dxDataGrid-ariaModifiedCell\": \"Modified\",\r\n \"dxDataGrid-ariaDeletedCell\": \"Deleted\",\r\n \"dxDataGrid-ariaEditableCell\": \"Editable\",\r\n \"dxDataGrid-ariaExpand\": \"Expandir\",\r\n \"dxDataGrid-ariaCollapsedRow\": \"Collapsed row\",\r\n \"dxDataGrid-ariaExpandedRow\": \"Expanded row\",\r\n \"dxDataGrid-ariaDataGrid\": \"Tabla de datos\",\r\n \"dxDataGrid-ariaSearchInGrid\": \"Buscar en la tabla de datos\",\r\n \"dxDataGrid-ariaSelectAll\": \"Seleccionar todo\",\r\n \"dxDataGrid-ariaSelectRow\": \"Seleccionar fila\",\r\n \"dxDataGrid-ariaToolbar\": \"Data grid toolbar\",\r\n \"dxDataGrid-ariaEditForm\": \"Edit form\",\r\n \"dxDataGrid-filterBuilderPopupTitle\": \"Constructor de filtro\",\r\n \"dxDataGrid-filterPanelCreateFilter\": \"Crear filtro\",\r\n \"dxDataGrid-filterPanelClearFilter\": \"Limpiar filtro\",\r\n \"dxDataGrid-filterPanelFilterEnabledHint\": \"Habilitar filtro\",\r\n \"dxDataGrid-masterDetail\": \"Cell with details\",\r\n\r\n \"dxTreeList-ariaTreeList\": \"Tree list with {0} rows and {1} columns\",\r\n \"dxTreeList-ariaSearchInGrid\": \"Search in the tree list\",\r\n \"dxTreeList-ariaToolbar\": \"Tree list toolbar\",\r\n \"dxTreeList-editingAddRowToNode\": \"Añadir\",\r\n\r\n \"dxPager-infoText\": \"Página {0} de {1} ({2} ítems)\",\r\n \"dxPager-pagesCountText\": \"de\",\r\n \"dxPager-pageSize\": \"Items per page: {0}\",\r\n \"dxPager-pageSizesAllText\": \"Todos\",\r\n \"dxPager-page\": \"Page {0}\",\r\n \"dxPager-prevPage\": \"Previous Page\",\r\n \"dxPager-nextPage\": \"Next Page\",\r\n \"dxPager-ariaLabel\": \"Page Navigation\",\r\n \"dxPager-ariaPageSize\": \"Page size\",\r\n \"dxPager-ariaPageNumber\": \"Page number\",\r\n\r\n \"dxPivotGrid-grandTotal\": \"Gran Total\",\r\n \"dxPivotGrid-total\": \"{0} Total\",\r\n \"dxPivotGrid-fieldChooserTitle\": \"Selector de Campos\",\r\n \"dxPivotGrid-showFieldChooser\": \"Mostrar Selector de Campos\",\r\n \"dxPivotGrid-expandAll\": \"Expandir Todo\",\r\n \"dxPivotGrid-collapseAll\": \"Colapsar Todo\",\r\n \"dxPivotGrid-sortColumnBySummary\": \"Ordenar \\\"{0}\\\" por esta columna\",\r\n \"dxPivotGrid-sortRowBySummary\": \"Ordenar \\\"{0}\\\" por esta fila\",\r\n \"dxPivotGrid-removeAllSorting\": \"Remover ordenamiento\",\r\n \"dxPivotGrid-dataNotAvailable\": \"N/A\",\r\n \"dxPivotGrid-rowFields\": \"Campos de fila\",\r\n \"dxPivotGrid-columnFields\": \"Campos de columna\",\r\n \"dxPivotGrid-dataFields\": \"Campos de dato\",\r\n \"dxPivotGrid-filterFields\": \"Campos de filtro\",\r\n \"dxPivotGrid-allFields\": \"Todos los campos\",\r\n \"dxPivotGrid-columnFieldArea\": \"Arrastra campos de columna aquí\",\r\n \"dxPivotGrid-dataFieldArea\": \"Arrastra campos de dato aquí\",\r\n \"dxPivotGrid-rowFieldArea\": \"Arrastra campos de fila aquí\",\r\n \"dxPivotGrid-filterFieldArea\": \"Arrastra campos de filtro aquí\",\r\n\r\n \"dxScheduler-editorLabelTitle\": \"Asunto\",\r\n \"dxScheduler-editorLabelStartDate\": \"Fecha inicial\",\r\n \"dxScheduler-editorLabelEndDate\": \"Fecha final\",\r\n \"dxScheduler-editorLabelDescription\": \"Descripción\",\r\n \"dxScheduler-editorLabelRecurrence\": \"Repetir\",\r\n\r\n \"dxScheduler-openAppointment\": \"Abrir cita\",\r\n\r\n \"dxScheduler-recurrenceNever\": \"Nunca\",\r\n \"dxScheduler-recurrenceMinutely\": \"Minutely\",\r\n \"dxScheduler-recurrenceHourly\": \"Hourly\",\r\n \"dxScheduler-recurrenceDaily\": \"Diario\",\r\n \"dxScheduler-recurrenceWeekly\": \"Semanal\",\r\n \"dxScheduler-recurrenceMonthly\": \"Mensual\",\r\n \"dxScheduler-recurrenceYearly\": \"Anual\",\r\n\r\n \"dxScheduler-recurrenceRepeatEvery\": \"Cada\",\r\n \"dxScheduler-recurrenceRepeatOn\": \"Repeat On\",\r\n \"dxScheduler-recurrenceEnd\": \"Terminar repetición\",\r\n \"dxScheduler-recurrenceAfter\": \"Después\",\r\n \"dxScheduler-recurrenceOn\": \"En\",\r\n\r\n \"dxScheduler-recurrenceRepeatMinutely\": \"minute(s)\",\r\n \"dxScheduler-recurrenceRepeatHourly\": \"hour(s)\",\r\n \"dxScheduler-recurrenceRepeatDaily\": \"día(s)\",\r\n \"dxScheduler-recurrenceRepeatWeekly\": \"semana(s)\",\r\n \"dxScheduler-recurrenceRepeatMonthly\": \"mes(es)\",\r\n \"dxScheduler-recurrenceRepeatYearly\": \"año(s)\",\r\n\r\n \"dxScheduler-switcherDay\": \"Día\",\r\n \"dxScheduler-switcherWeek\": \"Semana\",\r\n \"dxScheduler-switcherWorkWeek\": \"Semana Laboral\",\r\n \"dxScheduler-switcherMonth\": \"Mes\",\r\n\r\n \"dxScheduler-switcherAgenda\": \"Agenda\",\r\n\r\n \"dxScheduler-switcherTimelineDay\": \"Línea de tiempo Día\",\r\n \"dxScheduler-switcherTimelineWeek\": \"Línea de tiempo Semana\",\r\n \"dxScheduler-switcherTimelineWorkWeek\": \"Línea de tiempo Semana Laboral\",\r\n \"dxScheduler-switcherTimelineMonth\": \"Línea de tiempo Mes\",\r\n\r\n \"dxScheduler-recurrenceRepeatOnDate\": \"en la fecha\",\r\n \"dxScheduler-recurrenceRepeatCount\": \"ocurrencia(s)\",\r\n \"dxScheduler-allDay\": \"Todo el día\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditTitle\": \"Edit Recurring Appointment\",\r\n \"dxScheduler-confirmRecurrenceDeleteTitle\": \"Delete Recurring Appointment\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditMessage\": \"¿Quiere modificar solo esta cita o toda la serie?\",\r\n \"dxScheduler-confirmRecurrenceDeleteMessage\": \"¿Quiere eliminar solo esta cita o toda la serie?\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditSeries\": \"Modificar serie\",\r\n \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Eliminar serie\",\r\n \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Modificar cita\",\r\n \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Eliminar cita\",\r\n\r\n \"dxScheduler-noTimezoneTitle\": \"Sin zona horaria\",\r\n \"dxScheduler-moreAppointments\": \"{0} más\",\r\n\r\n \"dxCalendar-currentDay\": \"Today\",\r\n \"dxCalendar-currentMonth\": \"Current month\",\r\n \"dxCalendar-currentYear\": \"Current year\",\r\n \"dxCalendar-currentYearRange\": \"Current year range\",\r\n \"dxCalendar-todayButtonText\": \"Hoy\",\r\n \"dxCalendar-ariaWidgetName\": \"Calendario\",\r\n \"dxCalendar-previousMonthButtonLabel\": \"Previous month\",\r\n \"dxCalendar-previousYearButtonLabel\": \"Previous year\",\r\n \"dxCalendar-previousDecadeButtonLabel\": \"Previous decade\",\r\n \"dxCalendar-previousCenturyButtonLabel\": \"Previous century\",\r\n \"dxCalendar-nextMonthButtonLabel\": \"Next month\",\r\n \"dxCalendar-nextYearButtonLabel\": \"Next year\",\r\n \"dxCalendar-nextDecadeButtonLabel\": \"Next decade\",\r\n \"dxCalendar-nextCenturyButtonLabel\": \"Next century\",\r\n \"dxCalendar-captionMonthLabel\": \"Month selection\",\r\n \"dxCalendar-captionYearLabel\": \"Year selection\",\r\n \"dxCalendar-captionDecadeLabel\": \"Decade selection\",\r\n \"dxCalendar-captionCenturyLabel\": \"Century selection\",\r\n \"dxCalendar-selectedDate\": \"The selected date is {0}\",\r\n \"dxCalendar-selectedDateRange\": \"The selected date range is from {0} to {1}\",\r\n\r\n \"dxColorView-ariaRed\": \"Rojo\",\r\n \"dxColorView-ariaGreen\": \"Verde\",\r\n \"dxColorView-ariaBlue\": \"Azul\",\r\n \"dxColorView-ariaAlpha\": \"Transparencia\",\r\n \"dxColorView-ariaHex\": \"Código del color\",\r\n\r\n \"dxTagBox-selected\": \"{0} seleccionado\",\r\n \"dxTagBox-allSelected\": \"Todos seleccionados ({0})\",\r\n \"dxTagBox-moreSelected\": \"{0} más\",\r\n \"dxTagBox-tagRoleDescription\": \"Tag. Press the delete button to remove this tag\",\r\n\r\n \"vizExport-printingButtonText\": \"Imprimir\",\r\n \"vizExport-titleMenuText\": \"Exportar/Imprimir\",\r\n \"vizExport-exportButtonText\": \"Archivo {0}\",\r\n\r\n \"dxFilterBuilder-and\": \"Y\",\r\n \"dxFilterBuilder-or\": \"O\",\r\n \"dxFilterBuilder-notAnd\": \"NO Y\",\r\n \"dxFilterBuilder-notOr\": \"NO O\",\r\n \"dxFilterBuilder-addCondition\": \"Añadir condición\",\r\n \"dxFilterBuilder-addGroup\": \"Añadir Grupo\",\r\n \"dxFilterBuilder-enterValueText\": \"\",\r\n \"dxFilterBuilder-filterOperationEquals\": \"Igual\",\r\n \"dxFilterBuilder-filterOperationNotEquals\": \"Diferente\",\r\n \"dxFilterBuilder-filterOperationLess\": \"Menos que\",\r\n \"dxFilterBuilder-filterOperationLessOrEquals\": \"Menor o igual que\",\r\n \"dxFilterBuilder-filterOperationGreater\": \"Más grande que\",\r\n \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Mayor o igual que\",\r\n \"dxFilterBuilder-filterOperationStartsWith\": \"Comienza con\",\r\n \"dxFilterBuilder-filterOperationContains\": \"Contiene\",\r\n \"dxFilterBuilder-filterOperationNotContains\": \"No contiene\",\r\n \"dxFilterBuilder-filterOperationEndsWith\": \"Termina con\",\r\n \"dxFilterBuilder-filterOperationIsBlank\": \"Vacío\",\r\n \"dxFilterBuilder-filterOperationIsNotBlank\": \"No vacío\",\r\n \"dxFilterBuilder-filterOperationBetween\": \"Entre\",\r\n \"dxFilterBuilder-filterOperationAnyOf\": \"Alguno de\",\r\n \"dxFilterBuilder-filterOperationNoneOf\": \"Ningún de\",\r\n\r\n \"dxHtmlEditor-dialogColorCaption\": \"Cambiar el color de la fuente\",\r\n \"dxHtmlEditor-dialogBackgroundCaption\": \"Cambiar el color de fondo\",\r\n \"dxHtmlEditor-dialogLinkCaption\": \"Añadir enlace\",\r\n \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogLinkTextField\": \"Texto\",\r\n \"dxHtmlEditor-dialogLinkTargetField\": \"Abrir enlace en nueva ventana\",\r\n \"dxHtmlEditor-dialogImageCaption\": \"Añadir imagen\",\r\n \"dxHtmlEditor-dialogImageUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogImageAltField\": \"Texto alternativo\",\r\n \"dxHtmlEditor-dialogImageWidthField\": \"Anchura (px)\",\r\n \"dxHtmlEditor-dialogImageHeightField\": \"Altura (px)\",\r\n \"dxHtmlEditor-dialogInsertTableRowsField\": \"Rows\",\r\n \"dxHtmlEditor-dialogInsertTableColumnsField\": \"Columns\",\r\n \"dxHtmlEditor-dialogInsertTableCaption\": \"Insert Table\",\r\n \"dxHtmlEditor-dialogUpdateImageCaption\": \"Update Image\",\r\n \"dxHtmlEditor-dialogImageUpdateButton\": \"Update\",\r\n \"dxHtmlEditor-dialogImageAddButton\": \"Add\",\r\n \"dxHtmlEditor-dialogImageSpecifyUrl\": \"From the Web\",\r\n \"dxHtmlEditor-dialogImageSelectFile\": \"From This Device\",\r\n \"dxHtmlEditor-dialogImageKeepAspectRatio\": \"Keep Aspect Ratio\",\r\n \"dxHtmlEditor-dialogImageEncodeToBase64\": \"Encode to Base64\",\r\n \"dxHtmlEditor-heading\": \"Encabezamiento\",\r\n \"dxHtmlEditor-normalText\": \"Texto normal\",\r\n \"dxHtmlEditor-background\": \"Background Color\",\r\n \"dxHtmlEditor-bold\": \"Bold\",\r\n \"dxHtmlEditor-color\": \"Font Color\",\r\n \"dxHtmlEditor-font\": \"Font\",\r\n \"dxHtmlEditor-italic\": \"Italic\",\r\n \"dxHtmlEditor-link\": \"Add Link\",\r\n \"dxHtmlEditor-image\": \"Add Image\",\r\n \"dxHtmlEditor-size\": \"Size\",\r\n \"dxHtmlEditor-strike\": \"Strikethrough\",\r\n \"dxHtmlEditor-subscript\": \"Subscript\",\r\n \"dxHtmlEditor-superscript\": \"Superscript\",\r\n \"dxHtmlEditor-underline\": \"Underline\",\r\n \"dxHtmlEditor-blockquote\": \"Blockquote\",\r\n \"dxHtmlEditor-header\": \"Header\",\r\n \"dxHtmlEditor-increaseIndent\": \"Increase Indent\",\r\n \"dxHtmlEditor-decreaseIndent\": \"Decrease Indent\",\r\n \"dxHtmlEditor-orderedList\": \"Ordered List\",\r\n \"dxHtmlEditor-bulletList\": \"Bullet List\",\r\n \"dxHtmlEditor-alignLeft\": \"Align Left\",\r\n \"dxHtmlEditor-alignCenter\": \"Align Center\",\r\n \"dxHtmlEditor-alignRight\": \"Align Right\",\r\n \"dxHtmlEditor-alignJustify\": \"Align Justify\",\r\n \"dxHtmlEditor-codeBlock\": \"Code Block\",\r\n \"dxHtmlEditor-variable\": \"Add Variable\",\r\n \"dxHtmlEditor-undo\": \"Undo\",\r\n \"dxHtmlEditor-redo\": \"Redo\",\r\n \"dxHtmlEditor-clear\": \"Clear Formatting\",\r\n \"dxHtmlEditor-insertTable\": \"Insert Table\",\r\n \"dxHtmlEditor-insertHeaderRow\": \"Insert Header Row\",\r\n \"dxHtmlEditor-insertRowAbove\": \"Insert Row Above\",\r\n \"dxHtmlEditor-insertRowBelow\": \"Insert Row Below\",\r\n \"dxHtmlEditor-insertColumnLeft\": \"Insert Column Left\",\r\n \"dxHtmlEditor-insertColumnRight\": \"Insert Column Right\",\r\n \"dxHtmlEditor-deleteColumn\": \"Delete Column\",\r\n \"dxHtmlEditor-deleteRow\": \"Delete Row\",\r\n \"dxHtmlEditor-deleteTable\": \"Delete Table\",\r\n \"dxHtmlEditor-cellProperties\": \"Cell Properties\",\r\n \"dxHtmlEditor-tableProperties\": \"Table Properties\",\r\n \"dxHtmlEditor-insert\": \"Insert\",\r\n \"dxHtmlEditor-delete\": \"Delete\",\r\n \"dxHtmlEditor-border\": \"Border\",\r\n \"dxHtmlEditor-style\": \"Style\",\r\n \"dxHtmlEditor-width\": \"Width\",\r\n \"dxHtmlEditor-height\": \"Height\",\r\n \"dxHtmlEditor-borderColor\": \"Color\",\r\n \"dxHtmlEditor-borderWidth\": \"Border Width\",\r\n \"dxHtmlEditor-tableBackground\": \"Background\",\r\n \"dxHtmlEditor-dimensions\": \"Dimensions\",\r\n \"dxHtmlEditor-alignment\": \"Alignment\",\r\n \"dxHtmlEditor-horizontal\": \"Horizontal\",\r\n \"dxHtmlEditor-vertical\": \"Vertical\",\r\n \"dxHtmlEditor-paddingVertical\": \"Vertical Padding\",\r\n \"dxHtmlEditor-paddingHorizontal\": \"Horizontal Padding\",\r\n \"dxHtmlEditor-pixels\": \"Pixels\",\r\n \"dxHtmlEditor-list\": \"List\",\r\n \"dxHtmlEditor-ordered\": \"Ordered\",\r\n \"dxHtmlEditor-bullet\": \"Bullet\",\r\n \"dxHtmlEditor-align\": \"Align\",\r\n \"dxHtmlEditor-center\": \"Center\",\r\n \"dxHtmlEditor-left\": \"Left\",\r\n \"dxHtmlEditor-right\": \"Right\",\r\n \"dxHtmlEditor-indent\": \"Indent\",\r\n \"dxHtmlEditor-justify\": \"Justify\",\r\n \"dxHtmlEditor-borderStyleNone\": \"none\",\r\n \"dxHtmlEditor-borderStyleHidden\": \"hidden\",\r\n \"dxHtmlEditor-borderStyleDotted\": \"dotted\",\r\n \"dxHtmlEditor-borderStyleDashed\": \"dashed\",\r\n \"dxHtmlEditor-borderStyleSolid\": \"solid\",\r\n \"dxHtmlEditor-borderStyleDouble\": \"double\",\r\n \"dxHtmlEditor-borderStyleGroove\": \"groove\",\r\n \"dxHtmlEditor-borderStyleRidge\": \"ridge\",\r\n \"dxHtmlEditor-borderStyleInset\": \"inset\",\r\n \"dxHtmlEditor-borderStyleOutset\": \"outset\",\r\n\r\n \"dxFileManager-newDirectoryName\": \"Sin título\",\r\n \"dxFileManager-rootDirectoryName\": \"Archivos\",\r\n \"dxFileManager-errorNoAccess\": \"Acceso denegado. La operación no se puede completar.\",\r\n \"dxFileManager-errorDirectoryExistsFormat\": \"Carpeta {0} ya existe.\",\r\n \"dxFileManager-errorFileExistsFormat\": \"Archivo {0} ya existe.\",\r\n \"dxFileManager-errorFileNotFoundFormat\": \"Archivo {0} no encontrado.\",\r\n \"dxFileManager-errorDirectoryNotFoundFormat\": \"Directory '{0}' not found.\",\r\n \"dxFileManager-errorWrongFileExtension\": \"File extension is not allowed.\",\r\n \"dxFileManager-errorMaxFileSizeExceeded\": \"File size exceeds the maximum allowed size.\",\r\n \"dxFileManager-errorInvalidSymbols\": \"This name contains invalid characters.\",\r\n \"dxFileManager-errorDefault\": \"Error no especificado\",\r\n \"dxFileManager-errorDirectoryOpenFailed\": \"The directory cannot be opened\",\r\n\r\n \"dxFileManager-commandCreate\": \"New directory\",\r\n \"dxFileManager-commandRename\": \"Rename\",\r\n \"dxFileManager-commandMove\": \"Move to\",\r\n \"dxFileManager-commandCopy\": \"Copy to\",\r\n \"dxFileManager-commandDelete\": \"Delete\",\r\n \"dxFileManager-commandDownload\": \"Download\",\r\n \"dxFileManager-commandUpload\": \"Upload files\",\r\n \"dxFileManager-commandRefresh\": \"Refresh\",\r\n \"dxFileManager-commandThumbnails\": \"Thumbnails View\",\r\n \"dxFileManager-commandDetails\": \"Details View\",\r\n \"dxFileManager-commandClearSelection\": \"Clear selection\",\r\n \"dxFileManager-commandShowNavPane\": \"Toggle navigation pane\",\r\n\r\n \"dxFileManager-dialogDirectoryChooserMoveTitle\": \"Move to\",\r\n \"dxFileManager-dialogDirectoryChooserMoveButtonText\": \"Move\",\r\n \"dxFileManager-dialogDirectoryChooserCopyTitle\": \"Copy to\",\r\n \"dxFileManager-dialogDirectoryChooserCopyButtonText\": \"Copy\",\r\n \"dxFileManager-dialogRenameItemTitle\": \"Rename\",\r\n \"dxFileManager-dialogRenameItemButtonText\": \"Save\",\r\n \"dxFileManager-dialogCreateDirectoryTitle\": \"New directory\",\r\n \"dxFileManager-dialogCreateDirectoryButtonText\": \"Create\",\r\n \"dxFileManager-dialogDeleteItemTitle\": \"Delete\",\r\n \"dxFileManager-dialogDeleteItemButtonText\": \"Delete\",\r\n \"dxFileManager-dialogDeleteItemSingleItemConfirmation\": \"Are you sure you want to delete {0}?\",\r\n \"dxFileManager-dialogDeleteItemMultipleItemsConfirmation\": \"Are you sure you want to delete {0} items?\",\r\n \"dxFileManager-dialogButtonCancel\": \"Cancel\",\r\n\r\n \"dxFileManager-editingCreateSingleItemProcessingMessage\": \"Creating a directory inside {0}\",\r\n \"dxFileManager-editingCreateSingleItemSuccessMessage\": \"Created a directory inside {0}\",\r\n \"dxFileManager-editingCreateSingleItemErrorMessage\": \"Directory was not created\",\r\n \"dxFileManager-editingCreateCommonErrorMessage\": \"Directory was not created\",\r\n\r\n \"dxFileManager-editingRenameSingleItemProcessingMessage\": \"Renaming an item inside {0}\",\r\n \"dxFileManager-editingRenameSingleItemSuccessMessage\": \"Renamed an item inside {0}\",\r\n \"dxFileManager-editingRenameSingleItemErrorMessage\": \"Item was not renamed\",\r\n \"dxFileManager-editingRenameCommonErrorMessage\": \"Item was not renamed\",\r\n\r\n \"dxFileManager-editingDeleteSingleItemProcessingMessage\": \"Deleting an item from {0}\",\r\n \"dxFileManager-editingDeleteMultipleItemsProcessingMessage\": \"Deleting {0} items from {1}\",\r\n \"dxFileManager-editingDeleteSingleItemSuccessMessage\": \"Deleted an item from {0}\",\r\n \"dxFileManager-editingDeleteMultipleItemsSuccessMessage\": \"Deleted {0} items from {1}\",\r\n \"dxFileManager-editingDeleteSingleItemErrorMessage\": \"Item was not deleted\",\r\n \"dxFileManager-editingDeleteMultipleItemsErrorMessage\": \"{0} items were not deleted\",\r\n \"dxFileManager-editingDeleteCommonErrorMessage\": \"Some items were not deleted\",\r\n\r\n \"dxFileManager-editingMoveSingleItemProcessingMessage\": \"Moving an item to {0}\",\r\n \"dxFileManager-editingMoveMultipleItemsProcessingMessage\": \"Moving {0} items to {1}\",\r\n \"dxFileManager-editingMoveSingleItemSuccessMessage\": \"Moved an item to {0}\",\r\n \"dxFileManager-editingMoveMultipleItemsSuccessMessage\": \"Moved {0} items to {1}\",\r\n \"dxFileManager-editingMoveSingleItemErrorMessage\": \"Item was not moved\",\r\n \"dxFileManager-editingMoveMultipleItemsErrorMessage\": \"{0} items were not moved\",\r\n \"dxFileManager-editingMoveCommonErrorMessage\": \"Some items were not moved\",\r\n\r\n \"dxFileManager-editingCopySingleItemProcessingMessage\": \"Copying an item to {0}\",\r\n \"dxFileManager-editingCopyMultipleItemsProcessingMessage\": \"Copying {0} items to {1}\",\r\n \"dxFileManager-editingCopySingleItemSuccessMessage\": \"Copied an item to {0}\",\r\n \"dxFileManager-editingCopyMultipleItemsSuccessMessage\": \"Copied {0} items to {1}\",\r\n \"dxFileManager-editingCopySingleItemErrorMessage\": \"Item was not copied\",\r\n \"dxFileManager-editingCopyMultipleItemsErrorMessage\": \"{0} items were not copied\",\r\n \"dxFileManager-editingCopyCommonErrorMessage\": \"Some items were not copied\",\r\n\r\n \"dxFileManager-editingUploadSingleItemProcessingMessage\": \"Uploading an item to {0}\",\r\n \"dxFileManager-editingUploadMultipleItemsProcessingMessage\": \"Uploading {0} items to {1}\",\r\n \"dxFileManager-editingUploadSingleItemSuccessMessage\": \"Uploaded an item to {0}\",\r\n \"dxFileManager-editingUploadMultipleItemsSuccessMessage\": \"Uploaded {0} items to {1}\",\r\n \"dxFileManager-editingUploadSingleItemErrorMessage\": \"Item was not uploaded\",\r\n \"dxFileManager-editingUploadMultipleItemsErrorMessage\": \"{0} items were not uploaded\",\r\n \"dxFileManager-editingUploadCanceledMessage\": \"Canceled\",\r\n\r\n \"dxFileManager-editingDownloadSingleItemErrorMessage\": \"Item was not downloaded\",\r\n \"dxFileManager-editingDownloadMultipleItemsErrorMessage\": \"{0} items were not downloaded\",\r\n\r\n \"dxFileManager-listDetailsColumnCaptionName\": \"Name\",\r\n \"dxFileManager-listDetailsColumnCaptionDateModified\": \"Date Modified\",\r\n \"dxFileManager-listDetailsColumnCaptionFileSize\": \"File Size\",\r\n\r\n \"dxFileManager-listThumbnailsTooltipTextSize\": \"Size\",\r\n \"dxFileManager-listThumbnailsTooltipTextDateModified\": \"Date Modified\",\r\n\r\n \"dxFileManager-notificationProgressPanelTitle\": \"Progress\",\r\n \"dxFileManager-notificationProgressPanelEmptyListText\": \"No operations\",\r\n \"dxFileManager-notificationProgressPanelOperationCanceled\": \"Canceled\",\r\n\r\n \"dxDiagram-categoryGeneral\": \"General\",\r\n \"dxDiagram-categoryFlowchart\": \"Diagrama de flujo\",\r\n \"dxDiagram-categoryOrgChart\": \"Organigrama\",\r\n \"dxDiagram-categoryContainers\": \"Contenedores\",\r\n \"dxDiagram-categoryCustom\": \"Personalizado\",\r\n\r\n \"dxDiagram-commandExportToSvg\": \"Exportar a SVG\",\r\n \"dxDiagram-commandExportToPng\": \"Exportar a PNG\",\r\n \"dxDiagram-commandExportToJpg\": \"Exportar a JPG\",\r\n \"dxDiagram-commandUndo\": \"Deshacer\",\r\n \"dxDiagram-commandRedo\": \"Rehacer\",\r\n \"dxDiagram-commandFontName\": \"Nombre de fuente\",\r\n \"dxDiagram-commandFontSize\": \"Tamaño de fuente\",\r\n \"dxDiagram-commandBold\": \"Negrita\",\r\n \"dxDiagram-commandItalic\": \"Cursiva\",\r\n \"dxDiagram-commandUnderline\": \"Subrayado\",\r\n \"dxDiagram-commandTextColor\": \"Color de fuente\",\r\n \"dxDiagram-commandLineColor\": \"Color de línea\",\r\n \"dxDiagram-commandLineWidth\": \"Ancho de línea\",\r\n \"dxDiagram-commandLineStyle\": \"Estilo de línea\",\r\n \"dxDiagram-commandLineStyleSolid\": \"Sólido\",\r\n \"dxDiagram-commandLineStyleDotted\": \"De puntos\",\r\n \"dxDiagram-commandLineStyleDashed\": \"De guiones\",\r\n \"dxDiagram-commandFillColor\": \"Color de relleno\",\r\n \"dxDiagram-commandAlignLeft\": \"Alinear a la izquierda\",\r\n \"dxDiagram-commandAlignCenter\": \"Alinear al centro\",\r\n \"dxDiagram-commandAlignRight\": \"Alinear a la derecha\",\r\n \"dxDiagram-commandConnectorLineType\": \"Tipo de línea de conector\",\r\n \"dxDiagram-commandConnectorLineStraight\": \"Recto\",\r\n \"dxDiagram-commandConnectorLineOrthogonal\": \"Ortogonal\",\r\n \"dxDiagram-commandConnectorLineStart\": \"Conector de inicio de línea\",\r\n \"dxDiagram-commandConnectorLineEnd\": \"Conector de final de línea\",\r\n \"dxDiagram-commandConnectorLineNone\": \"Ninguno\",\r\n \"dxDiagram-commandConnectorLineArrow\": \"Flecha\",\r\n \"dxDiagram-commandFullscreen\": \"Pantalla completa\",\r\n \"dxDiagram-commandUnits\": \"Unidades\",\r\n \"dxDiagram-commandPageSize\": \"Tamaño de página\",\r\n \"dxDiagram-commandPageOrientation\": \"Orientación de página\",\r\n \"dxDiagram-commandPageOrientationLandscape\": \"Horizontal\",\r\n \"dxDiagram-commandPageOrientationPortrait\": \"Vertical\",\r\n \"dxDiagram-commandPageColor\": \"Color de página\",\r\n \"dxDiagram-commandShowGrid\": \"Mostrar cuadrícula\",\r\n \"dxDiagram-commandSnapToGrid\": \"Ajustar a la cuadrícula\",\r\n \"dxDiagram-commandGridSize\": \"Tamaño de cuadrícula\",\r\n \"dxDiagram-commandZoomLevel\": \"Nivel de zoom\",\r\n \"dxDiagram-commandAutoZoom\": \"Zoom automático\",\r\n \"dxDiagram-commandFitToContent\": \"Ajustar al contenido\",\r\n \"dxDiagram-commandFitToWidth\": \"Ajustar al ancho\",\r\n \"dxDiagram-commandAutoZoomByContent\": \"Zoom automático por contenido\",\r\n \"dxDiagram-commandAutoZoomByWidth\": \"Zoom automático por ancho\",\r\n \"dxDiagram-commandSimpleView\": \"Vista Simple\",\r\n \"dxDiagram-commandCut\": \"Cortar\",\r\n \"dxDiagram-commandCopy\": \"Copiar\",\r\n \"dxDiagram-commandPaste\": \"Pegar\",\r\n \"dxDiagram-commandSelectAll\": \"Seleccionar todo\",\r\n \"dxDiagram-commandDelete\": \"Eliminar\",\r\n \"dxDiagram-commandBringToFront\": \"Traer al frente\",\r\n \"dxDiagram-commandSendToBack\": \"Enviar al fondo\",\r\n \"dxDiagram-commandLock\": \"Bloquear\",\r\n \"dxDiagram-commandUnlock\": \"Desbloquear\",\r\n \"dxDiagram-commandInsertShapeImage\": \"Insertar imagen...\",\r\n \"dxDiagram-commandEditShapeImage\": \"Cambiar imagen...\",\r\n \"dxDiagram-commandDeleteShapeImage\": \"Eliminar imagen\",\r\n \"dxDiagram-commandLayoutLeftToRight\": \"De izquierda a derecha\",\r\n \"dxDiagram-commandLayoutRightToLeft\": \"De derecha a izquierda\",\r\n \"dxDiagram-commandLayoutTopToBottom\": \"De arriba a abajo\",\r\n \"dxDiagram-commandLayoutBottomToTop\": \"De abajo a arriba\",\r\n\r\n \"dxDiagram-unitIn\": \"pulg.\",\r\n \"dxDiagram-unitCm\": \"cm\",\r\n \"dxDiagram-unitPx\": \"px\",\r\n\r\n \"dxDiagram-dialogButtonOK\": \"Aceptar\",\r\n \"dxDiagram-dialogButtonCancel\": \"Cancelar\",\r\n \"dxDiagram-dialogInsertShapeImageTitle\": \"Insertar Imagen\",\r\n \"dxDiagram-dialogEditShapeImageTitle\": \"Cambiar Imagen\",\r\n \"dxDiagram-dialogEditShapeImageSelectButton\": \"Seleccionar imagen\",\r\n \"dxDiagram-dialogEditShapeImageLabelText\": \"o colocar el archivo aquí\",\r\n\r\n \"dxDiagram-uiExport\": \"Exportar\",\r\n \"dxDiagram-uiProperties\": \"Propiedades\",\r\n \"dxDiagram-uiSettings\": \"Configuración\",\r\n \"dxDiagram-uiShowToolbox\": \"Cuadro de herramientas\",\r\n \"dxDiagram-uiSearch\": \"Buscar\",\r\n \"dxDiagram-uiStyle\": \"Estilo\",\r\n \"dxDiagram-uiLayout\": \"Diseño\",\r\n \"dxDiagram-uiLayoutTree\": \"Árbol\",\r\n \"dxDiagram-uiLayoutLayered\": \"Capas\",\r\n \"dxDiagram-uiDiagram\": \"Diagrama\",\r\n \"dxDiagram-uiText\": \"Texto\",\r\n \"dxDiagram-uiObject\": \"Objeto\",\r\n \"dxDiagram-uiConnector\": \"Conector\",\r\n \"dxDiagram-uiPage\": \"Página\",\r\n\r\n \"dxDiagram-shapeText\": \"Texto\",\r\n \"dxDiagram-shapeRectangle\": \"Rectángulo\",\r\n \"dxDiagram-shapeEllipse\": \"Elipse\",\r\n \"dxDiagram-shapeCross\": \"Cruz\",\r\n \"dxDiagram-shapeTriangle\": \"Triángulo\",\r\n \"dxDiagram-shapeDiamond\": \"Rombo\",\r\n \"dxDiagram-shapeHeart\": \"Corazón\",\r\n \"dxDiagram-shapePentagon\": \"Pentágono\",\r\n \"dxDiagram-shapeHexagon\": \"Hexágono\",\r\n \"dxDiagram-shapeOctagon\": \"Octágono\",\r\n \"dxDiagram-shapeStar\": \"Estrella\",\r\n \"dxDiagram-shapeArrowLeft\": \"Flecha izquierda\",\r\n \"dxDiagram-shapeArrowUp\": \"Flecha arriba\",\r\n \"dxDiagram-shapeArrowRight\": \"Flecha derecha\",\r\n \"dxDiagram-shapeArrowDown\": \"Flecha abajo\",\r\n \"dxDiagram-shapeArrowUpDown\": \"Flecha arriba/abajo\",\r\n \"dxDiagram-shapeArrowLeftRight\": \"Flecha izquierda/derecha\",\r\n \"dxDiagram-shapeProcess\": \"Proceso\",\r\n \"dxDiagram-shapeDecision\": \"Decisión\",\r\n \"dxDiagram-shapeTerminator\": \"Terminador\",\r\n \"dxDiagram-shapePredefinedProcess\": \"Proceso predefinido\",\r\n \"dxDiagram-shapeDocument\": \"Documento\",\r\n \"dxDiagram-shapeMultipleDocuments\": \"Varios documentos\",\r\n \"dxDiagram-shapeManualInput\": \"Entrada manual\",\r\n \"dxDiagram-shapePreparation\": \"Preparación\",\r\n \"dxDiagram-shapeData\": \"Datos\",\r\n \"dxDiagram-shapeDatabase\": \"Base de datos\",\r\n \"dxDiagram-shapeHardDisk\": \"Disco duro\",\r\n \"dxDiagram-shapeInternalStorage\": \"Almacenamiento interno\",\r\n \"dxDiagram-shapePaperTape\": \"Cinta de papel\",\r\n \"dxDiagram-shapeManualOperation\": \"Operación manual\",\r\n \"dxDiagram-shapeDelay\": \"Retraso\",\r\n \"dxDiagram-shapeStoredData\": \"Datos almacenados\",\r\n \"dxDiagram-shapeDisplay\": \"Pantalla\",\r\n \"dxDiagram-shapeMerge\": \"Combinar\",\r\n \"dxDiagram-shapeConnector\": \"Conector\",\r\n \"dxDiagram-shapeOr\": \"O\",\r\n \"dxDiagram-shapeSummingJunction\": \"Unión en Y\",\r\n \"dxDiagram-shapeContainerDefaultText\": \"Contenedor\",\r\n \"dxDiagram-shapeVerticalContainer\": \"Contenedor vertical\",\r\n \"dxDiagram-shapeHorizontalContainer\": \"Contenedor horizontal\",\r\n \"dxDiagram-shapeCardDefaultText\": \"Nombre de persona\",\r\n \"dxDiagram-shapeCardWithImageOnLeft\": \"Tarjeta con imagen a la izquierda\",\r\n \"dxDiagram-shapeCardWithImageOnTop\": \"Tarjeta con imagen en la parte superior\",\r\n \"dxDiagram-shapeCardWithImageOnRight\": \"Tarjeta con imagen a la derecha\",\r\n\r\n \"dxGantt-dialogTitle\": \"Title\",\r\n \"dxGantt-dialogStartTitle\": \"Start\",\r\n \"dxGantt-dialogEndTitle\": \"End\",\r\n \"dxGantt-dialogProgressTitle\": \"Progress\",\r\n \"dxGantt-dialogResourcesTitle\": \"Resources\",\r\n \"dxGantt-dialogResourceManagerTitle\": \"Resource Manager\",\r\n \"dxGantt-dialogTaskDetailsTitle\": \"Task Details\",\r\n \"dxGantt-dialogEditResourceListHint\": \"Edit Resource List\",\r\n \"dxGantt-dialogEditNoResources\": \"No resources\",\r\n \"dxGantt-dialogButtonAdd\": \"Add\",\r\n \"dxGantt-contextMenuNewTask\": \"New Task\",\r\n \"dxGantt-contextMenuNewSubtask\": \"New Subtask\",\r\n \"dxGantt-contextMenuDeleteTask\": \"Delete Task\",\r\n \"dxGantt-contextMenuDeleteDependency\": \"Delete Dependency\",\r\n \"dxGantt-dialogTaskDeleteConfirmation\": \"Deleting a task also deletes all its dependencies and subtasks. Are you sure you want to delete this task?\",\r\n \"dxGantt-dialogDependencyDeleteConfirmation\": \"Are you sure you want to delete the dependency from the task?\",\r\n \"dxGantt-dialogResourcesDeleteConfirmation\": \"Deleting a resource also deletes it from tasks to which this resource is assigned. Are you sure you want to delete these resources? Resources: {0}\",\r\n \"dxGantt-dialogConstraintCriticalViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. This change would conflict with dependency rules. How would you like to proceed?\",\r\n \"dxGantt-dialogConstraintViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. How would you like to proceed?\",\r\n \"dxGantt-dialogCancelOperationMessage\": \"Cancel the operation\",\r\n \"dxGantt-dialogDeleteDependencyMessage\": \"Delete the dependency\",\r\n \"dxGantt-dialogMoveTaskAndKeepDependencyMessage\": \"Move the task and keep the dependency\",\r\n \"dxGantt-dialogConstraintCriticalViolationSeveralTasksMessage\": \"The task you are attempting to move is linked to another tasks by dependency relations. This change would conflict with dependency rules. How would you like to proceed?\",\r\n \"dxGantt-dialogConstraintViolationSeveralTasksMessage\": \"The task you are attempting to move is linked to another tasks by dependency relations. How would you like to proceed?\",\r\n \"dxGantt-dialogDeleteDependenciesMessage\": \"Delete the dependency relations\",\r\n \"dxGantt-dialogMoveTaskAndKeepDependenciesMessage\": \"Move the task and keep the dependencies\",\r\n \"dxGantt-undo\": \"Undo\",\r\n \"dxGantt-redo\": \"Redo\",\r\n \"dxGantt-expandAll\": \"Expand All\",\r\n \"dxGantt-collapseAll\": \"Collapse All\",\r\n \"dxGantt-addNewTask\": \"Add New Task\",\r\n \"dxGantt-deleteSelectedTask\": \"Delete Selected Task\",\r\n \"dxGantt-zoomIn\": \"Zoom In\",\r\n \"dxGantt-zoomOut\": \"Zoom Out\",\r\n \"dxGantt-fullScreen\": \"Full Screen\",\r\n \"dxGantt-quarter\": \"Q{0}\",\r\n \"dxGantt-sortingAscendingText\": \"Orden Ascendente\",\r\n \"dxGantt-sortingDescendingText\": \"Orden Descendente\",\r\n \"dxGantt-sortingClearText\": \"Limpiar Ordenamiento\",\r\n \"dxGantt-showResources\": \"Mostrar Recursos\",\r\n \"dxGantt-showDependencies\": \"Mostrar Dependencias\",\r\n \"dxGantt-dialogStartDateValidation\": \"La fecha de inicio debe ser anterior {0}\",\r\n \"dxGantt-dialogEndDateValidation\": \"La fecha de finalización debe ser posterior {0}\",\r\n\r\n \"dxGallery-itemName\": \"Gallery item\",\r\n\r\n \"dxMultiView-elementAriaRoleDescription\": \"MultiView\",\r\n \"dxMultiView-elementAriaLabel\": \"Use the arrow keys or swipe to navigate between views\",\r\n \"dxMultiView-itemAriaRoleDescription\": \"View\",\r\n \"dxMultiView-itemAriaLabel\": \"{0} of {1}\",\r\n\r\n \"dxSplitter-resizeHandleAriaLabel\": \"Split bar\"\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Observable, forkJoin, of, mergeMap, firstValueFrom } from 'rxjs';\r\nimport { BaseEntitiesResponse, BaseResponse, CompanyInfo, GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { M4UCities } from '../../common/Cities';\r\nimport config from 'devextreme/core/config';\r\nimport { loadMessages, locale } from \"devextreme/localization\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { ResourcesDEVX_HE } from '../../_resources/DEVX.he';\r\nimport { ResourcesDEVX_ES } from '../../_resources/DEVX.es';\r\nimport { DevExpressService } from './devexpress.service';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '../endpoints/system-options.endpoint';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { DefaultRouteParams } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable()\r\nexport class FrameworkService {\r\n constructor(\r\n public systemEndpoint: SystemEndpoint,\r\n public systemOptionsEndpoint: SystemOptionsEndpoint,\r\n private resources: ResourcesService,\r\n private devExpress: DevExpressService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private systemOptionsService: SystemOptionsService,\r\n private navigator: NavigatorService,\r\n private ui: UiService,\r\n private localStorageService: LocalStorageService,\r\n private sysEventsService: SysEventsService) { }\r\n\r\n //Variables\r\n private m_CompanyInfoDict: { [language: string]: CompanyInfo } = {};\r\n private m_bIsFrameworkInitialized: boolean;\r\n\r\n //Checks whether currently building this custom build\r\n public IsCustomBuild(build: string): boolean {\r\n return (this.appConfigService.M4UConfig.customBuild == build ? true : false);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.systemOptionsService.getSystemOption(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.systemOptionsService.getSystemOptionAsBoolean(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public get CompanyInfo(): CompanyInfo {\r\n return this.m_CompanyInfoDict[SysGlobals.Language];\r\n }\r\n\r\n public IsFrameworkInitialized(): boolean {\r\n return this.m_bIsFrameworkInitialized;\r\n }\r\n\r\n public Do(serviceResponse: Observable, bShowSuccessMessage: boolean = true, after?: (afterResponse: BaseResponse | Blob) => void, fail?: (failResponse: BaseResponse | Blob) => void) {\r\n serviceResponse.subscribe((response: BaseResponse | Blob) => {\r\n if (response instanceof Blob) {\r\n after(response);\r\n }\r\n else {\r\n const baseResponse = response as BaseResponse;\r\n if (baseResponse.IsSuccess) {\r\n if (bShowSuccessMessage) this.ui.InfoMessage(this.resources.RC(\"msgSuccess\"));\r\n if (after != undefined) after(response);\r\n }\r\n else {\r\n if (fail != undefined) {\r\n fail(response);\r\n }\r\n else {\r\n if (baseResponse.ResponseCode == 999) {\r\n this.ui.UnexpectedMessage(baseResponse.ResponseMessage);\r\n } else {\r\n this.ui.StopMessage(baseResponse.ResponseMessage);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //Initialize the framework\r\n InitializeFramework(resolve): any {\r\n //Dispatch 'frameworkInitStarted' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('frameworkInitStarted', true, true);\r\n document.dispatchEvent(event);\r\n //Init company info\r\n forkJoin\r\n (\r\n [this.systemEndpoint.GetCompanyInfo(),\r\n this.systemEndpoint.GetSystemOptions(this.GetFirstModuleName())]\r\n ).subscribe(([responseCompanyInfo, responseSystemOptions]) => {\r\n //Map company info\r\n let companyInfo;\r\n if (responseCompanyInfo.IsSuccess) {\r\n companyInfo = responseCompanyInfo.Entity;\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load company info. Please reload the application ${responseCompanyInfo.ResponseMessage}`);\r\n \r\n //Load some defaults, so app can continue at least to show the login screen or work in debug mode, \r\n //where boot process is not stopped at login screen if there are no settings\r\n companyInfo = new CompanyInfo;\r\n companyInfo.DecimalSeparator = \".\";\r\n companyInfo.ThousandsSeparator = \",\";\r\n companyInfo.DateFormatLong = \"dd/MM/yyyy\";\r\n }\r\n this.InitCompanyInfoDictinary(companyInfo);\r\n \r\n //Map system options\r\n if (responseSystemOptions.IsSuccess) {\r\n this.systemOptionsService.setOptions(responseSystemOptions.Entities);\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load system options. Please reload the application ${responseSystemOptions.ResponseMessage}`);\r\n }\r\n \r\n //Initialize language\r\n this.InitLanguage()\r\n \r\n //Initialize devexpress\r\n this.InitializeDevExpress();\r\n \r\n // Initalize injectable components options\r\n this.InitializeInjectableComponentsOptions();\r\n \r\n //Signal we can continue\r\n this.m_bIsFrameworkInitialized = responseCompanyInfo.IsSuccess && responseSystemOptions.IsSuccess;\r\n resolve();\r\n });\r\n\r\n }\r\n\r\n public InitializeDevExpress() {\r\n this.devExpress.InitializeDevExpress(this);\r\n }\r\n\r\n //Handle language change\r\n public InitLanguage() {\r\n //Set default\r\n //Check in local storage\r\n try {\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = this.localStorageService.GetItem(\"Language\");\r\n } catch (e) { }\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n\r\n //Initialize DevExpress translation messages\r\n if (SysGlobals.Language == EnumLanguages.Hebrew) loadMessages(ResourcesDEVX_HE);\r\n if (SysGlobals.Language == EnumLanguages.Spanish) loadMessages(ResourcesDEVX_ES);\r\n locale(SysGlobals.Language.toLowerCase());\r\n\r\n //Initialize devexpress stuff\r\n config(\r\n {\r\n rtlEnabled: SysGlobals.Language == EnumLanguages.Hebrew ? true : false,\r\n forceIsoDateParsing: true\r\n });\r\n\r\n //Init resources\r\n this.resources.InitDictionaries();\r\n\r\n }\r\n\r\n InitCompanyInfoDictinary(companyInfo: CompanyInfo) {\r\n let companyInfoHebrew = { ...companyInfo };\r\n companyInfoHebrew.NumberGeneral = `${companyInfoHebrew.NumberGeneral};${companyInfoHebrew.NumberGeneral}-`;\r\n companyInfoHebrew.NumberPercent = `${companyInfoHebrew.NumberPercent};${companyInfoHebrew.NumberPercent}-`;\r\n companyInfoHebrew.NumberPrice = `${companyInfoHebrew.NumberPrice};${companyInfoHebrew.NumberPrice}-`;\r\n companyInfoHebrew.NumberQuantity = `${companyInfoHebrew.NumberQuantity};${companyInfoHebrew.NumberQuantity}-`;\r\n companyInfoHebrew.NumberRate = `${companyInfoHebrew.NumberRate};${companyInfoHebrew.NumberRate}-`;\r\n companyInfoHebrew.NumberSum = `${companyInfoHebrew.NumberSum};${companyInfoHebrew.NumberSum}-`;\r\n\r\n this.m_CompanyInfoDict[EnumLanguages.Hebrew] = companyInfoHebrew;\r\n this.m_CompanyInfoDict[EnumLanguages.English] = companyInfo;\r\n this.m_CompanyInfoDict[EnumLanguages.Spanish] = companyInfo;\r\n }\r\n\r\n GetCities(): Observable {\r\n var oResult = new BaseEntitiesResponse;\r\n oResult.IsSuccess = true;\r\n oResult.Entities = M4UCities.map((element) => {\r\n return new GenericListEntity(element, element);\r\n });\r\n\r\n return of(oResult);\r\n }\r\n\r\n NavigateDefault(): Promise {\r\n //SysGlobals.LastNavigationUrl = SysGlobals.LastNavigationParams = undefined;\r\n\r\n return firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(this.sessionService.UserInfos[0])\r\n .pipe(\r\n mergeMap(defaultRouteParams => {\r\n if (!defaultRouteParams || !defaultRouteParams.Route) {\r\n defaultRouteParams = new DefaultRouteParams;\r\n defaultRouteParams.Route = '/system/login';\r\n };\r\n\r\n return this.navigator.Navigate([defaultRouteParams.Route], defaultRouteParams.Params).then((result) => {\r\n this.sysEventsService.NavigateDefault(result);\r\n return Promise.resolve(true);\r\n });\r\n })\r\n )\r\n );\r\n }\r\n\r\n private InitializeInjectableComponentsOptions() {\r\n this.appConfigService.AppConfig.GetInjectableComponentOptions().subscribe((options) => {\r\n SysGlobals.InjectableComponentsOptions = options;\r\n });\r\n }\r\n\r\n private GetFirstModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n\r\n//Entry point for framework initialization\r\nexport function OnInitializeFramework(): () => Promise {\r\n //Initialize stuff that require pulling from the server\r\n return (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n var service = AppInjector.get(FrameworkService);\r\n service.InitializeFramework(resolve);\r\n });\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport { ResourcesService } from './resources.service';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LanguageService {\r\n\r\n private _languageSubject = new ReplaySubject(1);\r\n public Language$ = this._languageSubject.asObservable();\r\n\r\n constructor(private frameworkService: FrameworkService,\r\n private resourcesService: ResourcesService,\r\n private A: ServiceBagService,\r\n private localStorageService: LocalStorageService) {}\r\n\r\n SetLanguage(language: string) {\r\n if (language == undefined) return;\r\n //Check if selected language resources file is loaded\r\n if (!this.resourcesService.IsSelectedLanguageLoaded(language)) {\r\n this.A.UI.StopMessage(`Selected language ${language} file is not exists in project.`);\r\n throw (`Selected language ${language} file is not exists in project.`);\r\n //return;\r\n }\r\n\r\n if (SysGlobals.Language !== language) {\r\n SysGlobals.Language = language; // TODO: REMOVE THAT\r\n this.localStorageService.SetItem(\"Language\", language);\r\n \r\n this.frameworkService.InitLanguage();\r\n this.frameworkService.InitializeDevExpress();\r\n }\r\n\r\n this._languageSubject.next(language);\r\n }\r\n\r\n GetLanguage(): string {\r\n switch (SysGlobals.Language) {\r\n case EnumLanguages.Hebrew: {\r\n return \"he\";\r\n }\r\n case EnumLanguages.Spanish: {\r\n return \"es-ES\";\r\n }\r\n default: {\r\n return \"en-US\";\r\n }\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n private _localStoragePrefix: string;\r\n\r\n constructor(private apiGatewayService: APIGatewayService,) {\r\n this._localStoragePrefix = this.apiGatewayService.GetAPIURL();\r\n this.MigrateOldStorage();\r\n }\r\n\r\n SetItem(key: string, value: string) {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n localStorage.setItem(prefixedKey, value);\r\n }\r\n\r\n GetItem(key: string): string {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n return localStorage.getItem(prefixedKey);\r\n }\r\n\r\n RemoveItem(key: string) {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n localStorage.removeItem(prefixedKey);\r\n }\r\n\r\n Clear() {\r\n Object.keys(localStorage).forEach((key) => {\r\n if (key.startsWith(this._localStoragePrefix)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n }\r\n\r\n private GetPrefixedKey(key: string): string {\r\n return `${this._localStoragePrefix}${key}`;\r\n }\r\n\r\n private MigrateOldStorage() {\r\n if(this.GetItem('migratedOldStorage')) {\r\n return;\r\n }\r\n\r\n Object.keys(localStorage).forEach((key) => {\r\n if (!key.startsWith(this._localStoragePrefix)) {\r\n const newKey = this.GetPrefixedKey(key);\r\n const value = localStorage.getItem(key);\r\n\r\n if (value !== null) {\r\n localStorage.setItem(newKey, value);\r\n }\r\n }\r\n });\r\n\r\n this.SetItem('migratedOldStorage', 'true');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\nimport { LoginParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { LoginService } from './login.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumLoginSecureKeyTypes } from './sysenums.enum';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable()\r\nexport class LoginGuard implements CanActivate {\r\n constructor(\r\n private sessionService: SessionService,\r\n private navigator: NavigatorService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n if (this.sessionService.IsLoggedIn) return of(true);\r\n\r\n const [returnUrl, returnUrlParamsSessionID] = this.getParams(state.url, 'SessionID', true) ;\r\n\r\n const currentSessionID = this.sessionService.GetSessionID();\r\n const paramsSessionID = this.navigator.GetQueryParams(this.navigator.IsCurrentRouteWindow()).SessionID;\r\n const sessionID = paramsSessionID || returnUrlParamsSessionID || currentSessionID;\r\n if (!Utils.IsEmpty(sessionID)) {\r\n const loginParams = new LoginParams;\r\n loginParams.SecureKey = sessionID;\r\n loginParams.SecureKeyType = EnumLoginSecureKeyTypes.Session;\r\n return this.loginService.DoLogin(loginParams, !!currentSessionID, !currentSessionID, \r\n () => this.navigator.NavigateByUrl(returnUrl), () => this.goToLoginPage(returnUrl));\r\n }\r\n\r\n this.goToLoginPage(returnUrl);\r\n return of(false);\r\n }\r\n\r\n private goToLoginPage(returnUrl: string) {\r\n this.navigator.Navigate(['/system/login'], { Language: SysGlobals.Language, ReturnUrl: returnUrl });\r\n }\r\n\r\n private getParams(url: string, key: string, isRemove: boolean = false) {\r\n const valueMatch = url.match(new RegExp('(._)?' + key + '=([^&]+)'));\r\n const value = valueMatch ? valueMatch[2] : null;\r\n \r\n if (isRemove) {\r\n const paramRegex = `(._)?${key}=[^&]+`;\r\n url = url.replace(new RegExp(`(\\\\?${paramRegex}$)|(&${paramRegex}$)`), ''); //ends url, just remove\r\n url = url.replace(new RegExp(`\\\\?${paramRegex}&`), '?'); // starts of query params\r\n url = url.replace(new RegExp(`&${paramRegex}&`), '&'); // middle of query params\r\n }\r\n \r\n return [url, value];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, WebAPILoginResponse } from '@base/entities/BaseEntities';\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { firstValueFrom, Observable, of } from 'rxjs';\r\nimport { map, mergeMap, tap } from 'rxjs/operators';\r\nimport { LoginEndpoint } from './../endpoints/login.endpoint';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { RC } from './resources.service';\r\nimport { RouteHistoryService } from './route-history.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumCheckCredentialsResult } from './sysenums.enum';\r\nimport { ClientFingerprintService } from './client-fingerprint.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable()\r\nexport class LoginService {\r\n\r\n constructor(private Navigator: NavigatorService,\r\n private LoginEndpoint: LoginEndpoint,\r\n private Framework: FrameworkService,\r\n private SessionService: SessionService,\r\n private UI: UiService,\r\n private routeHistoryService: RouteHistoryService,\r\n private appConfigService: AppConfigService,\r\n private clientFingerprintService: ClientFingerprintService\r\n ) { }\r\n\r\n DoLogin(Params: LoginParams, bExistingSession: boolean, bIsSaveCredentials: boolean, fAfterInit: () => void, fLoginFailed: (responseSession: BaseEntityResponse) => void = null, mfaCodeSent: (deliveryOption: EnumNotificationDeliveryOptions) => void = null) {\r\n Params.ClientFingerprint = this.clientFingerprintService.GetClientFingerprint();\r\n return this.LoginEndpoint.Login(Params).pipe(\r\n mergeMap((response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n switch (response.Entity.CheckResult) {\r\n case EnumCheckCredentialsResult.Success:\r\n return this.OnLoginSuccess(response, bExistingSession, bIsSaveCredentials, Params.Language, fAfterInit);\r\n case EnumCheckCredentialsResult.PasswordExpired:\r\n this.Navigator.Navigate(['/system/passwordchangeexpired'], { UserName: Params.UserName });\r\n return of(false);\r\n case EnumCheckCredentialsResult.Failure:\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFAEmailSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.Email);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFASMSSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.SMS);\r\n return of(false);\r\n case EnumCheckCredentialsResult.NoMID:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.Navigator.Navigate(['/system/midstore']);\r\n return of(false);\r\n case EnumCheckCredentialsResult.SessionFrozen:\r\n this.UI.StopMessage(RC('errorSessionIsFrozen'));\r\n if (fLoginFailed) fLoginFailed(response);\r\n //this.Navigator.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n return of(false);\r\n default:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n })\r\n );\r\n }\r\n\r\n //Handle succesfull login\r\n private OnLoginSuccess(response: BaseEntityResponse, bExistingSession: boolean, bIsSaveCredentials: boolean, sLanguage: string, fAfterInit: () => void) {\r\n //If system options were not loaded, prevent logging in\r\n //Do this check only if login was successfull, so that if not the regular message is displayed\r\n if (!this.Framework.IsFrameworkInitialized()) {\r\n this.UI.UnexpectedMessage(RC('errorNotInitialized'));\r\n return of(false);\r\n }\r\n\r\n //Save session id and language in local storage, or clear if saving was not specified\r\n if (bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.SaveSessionCredentials(response.Entity.SessionID, response.Entity.DisplayUserName);\r\n }\r\n\r\n if (!bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n //Set session\r\n return this.SessionService.SetSession(response.Entity, () => {\r\n this.routeHistoryService.ClearHistory();\r\n this.routeHistoryService.StartSaveHistory();\r\n fAfterInit && fAfterInit();\r\n }, () => {\r\n this.Navigator.Navigate(['/system/login']);\r\n });\r\n }\r\n\r\n //Clear invalid sessionid, and let the user login on his own\r\n private OnLoginBySessionFailed() {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n DoLogout(fAfterLogout: () => void) {\r\n this.LoginEndpoint.Logout()\r\n .pipe(\r\n tap(response => {\r\n //Even if there is an error, go to login screen anyway, so the user won't be stuck\r\n if (!response.IsSuccess) this.UI.UnexpectedMessage(response.ResponseMessage);\r\n }))\r\n .subscribe(() => {\r\n this.SessionService.SetSession(undefined, null, () => {\r\n this.routeHistoryService.ClearHistory();\r\n fAfterLogout && fAfterLogout();\r\n });\r\n });\r\n }\r\n\r\n ImpersonateLogin(credentialID: number): Observable {\r\n return this.LoginEndpoint.ImpersonateLogin(credentialID).pipe(mergeMap(async (response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n response.ResponseMessage && this.UI.StopMessage(response.ResponseMessage);\r\n return false;\r\n }\r\n\r\n const defaultRouteParams = await firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(response.Entity.UserInfo[this.ModuleName]));\r\n if (!defaultRouteParams || !defaultRouteParams.Route) return false;\r\n\r\n const params = { ...defaultRouteParams.Params || {}, SessionID: response.Entity.SessionID };\r\n const url = this.Navigator.GetUrl(defaultRouteParams.Route, params);\r\n this.Navigator.NavigateExternal(url);\r\n return true;\r\n }));\r\n }\r\n\r\n private get ModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Route, Router } from '@angular/router';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { ScreenService } from './screen.service';\r\nimport { SessionService } from './session.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n/*\r\nThe idea of navigation process is as follows:\r\n1. Get the segments from the function params. Then remove all prefixes (randomizers and module name)\r\n2. Get the target page and find the route in the \"clean\" routes (already prepared, without any prefixes)\r\n3. Figure out is that route is a window or not\r\n4. Add query params to the route\r\n5. Figure out the module name by route component\r\n6. Add page randomizer prefix and module name to the route\r\n7. Navigate to the page or window\r\n*/\r\n\r\nexport const M4URouteRandomizers: string[] =\r\n [\r\n 'X_',\r\n 'Y_',\r\n 'Z_',\r\n 'W_',\r\n 'T_'\r\n ];\r\n\r\n@Injectable()\r\nexport class NavigatorService {\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private sysEvents: SysEventsService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private screenService: ScreenService) { }\r\n\r\n public IsCurrentRouteWindow(routeUrl?: string) {\r\n const windowIndex = window.location.pathname.indexOf('window:');\r\n return windowIndex > -1 || (routeUrl && routeUrl.indexOf('window:') > -1);\r\n }\r\n\r\n //Return custom data attached to this route\r\n public GetCustomRouteData() {\r\n return this.activatedRoute.snapshot.data;\r\n }\r\n\r\n public GetCurrentRouteWithoutParams() {\r\n\r\n let route = this.activatedRoute;\r\n let url = '';\r\n\r\n // get full route like '/pages/general/notification-template'\r\n while (route?.snapshot?.url.length > 0) {\r\n url = `/${route.snapshot.url[0].path}${url}`;\r\n route = route.parent;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n //Return current query params\r\n private GetQueryParamsInternal(): any {\r\n const params = this.activatedRoute.snapshot.queryParams;\r\n const newParams = {};\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n newParams[key] = this.getParamValue(value);\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n //Return query params that are relevant for the route, renamed back to their original names\r\n public GetQueryParams(bIsWindow: boolean): any {\r\n const existingParams = this.GetQueryParamsInternal();\r\n\r\n //Remove prefixes and copy to new object\r\n return this.GetQueryParamsWithoutPrefixes(existingParams, bIsWindow);\r\n }\r\n\r\n public GetQueryParamsWithoutPrefixes(params: any, bIsWindow: boolean): any {\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in params) {\r\n let paramKey = key;\r\n if (key.startsWith(sPrefix)) paramKey = key.substring(sPrefix.length);\r\n const value = params[key] === 'false' ? false : params[key] === 'true' ? true : params[key];\r\n Object.assign(newParams, { [paramKey]: value });\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n public ClearQueryParams() {\r\n this.activatedRoute.snapshot.queryParams = {};\r\n }\r\n\r\n //Return the prefix string for query params for the route\r\n private GetQueryParamsPrefix(bIsWindow: boolean): string {\r\n return bIsWindow ? 'W_' : 'P_';\r\n }\r\n\r\n\r\n //Return the params for the route\r\n public GetRouteParams(): any {\r\n const params = this.activatedRoute.snapshot.params;\r\n return Object.keys(params).length ? params : this.GetQueryParams(this.IsCurrentRouteWindow());\r\n }\r\n\r\n //Return current route\r\n //use window since activatedRoute is not always correct, due to DI being on the component level, \r\n //and some components are not related to route\r\n public GetCurrentRoute(): string {\r\n const sLocation: string = `${window.location.pathname}${window.location.search}`;\r\n return this.FixDeploymentLocation(sLocation);\r\n }\r\n\r\n //Main navigation function\r\n //Special value - params will be null to signal closing the window route\r\n public Navigate(params: any[], optionalParams?: any, ModuleName?: any) {\r\n\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n\r\n const urlTree = this.GetUrlTree(params, optionalParams, ModuleName);\r\n return this.router.navigateByUrl(urlTree);\r\n\r\n }\r\n\r\n public NavigateByUrl(url: string) {\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n\r\n return this.router.navigateByUrl(url);\r\n }\r\n\r\n private GetUrlTree(params: any[], optionalParams?: any, ModuleName?: any) {\r\n //Start as an array\r\n let segments: string[];\r\n if (typeof params === 'string') segments.push(params); else segments = params;\r\n\r\n if (segments && !segments.some(x => x !== '')) return;\r\n\r\n //Clean, and put all segments in onc nice string array\r\n let segmentsClean: string[] = [];\r\n let sTargetPage: string;\r\n if (segments != null) {\r\n segments.forEach(sSegment => {\r\n sSegment = sSegment && sSegment.toString();\r\n if (sSegment) {\r\n sSegment.split('/').forEach(sPart => {\r\n if (sPart != null && sPart != '') {\r\n sPart = sPart.replace('(', '').replace(')', '');\r\n\r\n //Remove randomizers from route path\r\n const sPrefix = M4URouteRandomizers.find(item => sPart.startsWith(item));\r\n if (sPrefix) sPart = sPart.substring(sPrefix.length);\r\n\r\n //Remove module prefix from route path\r\n const modulePrefix = this.appConfigService.AppConfig.ModuleName.split(',').find(x => sPart.startsWith(x));\r\n if (modulePrefix) sPart = sPart.substring(modulePrefix.length + 1);\r\n\r\n segmentsClean.push(sPart);\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Set target page we are navigating to\r\n const generalIndex = segmentsClean.indexOf('general');\r\n sTargetPage = generalIndex >= 0 ? segmentsClean[2] : segmentsClean[1];\r\n } else {\r\n segmentsClean = null;\r\n sTargetPage = null;\r\n }\r\n\r\n //Find the relevant route by the 2nd segment - match it with the route first segment\r\n //Check the router outlet to determine if its a window\r\n let bIsWindow: boolean;\r\n let route;\r\n if (sTargetPage != null) {\r\n //Get route by target page\r\n const cleanRoutes = this.GetCleanRoutes(this.router.config);\r\n const targetRoutes = cleanRoutes.filter(x => x.path.split('/')[0] == sTargetPage);\r\n if (targetRoutes.length > 1) {\r\n route = optionalParams && Object.keys(optionalParams).some(x => x == 'ShowAsWindow') && optionalParams['ShowAsWindow']\r\n ? targetRoutes.find(x => x.outlet == 'window')\r\n : targetRoutes.find(x => !x.outlet);\r\n } else if (targetRoutes.length === 1) {\r\n route = targetRoutes[0];\r\n }\r\n bIsWindow = (route != undefined && route.outlet == 'window' ? true : false);\r\n } else {\r\n bIsWindow = true;\r\n }\r\n\r\n //Rename query params that we need to pass according to the route we use - window/primary\r\n //Build a new structure in order not to modify the passed in param\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in optionalParams) {\r\n if (key === 'ShowAsWindow') continue;\r\n Object.assign(newParams, { [sPrefix + key]: this.getParam(optionalParams[key]) });\r\n }\r\n\r\n //Add query params from existing route so that we get a combined list\r\n if (optionalParams == undefined) optionalParams = {};\r\n\r\n //Get module name if not specified, from the current route\r\n if (ModuleName == undefined) {\r\n const routeComponent = (route ? route.component : this.activatedRoute.snapshot.component) as any as IBaseModuleComponent;\r\n ModuleName = routeComponent && routeComponent.ModuleName ? `${routeComponent.ModuleName}_` : '';\r\n } else {\r\n ModuleName = ModuleName + '_';\r\n }\r\n\r\n //Remove pages, and set the prefix\r\n let routePrefix = '';\r\n if (segmentsClean != null) {\r\n const pagesIndex = segmentsClean.indexOf('pages');\r\n if (pagesIndex >= 0) {\r\n routePrefix = segmentsClean.shift();\r\n }\r\n //Add general to primary outlet\r\n const generalIndex = segmentsClean.indexOf('general');\r\n if (generalIndex >= 0) {\r\n routePrefix = `${routePrefix}/${segmentsClean.shift()}`;\r\n }\r\n //Add randomizer and module name prefixes to the page route\r\n if (pagesIndex >= 0) {\r\n segmentsClean[0] = this.GetPagesPrefix() + ModuleName + segmentsClean[0];\r\n }\r\n } else {\r\n const currentRoute = this.GetCurrentRoute();\r\n const segments = currentRoute.replace(/^\\/|\\/$/g, '').split('/');\r\n\r\n routePrefix = segments.shift();\r\n //Add general to primary outlet\r\n if (segments.indexOf('general') >= 0) {\r\n routePrefix = `${routePrefix}/${segments.shift()}`;\r\n }\r\n }\r\n const windowPrimaryOutlet = [];\r\n let routeSnapshot = this.router.routerState.snapshot.root;\r\n while (routeSnapshot.firstChild) {\r\n routeSnapshot = routeSnapshot.firstChild;\r\n windowPrimaryOutlet.push(routeSnapshot.url.map(x => x.path).join('/'));\r\n }\r\n\r\n const primaryOutlet = bIsWindow ? windowPrimaryOutlet.join('/').replace(`${routePrefix}/`, '') : segmentsClean;\r\n const windowOutlet = bIsWindow ? segmentsClean : null;\r\n return this.router.createUrlTree([routePrefix, { outlets: { primary: primaryOutlet, window: windowOutlet } }],\r\n { queryParams: newParams });\r\n }\r\n\r\n FixDeploymentLocation(sURL: string): string {\r\n const sPath : string = this.appConfigService.M4UConfig.deploymentLocation;\r\n if(!sURL || sPath == null) return sURL;\r\n const regex = new RegExp(sPath, 'i');\r\n return sURL.replace(regex, '');\r\n }\r\n\r\n\r\n //Get routes from config without randomizer prefixes and module names\r\n public GetCleanRoutes(config: Route[]): Route[] {\r\n let routes = [];\r\n for (let i = 0; i < config.length; i++) {\r\n //Copy route object to avoid modifying real route config\r\n const route = { ...config[i] };\r\n //Remove randomizer prefix from route path\r\n M4URouteRandomizers.forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(x, '');\r\n });\r\n //Remove module name prefix from route path\r\n this.appConfigService.AppConfig.ModuleName.split(',').forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(`${x}_`, '');\r\n });\r\n //Add to \"clean\" routes collection\r\n routes.push(route);\r\n if (route.children) {\r\n //Get \"clean\" route children\r\n const childrenRoutes = this.GetCleanRoutes(route.children);\r\n //Add \"clean\" route children to \"clean\" routes collection\r\n routes = [...routes, ...childrenRoutes];\r\n }\r\n }\r\n //Remove duplicates from \"clean\" routes collection that appeared because of randomizers prefixes\r\n routes = routes.filter((value, index, self) => self.map(x => {\r\n return { path: x.path, outlet: x.outlet };\r\n }).findIndex(x => x.path === value.path && x.outlet === value.outlet) === index);\r\n return routes;\r\n }\r\n\r\n //Switch routes to allow same page navigation\r\n private GetPagesPrefix(): string {\r\n SysGlobals.NavigationSequence = SysGlobals.NavigationSequence == undefined ? 1 : SysGlobals.NavigationSequence + 1;\r\n return M4URouteRandomizers[SysGlobals.NavigationSequence % M4URouteRandomizers.length];\r\n }\r\n\r\n //Send an event to force reload of component\r\n //For now, this should not be used, as same route navigation works fine\r\n public ReloadComponent(sComponentName: string) {\r\n this.sysEvents.OnReloadComponent.emit(sComponentName);\r\n }\r\n\r\n\r\n //Reload current page\r\n public ReloadApplication() {\r\n this.router.navigateByUrl(this.GetCurrentRoute());\r\n }\r\n\r\n //Go to previous page - close the window\r\n public NavigateBack() {\r\n return this.Navigate(null);\r\n }\r\n\r\n public GetUrl(route: string, queryParams: any) {\r\n const params = {};\r\n const sPrefix = this.GetQueryParamsPrefix(false);\r\n Object.keys(queryParams).forEach(key => {\r\n Object.assign(params, { [sPrefix + key]: this.getParam(queryParams[key]) });\r\n });\r\n\r\n const baseUrl = window.location.href.replace(this.router.url, '');\r\n const urlTree = this.GetUrlTree([route], queryParams);\r\n const url = this.router.serializeUrl(urlTree);\r\n return `${baseUrl}${url}`;\r\n }\r\n\r\n //Load external URL in a separate form\r\n public NavigateExternal(sURL: string, bNewWindow: boolean = true) {\r\n if (bNewWindow) {\r\n window.open(sURL, '_blank');\r\n } else {\r\n window.location.href = sURL;\r\n }\r\n }\r\n\r\n public NavigatePhone(sPhone: string) {\r\n this.NavigateExternal(`tel:${sPhone}`);\r\n }\r\n\r\n public NavigateEmail(sEmail: string) {\r\n this.NavigateExternal(`mailto:${sEmail}`);\r\n }\r\n\r\n public NavigateGoogle(sQuery: string) {\r\n this.NavigateExternal(`https://www.google.com/search?q=${sQuery}`);\r\n }\r\n\r\n public NavigateWhatsApp(sPhone: string) {\r\n const sClean = sPhone.replace('-', '').replace(' ', '').replace('.', '');\r\n this.NavigateExternal(`https://api.whatsapp.com/send?phone=972${sClean}`);\r\n }\r\n\r\n public NavigateWaze(sAddress: string) {\r\n if (this.screenService.IsMobile()) {\r\n this.NavigateExternal(`waze://?q=${sAddress}`);\r\n }\r\n\r\n this.NavigateExternal(`https://waze.com/ul?q=${sAddress}&navigate=yes`);\r\n }\r\n\r\n public IsWhatsAppPhone(sPhone: string): boolean {\r\n return (!Utils.IsEmpty(sPhone) && sPhone.startsWith('05'));\r\n }\r\n\r\n private getParam(param: any): any {\r\n if (Utils.IsEmpty(param) || Utils.IsEmpty(param.getFullYear)) return param;\r\n\r\n const date = param as Date;\r\n\r\n return date.toISOString();\r\n }\r\n\r\n private getParamValue(param: any): any {\r\n if (Utils.IsEmpty(param)) return param;\r\n if (Array.isArray(param) || (typeof param === 'string' && !/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/.test(param))) return param;\r\n\r\n const parts = (param as string).split('-');\r\n return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\r\n }\r\n}\r\n\r\nexport function PrepareRoutes(routes: Route[]): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n //Add randomizer prefixes to the routes\r\n M4URouteRandomizers.forEach((oRandomizer) => oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, oRandomizer))));\r\n return result;\r\n}\r\n\r\nexport function GetRoutesWithPrefix(routes: Route[], prefix: string): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n\r\n //Add any prefix to the routes\r\n oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, prefix)));\r\n return result;\r\n}\r\n\r\n//Add any prefix to the single route\r\nexport function GetRouteWithPrefix(oRoute: Route, prefix: string): Route {\r\n //Copy route object to avoid modifying real route\r\n const preparedRoute = { ...oRoute };\r\n //Add prefix to the route path\r\n preparedRoute.path = prefix + preparedRoute.path;\r\n return preparedRoute;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { ReplaySubject, Subscription } from 'rxjs';\r\nimport { PushMessageEndpoint } from '../endpoints/push-message.endpoint';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n\r\n private _notificationUnreadSubject = new ReplaySubject(1);\r\n public readonly NotificationUnread$ = this._notificationUnreadSubject.asObservable();\r\n\r\n private _notificationsSubject = new ReplaySubject(1);\r\n public readonly Notifications$ = this._notificationsSubject.asObservable();\r\n\r\n private _notificationReadSubscription: Subscription;\r\n private _notificationUnReadSubscription: Subscription;\r\n private _timerId: any;\r\n\r\n constructor(private pushMessageEndpoint: PushMessageEndpoint,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n public Start() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this.LoadPushMessagesUnread();\r\n this._notificationReadSubscription = this.pushMessageEndpoint.NotificationRead$\r\n .subscribe((result: boolean) => result && this.LoadPushMessagesUnread());\r\n }\r\n\r\n public LoadPushMessagesUnread() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this._notificationUnReadSubscription = this.pushMessageEndpoint.GetPushMessagesUnread().subscribe((response) => {\r\n if (!response.IsSuccess) return;\r\n \r\n const unreadPushMessages = response.Data as any;\r\n\r\n this._notificationUnreadSubject.next(unreadPushMessages.Item1);\r\n this._notificationsSubject.next(unreadPushMessages.Item2);\r\n\r\n !this._timerId && (this._timerId = setInterval(() => this.LoadPushMessagesUnread(), 60000));\r\n })\r\n }\r\n\r\n public Stop(): void {\r\n clearInterval(this._timerId);\r\n this._notificationReadSubscription && !this._notificationReadSubscription.closed && this._notificationReadSubscription.unsubscribe();\r\n this._notificationUnReadSubscription && !this._notificationUnReadSubscription.closed && this._notificationUnReadSubscription.unsubscribe();\r\n }\r\n}","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptionDataTypes,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_EN =\r\n{\r\n Pages:\r\n {\r\n login: 'System Login',\r\n logout: 'Log off',\r\n credentials_activity_status: 'User activity status',\r\n notificationshistory: 'Notifications report',\r\n notification_dispatches: 'Notification dispatches',\r\n notification_servers: 'Notification servers',\r\n notification_templates: 'Notification templates',\r\n notifications: 'Notifications',\r\n system_options: 'System options',\r\n credential_login_history: \"Login history Report\",\r\n request_history: \"Request history\",\r\n credentials_report: 'Credentials report',\r\n credentials_creation: 'New credentials assignment',\r\n data_views: 'Database views management',\r\n menu: 'Menu',\r\n remote_request_history: \"Remote request history\",\r\n NotificationViewComponent: 'Notification',\r\n PrintBoxDialogComponent: 'Print',\r\n SignBoxDialogComponent: 'Sign Document',\r\n ImageBoxDialogComponent: 'Image',\r\n PhotoBoxDialogComponent: 'Photo',\r\n PasswordManageComponent: 'Credentials management',\r\n CredentialsActivityStatusComponent: 'User activity status',\r\n NotificationsHistoryComponent: 'Notifications report',\r\n PreviewDialogComponent: 'Preview',\r\n NotificationDispatchComponent: 'Notification dispatch',\r\n NotificationDispatchListComponent: 'Notification dispatches',\r\n NotificationServerComponent: 'Notification server',\r\n NotificationServerListComponent: 'Notification servers',\r\n NotificationTemplateListComponent: 'Notification templates',\r\n NotificationTemplateComponent: 'Notification template',\r\n HtmlBoxDialogComponent: 'HTML Editor',\r\n NotificationTestDialogComponent: 'Notification test',\r\n NotificationPreviewDialogComponent: 'Notification preview',\r\n SystemOptionsComponent: 'System options',\r\n AddSystemOptionDialogComponent: 'Add option',\r\n BarcodeBoxDialogComponent: 'Scan barcode/QR-code',\r\n CredentialLoginHistoryComponent: \"Login History Report\",\r\n RequestHistoryListComponent: \"Request history\",\r\n RequestHistoryComponent: \"Request\",\r\n RemoteRequestHistoryListComponent: \"Remote request history\",\r\n RemoteRequestHistoryComponent: \"Remote request\",\r\n WelcomeUserDialogComponent: \"Welcome message\",\r\n HistoryViewComponent: 'Document changes history',\r\n SystemCredentialsComponent: 'Credentials Report',\r\n SystemCredentialsCreationComponent: 'New credentials assignment',\r\n WelcomeMessageConfigDialogComponent: 'Welcome Notification',\r\n DataViewListComponent: 'Data Views',\r\n MenuButtonListComponent: 'Main Menu',\r\n ShareDialogComponent: 'Share',\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"Hebrew\",\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"English\"\r\n },\r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"Spanish\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS'\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: 'None',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: 'Preview only',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: 'Edit prefix',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: 'Edit body',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'Phone',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'Don\\'t Send',\r\n ID: 4,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n SortOrder: 1,\r\n index: 0,\r\n text: 'Email',\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n SortOrder: 2,\r\n index: 1,\r\n text: 'SMS',\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push message',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'Push message',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: 'Share',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'Share',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"Draft\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"Sending\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"Failure\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"Sent\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"Email\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"Excel\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"Print\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"To show\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"Showed\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'Application Name Hebrew'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'Application Name English'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'Application URL'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'Session timeout'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'Session expiry'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'Enable request logging'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'Enable remote logging'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'Show expired timeout alert',\r\n DataType: EnumSystemOptionDataTypes.Boolean,\r\n SectionName: 'Framework'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'Show almost expired timeout alert'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'Support credentials management'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'Supported user welcome'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'Support password change'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'Support password recovery'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'Support login by otp'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'Support login by password'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'Auto create credentials'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'Auto create credentials type'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'Require tax number for OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'Password change interval, days'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'Password complexity length'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'Password complexity minimum char symbols'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'Password complexity minimum digit symbols'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'Bad login. Attempt before lock'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'Bad login. Attempts check interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'Bad login. Attempt lockout interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'XFrame blocking options'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'Deployed behind load balancer / proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'Support Email notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'Support SMS notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'Support WhatsApp notification method'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'Remote Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'Notifications Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'Sessions Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: 'Session Fingerprint Freeze Timeout (mins)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"All\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"Failure\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"Failure\"\r\n },\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"Field changed\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"Row added\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"Row deleted\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Yes'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: 'None'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: 'Report'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: 'Entity'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Warning'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"Language\",\r\n lblUserName: \"User name\",\r\n lblPassword: \"Password\",\r\n titleLogin: \"System Login\",\r\n btnLogin: \"Login\",\r\n btnLogout: 'Logout',\r\n btnChangePassword: 'Change password',\r\n btnContactUs: \"Contact us\",\r\n btnRecoverPassword: 'Forgot password',\r\n lblSaveCredentials: 'Remember Me',\r\n titleLogout: \"Logoff\",\r\n titleLogoutLong: \"Logged off succesfully\",\r\n titleLogoutLast: \"You are being redirected to the login screen\",\r\n titleSessionExpiredTitle: \"Session Expired\",\r\n titleSessionExpired: \"You have been logged off due to inactivity or a change in user credentials on the server. Please log in again \",\r\n titleChangePasswordTitle: \"Change password\",\r\n titleChangePassword: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff\",\r\n titleChangePasswordTitle2: \"Change expired password\",\r\n titleException: \"System error\",\r\n titleExceptionLong: \"Error details are displayed below. Please send them to the system administrator.\\nUnexpected error has occured:\",\r\n titleComingSoonTitle: \"This feature is coming soon\",\r\n titlePasswordChanged: 'The password has been changed succesfully. Please use your new password to login again',\r\n titleIdentification: 'User identification',\r\n titlePasswordEntry: 'New password entry',\r\n titleRecoverPasswordTitle: 'Forgot password recovery',\r\n titleWelcomePasswordTitle: 'First system login',\r\n titleRecoverPassword1: 'Enter your user name',\r\n titleRecoverPassword2: 'You can recover your forgotten password, as long as you have access to the email or phone that is saved in your account',\r\n titleRecoverPassword3: 'To change the password please enter the verification code sent to you',\r\n titleRecoverPassword4: 'Enter a new password. The password should be a strong one, and follow the rules set by your IT staff',\r\n titleWelcomePassword2: 'Welcome! Please enter the username and the verification code you have received, in order to proceede to setting up your new password',\r\n titleWelcomePassword3: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff. From now on, you will use this password to enter the system\",\r\n btnReEntry: \"Re-Login\",\r\n genOK: 'OK',\r\n genYes: \"Yes\",\r\n genNo: \"No\",\r\n genCancel: \"Cancel\",\r\n genNoData: \"No data exists\",\r\n genPrint: 'Print',\r\n genSign: 'Sign',\r\n genReset: 'Reset',\r\n genTakePhoto: 'Take Photo',\r\n genSavePhotos: 'Save photos',\r\n genDownload: 'Download',\r\n msgSignHere: 'Please draw your signature inside the square',\r\n msgSignatureRequired: 'You must provide your signature to continue',\r\n msgPasswordsDontMatch: 'Password and password confirmation do not match',\r\n errorNetwork: \"Server communication error - check your network connection\",\r\n errorSessionExpired: \"Session expired due to inactivity\",\r\n errorUserInvalid: \"User details have changes. Please log in again\",\r\n errorNotInitialized: \"Unable to login since system settings were not loaded propely. Please reload the page\",\r\n errorUnexpected: \"@@@Unexpected server error has occured@@@: {0}\",\r\n errorUnauthorized: \"User is not authorized for this operation\",\r\n errorPasswordExpired: \"Password has expired. Please choose a different password\",\r\n msgFinishEditing: \"Please finish editing current line before adding the new one\",\r\n errorUserNameNotFound: \"User name not found\",\r\n errorIsNotExistsPhoneAndEmail: \"No email or phone is defined. Contact support\",\r\n errorSessionIsFrozen: \"Session is frozen due using the same credential on another device\",\r\n lblDay1: \"Sunday\",\r\n lblDay2: \"Monday\",\r\n lblDay3: \"Tuesday\",\r\n lblDay4: \"Wednesday\",\r\n lblDay5: \"Thursday\",\r\n lblDay6: \"Friday\",\r\n lblDay7: \"Saturday\",\r\n lblDay1s: \"Sun\",\r\n lblDay2s: \"Mon\",\r\n lblDay3s: \"Tue\",\r\n lblDay4s: \"Wed\",\r\n lblDay5s: \"Thu\",\r\n lblDay6s: \"Fri\",\r\n lblDay7s: \"Sat\",\r\n msgSuccess: \"Operation completed succesfully\",\r\n msgNotPerformed: \"Unable to complete operation\",\r\n lblTimes: 'times',\r\n lblUser: \"Standard user\",\r\n btnCancelDocument: 'Cancel Document',\r\n lblBy: 'By',\r\n titleCreatedBy: 'Created by',\r\n titleCreated: 'Created',\r\n titleCreatedAt: 'Created at',\r\n titleAgo: 'Ago',\r\n lblAgo: 'ago',\r\n lblSearch: 'Search',\r\n lblCloseSearch: 'Close search',\r\n lblColumnChooser: 'Show Column Chooser',\r\n lblColumnHiding: 'Switch Column Hiding',\r\n lblShowGridFilter: 'Show Advanced Filters',\r\n lblHideGridFilter: 'Hide Advanced Filters',\r\n lblExcel: 'Export to Excel',\r\n lblPdf: 'Export to PDF',\r\n lblViewList: 'View as list of cards',\r\n lblViewGrid: 'View as table',\r\n lblDisplayUserName: 'User name',\r\n lblLastUseDate: 'Last action at',\r\n lblLastUseBefore: 'Last action before',\r\n progressIndicator: 'Transferring data.. Please wait',\r\n lblUpdated: 'Updated',\r\n lblNoSorting: '- Default -',\r\n lblVersion: 'Version',\r\n lblDateIsNull: \"Date is null\",\r\n lblDateApproximate: \"{0} {1} {2}\",\r\n f702: \"less than a minute\",\r\n f703: \"5 minutes\",\r\n f704: \"10 minutes\",\r\n f705: \"15 minutes\",\r\n f706: \"half an hour\",\r\n f707: \"less than an hour\",\r\n f709: \"hour and a half\",\r\n f710: \"more than two hours\",\r\n f711: \"{0} hours\",\r\n f712: \"day\",\r\n f713: \"two days\",\r\n f714: \"{0} days\",\r\n f715: \"over a week\",\r\n f716: \"more than two weeks\",\r\n f717: \"{0} weeks\",\r\n f718: \"over a month\",\r\n f720: \"two months\",\r\n f721: \"{0} months\",\r\n f722: \"over a year\",\r\n f723: \"more than two years\",\r\n f724: \"{0} years\",\r\n f725: \"less than a day\",\r\n lblOldPassword: 'Old password',\r\n lblNewPassword1: 'New password',\r\n lblNewPassword2: 'Confirm password',\r\n lblRecoveryType: 'Password recovery method',\r\n lblRecoveryPhone: 'Phone number for password recovery',\r\n lblRecoveryEmail: 'Email address for password recovery',\r\n btnSendNotificationDispatch: 'Send',\r\n btnSendRecoveryCode: 'Send verification code',\r\n btnCheckUserName: 'Recover password',\r\n btnBackToLogin: 'Back to login page',\r\n lblRecoveryToken: 'Verification code',\r\n btnResend: 'Send again',\r\n btnSaveChanges: 'Save changes',\r\n btnGeneratePassword: 'Generate password',\r\n btnCreateCredentials: 'Create credentials',\r\n btnUnlockUser: 'Unlock user',\r\n lblDisplayUsername: 'Display user name',\r\n lblDisplayUserDescription: 'Display user description',\r\n lblCredentialsNotExist: 'User not yet created',\r\n lblPendingWelcome: 'User pending activation through welcome link',\r\n titleUserInformation: 'User Information',\r\n errorMaxSizeUploadError: 'Size of some selected files is bigger that {0} and they are automatically excluded from the selection.',\r\n msgFileSizeRestriction: 'Max file size is {0}.',\r\n btnSelectFiles: 'Select files',\r\n btnMakePhoto: 'Make photo',\r\n lblAttachFileSize: 'File size',\r\n lblFilters: 'Filters',\r\n lblAt: 'At',\r\n\r\n lblObjectName: 'Object name',\r\n lblIsOverride: 'Is Overriden',\r\n lblValidation: 'Is Valid',\r\n lblDViewsDBDuration: 'Original Duration',\r\n lblXViewsDBDuration: 'Overriden Duration',\r\n lblCheckPerformance: 'Check Performance',\r\n lblValidateViews: 'Validate structure',\r\n lblViewError: 'Error',\r\n\r\n lblLoginOTPSendMethod: 'Send one time password via',\r\n lblLoginOTPEmail: 'Email address for send one time password',\r\n lblLoginOTPPhone: 'Phone number for send one time password',\r\n lblLoginOTPOTP: 'One time password',\r\n lnkLoginByOTP: 'Login by one time password',\r\n msgNotificationSent: 'Notification is sent',\r\n btnLoginOtpSendOtp: 'Send password',\r\n lnkLoginByPassword: 'Login by password',\r\n\r\n lblApply: 'Apply',\r\n lblTaxNumber: 'Tax number',\r\n\r\n lblIsActive: 'Active',\r\n lblEmail: 'Email',\r\n lblPhone: 'Phone',\r\n lblIsPendingWelcome: 'Is Pending Welcome',\r\n lblIsOnline: 'Is Online',\r\n lblIsLockedOut: 'Is Locked Out',\r\n lblCreateCredentials: 'Create Credentials',\r\n lblCredentialFilter: 'Credential Filter',\r\n\r\n msgRouteNotFound: 'Route not found',\r\n btnReload: 'Reload',\r\n lblHideColumn: 'Hide Column',\r\n lblShowHiddenColumns: 'Show Hidden Columns',\r\n\r\n lblName: 'Name',\r\n lblDescription: 'Description',\r\n\r\n msgLoading: \"Processing, please wait\",\r\n lblSentDate: \"Sent date\",\r\n lblSentBy: \"Sent by\",\r\n lblEntryID: \"ID\",\r\n lblFromAddress: \"From Address\",\r\n lblFromDisplayAddress: \"From name\",\r\n lblAddress: \"Address\",\r\n lblSubject: \"Subject\",\r\n lblMailBody: \"Body\",\r\n lblDeliveryOption: \"Delivery option\",\r\n lblSendNotificationBy: \"Send notification by\",\r\n lblUsernameCreationOption: 'Username creation by',\r\n lblStatus: \"Status\",\r\n lblToAddress: \"To\",\r\n lblCCAddress: \"CC\",\r\n lblBccAddress: \"BCC\",\r\n lblFailureDescription: \"Failure description\",\r\n lblNotificationTemplate: \"Template name\",\r\n lblFrom: \"From \",\r\n lblUntil: \"Until \",\r\n\r\n lblAdd: \"Add\",\r\n lblClear: \"Clear\",\r\n lblCompactMode: \"Compact Mode\",\r\n\r\n lblSessionAlmostExpiredTitle: \"Session will expire soon\",\r\n lblSessionAlmostExpiredPrompt: \"Long period of inactivity was detected. Your session will expire soon\",\r\n lblSessionExpiredTitle: \"Session expired\",\r\n lblFirstDate: \"First Date\",\r\n lblLastDate: \"Last Date\",\r\n lblSessionExpiredPrompt: \"You session has expired. You will be automaticaly re-directed to login page.\",\r\n\r\n lblNotificationContent: \"Notification Content\",\r\n lblGeneral: \"General\",\r\n lblOptions: \"Options\",\r\n lblCustom: \"Custom\",\r\n\r\n lblMFACode: \"Code\",\r\n titleMFACodeOnEmailSent: \"The one-time password was sent to your email. Enter it below\",\r\n titleMFACodeOnPhoneSent: \"The one-time password was sent to your mobile. Enter it below\",\r\n\r\n lblMFAMethod: \"Multi-factor authentication\",\r\n Month_1: \"January\",\r\n Month_2: \"February\",\r\n Month_3: \"March\",\r\n Month_4: \"April\t\",\r\n Month_5: \"May\",\r\n Month_6: \"June\",\r\n Month_7: \"July\",\r\n Month_8: \"August\",\r\n Month_9: \"September\",\r\n Month_10: \"October\",\r\n Month_11: \"November\",\r\n Month_12: \"December\",\r\n\r\n lblExport: \"Export\",\r\n lblCredentialType: \"Credential Type\",\r\n lblIsRestrictByIP: \"Restrict by IP\",\r\n lblIsExcludeFromMFA: \"Exclude from MFA\",\r\n lblIPRangeStart: \"IP range start\",\r\n lblIPRangeEnd: \"IP range end\",\r\n lblIPErrorMessage: \"An IP address must have "000.000.000.000" format\",\r\n msgIPRangesIsEmpty: \"You have to add at least one IP address/range\",\r\n msgIPRangeIsEmpty: \"Enter a valid IP address/range\",\r\n msgPasswordMinLength: \"The password length must be at least {0} symbols.\",\r\n msgPasswordMinCountDigits: \"The password must contain at least {0} digits.\",\r\n msgPasswordMinCountLetters: \"The password must contain at least {0} letters.\",\r\n msgPasswordComplexityRequirement: \"The password length must be at least {0} symbols long, with minimum {1} digits and {2} letters\",\r\n errorOnlyImageAllowed: \"Only images allowed.\",\r\n btnClose: \"Close\",\r\n lblPhoto: \"Photo\",\r\n\r\n lblDragAndDrop: \"You can drag & drop files here\",\r\n errorRequiredMessage: \"Field is required\",\r\n titleDuplicate: \"Duplicate\",\r\n lblAllNotifications: \"All notifications\",\r\n\r\n lblSMTPServer: \"SMTP Server\",\r\n lblSMTPPort: \"SMTP Port\",\r\n lblSMTPUserName: \"SMTP Username\",\r\n lblSMTPPassword: \"SMTP Password\",\r\n lblSMTPUseSSL: \"SMTP Use SSL\",\r\n lblSMSEndpoint: \"SMS Endpoint\",\r\n lblSMSUserName: \"SMS Username\",\r\n lblSMSPassword: \"SMS Password\",\r\n lblSMSToken: \"SMS Token\",\r\n lblSMSEndPointIsInforU: \"SMS Provider\",\r\n\r\n titleTemplateInformation: \"Notification template information\",\r\n titleEmailInformation: \"E-mail template settings\",\r\n lblFromEmail: \"From e-mail\",\r\n lblFromEmailDisplay: \"From e-mail display\",\r\n titlePhoneInformation: \"SMS template settings\",\r\n lblNotificationServer: \"Notification server\",\r\n lblFromPhone: \"From phone\",\r\n lblSMSBody: \"SMS body\",\r\n titlePushMessagesInformation: \"Push messages template settings\",\r\n lblPushMessageBody: \"Push message body\",\r\n lblHTMLBody: \"HTML body\",\r\n btnSave: 'Save',\r\n titleDelete: 'Delete',\r\n lblUseDefault: 'Use default',\r\n lblNoUnreadMessages: 'No unread messages',\r\n lblTo: 'To',\r\n lblPushMessageContent: 'Push message content',\r\n lblSmsMessageContent: 'SMS message content',\r\n lblIsAutomatic: 'Is automatic',\r\n lblSystem: 'System',\r\n lblPopupShowStatus: 'Popup show status',\r\n lblEmailContent: 'Email content',\r\n btnShowInEditor: 'Show in editor',\r\n titleLeavePageConfirmation: 'Data will be lost, do you want to continue?',\r\n btnLogOff: 'Log Off',\r\n btnStayConnected: 'Stay Connected',\r\n btnGoToHomePage: 'Go To Home Page',\r\n lblReadDate: 'Read date',\r\n msgDeleteNotificationTemplateQuestion: 'Notification template could be used in the application. Are you sure want to delete it?',\r\n lblNotificationServerWrong: 'Notification server configuration is incorrect. Please make changes and try again',\r\n msgInvalidEmail: 'Email is invalid or incorrect format',\r\n btnTestServer: 'Test server',\r\n lblMIDIsMissing: \"MID is missing\",\r\n lblEnterMID: \"Enter new MID code.\",\r\n btnShowPreview: \"Show preview\",\r\n lblIsServer: \"Server\",\r\n lblIsClient: \"Client\",\r\n lblModuleName: \"Module\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"Option\",\r\n lblValue: \"Value\",\r\n lblSectionName: \"Section\",\r\n lblAddOption: 'Add option',\r\n msgOptionAlreadyExists: 'Option already exists',\r\n msgOptionEmpty: 'Option {0} is empty',\r\n lblBadLogin: 'Bad login',\r\n msgRemoveOption: \"Are you sure you want to delete the Option '{0}'?\",\r\n titleEmailConfiguration: \"E-mail Configuration\",\r\n titleSMSConfiguration: \"SMS Configuration\",\r\n msgDeleteNotificationServerQuestion: \"Notification server could be used in the application. Are you sure want to delete it?\",\r\n msgNoData: \"No Data\",\r\n lblEmailHeader: \"Email Header\",\r\n lblConfigure: \"Configure\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"Please enter a white-listed phone number of name up to 11 characters in english\",\r\n lblNotifications: \"Notifications\",\r\n lblMinimize: \"Minimize\",\r\n lblShowMore: \"Show more\",\r\n titleWhatsAppInformation: \"WhatsApp template settings\",\r\n lblWhatsAppBody: \"WhatsApp Message Body\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"WhatsApp Configuration\",\r\n titleNotificationDispatchList: \"Notification dispatch list\",\r\n titleNotificationServerList: \"Notification server list\",\r\n titleNotificationTemplateList: \"Notification template list\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"Choose option\",\r\n titleWebAPIAllowedIPs: \"Allowed IPs\",\r\n lblIpAddress: \"IP Address\",\r\n lblLoginDate: \"Login Date\",\r\n lblPrint: \"Print\",\r\n lblDateFrom: 'Date From',\r\n lblDateTo: 'Date To',\r\n lblDate: \"Date\",\r\n msgCouldNotStartVideoError: 'Camera is not available',\r\n msgCameraPermissionDenied:'Camera permission is denied',\r\n lblCameraModeVideo: 'Video',\r\n lblCameraModePhoto: 'Photo',\r\n titlePreview: 'Preview',\r\n msgLogoutQuestion: 'Are you sure you want to logout?',\r\n lblGroupPanel: 'Drag column to group',\r\n lblExpandAll: 'Expand All',\r\n lblMultiEmailError: 'Value is invalid. Use symbol ; as email separator',\r\n msgPhotoMinCountError: 'The minimum count is {0}',\r\n msgPhotoMaxCountError: 'The maximum count is {0}',\r\n lblRestoreDefaultView: \"Restore default view\",\r\n lblStartDate: \"Start date\",\r\n lblDuration: \"Duration\",\r\n lblController: \"Controller\",\r\n lblAction: \"Action\",\r\n lblMethod: \"Method\",\r\n lblStatusCode: \"Status code\",\r\n lblRequestData: \"Request data\",\r\n lblQueryString: \"Query string\",\r\n lblBody: \"Body\",\r\n lblResponse: \"Response\",\r\n msgTextCopied: \"Text copied\",\r\n lblCopy: \"Copy\",\r\n btnGoToLoginHistory: \"Go to login history\",\r\n btnGoToRequestsHistory: \"Go to requests history\",\r\n btnManageCredentials: \"Manage Credentials\",\r\n btnGoToCredentialsReport: \"Go to credentials report\",\r\n btnWelcomeUser: \"Send welcome message\",\r\n lblTestFromPhone: \"From phone\",\r\n lblHistory: \"Changes log\",\r\n lblNewValue: \"New value\",\r\n lblOldValue: \"Old value\",\r\n lblFieldCaption: \"Field\",\r\n lblDocumentCaption: \" Document\",\r\n lblHistoryLineAdded: \"{0} {1} was added.\",\r\n lblHistoryLineRemoved: \"{0} {1} was removed.\",\r\n lblHistoryLineNumber: \"{0} {1}\",\r\n lblHistoryNotFound: \"No changes found.\",\r\n lblHistoryChangeAdded: \"{0} {1} was created\",\r\n lblHistoryChangeRemoved: \"{0} {1} was deleted\",\r\n msgLoadingPDF: 'Loading PDF file...',\r\n lblImpersonatedBy: 'Impersonated By',\r\n lblIsUserCustomTemplate: \"User custom template\",\r\n msgIsUserCustomTemplateEnable: \"If the option 'Editable' is enabled, you will be able to change the template manually, but the system won't be able to update it automatically\",\r\n btnEnableEditable: \"Enable editable\",\r\n btnDisableEditable: \"Disable editable\",\r\n msgScreenSizeChangedRefresh: 'Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: 'Orientation is changed. Please refresh browser window.',\r\n lblDeliveryMethod: 'Delivery Method',\r\n lblNotificationDispatch: 'Notification Dispatch',\r\n lblRecipients: 'Recipients',\r\n lblPreview: 'Preview',\r\n msgRecipientsAreEmpty: 'You have to add at least one recipient',\r\n lblCreatedBy: 'Created by',\r\n btnCancelNotifications: 'Cancel notifications',\r\n lblCancelNotificationsPrompt: 'You are going to cancel unread Push notifications. Do you want to proceed?',\r\n lblNotificationMessage: 'Notification Message',\r\n lblIsDeleted: 'Deleted',\r\n lblShareMethodEmail: 'Email',\r\n lblShareMethodSms: 'SMS',\r\n lblShareMethodWhatsapp: 'WhatsApp',\r\n lblShareMethodPrint: 'Print',\r\n lblShare: 'Share',\r\n lblEntityType: 'Entity type',\r\n lblPageName: 'Page',\r\n btnSend: 'Send',\r\n lblChooseTemplate: 'Choose template',\r\n lblShareMethodDownload: 'Download',\r\n lblShareMethodShare: 'Share',\r\n lblUploadCrystalTemplate: 'Upload crystal tempalte',\r\n lblNotificationTemplateEditingMode: 'Body editing mode',\r\n msgShareNotificationTemplateNotFoundError: 'Notification templates are not configured for this page',\r\n btnShare: 'Share',\r\n msgNotificationTemplatePrefixNotFoundError: '$PrefixBody$ param is missing',\r\n lblPrefixBody: 'Prefix body',\r\n lblIsSharePdf: 'Share PDF',\r\n lblFileNameFormat: 'File name format',\r\n lblEntityBindingPageType: 'Bind to',\r\n titleEntityBindingInformation: 'Entity binding',\r\n msgNotificationTemplateFileMissingError: 'Crystal report template is missing',\r\n lblSharedFile: 'Shared file',\r\n msgNotificationTemplateEmptyError: 'Cannot save empty template',\r\n lblIsSupportEmail: 'Support Email',\r\n lblIsSupportSMS: 'Support SMS',\r\n lblIsSupportWhatsapp: 'Support Whatsapp',\r\n lblIsSupportPush: 'Support push',\r\n lblIsSupportSharing: 'Support sharing',\r\n lblIsShareByEntities: 'Share by entities',\r\n ttlLogs: \"Logs\",\r\n lblObjectType: \"Object type\",\r\n lblObjectID: \"Object ID\",\r\n lblLevel: \"Level\",\r\n lblNotAssigned: \"- Unassigned -\",\r\n msgNotificationSentTo: 'Notification is sent to {0}',\r\n lblHeader: 'Header',\r\n }\r\n};\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_HE =\r\n{\r\n Pages:\r\n {\r\n login: 'התחברות למערכת',\r\n logout: 'התנתק',\r\n credentials_activity_status: 'מצב פעילות משתמשים',\r\n notificationshistory: 'דוח התראות שנשלחו',\r\n notification_servers: 'שרתי התראות',\r\n notification_dispatches: '$$$Notification dispatches',\r\n notification_templates: 'תבניות להתראות',\r\n notifications: 'התראות',\r\n system_options: 'הגדרות מערכת',\r\n credential_login_history: \"דוח התחברויות משתמשים\",\r\n request_history: \"דוח פניות לשרת\",\r\n credentials_report: 'דוח משתמשים',\r\n data_views: 'ניהול Views בסיס נתונים',\r\n menu: 'תפריט',\r\n credentials_creation: 'יצירת משתמשים חדשים',\r\n remote_request_history: \"דוח בקשות יוצאות\",\r\n NotificationViewComponent: 'התראה שנשלחה',\r\n PrintBoxDialogComponent: 'הדפסה',\r\n SignBoxDialogComponent: 'חתימה על מסמך',\r\n ImageBoxDialogComponent: 'תמונה',\r\n PhotoBoxDialogComponent: 'צילום',\r\n PasswordManageComponent: 'ניהול פרטי התחברות',\r\n CredentialsActivityStatusComponent: 'מצב פעילות משתמשים',\r\n NotificationsHistoryComponent: 'דוח התראות שנשלחו',\r\n PreviewDialogComponent: 'תצוגה מקדימה',\r\n NotificationDispatchComponent: '$$$Notification dispatch',\r\n NotificationDispatchListComponent: '$$$Notification dispatches',\r\n NotificationServerComponent: 'שרת התראות',\r\n NotificationServerListComponent: 'שרתי התראות',\r\n NotificationTemplateListComponent: 'תבניות להתראות',\r\n NotificationTemplateComponent: 'תבנית התראה',\r\n HtmlBoxDialogComponent: 'עורך HTML',\r\n NotificationTestDialogComponent: 'בדיקת התראות',\r\n NotificationPreviewDialogComponent: 'תצוגה מקדימה של התראות',\r\n SystemOptionsComponent: 'הגדרות מערכת',\r\n AddSystemOptionDialogComponent: 'הוסף הגדרה',\r\n BarcodeBoxDialogComponent: 'סרוק ברקוד/QR-code',\r\n CredentialLoginHistoryComponent: \"דוח התחברויות משתמשים\",\r\n RequestHistoryListComponent: \"דוח פניות לשרת\",\r\n RequestHistoryComponent: \"פניה לשרת\",\r\n WelcomeUserDialogComponent: \"הודעת ברוכים הבאים\",\r\n HistoryViewComponent: 'היסטוריית שינוים',\r\n SystemCredentialsComponent: 'דוח משתמשים',\r\n SystemCredentialsCreationComponent: 'יצירת משתמשים חדשים',\r\n WelcomeMessageConfigDialogComponent: 'הודעה על התחברות ראשונית למערכת',\r\n DataViewListComponent: 'ניהול Views בסיס נתונים',\r\n MenuButtonListComponent: 'תפריט',\r\n ShareDialogComponent: '$$$Share'\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"עברית\"\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"אנגלית\"\r\n }, \r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"ספרדית\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n ID: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\"\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\"\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'התראה באפליקציה'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: '$$$None',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: '$$$Preview only',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: '$$$Edit prefix',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: '$$$Edit body',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'טלפון',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'אימייל',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'הודעת SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'לא לשלוח',\r\n ID: 2,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n SortOrder: 1,\r\n index: 0,\r\n text: \"אימייל\",\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n SortOrder: 2,\r\n index: 1,\r\n text: \"הודעת SMS\",\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'התראה באפליקציה',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'התראה באפליקציה',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'הודעת WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: '$$$Share',\r\n SortOrder: 4,\r\n index: 3,\r\n text: '$$$Share',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"טיוטה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"שליחה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"נכשל\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"נשלח\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"מייל\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"אקסל\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"הדפס\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"הצג\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"הוצג\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'שם בעברית'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'שם באנגלית'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'קישור למערכת'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'משך זמן לניתוק סשן, דקות'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'משך זמן להזדהות מחדש, דקות'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'אפשר בקשת גישה'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'אפשר חיבור מרחוק'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת שעומד לפוג'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'תמיכה בניהול אישורים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'תמיכה בהקמת משתמשים חדשים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'תמיכה בשינוי סיסמא לאחר הזדהות'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'תמיכה בשחזור סיסמא ששכחתי'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'אפשר חיבור ב-OTP'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'אפשר חיבור באמצעות סיסמא'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'צור משתמש במערכת באופן אוטומטי בחיבור ראשון דרך OTP'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'סוג משתמש ליצירה אוטומטית'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'בדוק מספר ח.פ בהזדהות עם OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'תדירות החלפת סיסמה (ימים)'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'מורכבות סיסמה - מספר תווים מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'מורכבות סיסמה - מספר אותיות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'מורכבות סיסמה - מספר ספרות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'מספר ניסיונות התחברות כושלים לפני נעילת משתמש'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'חלון זמן לבדיקת מספר ניסיונות התחברות, דקות'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'משך נעילת משתמש לאחר ניסיון התחברות כושל, דקות'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'אפשרויות חסימת XFrame'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'התקנה מאחורי Load Balancer או Proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'שליחה של הודעות מערכת באמצעות האימייל'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'שליחה של הודעות מערכת באמצעות SMS'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'שליחה של הודעות מערכת באמצעות WhatsApp'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'מספר ימים לשמירת בקשות שהתקבלו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'מספר ימים לשמירת בקשות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'מספר ימים לשמירת התרעות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'מספר ימים לשמירת לוג סישנים'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: '$$$Session Fingerprint Freeze Timeout (mins)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"הכל\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"שינוי ערך\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"נוספה שורה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"שורה נמחקה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'כן'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'לא'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: '$$$None'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: '$$$Report'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: '$$$Entity'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Warning'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"שפה\",\r\n lblUserName: \"שם משתמש\",\r\n lblPassword: \"סיסמה\",\r\n titleLogin: \"כניסה למערכת\",\r\n btnLogin: \"כניסה למערכת\",\r\n btnLogout: 'התנתק',\r\n btnChangePassword: 'שנה סיסמה',\r\n btnContactUs: \"צור קשר\",\r\n btnRecoverPassword: 'שכחתי סיסמה',\r\n lblSaveCredentials: 'שמור פרטי הזדהות',\r\n titleLogout: \"נותקת מהמערכת\",\r\n titleLogoutLong: \"נותקת מהמערכת בהצלחה.\",\r\n titleLogoutLast: \"הינך מועבר למסך הכניסה\",\r\n titleSessionExpiredTitle: \"ניתוק עקב חוסר פעילות\",\r\n titleSessionExpired: \"נותקת מהמערכת עקב חוסר פעילות או שינוי בפרטי המשתמש בשרת. אנא בצע כניסה מחודשת למערכת\",\r\n titleChangePasswordTitle: \"שינוי סיסמה\",\r\n titleChangePassword: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת\",\r\n titleChangePasswordTitle2: \"שינוי סיסמה שפג תוקפה\",\r\n titleException: \"שגיאת מערכת\",\r\n titleExceptionLong: \"אירעה שגיאה בלתי צפויה במערכת\\nפרטי השגיאה מופיעים מטה - אנא העבר אותם למנהל המערכת\",\r\n titleComingSoonTitle: \"בקרוב! גם זה יפותח..\",\r\n titlePasswordChanged: 'הסיסמה הוחלפה בהצלחה. אנא השתמך בסיסמה החדשה על מנת להכנס מחדש למערכת',\r\n titleIdentification: 'הזדהות',\r\n titlePasswordEntry: 'הזנת סיסמה חדשה',\r\n titleRecoverPasswordTitle: 'שחזור סיסמה שנשכחה',\r\n titleWelcomePasswordTitle: 'כניסה ראשונית למערכת',\r\n titleRecoverPassword1: 'הקלד את שם המשתמש',\r\n titleRecoverPassword2: 'באפשרותך לשחזר סיסמה שנשכחה, אם יש לך גישה לאימייל או לטלפון שמוגדר בחשבון משתמש שלך',\r\n titleRecoverPassword3: 'על מנת לבחור סיסמא חדשה, יש להקליד את הקוד אימות שנשלח אלייך באמצעי שבחרת',\r\n titleRecoverPassword4: 'בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת',\r\n titleWelcomePassword2: 'ברוך הבא למערכת. יש להזין את שם המשתמש והקוד הסודי שנשלח אלייך על מנת לעבור לבחירת הסיסמה',\r\n titleWelcomePassword3: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת. סיסמה זו תשמש אותך מעכשיו על מנת להיכנס למערכת\",\r\n btnReEntry: \"כניסה מחודשת\",\r\n genOK: 'אישור',\r\n genYes: \"כן\",\r\n genNo: \"לא\",\r\n genCancel: \"ביטול\",\r\n genNoData: \"אין נתונים להצגה\",\r\n genPrint: 'הדפס',\r\n genSign: 'חתום',\r\n genReset: 'נקה',\r\n genTakePhoto: 'צלם',\r\n genSavePhotos: 'שמור תמונות',\r\n genDownload: 'הורד',\r\n msgSignHere: 'אנא צייר את חתימתך בתוך המלבן',\r\n msgSignatureRequired: 'הינך חייב לחתום כאן על מנת להמשיך',\r\n msgPasswordsDontMatch: 'הסיסמאות לא תואמות, אנא נסה שנית',\r\n errorNetwork: \"שגיאת תקשורת לשרת - בדוק את חיבור הרשת\",\r\n errorSessionExpired: \"נותקת עקב חוסר פעילות\",\r\n errorUserInvalid: \"פרטי המשתמש השתנו. אנא התחבר מחדש למערכת\",\r\n errorNotInitialized: \"לא ניתן להכנס למערכת כיוון שלא נטענו ההגדרות \\n אנא טען את הדף מחדש\",\r\n errorUnexpected: \"@@@שגיאה לא צפויה בשרת@@@: {0}\",\r\n errorUnauthorized: \"המשתמש אינו מורשה לבצע פעולה זו\",\r\n errorPasswordExpired: 'הסיסמה שהזנת פג תוקפה. יש להזין סיסמה חדשה',\r\n msgFinishEditing: \"יש לשמור את השורה הנוכחית לפני הוספת שורה חדשה\",\r\n errorUserNameNotFound: \"המשתמש לא קיים\",\r\n errorIsNotExistsPhoneAndEmail: \"לא מוגדר טלפון או מייל למשתמש זה. צור קשר עם התמיכה\",\r\n errorSessionIsFrozen: \"$$$Session is frozen due using the same credential on another device\",\r\n lblDay1: \"ראשון\",\r\n lblDay2: \"שני\",\r\n lblDay3: \"שלישי\",\r\n lblDay4: \"רביעי\",\r\n lblDay5: \"חמישי\",\r\n lblDay6: \"שישי\",\r\n lblDay7: \"שבת\",\r\n lblDay1s: \"א'\",\r\n lblDay2s: \"ב'\",\r\n lblDay3s: \"ג'\",\r\n lblDay4s: \"ד'\",\r\n lblDay5s: \"ה'\",\r\n lblDay6s: \"ו'\",\r\n lblDay7s: \"ש'\",\r\n msgSuccess: \"הפעולה הסתיימה בהצלחה\",\r\n msgNotPerformed: \"לא ניתן לסיים את הפעולה\",\r\n lblTimes: 'פעמים',\r\n lblUser: \"משתמש רגיל\",\r\n btnCancelDocument: 'בטל מסמך',\r\n lblBy: 'ע\"י',\r\n titleCreatedBy: 'נוצר על ידי',\r\n titleCreated: 'נוצר',\r\n titleCreatedAt: 'נוצר ב',\r\n titleAgo: 'לפני',\r\n lblAgo: 'לפני',\r\n lblSearch: 'חיפוש',\r\n lblCloseSearch: 'סגור חיפוש',\r\n lblColumnChooser: 'בחירת עמודות',\r\n lblColumnHiding: 'מצב גלילה',\r\n lblShowGridFilter: 'הפעל סינון מתקדם',\r\n lblHideGridFilter: 'הסתר סינון מתקדם',\r\n lblExcel: 'ייצוא לאקסל',\r\n lblPdf: 'ייצוא ל PDF',\r\n lblViewList: 'הצג בתור רשימת כרטיסיות',\r\n lblViewGrid: 'הצג בתור טבלה',\r\n lblDisplayUserName: 'שם משתמש',\r\n lblLastUseDate: 'תאריך פעולה אחרונה',\r\n lblLastUseBefore: 'פעולה אחרונה לפני',\r\n progressIndicator: 'מעביר נתונים.. אנא המתן',\r\n lblUpdated: 'עודכן',\r\n lblNoSorting: '- ברירת מחדל -',\r\n lblVersion: 'גרסה',\r\n lblDateIsNull: \"התאריך ריק\",\r\n lblDateApproximate:\"{1} {0} {2}\",\r\n f702: \"פחות מדקה\",\r\n f703: \"5 דקות\",\r\n f704: \"10 דקות\",\r\n f705: \"רבע שעה\",\r\n f706: \"חצי שעה\",\r\n f707: \"פחות משעה\",\r\n f709: \"שעה וחצי\",\r\n f710: \"שעתיים פלוס\",\r\n f711: \"{0} שעות\",\r\n f712: \"יום\",\r\n f713: \"יומיים\",\r\n f714: \"{0} ימים\",\r\n f715: \"שבוע פלוס\",\r\n f716: \"שבועיים פלוס\",\r\n f717: \"{0} שבועות\",\r\n f718: \"חודש פלוס\",\r\n f720: \"חודשיים\",\r\n f721: \"{0} חודשים\",\r\n f722: \"שנה פלוס\",\r\n f723: \"שנתיים פלוס\",\r\n f724: \"{0} שנים\",\r\n f725: \"פחות מיום\",\r\n lblOldPassword: 'סיסמה ישנה',\r\n lblNewPassword1: 'סיסמה חדשה',\r\n lblNewPassword2: 'אימות סיסמה',\r\n lblRecoveryPhone: 'טלפון לשליחת קוד אימות',\r\n lblRecoveryEmail: 'אימייל לשליחת קוד אימות',\r\n btnSendNotificationDispatch: '$$$Send',\r\n btnSendRecoveryCode: 'שלח קוד לאימות',\r\n btnCheckUserName: 'שחזר סיסמה',\r\n btnBackToLogin: '$$$Back to login page',\r\n lblRecoveryType: 'אופן שיחזור סיסמה',\r\n lblRecoveryToken: 'קוד אימות סודי',\r\n btnResend: 'שלח שנית',\r\n btnSaveChanges: 'שמור פרטי הזדהות',\r\n btnGeneratePassword: 'סיסמה חדשה',\r\n btnCreateCredentials: 'צור משתמש',\r\n btnUnlockUser: 'שחרר משתמש נעול',\r\n lblDisplayUsername: 'שם משתמש לתצוגה',\r\n lblDisplayUserDescription: 'תאור משתמש לתצוגה',\r\n lblCredentialsNotExist: 'המשתמש טרם הוקם',\r\n lblPendingWelcome: 'נשלחה בקשה והמשתמש טרם הצטרף',\r\n titleUserInformation: 'פרטי משתמש',\r\n errorMaxSizeUploadError: 'חלק מהקבצים שנבחרו עוברים את הגודל המקסימאלי של {0} מגה, ולא יועלו',\r\n msgFileSizeRestriction: 'גודל הקובץ המקסימאלי הינה {0} מגה',\r\n btnSelectFiles: 'בחר קבצים',\r\n btnMakePhoto: 'צלם תמונה',\r\n lblAttachFileSize: 'גודל',\r\n lblFilters: 'סינונים',\r\n lblAt: 'ב',\r\n\r\n lblObjectName: 'שם אובייקט',\r\n lblIsOverride: 'בוצע קיסטום',\r\n lblValidation: 'תקין',\r\n lblDViewsDBDuration: 'זמן תגובה מקורי',\r\n lblXViewsDBDuration: 'זמן תגובה לאחר קיסטום',\r\n lblCheckPerformance: 'בדוק ביצועים',\r\n lblValidateViews: 'בדוק תקינות מבנה',\r\n lblViewError: '$$$Error',\r\n\r\n lblLoginOTPSendMethod: 'שלח סיסמה חד-פעמית באמצעות',\r\n lblLoginOTPEmail: 'אימייל לשליחת סיסמה חד-פעמית',\r\n lblLoginOTPPhone: 'טלפון לשליחת SMS עם סיסמה חד-פעמית',\r\n lblLoginOTPOTP: 'סיסמה חד-פעמית',\r\n lnkLoginByOTP: 'הזדהות באמצעות סיסמה חד-פעמית',\r\n msgNotificationSent: 'הסיסמה נשלחה',\r\n btnLoginOtpSendOtp: 'שלח סיסמה',\r\n lnkLoginByPassword: 'כניסה עם שם משתמש וסיסמה',\r\n\r\n lblApply: 'החל',\r\n lblTaxNumber: 'ח.פ/תעודת זהות',\r\n\r\n lblIsActive: 'פעיל',\r\n lblEmail: 'אימייל',\r\n lblPhone: 'טלפון',\r\n lblIsPendingWelcome: 'ממתין להתחברות ראשונית',\r\n lblIsOnline: 'אונליין',\r\n lblIsLockedOut: 'נעול',\r\n lblCreateCredentials: 'צור משתמש',\r\n lblCredentialFilter: '$$$Credential Filter',\r\n\r\n msgRouteNotFound: 'נתיב שגוי',\r\n btnReload: 'טען מחדש',\r\n lblHideColumn: 'הסתר עמודה',\r\n lblShowHiddenColumns: 'הצג את כל העמודות',\r\n\r\n lblName: \"שם\",\r\n lblDescription: \"תיאור\",\r\n\r\n msgLoading: \"מעדכן נתונים.. אנא המתן\",\r\n lblSentDate: \"תאריך שליחה\",\r\n lblSentBy: \"נשלח על ידי\",\r\n lblEntryID: \"מספר\",\r\n lblFromAddress: \"מכתובת\",\r\n lblFromDisplayAddress: \"שם שולח\",\r\n lblAddress: \"כתובת\",\r\n lblSubject: \"כותרת\",\r\n lblMailBody: \"תוכן המייל\",\r\n lblDeliveryOption: \"אופן שליחה\",\r\n lblSendNotificationBy: \"שלח הודעות באמצעות\",\r\n lblUsernameCreationOption: 'מתן שם משתמש לפי',\r\n lblStatus: \"סטאטוס\",\r\n lblToAddress: \"כתובת\",\r\n lblCCAddress: \"העתק ל\",\r\n lblBccAddress: \"העתק מוסתר ל\",\r\n lblFailureDescription: \"הודעת שגיאה\",\r\n lblNotificationTemplate: \"שם תבנית\",\r\n lblFrom: \"מ\",\r\n lblUntil: \"עד \",\r\n lblSessionAlmostExpiredTitle: \"החיבור שלך יפוג בקרוב\",\r\n lblSessionAlmostExpiredPrompt: \"המערכת זיהתה חוסר פעילות ותנתק אותך בקרוב\",\r\n lblSessionExpiredTitle: \"החיבור למערכת פג\",\r\n lblSessionExpiredPrompt: \"החיבור שלך פג עקב חוסר פעילות. הינך מועבר לדף הכניסה\",\r\n lblFirstDate: \"תאריך ראשון\",\r\n lblLastDate: \"תאריך אחרון\",\r\n lblDate: \"תאריך\",\r\n lblAdd: \"הוסף\",\r\n lblClear: \"נקה\",\r\n lblCompactMode: \"תצוגה קומפקטית\",\r\n\r\n lblNotificationContent: \"תוכן ההתראה\",\r\n lblGeneral: \"כללי\",\r\n lblOptions: \"אפשרויות\",\r\n lblCustom: \"הגדרות מיוחדות\",\r\n\r\n lblMFACode: \"קוד חד-פעמי\",\r\n titleMFACodeOnEmailSent: \"סיסמה חד-פעמית נשלחה אלייך למייל. תזין אותו בשדה למטה\",\r\n titleMFACodeOnPhoneSent: \"סיסמה חד-פעמית נשלחה אלייך לנייד. תזין אותו בשדה למטה\",\r\n\r\n lblMFAMethod: \"אימות דו-שלבי\",\r\n\r\n Month_1: \"ינואר\",\r\n Month_2: \"פברואר\",\r\n Month_3: \"מרץ\",\r\n Month_4: \"אפריל\t\",\r\n Month_5: \"מאי\",\r\n Month_6: \"יוני\",\r\n Month_7: \"יולי\",\r\n Month_8: \"אוגוסט\",\r\n Month_9: \"ספטמבר\",\r\n Month_10: \"אוקטובר\",\r\n Month_11: \"נובמבר\",\r\n Month_12: \"דצמבר\",\r\n lblExport: \"ייצוא\",\r\n lblCredentialType: \"סוג משתמש\",\r\n lblIsRestrictByIP: \"הגבל לפי כתובת IP\",\r\n lblIsExcludeFromMFA: \"החרג כתובת מ מאימות דו-שלבי\",\r\n lblIPRangeStart: \"מכתובת IP\",\r\n lblIPRangeEnd: \"עד כתובת IP\",\r\n lblIPErrorMessage: \"כתובת ה IP חייבת להיות במבנה "000.000.000.000"\",\r\n msgIPRangesIsEmpty: \"יש לבחור כתובת אחת לפחות\",\r\n msgIPRangeIsEmpty: \"יש להזין כתובת IP חוקית\",\r\n msgPasswordMinLength: \"הסיסמה חייבת להיות באורך מינימאלי של {0} תווים\",\r\n msgPasswordMinCountDigits: \"הסיסמה חייבת להכיל מינימום של {0} ספרות\",\r\n msgPasswordMinCountLetters: \"הסיסמה חייבת להכיל מינימום של {0} אותיות באנגלית\",\r\n msgPasswordComplexityRequirement: \"הסיסמא חייבת להיות באורך מינימאלי של {0} תווים, ולהכיל לפחות {1} ספרות ו {2} אותיות באנגלית\",\r\n errorOnlyImageAllowed: \"ניתן לבחור רק תמונות\",\r\n btnClose: \"סגור\",\r\n lblPhoto: \"תמונה\",\r\n\r\n lblDragAndDrop: \"ניתן לגרור ולשחרר קבצים לכאן\",\r\n errorRequiredMessage: \"שדה חובה\",\r\n titleDuplicate: \"שכפל\",\r\n lblAllNotifications: \"כל ההתראות\",\r\n\r\n lblSMTPServer: \"שרת SMTP\",\r\n lblSMTPPort: \"פורט SMTP\",\r\n lblSMTPUserName: \"שם משתמש ל SMTP\",\r\n lblSMTPPassword: \"סיסמא ל SMTP\",\r\n lblSMTPUseSSL: \"השתמש בחיבור SSL\",\r\n lblSMSEndpoint: \"כתובת שרת SMS\",\r\n lblSMSUserName: \"שם משתמש ל SMS\",\r\n lblSMSPassword: \"סיסמא ל SMS\",\r\n lblSMSToken: \"טוקן ל SMS\",\r\n lblSMSEndPointIsInforU: \"ספק SMS\",\r\n\r\n titleTemplateInformation: \"מידע על תבנית התראה\",\r\n titleEmailInformation: \"הגדרות מייל\",\r\n lblFromEmail: \"שלח מכתובת אימייל\",\r\n lblFromEmailDisplay: \"שלח מ שם\",\r\n titlePhoneInformation: \"הגדרות SMS\",\r\n lblNotificationServer: \"שרת התראות\",\r\n lblFromPhone: \"שלח SMS מטלפון\",\r\n lblSMSBody: \"תוכן ההודעה\",\r\n titlePushMessagesInformation: \"הגדרות התראה באפליקציה\",\r\n lblPushMessageBody: \"תוכן ההתראה\",\r\n lblHTMLBody: \"גוף HTML\",\r\n btnSave: 'שמור',\r\n titleDelete: 'מחק',\r\n lblUseDefault: 'השתמש בברירת מחדל',\r\n lblNoUnreadMessages: 'אין התראות חדשות',\r\n lblTo: 'אל',\r\n lblPushMessageContent: 'תוכן ההתראה',\r\n lblSmsMessageContent: 'תוכן ההודעה',\r\n lblIsAutomatic: 'נשלח אוטומטית',\r\n lblSystem: 'הודעת מערכת',\r\n lblPopupShowStatus: 'סטאטוס התראה קופצת',\r\n lblEmailContent: 'תוכן אימייל',\r\n btnShowInEditor: 'הצג בעורך HTML',\r\n titleLeavePageConfirmation: 'המידע שהזנת לא יישמר. האם ברצונך להמשיך?',\r\n btnLogOff: 'התנתק',\r\n btnStayConnected: 'הישאר מחובר',\r\n btnGoToHomePage: 'עבור לעמוד הבית',\r\n lblReadDate: 'תאריך צפייה',\r\n msgDeleteNotificationTemplateQuestion: 'ייתכן ותבנית זו בשימוש על ידי המערכת. האם ברצונך למחוק אותה?',\r\n lblNotificationServerWrong: 'הגדרות שרת ההתראות אינן תקינות. בדוק אותן ונסה שנית',\r\n lblMIDIsMissing: \"חסר קוד MID\",\r\n lblEnterMID: \"הכנס קוד MID חדש.\",\r\n btnTestServer: 'בדוק שרת',\r\n btnShowPreview: \"תצוגה מקדימה\",\r\n lblIsServer: \"שרת\",\r\n lblIsClient: \"קליינט\",\r\n lblModuleName: \"מודול\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"הגדרה\",\r\n lblValue: \"ערך\",\r\n lblSectionName: \"סעיף\",\r\n lblAddOption: 'הוסף הגדרה',\r\n msgOptionAlreadyExists: 'ההגדרה כבר קיימת',\r\n msgOptionEmpty: 'הגדרה {0} ריקה',\r\n lblBadLogin: 'הזדהות נכשלה',\r\n msgRemoveOption: \"האם אתה בטוח שברצונך למחוק את האפשרות '{0}'?\",\r\n titleEmailConfiguration: \"תצורת אימייל\",\r\n titleSMSConfiguration: \"תצורת SMS\",\r\n msgDeleteNotificationServerQuestion: \"ניתן להשתמש בשרת הודעות באפליקציה. האם אתה בטוח שברצונך למחוק אותו?\",\r\n msgNoData: \"אין נתונים\",\r\n lblEmailHeader: \"כותרת מייל\",\r\n lblConfigure: \"הגדר\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"יש להקליד מספר טלפון שנמצא ברשימת White-list במערכת או שם שולח באנגלית בלבד, עד 11 תווים\",\r\n lblNotifications: \"התראות\",\r\n lblMinimize: \"צמצם\",\r\n lblShowMore: \"הצג עוד\",\r\n titleWhatsAppInformation: \"תבנית לשליחת WhatsApp\",\r\n lblWhatsAppBody: \"תוכן הודעה ב-WhatsApp\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"הגדרות WhatsApp\",\r\n titleNotificationDispatchList: \"$$$Notification dispatch list\",\r\n titleNotificationServerList: \"שרת התראות\",\r\n titleNotificationTemplateList: \"תבנית התראות\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"בחר אפשרות\",\r\n titleWebAPIAllowedIPs: \"כתובות IP מותרות\",\r\n lblIpAddress: \"כתובת IP\",\r\n lblLoginDate: \"תאריך חיבור\",\r\n lblPrint: \"הדפסה\",\r\n lblDateFrom: 'מתאריך',\r\n lblDateTo: 'עד תאריך',\r\n msgCouldNotStartVideoError: 'מצלמה אינה זמינה',\r\n msgCameraPermissionDenied: 'אין הרשאת גישה למצלמה',\r\n lblCameraModeVideo: 'וידאו',\r\n lblCameraModePhoto: 'תמונה',\r\n titlePreview: 'תצוגה מקדימה',\r\n msgLogoutQuestion: 'האם אתה בטוח שברצונך להתנתק?',\r\n lblGroupPanel: 'קיבוץ עמודות',\r\n lblExpandAll: 'הרחב הכל',\r\n lblMultiEmailError: 'ערך לא חוקי, השתמש בסמל ; על מנת להפריד בין המיילים',\r\n msgPhotoMinCountError: 'הספירה המינימלית היא {0}',\r\n msgPhotoMaxCountError: 'הספירה המקסימלית היא {0}',\r\n lblRestoreDefaultView: \"שחזר תצוגת ברירת מחדל\",\r\n lblStartDate: \"תאריך התחלה\",\r\n lblDuration: \"משך זמן\",\r\n lblController: \"קונטרולר\",\r\n lblMethod: \"שיטה\",\r\n lblStatusCode: \"קוד סטטוס\",\r\n lblRequestData: \"נתוני בקשה\",\r\n lblQueryString: \"פרמטרים ב URL\",\r\n lblBody: \"תוכן בקשה\",\r\n lblResponse: \"תוכן תשובה\",\r\n msgTextCopied: \"טקסט הועתק\",\r\n lblCopy: \"העתק\",\r\n btnGoToLoginHistory: \"עבור לדוח התחברויות\",\r\n btnGoToRequestsHistory: \"עבור לדוח פניות לשרת\",\r\n btnGoToCredentialsReport: \"עבור לדוח משתמשים\",\r\n btnManageCredentials: \"נהל פרטי התחברות\",\r\n btnWelcomeUser: \"שליחת הודעת ברוך-הבא\",\r\n lblTestFromPhone: \"מטלפון\",\r\n lblNewValue: \"ערך חדש\",\r\n lblOldValue: \"ערך ישן\",\r\n lblFieldCaption: \"שדה\",\r\n lblDocumentCaption: \" מסך\",\r\n lblAction: \"פעולה\",\r\n lblHistoryLineAdded: \"{0} - שורה מספר {1} נוספה.\",\r\n lblHistoryLineRemoved: \"{0} - שורה מספר {1} נמחקה.\",\r\n lblHistoryLineNumber: \"{0} - שורה מספר {1}\",\r\n lblHistory: \"היסטורית שינוים\",\r\n lblHistoryNotFound: \"לא נמצאו שינויים.\",\r\n lblHistoryChangeAdded: \"{0} {1} נוצר\",\r\n lblHistoryChangeRemoved: \"{0} {1} נמחק\",\r\n msgLoadingPDF: 'טוען קובץ PDF...',\r\n lblImpersonatedBy: 'בוצעה התחזות ע\"י',\r\n lblIsUserCustomTemplate: \"תבנית שבוצעו בה התאמות מיוחדות\",\r\n msgIsUserCustomTemplateEnable: \"אם אפשרות העריכה תופעל, תוכל לערוך את התבנית, אך במקרה של עדכון גרסה עתידי, המערכת לא תוכל לעדכן תבנית זו באופן אוטומטי במידה ויהיו בה שינויים.\",\r\n btnEnableEditable: \"הפעל אפשרות לעריכה\",\r\n btnDisableEditable: \"בטל אפשרות לעריכה\",\r\n msgScreenSizeChangedRefresh: '$$$Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: '$$$Orientation is changed. Please refresh browser window.',\r\n lblNotAssigned: \"- לא משוייך -\",\r\n msgNotificationSentTo: ' הקוד נשלח ל {0}', \r\n lblDeliveryMethod: '$$$Delivery Method',\r\n lblNotificationDispatch: '$$$Notification Dispatch',\r\n lblRecipients: '$$$Recipients',\r\n lblPreview: '$$$Preview',\r\n msgRecipientsAreEmpty: '$$$You have to add at least one recipient',\r\n lblCreatedBy: 'נוצר על ידי',\r\n btnCancelNotifications: '$$$Cancel notifications',\r\n lblCancelNotificationsPrompt: '$$$You are going to cancel unread Push notifications. Do you want to proceed?',\r\n lblNotificationMessage: '$$$Notification Message',\r\n lblIsDeleted: '$$$Deleted',\r\n lblShareMethodEmail: '$$$Email',\r\n lblShareMethodSms: '$$$SMS',\r\n lblShareMethodWhatsapp: '$$$WhatsApp',\r\n lblShareMethodPrint: '$$$Print',\r\n lblShare: '$$$Share',\r\n lblEntityType: '$$$Entity type',\r\n lblPageName: '$$$Page',\r\n btnSend: '$$$Send',\r\n lblChooseTemplate: '$$$Choose template',\r\n lblShareMethodDownload: '$$$Download',\r\n lblShareMethodShare: '$$$Share',\r\n lblUploadCrystalTemplate: '$$$Upload crystal tempalte',\r\n lblNotificationTemplateEditingMode: '$$$Body editing mode',\r\n msgShareNotificationTemplateNotFoundError: '$$$Notification templates are not configured for this page',\r\n btnShare: 'Share',\r\n msgNotificationTemplatePrefixNotFoundError: '$$$ $PrefixBody$ param is missing',\r\n lblPrefixBody: '$$$Prefix body',\r\n lblIsSharePdf: '$$$Share PDF',\r\n lblFileNameFormat: '$$$File name format',\r\n lblEntityBindingPageType: '$$$Bind to',\r\n titleEntityBindingInformation: '$$$Entity binding',\r\n msgNotificationTemplateFileMissingError: '$$$Crystal report template is missing',\r\n lblSharedFile: '$$$Shared file',\r\n msgNotificationTemplateEmptyError: '$$$Cannot save empty template',\r\n lblIsSupportEmail: '$$$Support Email',\r\n lblIsSupportSMS: '$$$Support SMS',\r\n lblIsSupportWhatsapp: '$$$Support Whatsapp',\r\n lblIsSupportPush: '$$$Support push',\r\n lblIsSupportSharing: '$$$Support sharing',\r\n lblIsShareByEntities: '$$$Share by entities',\r\n ttlLogs: \"$$$Logs\",\r\n lblObjectType: \"$$$Object type\",\r\n lblObjectID: \"$$$Object ID\",\r\n lblLevel: \"$$$Level\",\r\n lblHeader: '$$$Header',\r\n }\r\n};\r\n\r\n\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptionDataTypes,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_ES =\r\n{\r\n Pages:\r\n {\r\n login: 'Iniciar sesión en el sistema',\r\n logout: 'Cerrar sesión',\r\n credentials_activity_status: 'Estado de actividad del usuario',\r\n notificationshistory: 'Informe de notificaciones',\r\n notification_dispatches: 'Envíos de notificaciones',\r\n notification_servers: 'Servidores de notificación',\r\n notification_templates: 'Plantillas de notificación',\r\n notifications: 'Notificaciones',\r\n system_options: 'Opciones del sistema',\r\n credential_login_history: \"Informe del historial de inicio de sesión\",\r\n request_history: \"Solicitar historial\",\r\n credentials_report: 'Informe de credenciales',\r\n credentials_creation: 'Nueva asignación de credenciales',\r\n data_views: 'Gestión de vistas de la base de datos',\r\n menu: 'Menú',\r\n remote_request_history: \"Historial de peticiones remotas\",\r\n NotificationViewComponent: 'Notificación',\r\n PrintBoxDialogComponent: 'Imprimir',\r\n SignBoxDialogComponent: 'Firmar documento',\r\n ImageBoxDialogComponent: 'Imagen',\r\n PhotoBoxDialogComponent: 'Foto',\r\n PasswordManageComponent: 'Gestión de credenciales',\r\n CredentialsActivityStatusComponent: 'Estado de actividad del usuario',\r\n NotificationsHistoryComponent: 'Informe de notificaciones',\r\n PreviewDialogComponent: 'Vista previa',\r\n NotificationDispatchComponent: 'Envío de notificaciones',\r\n NotificationDispatchListComponent: 'Envíos de notificaciones',\r\n NotificationServerComponent: 'Servidor de notificaciones',\r\n NotificationServerListComponent: 'Servidores de notificación',\r\n NotificationTemplateListComponent: 'Plantillas de notificación',\r\n NotificationTemplateComponent: 'Plantilla de notificación',\r\n HtmlBoxDialogComponent: 'Editor HTML',\r\n NotificationTestDialogComponent: 'Prueba de notificación',\r\n NotificationPreviewDialogComponent: 'Vista previa de la notificación',\r\n SystemOptionsComponent: 'Opciones del sistema',\r\n AddSystemOptionDialogComponent: 'Añadir opción',\r\n BarcodeBoxDialogComponent: 'Escanear código de barras/código QR',\r\n CredentialLoginHistoryComponent: \"Informe del historial de inicio de sesión\",\r\n RequestHistoryListComponent: \"Solicitar historial\",\r\n RequestHistoryComponent: \"Solicitar\",\r\n RemoteRequestHistoryListComponent: \"Historial de solicitudes remotas\",\r\n RemoteRequestHistoryComponent: \"Solicitud remota\",\r\n WelcomeUserDialogComponent: \"Mensaje de bienvenida\",\r\n HistoryViewComponent: 'Historial de cambios del documento',\r\n SystemCredentialsComponent: 'Informe de credenciales',\r\n SystemCredentialsCreationComponent: 'Nueva asignación de credenciales',\r\n WelcomeMessageConfigDialogComponent: 'Notificación de bienvenida',\r\n DataViewListComponent: 'Vistas de datos',\r\n MenuButtonListComponent: 'Menú principal',\r\n ShareDialogComponent: 'Compartir',\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"Hebreo/עברית\",\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"Inglés/אנגלית\"\r\n },\r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"Español/ספרדית\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS'\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: 'Ninguna',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: 'Solo vista previa',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: 'Editar prefijo',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: 'Editar cuerpo',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'Teléfono',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'No enviar',\r\n ID: 4,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n SortOrder: 1,\r\n index: 0,\r\n text: 'Correo electrónico',\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n SortOrder: 2,\r\n index: 1,\r\n text: 'SMS',\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Mensaje push',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'Mensaje push',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: 'Compartir',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'Compartir',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"Borrador\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"Enviando\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"Fallo\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"Enviado\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"Ninguno\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"Correo electrónico\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"Excel\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"Imprimir\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"Ninguno\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"Por mostrar\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"Mostrados\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'Nombre de la aplicación Hebreo'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'Nombre de la aplicación Inglés'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'URL de la aplicación'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'Tiempo de espera de la sesión'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'Expiración de la sesión'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'Activar el registro de solicitudes'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'Activar el registro remoto'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'Mostrar alerta de tiempo expirado',\r\n DataType: EnumSystemOptionDataTypes.Boolean,\r\n SectionName: 'Framework'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'Mostrar alerta de tiempo casi expirado'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'Gestión de credenciales de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'Bienvenida al usuario de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'Cambio de contraseña de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'Recuperación de contraseña de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'Acceso de asistencia mediante OTP'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'Acceso de asistencia mediante contraseña'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'Crear credenciales automáticamente'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'Crear automáticamente el tipo de credenciales'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'Requerir número de identificación fiscal para OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'Intervalo de cambio de contraseña, días'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'Longitud de la complejidad de la contraseña'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'Complejidad de la contraseña Símbolos de caracteres mínimos'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'Complejidad de la contraseña Símbolos de dígitos mínimos'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'Inicio de sesión incorrecto. Intento antes del bloqueo'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'Inicio de sesión incorrecto. Intervalo de comprobación de intentos, minutos'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'Inicio de sesión incorrecto. Intervalo de bloqueo de intentos, minutos'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'Opciones de bloqueo de XFrame'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'Desplegado tras equilibrador de carga / proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'Método de notificación de asistencia por correo electrónico'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'Método de notificación de asistencia por SMS'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'Método de notificación de asistencia por WhatsApp'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'Periodo de retención de solicitudes'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'Periodo de retención de solicitudes remotas'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'Período de retención de notificaciones'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'Periodo de retención de las sesiones'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: 'Tiempo de espera para congelar la huella digital de la sesión (minutos)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"Todos\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"Éxito\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"Fallo\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"Éxito\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"Fallo\"\r\n },\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"Campo cambiado\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"Fila añadida\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"Fila eliminada\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Especial\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Sí'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: 'Ninguno'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: 'Informe'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: 'Entidad'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Aviso'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"Idioma\",\r\n lblUserName: \"Nombre de usuario\",\r\n lblPassword: \"Contraseña\",\r\n titleLogin: \"Inicio de sesión en el sistema\",\r\n btnLogin: \"Iniciar sesión\",\r\n btnLogout: 'Cerrar sesión',\r\n btnChangePassword: 'Cambiar contraseña',\r\n btnContactUs: \"Contacta con nosotros\",\r\n btnRecoverPassword: 'Contraseña olvidada',\r\n lblSaveCredentials: 'Recuérdame',\r\n titleLogout: \"Cerrar sesión\",\r\n titleLogoutLong: \"Sesión cerrada con éxito\",\r\n titleLogoutLast: \"Te estamos redirigiendo a la pantalla de inicio de sesión\",\r\n titleSessionExpiredTitle: \"Sesión caducada\",\r\n titleSessionExpired: \"Se ha cerrado tu sesión por inactividad o por un cambio en las credenciales de usuario en el servidor. Por favor, accede de nuevo\",\r\n titleChangePasswordTitle: \"Cambiar contraseña\",\r\n titleChangePassword: \"Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática\",\r\n titleChangePasswordTitle2: \"Cambiar contraseña caducada\",\r\n titleException: \"Error del sistema\",\r\n titleExceptionLong: \"Los detalles del error se muestran más abajo. Por favor, envíalos al administrador del sistema.\\nSe ha producido un error inesperado:\",\r\n titleComingSoonTitle: \"Esta característica estará disponible próximamente\",\r\n titlePasswordChanged: 'La contraseña se ha cambiado correctamente. Por favor, usa tu nueva contraseña para iniciar sesión de nuevo',\r\n titleIdentification: 'Identificación del usuario',\r\n titlePasswordEntry: 'Nueva entrada de contraseña',\r\n titleRecoverPasswordTitle: 'Recuperar contraseña olvidada',\r\n titleWelcomePasswordTitle: 'Primer inicio de sesión en el sistema',\r\n titleRecoverPassword1: 'Introduce tu nombre de usuario',\r\n titleRecoverPassword2: 'Puedes recuperar tu contraseña olvidada, siempre que tengas acceso al correo electrónico o teléfono que está guardado en tu cuenta',\r\n titleRecoverPassword3: 'Para cambiar la contraseña, por favor, introduce el código de verificación que te enviamos',\r\n titleRecoverPassword4: 'Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática.',\r\n titleWelcomePassword2: '¡Bienvenido/a! Por favor, introduce el nombre de usuario y el código de verificación que has recibido, para proceder a configurar tu nueva contraseña',\r\n titleWelcomePassword3: \"Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática. A partir de ahora, usarás esta contraseña para entrar en el sistema\",\r\n btnReEntry: \"Volver a iniciar sesión\",\r\n genOK: 'OK',\r\n genYes: \"Sí\",\r\n genNo: \"No\",\r\n genCancel: \"Cancelar\",\r\n genNoData: \"No existen datos\",\r\n genPrint: 'Imprimir',\r\n genSign: 'Firmar',\r\n genReset: 'Resetear',\r\n genTakePhoto: 'Hacer foto',\r\n genSavePhotos: 'Guardar fotos',\r\n genDownload: 'Descargar',\r\n msgSignHere: 'Por favor, traza tu firma dentro del cuadrado',\r\n msgSignatureRequired: 'Debes introducir tu firma para continuar',\r\n msgPasswordsDontMatch: 'La contraseña y la confirmación de la contraseña no coinciden',\r\n errorNetwork: \"Error de comunicación con el servidor - comprueba tu conexión de red\",\r\n errorSessionExpired: \"Sesión caducada por inactividad\",\r\n errorUserInvalid: \"Los datos de usuario han cambiado. Por favor, accede de nuevo\",\r\n errorNotInitialized: \"No se ha podido iniciar la sesión porque los ajustes del sistema no se han cargado correctamente. Por favor, vuelve a cargar la página\",\r\n errorUnexpected: \"@@@Ha ocurrido un error inesperado del servidor@@@: {0}\",\r\n errorUnauthorized: \"El usuario no está autorizado para esta operación\",\r\n errorPasswordExpired: \"La contraseña ha caducado. Por favor, elige una contraseña diferente\",\r\n msgFinishEditing: \"Por favor, termina de editar la línea actual antes de añadir la nueva\",\r\n errorUserNameNotFound: \"Nombre de usuario no encontrado\",\r\n errorIsNotExistsPhoneAndEmail: \"No se ha definido un correo electrónico ni un teléfono. Ponte en contacto con el servicio de asistencia técnica\",\r\n errorSessionIsFrozen: \"La sesión se ha congelado por usar la misma credencial en otro dispositivo\",\r\n lblDay1: \"Domingo\",\r\n lblDay2: \"Lunes\",\r\n lblDay3: \"Martes\",\r\n lblDay4: \"Miércoles\",\r\n lblDay5: \"Jueves\",\r\n lblDay6: \"Viernes\",\r\n lblDay7: \"Sábado\",\r\n lblDay1s: \"Dom\",\r\n lblDay2s: \"Lun\",\r\n lblDay3s: \"Mar\",\r\n lblDay4s: \"Mie\",\r\n lblDay5s: \"Jue\",\r\n lblDay6s: \"Vie\",\r\n lblDay7s: \"Sáb\",\r\n msgSuccess: \"Operación completada con éxito\",\r\n msgNotPerformed: \"No se puede completar la operación\",\r\n lblTimes: 'momentos',\r\n lblUser: \"Usuario estándar\",\r\n btnCancelDocument: 'Cancelar documento',\r\n lblBy: 'Por',\r\n titleCreatedBy: 'Creado por',\r\n titleCreated: 'Creado',\r\n titleCreatedAt: 'Creado en',\r\n titleAgo: 'Ago',\r\n lblAgo: 'ago',\r\n lblSearch: 'Búsqueda',\r\n lblCloseSearch: 'Cerrar búsqueda',\r\n lblColumnChooser: 'Mostrar selector de columnas',\r\n lblColumnHiding: 'Alternar ocultar columnas',\r\n lblShowGridFilter: 'Mostrar filtros avanzados',\r\n lblHideGridFilter: 'Ocultar filtros avanzados',\r\n lblExcel: 'Exportar a Excel',\r\n lblPdf: 'Exportar a PDF',\r\n lblViewList: 'Ver como lista de tarjetas',\r\n lblViewGrid: 'Ver como tabla',\r\n lblDisplayUserName: 'Nombre de usuario',\r\n lblLastUseDate: 'Última acción en',\r\n lblLastUseBefore: 'Última acción antes de',\r\n progressIndicator: 'Transfiriendo datos.. Por favor, espere',\r\n lblUpdated: 'Actualizado',\r\n lblNoSorting: '- Por defecto -',\r\n lblVersion: 'Versión',\r\n lblDateIsNull: \"La fecha es nula\",\r\n lblDateApproximate: \"{0} {1} {2}\",\r\n f702: \"menos de un minuto\",\r\n f703: \"5 minutos\",\r\n f704: \"10 minutos\",\r\n f705: \"15 minutos\",\r\n f706: \"media hora\",\r\n f707: \"menos de una hora\",\r\n f709: \"hora y media\",\r\n f710: \"más de dos horas\",\r\n f711: \"{0} horas\",\r\n f712: \"día\",\r\n f713: \"dos días\",\r\n f714: \"{0} días\",\r\n f715: \"más de una semana\",\r\n f716: \"más de dos semanas\",\r\n f717: \"{0} semanas\",\r\n f718: \"más de un mes\",\r\n f720: \"dos meses\",\r\n f721: \"{0} meses\",\r\n f722: \"más de un año\",\r\n f723: \"más de dos años\",\r\n f724: \"{0} años\",\r\n f725: \"menos de un día\",\r\n lblOldPassword: 'Contraseña antigua',\r\n lblNewPassword1: 'Nueva contraseña',\r\n lblNewPassword2: 'Confirmar contraseña',\r\n lblRecoveryType: 'Método de recuperación de contraseña',\r\n lblRecoveryPhone: 'Número de teléfono para recuperar la contraseña',\r\n lblRecoveryEmail: 'Dirección de correo electrónico para la recuperación de la contraseña',\r\n btnSendNotificationDispatch: 'Enviar',\r\n btnSendRecoveryCode: 'Enviar código de verificación',\r\n btnCheckUserName: 'Recuperar contraseña',\r\n btnBackToLogin: 'Volver a la página de inicio de sesión',\r\n lblRecoveryToken: 'Código de verificación',\r\n btnResend: 'Enviar de nuevo',\r\n btnSaveChanges: 'Guardar cambios',\r\n btnGeneratePassword: 'Generar contraseña',\r\n btnCreateCredentials: 'Crear credenciales',\r\n btnUnlockUser: 'Desbloquear usuario',\r\n lblDisplayUsername: 'Mostrar nombre de usuario',\r\n lblDisplayUserDescription: 'Mostrar descripción del usuario',\r\n lblCredentialsNotExist: 'Usuario aún no creado',\r\n lblPendingWelcome: 'Usuario pendiente de activación a través del enlace de bienvenida',\r\n titleUserInformation: 'Información para el usuario',\r\n errorMaxSizeUploadError: 'El tamaño de algunos archivos seleccionados es mayor que {0} y se excluyen de forma automática de la selección.',\r\n msgFileSizeRestriction: 'El tamaño máximo del archivo es {0}.',\r\n btnSelectFiles: 'Elegir archivos',\r\n btnMakePhoto: 'Hacer foto',\r\n lblAttachFileSize: 'Tamaño del archivo',\r\n lblFilters: 'Filtros',\r\n lblAt: 'En',\r\n\r\n lblObjectName: 'Nombre del objeto',\r\n lblIsOverride: 'Es anulado',\r\n lblValidation: 'Es válido',\r\n lblDViewsDBDuration: 'Duración original',\r\n lblXViewsDBDuration: 'Duración anulada',\r\n lblCheckPerformance: 'Comprobar el rendimiento',\r\n lblValidateViews: 'Validar la estructura',\r\n lblViewError: 'Error',\r\n\r\n lblLoginOTPSendMethod: 'Enviar contraseña de un solo uso a través de',\r\n lblLoginOTPEmail: 'Dirección de correo electrónico para enviar la contraseña de un solo uso',\r\n lblLoginOTPPhone: 'Número de teléfono para enviar la contraseña de un solo uso',\r\n lblLoginOTPOTP: 'Contraseña de un solo uso',\r\n lnkLoginByOTP: 'Iniciar sesión con contraseña de un solo uso',\r\n msgNotificationSent: 'La notificación está enviada',\r\n btnLoginOtpSendOtp: 'Enviar contraseña',\r\n lnkLoginByPassword: 'Iniciar sesión mediante contraseña',\r\n\r\n lblApply: 'Aplicar',\r\n lblTaxNumber: 'Número de identificación fiscal',\r\n\r\n lblIsActive: 'Activo',\r\n lblEmail: 'Correo electrónico',\r\n lblPhone: 'Teléfono',\r\n lblIsPendingWelcome: 'Pendiente de Bienvenida',\r\n lblIsOnline: 'Está en línea',\r\n lblIsLockedOut: 'Está bloqueado',\r\n lblCreateCredentials: 'Crear credenciales',\r\n lblCredentialFilter: 'Filtro de credenciales',\r\n\r\n msgRouteNotFound: 'Ruta no encontrada',\r\n btnReload: 'Recargar',\r\n lblHideColumn: 'Ocultar columna',\r\n lblShowHiddenColumns: 'Mostrar columnas ocultas',\r\n\r\n lblName: 'Nombre',\r\n lblDescription: 'Descripción',\r\n\r\n msgLoading: \"Procesando, por favor espere\",\r\n lblSentDate: \"Fecha de envío\",\r\n lblSentBy: \"Enviado por\",\r\n lblEntryID: \"ID\",\r\n lblFromAddress: \"De la dirección\",\r\n lblFromDisplayAddress: \"Del nombre\",\r\n lblAddress: \"Dirección\",\r\n lblSubject: \"Asunto\",\r\n lblMailBody: \"Cuerpo\",\r\n lblDeliveryOption: \"Opción de envío\",\r\n lblSendNotificationBy: \"Enviar notificación por\",\r\n lblUsernameCreationOption: 'Creación del nombre de usuario por',\r\n lblStatus: \"Estado\",\r\n lblToAddress: \"Para\",\r\n lblCCAddress: \"CC\",\r\n lblBccAddress: \"BCC\",\r\n lblFailureDescription: \"Descripción del fallo\",\r\n lblNotificationTemplate: \"Nombre de la plantilla\",\r\n lblFrom: \"De \",\r\n lblUntil: \"Hasta \",\r\n\r\n lblAdd: \"Añadir\",\r\n lblClear: \"Limpiar\",\r\n lblCompactMode: \"Modo compacto\",\r\n\r\n lblSessionAlmostExpiredTitle: \"La sesión expirará pronto\",\r\n lblSessionAlmostExpiredPrompt: \"Se ha detectado un largo periodo de inactividad. Su sesión expirará pronto\",\r\n lblSessionExpiredTitle: \"Sesión expirada\",\r\n lblFirstDate: \"Primera fecha\",\r\n lblLastDate: \"Última fecha\",\r\n lblSessionExpiredPrompt: \"Su sesión ha expirado. Se le redirigirá automáticamente a la página de inicio de sesión.\",\r\n\r\n lblNotificationContent: \"Notificación de contenido\",\r\n lblGeneral: \"General\",\r\n lblOptions: \"Opciones\",\r\n lblCustom: \"Personalizado\",\r\n\r\n lblMFACode: \"Código\",\r\n titleMFACodeOnEmailSent: \"La contraseña de un solo uso ha sido enviada a su correo electrónico. Introdúzcala más abajo\",\r\n titleMFACodeOnPhoneSent: \"La contraseña de un solo uso ha sido enviada a su móvil. Introdúzcala más abajo\",\r\n\r\n lblMFAMethod: \"Autentificación multifactor\",\r\n Month_1: \"Enero\",\r\n Month_2: \"Febrero\",\r\n Month_3: \"Marzo\",\r\n Month_4: \"Abril\",\r\n Month_5: \"Mayo\",\r\n Month_6: \"Junio\",\r\n Month_7: \"Julio\",\r\n Month_8: \"Augosto\",\r\n Month_9: \"Septiembre\",\r\n Month_10: \"Octubre\",\r\n Month_11: \"Noviembre\",\r\n Month_12: \"Diciembre\",\r\n\r\n lblExport: \"Exportar\",\r\n lblCredentialType: \"Tipo de credencial\",\r\n lblIsRestrictByIP: \"Restringir por IP\",\r\n lblIsExcludeFromMFA: \"Excluir de la MFA\",\r\n lblIPRangeStart: \"Inicio del rango IP\",\r\n lblIPRangeEnd: \"Fin del rango IP\",\r\n lblIPErrorMessage: \"Una dirección IP debe tener un formato "000.000.000.000"\",\r\n msgIPRangesIsEmpty: \"Debe añadir al menos una dirección/rango IP\",\r\n msgIPRangeIsEmpty: \"Introduzca una dirección/rango IP válido\",\r\n msgPasswordMinLength: \"La longitud de la contraseña debe ser de al menos {0} símbolos.\",\r\n msgPasswordMinCountDigits: \"La contraseña debe contener al menos {0} dígitos.\",\r\n msgPasswordMinCountLetters: \"La contraseña debe contener al menos {0} letras.\",\r\n msgPasswordComplexityRequirement: \"La longitud de la contraseña debe ser de al menos {0} símbolos, con un mínimo de {1} dígitos y {2} letras.\",\r\n errorOnlyImageAllowed: \"Solo se permiten imágenes.\",\r\n btnClose: \"Cerrar\",\r\n lblPhoto: \"Foto\",\r\n\r\n lblDragAndDrop: \"Puede arrastrar y soltar archivos aquí\",\r\n errorRequiredMessage: \"Campo obligatorio\",\r\n titleDuplicate: \"Duplicar\",\r\n lblAllNotifications: \"Todas las notificaciones\",\r\n\r\n lblSMTPServer: \"Servidor SMTP\",\r\n lblSMTPPort: \"Puerto SMTP\",\r\n lblSMTPUserName: \"Nombre de usuario SMTP\",\r\n lblSMTPPassword: \"Contraseña SMTP\",\r\n lblSMTPUseSSL: \"SMTP usa SSL\",\r\n lblSMSEndpoint: \"Punto final SMS\",\r\n lblSMSUserName: \"Nombre de usuario SMS\",\r\n lblSMSPassword: \"Contraseña SMS\",\r\n lblSMSToken: \"Token SMS\",\r\n lblSMSEndPointIsInforU: \"Proveedor de SMS\",\r\n\r\n titleTemplateInformation: \"Información sobre la plantilla de notificación\",\r\n titleEmailInformation: \"Ajustes de la plantilla de correo electrónico\",\r\n lblFromEmail: \"Del correo electrónico\",\r\n lblFromEmailDisplay: \"Desde la pantalla de correo electrónico\",\r\n titlePhoneInformation: \"Ajustes de la plantilla SMS\",\r\n lblNotificationServer: \"Servidor de notificaciones\",\r\n lblFromPhone: \"Desde el teléfono\",\r\n lblSMSBody: \"Cuerpo del SMS\",\r\n titlePushMessagesInformation: \"Configuración de la plantilla de mensajes push\",\r\n lblPushMessageBody: \"Cuerpo del mensaje push\",\r\n lblHTMLBody: \"Cuerpo HTML\",\r\n btnSave: 'Guardar',\r\n titleDelete: 'Eliminar',\r\n lblUseDefault: 'Usar por defecto',\r\n lblNoUnreadMessages: 'No hay mensajes no leídos',\r\n lblTo: 'Para',\r\n lblPushMessageContent: 'Contenido del mensaje push',\r\n lblSmsMessageContent: 'Contenido del mensaje SMS',\r\n lblIsAutomatic: 'Es automático',\r\n lblSystem: 'Sistema',\r\n lblPopupShowStatus: 'Estado de la ventana emergente',\r\n lblEmailContent: 'Contenido del correo electrónico',\r\n btnShowInEditor: 'Mostrar en el editor',\r\n titleLeavePageConfirmation: 'Se perderán los datos, ¿quiere continuar?',\r\n btnLogOff: 'Cerrar sesión',\r\n btnStayConnected: 'Permanecer conectado',\r\n btnGoToHomePage: 'Ir a la página de inicio',\r\n lblReadDate: 'Fecha de lectura',\r\n msgDeleteNotificationTemplateQuestion: 'La plantilla de notificación podría ser usada por la aplicación. ¿Está seguro de que quiere eliminarla?',\r\n lblNotificationServerWrong: 'La configuración del servidor de notificación es incorrecta. Por favor, realice los cambios e inténtelo de nuevo',\r\n msgInvalidEmail: 'El correo electrónico no es válido o tiene un formato incorrecto',\r\n btnTestServer: 'Servidor de prueba',\r\n lblMIDIsMissing: \"Falta el MID\",\r\n lblEnterMID: \"Introduzca el nuevo código MID.\",\r\n btnShowPreview: \"Mostrar vista previa\",\r\n lblIsServer: \"Servidor\",\r\n lblIsClient: \"Cliente\",\r\n lblModuleName: \"Módulo\",\r\n lblLogin: \"Inicio de sesión\",\r\n lblFramework: \"Marco\",\r\n lblOption: \"Opción\",\r\n lblValue: \"Valor\",\r\n lblSectionName: \"Valor\",\r\n lblAddOption: 'Añadir opción',\r\n msgOptionAlreadyExists: 'La opción ya existe',\r\n msgOptionEmpty: 'La opción {0} está vacía',\r\n lblBadLogin: 'Inicio de sesión incorrecto',\r\n msgRemoveOption: \"¿Está seguro de que quiere eliminar la opción '{0}'?\",\r\n titleEmailConfiguration: \"Configuración del correo electrónico\",\r\n titleSMSConfiguration: \"Configuración de SMS\",\r\n msgDeleteNotificationServerQuestion: \"El servidor de notificaciones podría usarse en la aplicación. ¿Está seguro de que quiere eliminarlo?\",\r\n msgNoData: \"Sin datos\",\r\n lblEmailHeader: \"Encabezado del correo electrónico\",\r\n lblConfigure: \"Configurar\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"Por favor, introduzca un número de teléfono de la lista blanca de nombre de hasta 11 caracteres en inglés\",\r\n lblNotifications: \"Notificaciones\",\r\n lblMinimize: \"Minimizar\",\r\n lblShowMore: \"Mostrar más\",\r\n titleWhatsAppInformation: \"Ajustes de la plantilla de WhatsApp\",\r\n lblWhatsAppBody: \"Cuerpo del mensaje de WhatsApp\",\r\n lblWhatsAppApiKey: \"Clave API de WhatsApp\",\r\n lblWhatsAppEndpoint: \"Punto final de WhatsApp\",\r\n titleWhatsAppConfiguration: \"Configuración de WhatsApp\",\r\n titleNotificationDispatchList: \"Lista de envío de notificaciones\",\r\n titleNotificationServerList: \"Lista de servidores de notificación\",\r\n titleNotificationTemplateList: \"Lista de plantillas de notificación\",\r\n\r\n lblPoweredBy: \"Desarrollado por Menahel4U\",\r\n titleChooseOption: \"Elija una opción\",\r\n titleWebAPIAllowedIPs: \"IPs permitidas\",\r\n lblIpAddress: \"Dirección IP\",\r\n lblLoginDate: \"Fecha de inicio de sesión\",\r\n lblPrint: \"Imprimir\",\r\n lblDateFrom: 'Fecha desde',\r\n lblDateTo: 'Fecha hasta',\r\n lblDate: \"Fecha\",\r\n msgCouldNotStartVideoError: 'La cámara no está disponible',\r\n msgCameraPermissionDenied:'Permiso de cámara denegado',\r\n lblCameraModeVideo: 'Video',\r\n lblCameraModePhoto: 'Foto',\r\n titlePreview: 'Vista previa',\r\n msgLogoutQuestion: '¿Está seguro de que quiere cerrar la sesión?',\r\n lblGroupPanel: 'Arrastrar columna al grupo',\r\n lblExpandAll: 'Ampliar todo',\r\n lblMultiEmailError: 'El valor no es válido. Usar el símbolo ; como separador de correo electrónico',\r\n msgPhotoMinCountError: 'El recuento mínimo es {0}',\r\n msgPhotoMaxCountError: 'El recuento máximo es {0}',\r\n lblRestoreDefaultView: \"Restaurar vista por defecto\",\r\n lblStartDate: \"Fecha de inicio\",\r\n lblDuration: \"Duración\",\r\n lblController: \"Controlador\",\r\n lblAction: \"Acción\",\r\n lblMethod: \"Método\",\r\n lblStatusCode: \"Código de estado\",\r\n lblRequestData: \"Solicitar datos\",\r\n lblQueryString: \"Cadena de consulta\",\r\n lblBody: \"Cuerpo\",\r\n lblResponse: \"Respuesta\",\r\n msgTextCopied: \"Texto copiado\",\r\n lblCopy: \"Copiar\",\r\n btnGoToLoginHistory: \"Ir al historial de inicio de sesión\",\r\n btnGoToRequestsHistory: \"Ir al historial de solicitudes\",\r\n btnManageCredentials: \"Gestionar credenciales\",\r\n btnGoToCredentialsReport: \"Ir al informe de credenciales\",\r\n btnWelcomeUser: \"Enviar mensaje de bienvenida\",\r\n lblTestFromPhone: \"Desde el teléfono\",\r\n lblHistory: \"Registro de cambios\",\r\n lblNewValue: \"Nuevo valor\",\r\n lblOldValue: \"Valor antiguo\",\r\n lblFieldCaption: \"Campo\",\r\n lblDocumentCaption: \" Documento\",\r\n lblHistoryLineAdded: \"{0} {1} fue añadida.\",\r\n lblHistoryLineRemoved: \"{0} {1} fue eliminada.\",\r\n lblHistoryLineNumber: \"{0} {1}\",\r\n lblHistoryNotFound: \"No se han encontrado cambios.\",\r\n lblHistoryChangeAdded: \"{0} {1} fue creado\",\r\n lblHistoryChangeRemoved: \"{0} {1} fue eliminado\",\r\n msgLoadingPDF: 'Cargando archivo PDF...',\r\n lblImpersonatedBy: 'Personificado por',\r\n lblIsUserCustomTemplate: \"Plantilla personalizada del usuario\",\r\n msgIsUserCustomTemplateEnable: \"Si la opción 'Editable' está activada, podrá cambiar la plantilla manualmente, pero el sistema no podrá actualizarla de forma automática.\",\r\n btnEnableEditable: \"Activar editable\",\r\n btnDisableEditable: \"Desactivar editable\",\r\n msgScreenSizeChangedRefresh: 'El tamaño de la pantalla ha cambiado. Por favor, actualice la ventana del navegador.',\r\n msgOrientationChangedRefresh: 'La orientación ha cambiado. Por favor, actualice la ventana del navegador.',\r\n lblDeliveryMethod: 'Método de envío',\r\n lblNotificationDispatch: 'Envío de notificación',\r\n lblRecipients: 'Destinatarios',\r\n lblPreview: 'Vista previa',\r\n msgRecipientsAreEmpty: 'Debe añadir al menos un destinatario',\r\n lblCreatedBy: 'Creado por',\r\n btnCancelNotifications: 'Cancelar notificaciones',\r\n lblCancelNotificationsPrompt: 'Va a cancelar las notificaciones Push no leídas. ¿Quiere continuar?',\r\n lblNotificationMessage: 'Mensaje de notificación',\r\n lblIsDeleted: 'Eliminado',\r\n lblShareMethodEmail: 'Correo electrónico',\r\n lblShareMethodSms: 'SMS',\r\n lblShareMethodWhatsapp: 'WhatsApp',\r\n lblShareMethodPrint: 'Imprimir',\r\n lblShare: 'Compartir',\r\n lblEntityType: 'Tipo de entidad',\r\n lblPageName: 'Página',\r\n btnSend: 'Enviar',\r\n lblChooseTemplate: 'Elegir plantilla',\r\n lblShareMethodDownload: 'Descargar',\r\n lblShareMethodShare: 'Compartir',\r\n lblUploadCrystalTemplate: 'Subir plantilla de Crystal',\r\n lblNotificationTemplateEditingMode: 'Modo de edición del cuerpo',\r\n msgShareNotificationTemplateNotFoundError: 'Las plantillas de notificación no están configuradas para esta página',\r\n btnShare: 'Compartir',\r\n msgNotificationTemplatePrefixNotFoundError: '$PrefixBody$ falta un parámetro',\r\n lblPrefixBody: 'Cuerpo del prefijo',\r\n lblIsSharePdf: 'Compartir PDF',\r\n lblFileNameFormat: 'Formato del nombre del archivo',\r\n lblEntityBindingPageType: 'Vincular a',\r\n titleEntityBindingInformation: 'Vinculación de la entidad',\r\n msgNotificationTemplateFileMissingError: 'Falta la plantilla del informe de Crystal',\r\n lblSharedFile: 'Archivo compartido',\r\n msgNotificationTemplateEmptyError: 'No se puede guardar la plantilla vacía',\r\n lblIsSupportEmail: 'Correo electrónico de asistencia',\r\n lblIsSupportSMS: 'SMS de asistencia',\r\n lblIsSupportWhatsapp: 'WhatsApp de asistencia',\r\n lblIsSupportPush: 'Push de asistencia',\r\n lblIsSupportSharing: 'Compartir asistencia',\r\n lblIsShareByEntities: 'Compartir por entidades',\r\n ttlLogs: \"Registros\",\r\n lblObjectType: \"Tipo de objeto\",\r\n lblObjectID: \"ID del objeto\",\r\n lblLevel: \"Nivel\",\r\n lblNotAssigned: \"- Sin asignar -\",\r\n msgNotificationSentTo: 'La notificación se ha enviado a {0}',\r\n }\r\n};","import { Injectable } from '@angular/core';\r\nimport { GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { StringMapElement, FieldCustomizationElement, ComponentCustomization } from '@base/classes/BaseClasses';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Resources_EN } from '../../_resources/EN';\r\nimport { Resources_HE } from '../../_resources/HE';\r\nimport { Resources_ES } from '../../_resources/ES';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\n\r\n@Injectable()\r\nexport class ResourcesService {\r\n private m_Dictionaries: any[];\r\n private m_CustomDictionaries: any[];\r\n private m_Lists: any[];\r\n SelectedLanguages: any[];\r\n constructor(private appConfigService: AppConfigService,\r\n private systemEndpoint: SystemEndpoint) { }\r\n\r\n\r\n //Prepare dictionaries - we have an hierarchy of 3:\r\n // Custom dictionary for the specific build\r\n // General dictionary for the program\r\n // Base dictionary for the built in \"framework\" part\r\n public InitDictionaries() {\r\n\r\n this.m_Dictionaries = [];\r\n this.m_CustomDictionaries = [];\r\n this.m_Lists = [];\r\n\r\n switch (SysGlobals.Language) {\r\n case EnumLanguages.Hebrew:\r\n {\r\n const { Lists, ...Resources } = Resources_HE;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n case EnumLanguages.English:\r\n {\r\n const { Lists, ...Resources } = Resources_EN;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n case EnumLanguages.Spanish:\r\n {\r\n const { Lists, ...Resources } = Resources_ES;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n }\r\n\r\n // add custom resources to the dictionary by current language and custom build\r\n const allCustomResources = this.appConfigService.CustomResources;\r\n const customResources = allCustomResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (customResources && customResources.length) this.m_CustomDictionaries = this.m_CustomDictionaries.concat(customResources);\r\n\r\n // add resources to the dictionary by current language\r\n const allResources = this.appConfigService.Resources;\r\n const resources = allResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (resources && resources.length) this.m_Dictionaries = this.m_Dictionaries.concat(resources);\r\n\r\n // remove undefined to handle cases when some translations do not exist\r\n this.m_Dictionaries = this.m_Dictionaries.filter(x => x != undefined);\r\n\r\n // add lists to the dictionary by current language\r\n const allLists = this.appConfigService.AppConfig.GetLists();\r\n const lists = allLists.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n const overrideLists = lists.filter(x => x.Properties && x.Properties.OverrideModuleName);\r\n overrideLists.forEach(x => {\r\n const listsByModuleName = lists.find(z => z.Properties.ModuleName === x.Properties.OverrideModuleName);\r\n if (listsByModuleName) {\r\n Object.getOwnPropertyNames(x)\r\n .filter(name => name !== 'Properties')\r\n .forEach(name => {\r\n const sourceList = x[name];\r\n listsByModuleName[name] = sourceList;\r\n });\r\n }\r\n });\r\n\r\n this.m_Lists = this.m_Lists.concat(lists);\r\n\r\n // load field customizations\r\n SysGlobals.FieldCustomizations = this.LoadFieldCustomizations();\r\n // load component customizations\r\n SysGlobals.ComponentCustomizations = this.LoadComponentCustomizations();\r\n\r\n this.systemEndpoint.GetEntitiesResources().subscribe(response => {\r\n if (!response.IsSuccess) return;\r\n\r\n const entitiesResources = response.Data.filter(x => x.Properties.Language === SysGlobals.Language);\r\n if (entitiesResources && entitiesResources.length) {\r\n entitiesResources.forEach(r => {\r\n const { Properties, ...entities } = r;\r\n const modifiedEntityResources: any = { ...r };\r\n Object.keys(modifiedEntityResources).forEach(key => {\r\n if (Object.keys(entities).indexOf(key) >= 0) delete modifiedEntityResources[key];\r\n });\r\n modifiedEntityResources['BL'] = entities;\r\n this.m_Dictionaries = this.m_Dictionaries.concat([modifiedEntityResources]);\r\n })\r\n }\r\n });\r\n //Get selected languages for system\r\n this.SelectedLanguages = this.GetLanguagesList();\r\n }\r\n\r\n\r\n private GetValueFromPath(obj: any, path: string) {\r\n return path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n }\r\n\r\n //Initializes resources in case they are required before actual initialization took place\r\n private EnsureInitialized() {\r\n if (this.m_Dictionaries == undefined) {\r\n SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n this.InitDictionaries();\r\n }\r\n }\r\n\r\n //Return resource string for relevant resource\r\n //If not found, return the name with $ $\r\n public RC(sResourceName: string, moduleName?: string, ...args: string[] | number[]): string {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Special syntax to allow returning undefined\r\n var bReturnUndefined: boolean;\r\n if (sResourceName.startsWith('$$')) {\r\n sResourceName = sResourceName.substring(2);\r\n bReturnUndefined = true;\r\n }\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n //Get resource path\r\n var sPath = sResourceName.includes('.') ? sResourceName : `Translations.${sResourceName}`;\r\n\r\n let sData = this.getResourceValue(this.m_CustomDictionaries, sPath, moduleName);\r\n\r\n if (sData == undefined) {\r\n\r\n //Get resource value from dictionaries\r\n sData = this.getResourceValue(this.m_Dictionaries, sPath, moduleName);\r\n }\r\n\r\n //Return not found with $$ to indicate a problem\r\n if (sData == undefined) return bReturnUndefined ? undefined : `$${sResourceName}$`;\r\n\r\n //Support formatting arguments\r\n for (let index = 0; index < args.length; index++) {\r\n sData = sData.replace(`{${index}}`, args[index]);\r\n }\r\n\r\n //Support for value replacement\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n if (dictionary.StringMap == undefined) continue;\r\n for (let element of dictionary.StringMap) {\r\n sData = sData.replace((element as StringMapElement).Old, (element as StringMapElement).New);\r\n }\r\n }\r\n\r\n //Return\r\n return sData;\r\n }\r\n\r\n getResourceValue(oDictionaries: any[], sPath: string, sModuleName: string) {\r\n const currentModuleDictionaries = oDictionaries.filter(x => x.Properties && x.Properties.ModuleName === sModuleName);\r\n //Get value for current module\r\n let sData = this.tryGetValueFromDictionaries(currentModuleDictionaries, sPath);\r\n if (sData == undefined) {\r\n const frameworkDictionaries = oDictionaries.filter(x => !x.Properties || !x.Properties.ModuleName);\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n sData = this.tryGetValueFromDictionaries(frameworkDictionaries, sPath);\r\n }\r\n return sData;\r\n }\r\n\r\n tryGetValueFromDictionaries(oDictionaries: any[], sPath: string) {\r\n let sData: any;\r\n for (let dictionary of oDictionaries) {\r\n //Get value, including support for nested values\r\n sData = this.GetValueFromPath(dictionary, sPath);\r\n if (sData) break;\r\n }\r\n return sData;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEM(sListName: string, sValue: string, moduleName?: string): string {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return `$${sValue}$`;\r\n return item.Text;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEMX(sListName: string, sValue: string, moduleName?: string): GenericListEntity {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return undefined;\r\n return item;\r\n }\r\n\r\n //Return list by name\r\n public LIST(sListName: string, moduleName?: string): GenericListEntity[] {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n return this.getResourceValue(this.m_Lists, sListName, moduleName)?.sort(this.sortListfunc) || [];\r\n }\r\n\r\n // Sort LIST\r\n sortListfunc(item1: GenericListEntity, item2: GenericListEntity): number {\r\n // first sort by SortOrder\r\n if (item1.SortOrder !== undefined && item2.SortOrder === undefined) return -1;\r\n if (item1.SortOrder === undefined && item2.SortOrder !== undefined) return 1;\r\n if (item1.SortOrder !== undefined && item2.SortOrder !== undefined) return item1.SortOrder - item2.SortOrder;\r\n\r\n // then sort by Text\r\n if (item1.Text !== undefined && item2.Text !== undefined) return item1.Text.localeCompare(item2.Text);\r\n\r\n return 0;\r\n }\r\n\r\n //Load customizations\r\n public LoadFieldCustomizations(): FieldCustomizationElement[] {\r\n\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `FieldCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n\r\n }\r\n\r\n LoadComponentCustomizations(): ComponentCustomization[] {\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `ComponentCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n }\r\n\r\n //Build languages list\r\n public GetLanguagesList(): GenericListEntity[] { \r\n const listLang = this.LIST(\"Languages\"); \r\n var list = [];\r\n const languages = this.appConfigService.M4UConfig.languages;\r\n //if list not defined then return all languges\r\n if (!languages?.length) return listLang;\r\n \r\n listLang.forEach(item => {\r\n if (languages.includes(item.Value)) {\r\n list.push(item);\r\n }\r\n });\r\n\r\n return list;\r\n }\r\n public IsSelectedLanguageLoaded(lang: string): boolean {\r\n this.EnsureInitialized();\r\n return AppConfigService.GetLoadedLanguages().includes(lang);\r\n }\r\n}\r\n\r\n\r\nexport function RC(value: string, ...args: string[] | number[]) {\r\n return AppInjector.get(ResourcesService).RC(value, '', ...args);\r\n}\r\n\r\n\r\nexport function LIST(sListName: string): GenericListEntity[] {\r\n return AppInjector.get(ResourcesService).LIST(sListName);\r\n}\r\n\r\n\r\nexport function LISTITEM(sListName: string, sValue: string): string {\r\n return AppInjector.get(ResourcesService).LISTITEM(sListName, sValue);\r\n}\r\n\r\nexport function LISTITEMX(sListName: string, sValue: string): GenericListEntity {\r\n return AppInjector.get(ResourcesService).LISTITEMX(sListName, sValue);\r\n}\r\n\r\n","import { LocationChangeEvent, PlatformLocation } from '@angular/common';\r\nimport { Injectable, Type } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { findLast, findLastIndex } from 'lodash';\r\nimport { filter, map, ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\nexport class HistoryItem {\r\n Id: number;\r\n Url: string;\r\n QueryParams: any;\r\n Title: string;\r\n Component: Type;\r\n ComponentName: string;\r\n IsWindow: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class RouteHistoryService {\r\n\r\n private _history: HistoryItem[] = [];\r\n\r\n private _pageHistorySubject = new ReplaySubject(1);\r\n readonly PageHistory$ = this._pageHistorySubject.asObservable();\r\n\r\n private _historyItemsSubject = new ReplaySubject(1);\r\n readonly HistoryItems$ = this._historyItemsSubject.asObservable();\r\n\r\n get HistoryLength() { return this._history.length; }\r\n\r\n constructor(private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private navigatorService: NavigatorService,\r\n private sysEventsService: SysEventsService,\r\n private frameworkService: FrameworkService,\r\n private location: PlatformLocation) {\r\n this.sysEventsService.OnNavigateDefault.subscribe((result) => {\r\n if (!result) return;\r\n this.ClearHistory(0);\r\n });\r\n this.location.onPopState(this.OnBrowserButtonClick);\r\n }\r\n\r\n // on after init application start saving route history\r\n public StartSaveHistory() {\r\n this.router.events\r\n .pipe(\r\n // filter events, take only NavigationEnd\r\n filter(event => event instanceof NavigationEnd),\r\n map(() => {\r\n let { route, url } = this.GetCurrentRouteWithUrl();\r\n // create history item entity\r\n return {\r\n Id: this.router.getCurrentNavigation().id,\r\n Url: url,\r\n QueryParams: this.GetQueryParamsWithoutPrefixes(route.snapshot.queryParams),\r\n Component: route.component,\r\n IsWindow: route.snapshot.outlet === 'window'\r\n } as HistoryItem;\r\n }),\r\n filter(historyItem => !historyItem.Url.includes('system/')))\r\n // send it to the page where the title will be set\r\n .subscribe(historyItem => this.SaveHistoryItem(historyItem));\r\n }\r\n\r\n SetHistoryItemTitle(componentName: string, title: string) {\r\n // get history item index by component name\r\n const historyItemIndex = findLastIndex(this._history, x => x.ComponentName === componentName);\r\n if (historyItemIndex < 0) return;\r\n\r\n // set history item title\r\n this._history[historyItemIndex].Title = title;\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n UpdateHistoryItem(historyItem: HistoryItem) {\r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) return;\r\n\r\n this._history[historyItemIndex] = historyItem;\r\n\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n public SaveHistoryItem(historyItem: HistoryItem) {\r\n // remove 'new' route from history for correct navigation through history\r\n const lastHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (lastHistoryItem && lastHistoryItem.Url.endsWith('new')) {\r\n this._history.pop();\r\n }\r\n\r\n // if there is an item already just update the title, if not - add it to the history \r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) {\r\n this._history.push(historyItem);\r\n }\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n\r\n this._pageHistorySubject.next(historyItem);\r\n }\r\n\r\n public GoBack() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n // get previous history item\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n if (previousHistoryItem) {\r\n // if going back from window to the full page - navigate null to avoid page reload\r\n if (currentHistoryItem.IsWindow && !previousHistoryItem.IsWindow) {\r\n return this.GoBackFromWindow(previousHistoryItem, this._history.length - 2);\r\n }\r\n return this.NavigateItem(previousHistoryItem, this._history.length - 2);\r\n }\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n public NavigateHistoryItem(item: HistoryItem) {\r\n // get history item by id\r\n const historyItem = this._history.find(x => x.Id === item.Id);\r\n const historyItemIndex = this._history.indexOf(historyItem);\r\n // get current history item from history\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n if (currentHistoryItem.IsWindow) {\r\n // get full page url\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current route full page url equals navigatable item full page url\r\n if (historyItem.Url == url) {\r\n // just close the window to avoid page reload\r\n return this.NavigateItem(null, historyItemIndex);\r\n }\r\n }\r\n return this.NavigateItem(historyItem, historyItemIndex);\r\n }\r\n\r\n CloseWindow() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n // get last history item that is not a window\r\n const lastPageHistoryItem = findLast(this._history, x => !x.IsWindow);\r\n // get last page index or previous\r\n const lastPageHistoryItemIndex = lastPageHistoryItem ? this._history.indexOf(lastPageHistoryItem) : this._history.length - 2;\r\n\r\n return this.GoBackFromWindow(lastPageHistoryItem, lastPageHistoryItemIndex);\r\n }\r\n\r\n private GoBackFromWindow(pageHistoryItem: HistoryItem, cleanStartIndex?: number) {\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current primary page is not the same take page history item\r\n const navigationPath = pageHistoryItem?.Url === url ? null : pageHistoryItem;\r\n return this.NavigateItem(navigationPath, cleanStartIndex);\r\n }\r\n\r\n private NavigateItem(historyItem: HistoryItem, cleanStartIndex?: number) {\r\n // navigate to the previous history item or close window without reload\r\n return (historyItem && this.navigatorService.Navigate([historyItem.Url], historyItem.QueryParams) || this.navigatorService.Navigate(null))\r\n .then((result) => {\r\n // if navigatation was successful\r\n if (result) {\r\n // clean history if needed\r\n if (cleanStartIndex != null) this.ClearHistory(cleanStartIndex);\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n private ShareHistory() {\r\n // get history without current item to show it correctly\r\n let historyWithoutCurrent = [...this._history];\r\n if (this._history.length > 0) historyWithoutCurrent.splice(this._history.length - 1);\r\n\r\n // remove first item in case our primary route is the same (for windows)\r\n let { _, url } = this.GetCurrentRouteWithUrl(true);\r\n if (historyWithoutCurrent.length > 0 && historyWithoutCurrent[0].Url === url) {\r\n historyWithoutCurrent.shift();\r\n }\r\n\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(historyWithoutCurrent);\r\n }\r\n\r\n public HasHistory() {\r\n // check if there are history items\r\n return this._history.length > 0;\r\n }\r\n\r\n public ClearHistory(startIndex?: number) {\r\n // clear history at all or by the index (on breadcrumb item click)\r\n if (startIndex != null) {\r\n // clean history from item to the prelast item (because last item is correct and needed in history after navigation)\r\n this.ClearPagesState(startIndex, this._history.length - 1);\r\n this._history.splice(startIndex, this._history.length - startIndex - 1);\r\n } else {\r\n this.ClearPagesState();\r\n this._history.length = 0;\r\n }\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(this._history);\r\n }\r\n\r\n private ClearPagesState(startIndex?: number, endIndex?: number) {\r\n for (let i = startIndex || 0; i < (endIndex != null ? endIndex : this._history.length); i++) {\r\n this.ClearPageState(this._history[i]);\r\n }\r\n }\r\n\r\n private ClearPageState(historyItem: HistoryItem) {\r\n const pageComponentName = historyItem && historyItem.ComponentName;\r\n // if no page component name or there is the same component in history - no need to clear it\r\n if (!pageComponentName || this._history.some(x => x.Id !== historyItem.Id && x.Component === historyItem.Component)) return;\r\n\r\n delete SysGlobals.PageStates[pageComponentName];\r\n }\r\n\r\n private OnBrowserButtonClick = (event: LocationChangeEvent) => {\r\n const navigationId = event.state.navigationId;\r\n const historyItemIndex = this._history.findIndex(x => x.Id === navigationId);\r\n if (historyItemIndex >= 0) {\r\n this.ClearHistory(historyItemIndex);\r\n }\r\n }\r\n\r\n private GetCurrentRouteWithUrl(onlyPrimaryOutlet?: boolean): any {\r\n let route = this.activatedRoute;\r\n let urlSegments = route.snapshot.url;\r\n // get the bottom route and url by all the tree\r\n // if onlyParentOutlet = true then it makes search by firstChild which can't be a window\r\n while (onlyPrimaryOutlet ? route.firstChild : route.children.length) {\r\n route = onlyPrimaryOutlet ? route.firstChild : route.children[route.children.length - 1];\r\n urlSegments = [...urlSegments, ...route.snapshot.url];\r\n }\r\n return { route: route, url: urlSegments.map(x => x.path).join('/') }\r\n }\r\n\r\n private GetQueryParamsWithoutPrefixes(params) {\r\n let newParams = {};\r\n for (let key in params) {\r\n const newKey = key.substring(key.indexOf('_') + 1);\r\n newParams[newKey] = params[key];\r\n }\r\n return newParams;\r\n }\r\n\r\n HasHistoryForWindow() {\r\n if (!this._history || this._history.length < 2) return false;\r\n\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n return !(!previousHistoryItem.IsWindow && currentHistoryItem.IsWindow);\r\n }\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport devices from 'devextreme/core/devices';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ResourcesService } from './resources.service';\r\nimport { EnumLanguages, EnumScreenSizes } from \"./sysenums.enum\";\r\nimport { SysGlobals } from './sysglobals';\r\nimport { UiService } from './ui.service';\r\n\r\nexport type Orientation = 'landscape' | 'portrait';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ScreenService {\r\n\r\n private _currentScreenSize: EnumScreenSizes;\r\n private _currentOrientation: Orientation;\r\n private onScreenSizeChanged: BehaviorSubject = new BehaviorSubject(this.GetScreenSize());\r\n readonly ScreenSize$ = this.onScreenSizeChanged.asObservable();\r\n public options = {\r\n showRefreshMessage: {\r\n size: false,\r\n orientation: false\r\n }\r\n };\r\n private showMessageHandler: any;\r\n\r\n public get Sizes() {\r\n return {\r\n 'screen-x-small': this.breakpointObserver.isMatched(Breakpoints.XSmall),\r\n 'screen-small': this.breakpointObserver.isMatched(Breakpoints.Small),\r\n 'screen-medium': this.breakpointObserver.isMatched(Breakpoints.Medium),\r\n 'screen-large': this.breakpointObserver.isMatched(Breakpoints.Large),\r\n 'screen-x-large': this.breakpointObserver.isMatched(Breakpoints.XLarge)\r\n };\r\n }\r\n\r\n //Subscribe to size changes\r\n constructor(private breakpointObserver: BreakpointObserver,\r\n private uiService: UiService,\r\n private rc: ResourcesService) {\r\n this._currentOrientation = this.Orientation();\r\n this.breakpointObserver\r\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\r\n .subscribe(() => {\r\n const newSize = this.GetScreenSize();\r\n const orientation = this.Orientation();\r\n let shown = false;\r\n if (orientation !== this._currentOrientation) {\r\n shown = this.processRefreshMessage('orientation');\r\n this._currentOrientation = orientation;\r\n }\r\n\r\n if (newSize !== this._currentScreenSize) {\r\n (!shown && this._currentScreenSize) && (shown = this.processRefreshMessage('size'));\r\n this._currentScreenSize = newSize;\r\n this.onScreenSizeChanged.next(this._currentScreenSize);\r\n }\r\n //\r\n });\r\n }\r\n\r\n //Return relevant screen size\r\n public GetScreenSize(): EnumScreenSizes {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall)) return EnumScreenSizes.ScreenXSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Small)) return EnumScreenSizes.ScreenSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Medium)) return EnumScreenSizes.ScreenMedium;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Large)) return EnumScreenSizes.ScreenLarge;\r\n if (this.breakpointObserver.isMatched(Breakpoints.XLarge)) return EnumScreenSizes.ScreenXLarge;\r\n }\r\n\r\n public IsRTL(): boolean {\r\n return (SysGlobals.Language == EnumLanguages.Hebrew);\r\n }\r\n\r\n public IsMobile() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenXSmall;\r\n const device = devices.current();\r\n return device.deviceType === 'phone';\r\n }\r\n\r\n public IsDesktop() {\r\n // var size = this.GetScreenSize();\r\n // if (this.appConfigService.AppConfig.SupportLegacyDisplaySizes) {\r\n // return !this.IsMobile();\r\n // } else {\r\n // return size == EnumScreenSizes.ScreenLarge || size == EnumScreenSizes.ScreenXLarge;\r\n // }\r\n const device = devices.current();\r\n return device.deviceType === 'desktop';\r\n }\r\n\r\n public IsTablet() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenSmall || size == EnumScreenSizes.ScreenMedium;\r\n const device = devices.current();\r\n return device.deviceType === 'tablet';\r\n }\r\n\r\n public Orientation(): Orientation {\r\n const orientation = devices.orientation();\r\n return orientation;\r\n }\r\n\r\n public IsPrintMode(): boolean {\r\n return window.matchMedia('print').matches;\r\n }\r\n\r\n public LogDeviceInfo() {\r\n const device = devices.current();\r\n console.log(device);\r\n }\r\n\r\n public IsWideScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenLarge || screenSize === EnumScreenSizes.ScreenXLarge);\r\n }\r\n\r\n public IsMediumScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenMedium);\r\n }\r\n\r\n processRefreshMessage = (mode: 'size' | 'orientation') => {\r\n if (this.showMessageHandler) {\r\n clearTimeout(this.showMessageHandler);\r\n this.showMessageHandler = null;\r\n }\r\n\r\n let message;\r\n if (this.options?.showRefreshMessage?.size && mode === 'size') {\r\n message = this.rc.RC('msgScreenSizeChangedRefresh');\r\n } else if (this.options?.showRefreshMessage?.orientation && mode === 'orientation') {\r\n message = this.rc.RC('msgOrientationChangedRefresh');\r\n }\r\n\r\n message && (this.showMessageHandler = setTimeout(() => {\r\n this.uiService.InfoMessage(message);\r\n this.showMessageHandler = null;\r\n }, 3000));\r\n\r\n return !!message;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { WebAPILoginResponse } from '@base/entities/BaseEntities';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { BehaviorSubject, ReplaySubject, first, mergeMap, Subject, Subscription, tap, map, of } from 'rxjs';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { NotificationService } from './notification.service';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\nexport enum SessionStates {\r\n Started,\r\n Ended,\r\n AlmostExpired,\r\n Expired\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n //Store server session\r\n private m_Session: WebAPILoginResponse;\r\n //Store user info\r\n private m_UserInfoDict: { [id: string]: any };\r\n //Store dataSources\r\n private m_DataSources: { [id: string]: BaseDataSourceAbstract };\r\n\r\n private sessionExpiredTimeoutHandler;\r\n private sessionAlmostExpiredTimeoutHandler;\r\n private initAppSubscription: Subscription;\r\n private logoutAppSubscription: Subscription;\r\n\r\n private sessionStateChangedSubject = new Subject();\r\n readonly sessionStateChanged$ = this.sessionStateChangedSubject.asObservable();\r\n\r\n constructor(private systemOptionsService: SystemOptionsService,\r\n private appConfigService: AppConfigService,\r\n private localStorageService: LocalStorageService,\r\n private notificationService: NotificationService) { }\r\n\r\n get IsLoggedIn(): boolean { return (this.m_Session != null); }\r\n get DisplayUserName(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserName : ''; }\r\n get DisplayUserDescription(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserDescription : ''; }\r\n get CurrentUserID(): number { return this.IsLoggedIn ? this.m_Session.CredentialID : undefined; }\r\n get SessionID(): string { return this.IsLoggedIn ? this.m_Session.SessionID : undefined; }\r\n get UserInfoDict(): { [id: string]: any } { return this.IsLoggedIn ? this.m_UserInfoDict : {}; }\r\n get UserInfos(): any[] { return this.IsLoggedIn ? Object.keys(this.m_UserInfoDict).map(x => this.m_UserInfoDict[x]) : []; }\r\n get DataSources(): { [id: string]: BaseDataSourceAbstract } { return this.IsLoggedIn ? this.m_DataSources : {}; }\r\n\r\n //Set session\r\n SetSession(oSession: WebAPILoginResponse,\r\n afterInitFn?: () => void,\r\n afterLogoutFn?: () => void,\r\n bPreserveSession: boolean = false) {\r\n this.m_Session = oSession;\r\n this.m_UserInfoDict = oSession ? oSession.UserInfo : undefined;\r\n\r\n this.RefreshExpiredSessionTimeout(!!oSession);\r\n\r\n if (!!oSession) {\r\n this.initAppSubscription && !this.initAppSubscription.closed && this.initAppSubscription.unsubscribe();\r\n\r\n const initApplication$ = this.appConfigService.AppConfig.OnInitApplicationAsync(this.m_Session.UserInfo)\r\n .pipe(\r\n first(),\r\n mergeMap((result) => {\r\n if (result)\r\n return this.appConfigService.AppConfig.OnGetGlobalDataSources();\r\n else\r\n throw 'Cannot start session.';\r\n }),\r\n tap(ds => this.SetDataSources(ds)),\r\n tap(() => this.notificationService.Start()),\r\n tap(() => { afterInitFn && afterInitFn(); }),\r\n map(() => true)\r\n );\r\n this.initAppSubscription = initApplication$\r\n .subscribe({\r\n next: x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Started);\r\n }, error: e => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n }\r\n });\r\n\r\n return initApplication$;\r\n }\r\n\r\n if (!oSession) {\r\n this.logoutAppSubscription && !this.logoutAppSubscription.closed && this.logoutAppSubscription.unsubscribe();\r\n\r\n const onLogoutapplication$ = this.appConfigService.AppConfig.OnLogoutApplicationAsync()\r\n .pipe(\r\n tap(() => {\r\n if(!bPreserveSession) {\r\n this.ClearSessionCredentials();\r\n }\r\n this.SetDataSources(undefined);\r\n }),\r\n tap(() => this.notificationService.Stop()),\r\n tap(() => { afterLogoutFn && afterLogoutFn(); }),\r\n map(() => false)\r\n );\r\n this.logoutAppSubscription = onLogoutapplication$\r\n .subscribe(x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n });\r\n return onLogoutapplication$;\r\n }\r\n }\r\n\r\n // Shortcut for end session action\r\n EndSession(afterFn?: () => void, preserveSession: boolean = false) {\r\n this.SetSession(undefined, null, afterFn, preserveSession);\r\n }\r\n\r\n //Set datasources\r\n SetDataSources(dataSources: { [id: string]: BaseDataSourceAbstract }) {\r\n this.m_DataSources = dataSources;\r\n }\r\n\r\n SaveSessionCredentials(sessionID: string, userName: string) {\r\n this.localStorageService.SetItem(\"SessionID\", sessionID);\r\n this.localStorageService.SetItem(\"UserName\", userName);\r\n }\r\n\r\n ClearSessionCredentials() {\r\n this.localStorageService.RemoveItem(\"SessionID\");\r\n this.localStorageService.RemoveItem(\"UserName\");\r\n }\r\n \r\n GetSessionID() {\r\n return this.localStorageService.GetItem(\"SessionID\");\r\n }\r\n\r\n GetUserName() {\r\n return this.localStorageService.GetItem(\"UserName\");\r\n }\r\n\r\n RefreshExpiredSessionTimeout(startNew: boolean = true) {\r\n const sessionTimeout = +this.systemOptionsService.getSystemOption(EnumSystemOptions.SessionTimeout);\r\n if (!sessionTimeout || sessionTimeout < 0) return;\r\n\r\n const sessionAlmostTimeout = (sessionTimeout > 3) ? (sessionTimeout - 2) : 0;\r\n\r\n if (this.sessionExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionExpiredTimeoutHandler);\r\n this.sessionExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (this.sessionAlmostExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionAlmostExpiredTimeoutHandler);\r\n this.sessionAlmostExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (startNew && !!this.m_Session) {\r\n if (sessionAlmostTimeout) {\r\n this.sessionAlmostExpiredTimeoutHandler = setTimeout(() => {\r\n this.sessionStateChangedSubject.next(SessionStates.AlmostExpired);\r\n }, sessionAlmostTimeout * 1000 * 60);\r\n }\r\n\r\n this.sessionExpiredTimeoutHandler = setTimeout(() => {\r\n this.AutoEndSession();\r\n }, sessionTimeout * 1000 * 60);\r\n }\r\n }\r\n\r\n private AutoEndSession() {\r\n this.RefreshExpiredSessionTimeout(false);\r\n this.sessionStateChangedSubject.next(SessionStates.Expired);\r\n }\r\n}\r\n","import { ComponentFactoryResolver, Injectable, ViewContainerRef } from '@angular/core';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { ShareDialogComponent } from '@ui/dialogs/share-dialog/share-dialog.component';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseEntity, BaseEntityResponse, BaseResponse, FileView, SharingInformation, RenderedTemplate, NotificationTemplateListView } from '@base/entities/BaseEntities';\r\nimport { EnumNotificationDeliveryOptions } from './sysenums.enum';\r\nimport { BaseService } from '@base/service/BaseService';\r\nimport { ShareEndpoint } from '../endpoints/share.endpoint';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ShareService extends BaseService {\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n private _notificationTemplates: NotificationTemplateListView[] = [];\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private shareEndpoint: ShareEndpoint) {\r\n super();\r\n }\r\n\r\n async OpenShareDialog(componentName: string,\r\n entityType: string,\r\n getRenderedTemplate: (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable>,\r\n share: (sharingInformation: SharingInformation) => Observable>) {\r\n\r\n\r\n this._notificationTemplates = (await firstValueFrom(this.shareEndpoint.GetNotificationsTemplates())).Entities;\r\n\r\n if (!this.GetNotificationTemplatesByPageAndEntity(componentName, entityType).length) {\r\n this.UI.StopMessage(this.RC(\"msgShareNotificationTemplateNotFoundError\"));\r\n return;\r\n }\r\n\r\n const shareDialog = this.CreateInstance();\r\n shareDialog.GetRenderedTemplate = getRenderedTemplate;\r\n shareDialog.Share = share;\r\n\r\n shareDialog.PageName = componentName;\r\n shareDialog.ShareEntityType = entityType;\r\n\r\n shareDialog.ShowDialogShort((e) => { });\r\n }\r\n\r\n GetNotificationTemplatesByPageAndEntity(pageName: string, entityType:string) {\r\n return this._notificationTemplates?.filter(x => x.PageName == pageName && (x.EntityType == entityType || !x.EntityType || !entityType));\r\n }\r\n\r\n GetDefaultOnGetRenderedTemplate() {\r\n return (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => this.shareEndpoint.GetRenderedTemplate(notificationTemplateID, deliveryOption);\r\n }\r\n\r\n private CreateInstance(): ShareDialogComponent {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ShareDialogComponent);\r\n const componentRef = this.ViewContainerRef.createComponent(componentFactory);\r\n return componentRef.instance;\r\n }\r\n}","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { SideBarComponent, SidebarPosition } from '@m4u-angular/ui/layouts/layout/side-bar/side-bar.component';\r\nimport { Subject } from 'rxjs';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumSidebarStates, EnumWindowSizes } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SidebarService {\r\n _sidebars: Record = {};\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n private _sidebarSubject = new Subject<{ SidebarName: string, State: EnumSidebarStates }>();\r\n readonly SidebarState = this._sidebarSubject.asObservable();\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {\r\n }\r\n\r\n Show(sidebarName: string, title: string, content: Type | TemplateRef, width?: EnumWindowSizes, \r\n componentOptions?: any, position? : SidebarPosition, className?: string) {\r\n let sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance || sidebarName === 'Filters') {\r\n sidebarInstance = this.CreateSidebarInstance();\r\n sidebarInstance.Name = sidebarName;\r\n sidebarInstance.Title = title;\r\n sidebarInstance.ContentPortal = this.ResolveContent(content);\r\n sidebarInstance.Width = width;\r\n sidebarInstance.SidebarComponentOptions = componentOptions;\r\n sidebarInstance.Position = position;\r\n sidebarInstance.Class = className;\r\n this._sidebars[sidebarName] = sidebarInstance;\r\n }\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Opened;\r\n }\r\n\r\n Hide(sidebarName: string): boolean {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarPinned) return false;\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n return true;\r\n }\r\n\r\n Close(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n }\r\n\r\n GetState(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n return sidebarInstance && sidebarInstance.SidebarState;\r\n }\r\n\r\n OnStateChanged(sidebarName: string, state: EnumSidebarStates) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarState !== state) sidebarInstance.SidebarState = state;\r\n this._sidebarSubject.next({ SidebarName: sidebarName, State: state });\r\n }\r\n\r\n ClearSidebars() {\r\n Object.keys(this._sidebars).forEach(sidebarName => {\r\n this.Close(sidebarName);\r\n });\r\n this._sidebars = {};\r\n }\r\n\r\n DestroySidebar(sidebarName: string) {\r\n if (sidebarName && this._sidebars[sidebarName]) {\r\n this.Close(sidebarName);\r\n delete this._sidebars[sidebarName];\r\n }\r\n }\r\n\r\n private CreateSidebarInstance(): SideBarComponent {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(SideBarComponent);\r\n const componentRef = this.ViewContainerRef.createComponent(componentFactory);\r\n return componentRef.instance;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\n\r\nexport enum EnumCheckCredentialsResult {\r\n Success = \"Success\",\r\n Failure = \"Failure\",\r\n Lockout = \"Lockout\",\r\n PasswordExpired = \"PasswordExpired\",\r\n SessionExpired = \"SessionExpired\",\r\n NoLicense = \"NoLicense\",\r\n TechnicalFailure = \"TechnicalFailure\",\r\n MFASMSSent = \"MFASMSSent\",\r\n MFAEmailSent = \"MFAEmailSent\",\r\n NoMID = \"NoMID\",\r\n SessionFrozen=\"SessionFrozen\"\r\n}\r\nexport enum EnumPageDisplayModes {\r\n FullScreen = \"FullScreen\",\r\n Window = \"Window\",\r\n Dialog = \"Dialog\",\r\n BottomSheet = \"BottomSheet\"\r\n}\r\n\r\nexport enum EnumPageEntitySources {\r\n Internal = \"Internal\",\r\n External = \"External\",\r\n CRUD = \"CRUD\"\r\n}\r\n\r\nexport enum EnumScreenSizes {\r\n ScreenXSmall = \"ScreenXSmall\",\r\n ScreenSmall = \"ScreenSmall\",\r\n ScreenMedium = \"ScreenMedium\",\r\n ScreenLarge = \"ScreenLarge\",\r\n ScreenXLarge = \"ScreenXLarge\"\r\n}\r\n\r\nexport enum EnumWindowSizes {\r\n WindowXSmall = \"WindowXSmall\",\r\n WindowSmall = \"WindowSmall\",\r\n WindowMedium = \"WindowMedium\",\r\n WindowLarge = \"WindowLarge\",\r\n WindowXLarge = \"WindowXLarge\",\r\n WindowAutoSize = \"WindowAutoSize\"\r\n}\r\n\r\nexport enum EnumCRUDActions {\r\n Create = \"Create\",\r\n Update = \"Update\",\r\n CreateOrUpdate = \"CreateOrUpdate\",\r\n Delete = \"Delete\"\r\n}\r\n\r\nexport enum EnumRequestProgressTracking {\r\n Send = \"Send\",\r\n Receive = \"Receive\",\r\n Both = \"Both\"\r\n}\r\n\r\n\r\nexport enum EnumToggle {\r\n In = 'In',\r\n Out = 'Out'\r\n}\r\n\r\nexport enum EnumCardMode {\r\n Simple = 'Simple',\r\n Expand = 'Expand',\r\n SimpleExpand = 'SimpleExpand',\r\n Edit = 'Edit'\r\n}\r\n\r\nexport enum EnumGridModes {\r\n Editable = 'Editable',\r\n Report = 'Report',\r\n Lines = 'Lines'\r\n}\r\n\r\nexport enum EnumGridScrollingModes {\r\n Virtual = \"virtual\",\r\n Standart = \"standart\",\r\n Infinite = \"infinite\"\r\n}\r\n\r\nexport enum EnumInputBoxTypes {\r\n Text = \"Text\",\r\n Email = \"Email\",\r\n TextArea = \"TextArea\",\r\n Number = \"Number\",\r\n Date = \"Date\"\r\n}\r\n\r\nexport enum EnumMessageBoxTypes {\r\n OK = \"OK\",\r\n YesNo = \"YesNo\",\r\n Custom = \"Custom\"\r\n}\r\n\r\nexport enum EnumFileBoxReturnDataTypes {\r\n FileList = \"FileList\",\r\n FileDataAsString = \"FileStringData\",\r\n FileDataAsLinesArray = \"FileDataAsLinesArray\",\r\n FileDataAsJSONArray = \"FileDataAsJSONArray\"\r\n}\r\n\r\nexport enum EnumNotificationDeliveryOptions {\r\n Email = \"Email\",\r\n SMS = \"SMS\",\r\n PushMessage = \"PushMessage\",\r\n Share = \"Share\",\r\n Print = \"Print\",\r\n ExportToPDF = \"ExportToPDF\",\r\n WhatsApp = \"WhatsApp\",\r\n DontSend = \"DontSend\"\r\n}\r\n\r\nexport enum EnumNotificationTemplateEditingMode {\r\n None = \"None\",\r\n EditPrefix = \"EditPrefix\",\r\n EditBody = \"EditBody\",\r\n Preview = \"Preview\"\r\n}\r\n\r\nexport enum EnumLoginExtensionLinkType {\r\n Link,\r\n Route,\r\n Mailto,\r\n ButtonLink\r\n}\r\n\r\nexport enum EnumApplicationMode {\r\n Standard = \"Standard\",\r\n IFrame = \"IFrame\",\r\n SinglePage = \"SinglePage\"\r\n}\r\n\r\nexport enum EnumLanguages {\r\n Hebrew = \"HE\",\r\n English = \"EN\",\r\n Spanish = \"ES\"\r\n}\r\n\r\nexport enum EnumNotificationStatuses {\r\n Draft = \"Draft\",\r\n Sending = \"Sending\",\r\n Failure = \"Failure\",\r\n Sent = \"Sent\"\r\n}\r\n\r\nexport enum EnumPopupShowStatuses {\r\n None = \"None\",\r\n ToShow = \"ToShow\",\r\n Showed = \"Showed\"\r\n}\r\n\r\nexport enum EnumFilterPanelActions {\r\n Apply = \"Apply\",\r\n Clear = \"Clear\",\r\n Ready = \"Ready\"\r\n}\r\n\r\nexport enum EnumSidebarActions {\r\n Open = \"Open\",\r\n Close = \"Close\",\r\n Toggle = \"Toggle\"\r\n}\r\n\r\nexport enum EnumSidebarStates {\r\n Opened = \"Opened\",\r\n Closed = \"Closed\"\r\n}\r\n\r\nexport enum EnumMenuPositions {\r\n Open = \"Open\",\r\n Close = \"Close\"\r\n}\r\n\r\nexport enum EnumMFAMethods {\r\n None = \"None\",\r\n SMS = \"SMS\",\r\n Email = \"Email\",\r\n WhatsApp = \"WhatsApp\"\r\n}\r\n\r\nexport enum EnumLoginSecureKeyTypes {\r\n Password = \"Password\",\r\n Otp = \"Otp\",\r\n MFACode = \"MFACode\",\r\n Session = \"Session\",\r\n OAuth = \"OAuth\"\r\n}\r\n\r\nexport enum EnumInfoUTypes {\r\n Unicell = \"Unicell\",\r\n InforU = \"InforU\"\r\n}\r\n\r\nexport enum EnumSystemOptionDataTypes {\r\n String = \"String\",\r\n Number = \"Number\",\r\n Boolean = \"Boolean\"\r\n}\r\n\r\nexport enum EnumSystemOptions {\r\n AppNameHE = 'AppNameHE',\r\n AppNameEN = 'AppNameEN',\r\n AppURL = 'AppURL',\r\n\r\n SessionTimeout = 'SessionTimeout',\r\n SessionExpiry = 'SessionExpiry',\r\n EnableRequestLogging = 'EnableRequestLogging',\r\n EnableRemoteLogging = 'EnableRemoteLogging',\r\n ShowExpiredTimeoutAlert = 'ShowExpiredTimeoutAlert',\r\n ShowAlmostExpiredTimeoutAlert = 'ShowAlmostExpiredTimeoutAlert',\r\n\r\n IsSupportedCredentialsManagement = 'IsSupportedCredentialsManagement',\r\n IsSupportedUserWelcome = 'IsSupportedUserWelcome',\r\n IsSupportedPasswordChange = 'IsSupportedPasswordChange',\r\n IsSupportedPasswordRecovery = 'IsSupportedPasswordRecovery',\r\n IsSupportedLoginByOTP = 'IsSupportedLoginByOTP',\r\n IsSupportedLoginByPassword = 'IsSupportedLoginByPassword',\r\n IsSupportedLoginByOAuth = 'IsSupportedLoginByOAuth', //Runtime option\r\n IsAutoCreateCredentials = 'IsAutoCreateCredentials',\r\n AutoCreateCredentialsType = 'AutoCreateCredentialsType',\r\n IsRequireTaxNumberForOTP = 'IsRequireTaxNumberForOTP',\r\n\r\n PasswordChangeIntervalDays = 'PasswordChangeIntervalDays',\r\n PasswordComplexityLen = 'PasswordComplexityLen',\r\n PasswordComplexityMinChars = 'PasswordComplexityMinChars',\r\n PasswordComplexityMinDigits = 'PasswordComplexityMinDigits',\r\n\r\n BadLoginAttemptBeforeLock = 'BadLoginAttemptBeforeLock',\r\n BadLoginAttemptsCheckIntervalMinutes = 'BadLoginAttemptsCheckIntervalMinutes',\r\n BadLoginAttemptLockouIntervalMinutes = 'BadLoginAttemptLockouIntervalMinutes',\r\n\r\n XFrameOptions = 'XFrameOptions',\r\n IsDeployedBehindLoadBalancer = 'IsDeployedBehindLoadBalancer',\r\n\r\n IsSupportNotificationMethodEmail = 'IsSupportNotificationMethodEmail',\r\n IsSupportNotificationMethodSMS = 'IsSupportNotificationMethodSMS',\r\n IsSupportNotificationMethodWhatsApp = 'IsSupportNotificationMethodWhatsApp',\r\n\r\n RetentionPeriodRequests = 'RetentionPeriodRequests',\r\n RetentionPeriodRemoteRequests = 'RetentionPeriodRemoteRequests',\r\n RetentionPeriodNotifications = 'RetentionPeriodNotifications',\r\n RetentionPeriodSessions ='RetentionPeriodSessions',\r\n\r\n SessionFingerprintFreezeTimeout = 'SessionFingerprintFreezeTimeout'\r\n}\r\n\r\nexport enum HistoryEventTypesEnum {\r\n FieldChange = \"FieldChange\",\r\n RowAdded = \"RowAdded\",\r\n RowDeleted = \"RowDeleted\",\r\n Special = \"Special\"\r\n}\r\n\r\nexport enum EnumPrintingType {\r\n None = \"None\",\r\n Entity = \"Entity\",\r\n Report = \"Report\"\r\n}\r\n\r\nexport enum EnumUserLoginStatus {\r\n All = \"All\",\r\n Success = \"Success\",\r\n Failure = \"Failure\"\r\n}\r\n\r\nexport enum EnumYesNo\r\n{ \r\n\tNo = \"No\",\r\n\tYes = \"Yes\"\r\n}\r\n\r\nexport enum EnumLocalizationTypes {\r\n Israel = 1,\r\n Europe = 2,\r\n NorthAmerica = 3,\r\n SouthAmerica = 4,\r\n FarEast = 6,\r\n Indian = 7\r\n}\r\n\r\nexport enum EnumCustomFilterTypes {\r\n RelatedToAtLeastOne = 'RelatedToAtLeastOne'\r\n}\r\n\r\nexport enum EnumLogLevel {\r\n Info = 'Info',\r\n Warning = 'Warning',\r\n Error = 'Error',\r\n Unknown = 'Unknown'\r\n}\r\n\r\n@Injectable()\r\nexport class SysEnumsService {\r\n constructor() { }\r\n\r\n public EnumWindowSizes = EnumWindowSizes;\r\n public EnumCardMode = EnumCardMode;\r\n public EnumToggle = EnumToggle;\r\n public EnumInputBoxTypes = EnumInputBoxTypes;\r\n public EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n public EnumFileBoxReturnDataTypes = EnumFileBoxReturnDataTypes;\r\n public EnumNotificationDeliveryOptions = EnumNotificationDeliveryOptions;\r\n public EnumLoginExtensionLinkType = EnumLoginExtensionLinkType;\r\n public EnumApplicationMode = EnumApplicationMode;\r\n public EnumNotificationStatuses = EnumNotificationStatuses;\r\n public EnumPageDisplayModes = EnumPageDisplayModes;\r\n public EnumLanguages = EnumLanguages;\r\n public EnumFilterPanelActions = EnumFilterPanelActions;\r\n public EnumMenuPositions = EnumMenuPositions;\r\n public EnumMFAMethods = EnumMFAMethods;\r\n public EnumSidebarActions = EnumSidebarActions;\r\n public EnumSystemOptionDataTypes = EnumSystemOptionDataTypes;\r\n public HistoryEventTypesEnum = HistoryEventTypesEnum;\r\n public EnumPrintingType = EnumPrintingType;\r\n public EnumInfoUTypes = EnumInfoUTypes;\r\n public EnumUserLoginStatus = EnumUserLoginStatus;\r\n public EnumLocalizationTypes = EnumLocalizationTypes;\r\n public EnumCustomFilterTypes = EnumCustomFilterTypes;\r\n}\r\n","import { EventEmitter, Injectable } from '@angular/core';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs, MessageBoxOptions, ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\r\nimport { EnumFilterPanelActions, EnumMenuPositions } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SysEventsService {\r\n // EventEmitter inherits from RxJS Subject. ALWAYS use subscribe/unsubscribe when working with them\r\n public OnSetDefaults: EventEmitter = new EventEmitter();\r\n public OnEntityLoaded: EventEmitter = new EventEmitter();\r\n public OnNavigate: EventEmitter = new EventEmitter();\r\n public OnReloadComponent: EventEmitter = new EventEmitter();\r\n\r\n private _onEntitySavedSubject = new Subject();\r\n public OnEntitySaved = this._onEntitySavedSubject.asObservable();\r\n\r\n NotifyEntitySaved(e: EntitySavedEventArgs) {\r\n this._onEntitySavedSubject.next(e);\r\n }\r\n\r\n private _toolbarReloadSubject = new ReplaySubject(3);\r\n readonly Toolbar = this._toolbarReloadSubject.asObservable();\r\n\r\n ReloadToolbar(toolbarSettings: ToolbarSettings) {\r\n this._toolbarReloadSubject.next(toolbarSettings);\r\n }\r\n\r\n private _selectedRouteChangedSubject = new BehaviorSubject('');\r\n readonly SelectedRoute = this._selectedRouteChangedSubject.asObservable();\r\n\r\n ChangeSelectedRoute(route: string) {\r\n this._selectedRouteChangedSubject.next(route);\r\n }\r\n\r\n private _reloadMenuItemsSubject = new ReplaySubject(1); //BehaviorSubject(false);\r\n readonly MenuItems = this._reloadMenuItemsSubject.asObservable();\r\n\r\n ReloadMenuItems() {\r\n this._reloadMenuItemsSubject.next(true);\r\n }\r\n\r\n private _menuPositonSubject = new ReplaySubject(1);\r\n readonly MenuPositon = this._menuPositonSubject.asObservable();\r\n\r\n // null or undefined to toggle menu\r\n SetMenuPositon(position?: EnumMenuPositions) {\r\n this._menuPositonSubject.next(position);\r\n }\r\n\r\n private _filterPanelSubject = new Subject();\r\n readonly FilterPanel = this._filterPanelSubject.asObservable();\r\n\r\n FilterPanelAction(action: EnumFilterPanelActions) {\r\n this._filterPanelSubject.next(action);\r\n }\r\n\r\n private _pageSidePanelStateSubject = new ReplaySubject<{ pageComponentName: string, state: boolean }>(1);\r\n readonly PageSidePanelState = this._pageSidePanelStateSubject.asObservable();\r\n\r\n SetPageSidePanelState(pageComponentName: string, state: boolean) {\r\n this._pageSidePanelStateSubject.next({ pageComponentName: pageComponentName, state: state });\r\n }\r\n\r\n private _pagePreviewStateSubject = new Subject<{ pageComponentName: string, state: boolean, data: string | Blob, fileName: string }>();\r\n readonly PagePreviewState = this._pagePreviewStateSubject.asObservable();\r\n\r\n SetPagePreviewState(pageComponentName: string, state: boolean, data?: string | Blob, fileName?: string) {\r\n this._pagePreviewStateSubject.next({ pageComponentName: pageComponentName, state: state, data, fileName });\r\n }\r\n\r\n private _openMessageBoxSubject = new Subject();\r\n readonly OpenMessageBoxSubject = this._openMessageBoxSubject.asObservable();\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this._openMessageBoxSubject.next(options);\r\n }\r\n\r\n private _closeMessageBoxSubject = new Subject();\r\n readonly CloseMessageBoxSubject = this._closeMessageBoxSubject.asObservable();\r\n\r\n public CloseMessageBox(value: boolean) {\r\n this._closeMessageBoxSubject.next(value);\r\n }\r\n\r\n private _breadcrumbSubject = new Subject();\r\n readonly Breadcrumb = this._breadcrumbSubject.asObservable();\r\n\r\n public SetBreadCrumbVisible(isVisible: boolean) {\r\n this._breadcrumbSubject.next(isVisible);\r\n }\r\n\r\n private _defaultNavigationSubject = new Subject();\r\n readonly OnNavigateDefault = this._defaultNavigationSubject.asObservable();\r\n\r\n public NavigateDefault(result: boolean) {\r\n this._defaultNavigationSubject.next(result);\r\n }\r\n\r\n private _loadPanelSubject = new Subject();\r\n readonly LoadPanel = this._loadPanelSubject.asObservable();\r\n\r\n public SetLoadPanelState(result: boolean) {\r\n this._loadPanelSubject.next(result);\r\n }\r\n\r\n private _loadingSubject = new Subject();\r\n readonly Loading$ = this._loadingSubject.asObservable();\r\n\r\n public ShowLoading() {\r\n this._loadingSubject.next(true);\r\n }\r\n\r\n public HideLoading() {\r\n this._loadingSubject.next(false);\r\n }\r\n\r\n private _dialogShownSubject = new Subject();\r\n readonly DialogShown$ = this._dialogShownSubject.asObservable();\r\n\r\n public DialogShown(componentName: string) {\r\n this._dialogShownSubject.next(componentName);\r\n }\r\n}\r\n","import { ClientException, BaseState, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ComponentCustomization, FieldCustomizationElement, InjectableComponentOptions } from '@base/classes/BaseClasses';\r\nimport { Route } from '@angular/router';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nclass SysGlobalsClass {\r\n MainMenuVisible: boolean;\r\n MenuPath: string;\r\n PageStates: { [page: string]: BaseState } = {};\r\n IsResetState: boolean;\r\n LastException: ClientException;\r\n Language: string;\r\n CurrentEntity: BaseEntity;\r\n CurrentState: BaseState;\r\n FieldCustomizations: FieldCustomizationElement[];\r\n ComponentCustomizations: ComponentCustomization[];\r\n PageRoutes: Route[];\r\n NavigationSequence: number;\r\n ProgressPercent: number;\r\n IsProgressTracking: boolean;\r\n IgnoreSessionRefreshRequestToken: HttpContextToken = new HttpContextToken(() => false);\r\n\r\n InjectableComponentsOptions: InjectableComponentOptions>[] = [];\r\n}\r\n\r\nexport const SysGlobals = new SysGlobalsClass();\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { KeyValueEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\n\r\n@Injectable()\r\nexport class SystemOptionsService {\r\n private systemOptions: KeyValueEntity[];\r\n constructor() { }\r\n\r\n setOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...options];\r\n }\r\n\r\n mergeOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...this.systemOptions, ...options];\r\n }\r\n\r\n getSystemOption(optionName: EnumSystemOptions | string) {\r\n if (this.systemOptions == undefined) return undefined;\r\n var option = this.systemOptions.find(x => x.Key == optionName);\r\n if (option == undefined) throw (`SystemOption ${optionName} is not defined`);\r\n return option.Value;\r\n }\r\n\r\n getSystemOptionAsBoolean(optionName: EnumSystemOptions | string) {\r\n return this.getSystemOption(optionName) == '1';\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport notify from 'devextreme/ui/notify';\r\nimport { MessageBoxOptions } from '@base/classes/BaseClasses';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\n\r\n@Injectable()\r\nexport class UiService {\r\n\r\n constructor(private sysEventsService: SysEventsService) {\r\n }\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this.sysEventsService.OpenMessageBox(options);\r\n }\r\n\r\n public CloseMessageBox(result: boolean) {\r\n this.sysEventsService.CloseMessageBox(result);\r\n }\r\n\r\n // Information message for the user\r\n public WarningMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'warning', iMilliSecs || 30000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Information message for the user\r\n public InfoMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'success', iMilliSecs || 5000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Error message for the user\r\n public StopMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'error', iMilliSecs || 15000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n public Notify(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000, undefined, true);\r\n }\r\n\r\n // Differentiate between user messages and message that system has no expected\r\n // For instance, getting an error when populating a combo is not expected. \r\n // An error message when saving an entity can happen, thus StopMessage should be used\r\n public UnexpectedMessage(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000);\r\n console.error(sMessage);\r\n }\r\n\r\n // Show the message\r\n private ShowMessage(sMessage: string, sType: string, iMilliSecs: number, sSelector?: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const toasts = document.querySelectorAll('.dx-toast-content');\r\n const options = this.GetNotifyOptions(sMessage, sSelector, toasts, sType, isNotification, isShowMultipleToasts);\r\n const displayTime = iMilliSecs - toasts.length * 1000;\r\n notify(options, sType, displayTime <= 5000 ? 5000 : displayTime);\r\n }\r\n\r\n private GetNotifyOptions(sMessage: string, sSelector: string, toasts: NodeListOf, toastType: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const customToastCssClass = `m4u-custom-toast-${toastType}`;\r\n const toastIconClass = `m4u-icon-toast-${toastType}`; \r\n const position = isNotification ? 'right bottom' : 'bottom center';\r\n const offset = isNotification \r\n ? `-20px -${this.GetNotificationTop(toasts)}` \r\n : isShowMultipleToasts ? `0 -${this.GetNotificationTop(toasts)}` : '0 -20px';\r\n return {\r\n closeOnClick: true,\r\n closeOnSwipe: true,\r\n width: 200,\r\n position: {\r\n at: position,\r\n my: position,\r\n of: sSelector || null,\r\n offset: offset\r\n },\r\n contentTemplate: `
\r\n
\r\n ${sMessage}\r\n
`,\r\n show: {\r\n duration: 0\r\n },\r\n animation: {\r\n show:\r\n {\r\n type: 'fade',\r\n duration: 500,\r\n from: 0,\r\n to: 1\r\n },\r\n hide:\r\n {\r\n type: 'fade',\r\n duration: 1000,\r\n from: 1,\r\n to: 0\r\n }\r\n }\r\n };\r\n }\r\n\r\n private GetNotificationTop(toasts: NodeListOf): number {\r\n let top = 0;\r\n const lastOffset = toasts.length ? toasts[toasts.length - 1]?.getBoundingClientRect().top : null;\r\n\r\n if (lastOffset) {\r\n top = lastOffset;\r\n }\r\n if (top <= 0) {\r\n top = 20;\r\n }\r\n else {\r\n top = window.innerHeight - top;\r\n top += 5;\r\n }\r\n\r\n return top;\r\n }\r\n}\r\n","import { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { EnumRequestProgressTracking } from '../framework/sysenums.enum';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\n\r\n@Injectable()\r\nexport class APIGatewayService {\r\n constructor(private http: HttpClient,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n //Controller based actions\r\n //********************************\r\n public ExecuteGetAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteGetRequest(sController + '/' + sAction, QueryParams, TrackProgress, ResponseType, Headers, Context);\r\n }\r\n\r\n public ExecutePostAction(sController: string, sAction: string, Entity: BaseEntity | BaseEntity[], QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecutePostRequest(sController + '/' + sAction, Entity, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n public ExecuteDeleteAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteDeleteRequest(sController + '/' + sAction, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n //*******************************\r\n //HTTP-Level requests\r\n //*******************************\r\n private ExecutePostRequest(url: string, data: any, QueryParams: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.post(this.GetAPIURL() + url, Utils.CloneObject(data), this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context)); //Notice the cloning, to avoid changing the actual fields when parsing the body\r\n }\r\n\r\n private ExecuteGetRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.get(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, ResponseType, Headers, Context));\r\n }\r\n\r\n private ExecuteDeleteRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.delete(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context));\r\n }\r\n\r\n //Return request parameters\r\n private GetParams(QueryParams: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext) {\r\n const ret =\r\n {\r\n params: this.PrepareQueryParams(QueryParams),\r\n headers: this.GetHeaders(TrackProgress, Headers),\r\n reportProgress: (TrackProgress != undefined),\r\n context: Context\r\n };\r\n\r\n if (ResponseType) {\r\n (ret as any).responseType = ResponseType;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n private GetHeaders(TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }): { [header: string] : string | string[] } {\r\n let headers = Headers;\r\n if (TrackProgress) headers = { ...{ 'm4u-trackprogress': TrackProgress }, ...headers };\r\n return headers;\r\n }\r\n\r\n\r\n private PrepareQueryParams(QueryParams: any): any {\r\n\r\n //Step 1 - pre-process \r\n let params = this.PrepareQueryParamsInternal(QueryParams);\r\n\r\n\r\n //Step 2 - flatten/spread\r\n if (params != undefined) {\r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n if (value instanceof Object && !(value instanceof Array)) {\r\n Object.keys(value).forEach(childKey => {\r\n const valueChild = value[childKey];\r\n params[childKey] = valueChild;\r\n });\r\n delete params[key];\r\n }\r\n });\r\n }\r\n\r\n //Step 3 - format dates\r\n params = this.PrepareQueryParamsInternal(params);\r\n return params;\r\n }\r\n\r\n //Prepare query parameters - format dates and remove nulls\r\n private PrepareQueryParamsInternal(QueryParams: any): any {\r\n if (QueryParams === undefined) return undefined;\r\n Object.keys(QueryParams).forEach(key => {\r\n const value = QueryParams[key];\r\n if (value === undefined || value === null || value == '') delete QueryParams[key];\r\n if (value instanceof Date) QueryParams[key] = this.ConvertToServerDate(value);\r\n });\r\n return QueryParams;\r\n }\r\n\r\n //*******************************\r\n\r\n\r\n //Formats value for sending to the server, without time zone\r\n private ConvertToServerDate(value: Date): string {\r\n const D = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));\r\n let S = D.toISOString();\r\n if (S.endsWith('Z')) S = S.substring(0, S.length - 1);\r\n return S;\r\n }\r\n\r\n\r\n //Return the base URL for the API\r\n public GetAPIURL(): string {\r\n if (this.appConfigService.M4UConfig.standaloneApplicationApiUrl) return this.appConfigService.M4UConfig.standaloneApplicationApiUrl;\r\n \r\n const deploymentPort = this.appConfigService.M4UConfig.deploymentPort; \r\n const formattedDeploymentPort = deploymentPort && `:${deploymentPort}` || '';\r\n const deploymentLocation = this.appConfigService.M4UConfig.deploymentLocation;\r\n const formattedDeploymentLocation = deploymentLocation && `${deploymentLocation}` || '/';\r\n\r\n //Combine\r\n return `${location.protocol}//${location.hostname}${formattedDeploymentPort}${formattedDeploymentLocation}api/`;\r\n \r\n }\r\n}\r\n\r\n","declare global\r\n{\r\n interface Date\r\n {\r\n ToDate(): Date;\r\n IsToday(): boolean;\r\n Time(): Date;\r\n }\r\n \r\n\r\n\r\n}\r\n\r\nDate.prototype.ToDate = function (): Date\r\n{\r\n return new Date(this.getFullYear(), this.getMonth(), this.getDate());\r\n}\r\n\r\nDate.prototype.IsToday = function (): boolean\r\n{\r\n return this.ToDate().valueOf() == new Date().ToDate().valueOf();\r\n}\r\n\r\n\r\nDate.prototype.Time = function (): Date\r\n{\r\n return new Date(1900, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds());\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport { }","import { DataGroupInfoHeader } from '@base/classes/BaseClasses';\r\nimport { formatDate } from \"devextreme/localization\";\r\nimport { FrameworkService } from \"../framework/framework.service\";\r\nimport { RC } from \"../framework/resources.service\";\r\nimport { EnumLanguages } from '../framework/sysenums.enum';\r\nimport { SysGlobals } from \"../framework/sysglobals\";\r\nimport { AppInjector } from \"../injector/injector.module\";\r\nimport \"./DateExtensions\";\r\n\r\nexport class DateHelpers {\r\n\r\n\r\n //Return only date part of the value\r\n public static ToDateOnly(value: Date): Date {\r\n var date = new Date(value);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n }\r\n\r\n //Return only time part of the value\r\n public static ToTimeOnly(value: Date): Date {\r\n return new Date(1900, 0, 1, value.getHours(), value.getMinutes(), value.getSeconds());\r\n }\r\n\r\n public static DiffInSeconds(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 1);\r\n }\r\n\r\n public static DiffInMinutes(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 60);\r\n }\r\n\r\n public static DiffInHours(d1: Date, d2: Date): number {\r\n var x1 = new Date(0, 0, 0, d1.getHours(), d1.getMinutes());\r\n var x2 = new Date(0, 0, 0, d2.getHours(), d2.getMinutes());\r\n return (x2.valueOf() - x1.valueOf()) / (1000 * 3600);\r\n }\r\n\r\n public static DiffInDays(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / (1000 * 3600 * 24);\r\n }\r\n\r\n public static DiffInWeeks(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / 604800000;\r\n }\r\n\r\n public static DiffInMonthes(d1: Date, d2: Date): number {\r\n let months = 0;\r\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\r\n months -= d1.getMonth();\r\n months += d2.getMonth();\r\n return months <= 0 ? 0 : months;\r\n }\r\n\r\n public static IsSameDate(d1: Date, d2: Date) {\r\n return (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth() && d1.getDate() == d2.getDate());\r\n }\r\n\r\n public static BOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth(), 1);\r\n }\r\n\r\n public static BOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 0, 1);\r\n }\r\n\r\n public static EOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 11, 1);\r\n }\r\n\r\n public static EOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth() + 1, 0);\r\n }\r\n\r\n public static GetDayName(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1\");\r\n case 2: return RC(\"lblDay2\");\r\n case 3: return RC(\"lblDay3\");\r\n case 4: return RC(\"lblDay4\");\r\n case 5: return RC(\"lblDay5\");\r\n case 6: return RC(\"lblDay6\");\r\n case 7: return RC(\"lblDay7\");\r\n }\r\n }\r\n\r\n public static GetDayNameShort(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1s\");\r\n case 2: return RC(\"lblDay2s\");\r\n case 3: return RC(\"lblDay3s\");\r\n case 4: return RC(\"lblDay4s\");\r\n case 5: return RC(\"lblDay5s\");\r\n case 6: return RC(\"lblDay6s\");\r\n case 7: return RC(\"lblDay7s\");\r\n }\r\n }\r\n\r\n public static GetDateApproximate(date: Date, bShowDate: boolean = true): string {\r\n var framework = AppInjector.get(FrameworkService);\r\n if (date == null) return RC(\"lblDateIsNull\");\r\n var sApproximate: string = this.GetDateApproximateInternal(date);\r\n var sFormattedDate: string = this.IsSameDate(date, new Date()) && this.IsHasTime(date)\r\n ? formatDate(date, framework.CompanyInfo.TimeFormatShort)\r\n : formatDate(date, framework.CompanyInfo.DateFormatShort);\r\n var sFinalDate: string = bShowDate ? `(${sFormattedDate})` : '';\r\n return RC(\"lblDateApproximate\", sApproximate, RC('lblAgo'), sFinalDate)\r\n //if (SysGlobals.Language == EnumLanguages.English) return `${sApproximate} ${RC('lblAgo')} ${sFinalDate}`;\r\n //if (SysGlobals.Language == EnumLanguages.Spanish) return `${sApproximate} ${RC('lblAgo')} ${sFinalDate}`;\r\n //if (SysGlobals.Language == EnumLanguages.Hebrew) return `${RC('lblAgo')} ${sApproximate} ${sFinalDate}`;\r\n }\r\n\r\n\r\n public static IsHasTime(date: Date) {\r\n return date.getHours() != 0 || date.getMinutes() != 0 || date.getSeconds() != 0;\r\n }\r\n\r\n private static GetDateApproximateInternal(date: Date): string {\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const nMinutes = diff / 1000 / 60;\r\n const nHours = nMinutes / 60;\r\n const nDays = nHours / 24;\r\n const nWeeks = nDays / 7;\r\n const nMonths = nDays / 30;\r\n const nYears = nMonths / 12;\r\n\r\n\r\n // Less then 1 day\r\n if (this.IsHasTime(date)) {\r\n if (nMinutes <= 1) return RC(\"f702\");\r\n if (nMinutes <= 5) return RC(\"f703\");\r\n if (nMinutes <= 10) return RC(\"f704\");\r\n if (nMinutes <= 15) return RC(\"f705\");\r\n if (nMinutes <= 30) return RC(\"f706\");\r\n if (nMinutes <= 60) return RC(\"f707\");\r\n if (nMinutes <= 90) return RC(\"f709\");\r\n if (nMinutes <= 135) return RC(\"f710\");\r\n if (nDays <= 1) return RC(\"f711\", Math.floor(nHours));\r\n }\r\n else {\r\n if (nDays <= 1) return RC(\"f725\");\r\n }\r\n\r\n // Less then 1 week\r\n if (nDays <= 2) return RC(\"f712\");\r\n if (nDays <= 3) return RC(\"f713\");\r\n if (nWeeks <= 1) return RC(\"f714\", Math.floor(nDays));\r\n\r\n // Less then 1 month\r\n if (nWeeks <= 2) return RC(\"f715\")\r\n if (nWeeks <= 3) return RC(\"f716\")\r\n if (nMonths <= 1) return RC(\"f717\", Math.floor(nWeeks))\r\n\r\n // Less then 1 year\r\n if (nMonths <= 2) return RC(\"f718\")\r\n if (nMonths <= 3) return RC(\"f720\")\r\n if (nYears <= 1) return RC(\"f721\", Math.floor(nMonths))\r\n\r\n // Years\r\n if (nYears <= 2) return RC(\"f722\")\r\n if (nYears <= 3) return RC(\"f723\")\r\n\r\n return RC(\"f724\", Math.floor(nYears));\r\n }\r\n\r\n public static GetGroupsByDate(): DataGroupInfoHeader[] {\r\n let groups =\r\n [\r\n new DataGroupInfoHeader(RC('lblToday'), '-1'),\r\n new DataGroupInfoHeader(RC('lblYesterday'), '-2'),\r\n new DataGroupInfoHeader(RC('lblLastWeek'), '-7'),\r\n new DataGroupInfoHeader(RC('lblLastMonth'), '-30'),\r\n new DataGroupInfoHeader(RC('lblBefore'), '-999')\r\n ]\r\n\r\n return groups;\r\n }\r\n\r\n\r\n public static AddDay(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count);\r\n return newDate;\r\n }\r\n\r\n public static AddWeek(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count * 7);\r\n return newDate;\r\n }\r\n\r\n public static AddMonth(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setMonth(date.getMonth() + count);\r\n return newDate;\r\n }\r\n}","import { BaseEntity, GenericListEntity, UploadFile, AttachedFile, CompanyInfo } from '@base/entities/BaseEntities';\r\nimport { QueryList } from '@angular/core';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport camelcaseKeys from 'camelcase-keys';\r\nimport { Observable, Subject, take } from 'rxjs';\r\n\r\n/** Utility functions for interaction with objects */\r\n// @dynamic\r\nexport class Utils {\r\n\r\n /** Returns a new typed array */\r\n public static MapList(type: (new () => TEntity), Entities: TEntity[]): TEntity[] {\r\n //Empty response, do nothing\r\n if (Entities.length == 0) return undefined;\r\n\r\n //Map each element and add to array\r\n const newArray: Array = new Array();\r\n Entities.forEach(Entity => {\r\n newArray.push(this.MapObject(type, Entity));\r\n });\r\n\r\n return newArray;\r\n }\r\n\r\n public static MapAsNumeric(item: GenericListEntity): any {\r\n return (\r\n {\r\n Value: +item.Value,\r\n Text: item.Text,\r\n Description: item.Description\r\n });\r\n }\r\n\r\n /** Copy all properties from source object to a new typed object */\r\n /**\r\n * \r\n * @param type The type of the result entity\r\n * @param Entity The value of the source \r\n */\r\n public static MapObject(type: (new () => TEntity), Entity: TEntity): TEntity {\r\n //Empty response, do nothing\r\n if (Entity == undefined) return undefined;\r\n\r\n //Create new instance, copy \r\n const newObject: TEntity = this.GetNewInstance(type);\r\n const resultObject = this.CloneObject(Entity as any) as TEntity;\r\n resultObject.TypeName = newObject.TypeName;\r\n return resultObject;\r\n }\r\n\r\n public static GetNewInstance(type: (new () => TEntity)): TEntity {\r\n return new type();\r\n }\r\n\r\n public static CloneObject(obj: object): any {\r\n return cloneDeep(obj);\r\n }\r\n\r\n public static IsPrimitiveType(obj: object) {\r\n return (obj !== Object(obj));\r\n }\r\n\r\n public static CopyProperties(type: (new () => TEntity), source: TEntity, destination: TEntity) {\r\n //Empty response, do nothing\r\n if (source == undefined || destination == undefined) return undefined;\r\n for (const k in source) destination[k] = source[k];\r\n }\r\n\r\n public static IsEmpty(obj: any): boolean {\r\n if (typeof (obj) === 'number' && obj === 0) return false;\r\n return obj === undefined || obj == null || obj == '';\r\n }\r\n\r\n public static NZ(obj: any, replace: any = ''): string {\r\n return (this.IsEmpty(obj) ? replace : obj);\r\n }\r\n\r\n public static ValEx(s: string): number {\r\n if (this.IsEmpty(s)) return 0;\r\n if (typeof s === 'number') return s;\r\n const num = s.replace(',', '').replace(' ', '');\r\n return +num;\r\n }\r\n\r\n //Computer checksum hash (not for cryptography)\r\n public static ComputeChecksum(value: string): string {\r\n let h1 = 0xdeadbeef ^ 0, h2 = 0x41c6ce57 ^ 0;\r\n for (let i = 0, ch; i < value.length; i++) {\r\n ch = value.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);\r\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);\r\n return (h2 >>> 0).toString(16).padStart(8, '0') + (h1 >>> 0).toString(16).padStart(8, '0');\r\n }\r\n\r\n //Convert value to bool, considering undefined\r\n public static ToBoolean(value: boolean): boolean {\r\n if (value == undefined) return false;\r\n return value;\r\n }\r\n\r\n //Convert 64base encoded data into blob\r\n public static ConvertToBlob(oBase64Data: any, sContentType: string, bIsUseUint16: boolean = false): Blob {\r\n if (oBase64Data === undefined || oBase64Data === null) return undefined;\r\n const byteCharacters = atob(oBase64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\r\n const slice = byteCharacters.slice(offset, offset + 512);\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = !bIsUseUint16 ? new Uint8Array(byteNumbers) : new Uint16Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n return new Blob(byteArrays, { type: sContentType });\r\n }\r\n\r\n public static ConvertToBase64(bytesArray: number[]) {\r\n let binary = '';\r\n const bytes = new Uint8Array(bytesArray);\r\n const len = bytes.byteLength;\r\n for (let i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n }\r\n\r\n public static ConvertToBytesArray(base64Data: string) {\r\n if (base64Data === undefined || base64Data === null) return undefined;\r\n const data = base64Data.split(';');\r\n base64Data = data.length > 1 ? data[1].substring(data[1].indexOf(',') + 1) : base64Data;\r\n\r\n const binary_string = window.atob(base64Data);\r\n const len = binary_string.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binary_string.charCodeAt(i);\r\n }\r\n return Array.from(new Uint8Array(bytes.buffer));\r\n }\r\n\r\n public static ConvertStringToBase64(str: string) {\r\n const bytes = new TextEncoder().encode(str);\r\n const binString = Array.from(bytes, (byte: number) =>\r\n String.fromCodePoint(byte),\r\n ).join('');\r\n\r\n return window.btoa(binString);\r\n }\r\n\r\n public static GetImageSource(bytesArray: number[], mimeType: string): string {\r\n return `data:${mimeType};base64,${this.ConvertToBase64(bytesArray)}`;\r\n }\r\n\r\n public static GetImageSourceFromBase64(base64String: string, mimeType: string): string {\r\n return `data:${mimeType};base64,${base64String}`;\r\n }\r\n\r\n public static ExtractDataFromDataURL(DataURL: string): string {\r\n return DataURL.split(',')[1];\r\n }\r\n\r\n public static CombineChild(oItem1: T, oItem2: T): T {\r\n return oItem1 != undefined ? oItem1 : oItem2;\r\n }\r\n\r\n public static CombineChildren(list1: QueryList, list2: QueryList): T[] {\r\n let arr: T[] = [];\r\n if (list1 != undefined) arr = arr.concat(list1.toArray());\r\n if (list2 != undefined) arr = arr.concat(list2.toArray());\r\n return arr;\r\n }\r\n\r\n public static ConvertCSVToJSONArray(strData, sDelimited: string) {\r\n let data = [], i = 0, k = 0, header = [];\r\n\r\n\r\n // Create a regular expression to parse the CSV values.\r\n const objPattern = new RegExp(\r\n (\r\n // Delimiters.\r\n '(\\\\' + sDelimited + '|\\\\r?\\\\n|\\\\r|^)' +\r\n\r\n // Quoted fields.\r\n '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\r\n\r\n // Standard fields.\r\n '([^\"\\\\' + sDelimited + '\\\\r\\\\n]*))'\r\n ),\r\n 'gi'\r\n );\r\n\r\n // Create an array to hold our data. Give the array\r\n // a default empty first row.\r\n let arrData = [[]];\r\n\r\n // Create an array to hold our individual pattern\r\n // matching groups.\r\n let arrMatches = null;\r\n\r\n\r\n // Keep looping over the regular expression matches\r\n // until we can no longer find a match.\r\n while (arrMatches = objPattern.exec(strData)) {\r\n\r\n // Get the delimiter that was found.\r\n const strMatchedDelimiter = arrMatches[1];\r\n\r\n // Check to see if the given delimiter has a length\r\n // (is not the start of string) and if it matches\r\n // field delimiter. If id does not, then we know\r\n // that this delimiter is a row delimiter.\r\n if (strMatchedDelimiter.length && (strMatchedDelimiter != sDelimited)) {\r\n // Since we have reached a new row of data,\r\n // add an empty row to our data array.\r\n arrData.push([]);\r\n }\r\n\r\n // Now that we have our delimiter out of the way,\r\n // let's check to see which kind of value we\r\n // captured (quoted or unquoted).\r\n if (arrMatches[2]) {\r\n // We found a quoted value. When we capture\r\n // this value, unescape any double quotes.\r\n var strMatchedValue = arrMatches[2].replace(new RegExp('\"\"', 'g'), '\"');\r\n\r\n } else {\r\n // We found a non-quoted value.\r\n var strMatchedValue = arrMatches[3];\r\n }\r\n\r\n // Now that we have our value string, let's add\r\n // it to the data array.\r\n arrData[arrData.length - 1].push(strMatchedValue);\r\n }\r\n\r\n\r\n //Filter out empty lines\r\n arrData = arrData.filter(x => !this.IsEmpty(x));\r\n\r\n //Rename headers\r\n for (i = 0; i < arrData.length; i++) {\r\n if (i == 0) {\r\n header = arrData[i];\r\n } else {\r\n const obj = {};\r\n for (k = 0; k < header.length; k++) {\r\n if (k < arrData[i].length) {\r\n obj[header[k]] = arrData[i][k];\r\n }\r\n }\r\n data.push(obj);\r\n }\r\n }\r\n return data;\r\n\r\n }\r\n\r\n public static ContainsHebrewLetters(str: any): boolean {\r\n const regex = new RegExp('[א-ת]+');\r\n return (regex.test(str));\r\n }\r\n\r\n public static ContainsEnglishOnly(str: any): boolean {\r\n const regex = new RegExp('[^a-zA-Z\\\\s]');\r\n return (!regex.test(str));\r\n }\r\n\r\n public static LoadFilesBody(files: File[], done: (uploads: UploadFile[]) => void) {\r\n const result: UploadFile[] = [];\r\n\r\n if (files && files.length) {\r\n const length = files.length;\r\n let count = 0;\r\n\r\n for (const file of files) {\r\n const fileReader = new FileReader();\r\n\r\n fileReader.onloadend = (e) => {\r\n count++;\r\n\r\n const buffer = fileReader.result as ArrayBuffer;\r\n const array = Array.from(new Uint8Array(buffer));\r\n\r\n result.push({\r\n Name: file.name,\r\n Type: file.type,\r\n Data: array,\r\n Buffer: buffer,\r\n File: file\r\n } as UploadFile);\r\n\r\n if (length === count) {\r\n done(result);\r\n }\r\n\r\n };\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n } else {\r\n done(result);\r\n }\r\n }\r\n\r\n public static DoFileDownload(file: AttachedFile | string, fileBlob: string, contentType: string, bIsUseUint16: boolean = false) {\r\n const blob = Utils.ConvertToBlob(fileBlob, contentType, bIsUseUint16);\r\n const objectUrl = URL.createObjectURL(blob);\r\n const fileName = typeof file === 'string' ? file : (file.Name + (file.Extension ? '.' + file.Extension : ''));\r\n this.DownloadFile(objectUrl, fileName);\r\n }\r\n\r\n public static DownloadFile(fileUrl: string, fileName: string) {\r\n const a = document.createElement('a');\r\n a.href = fileUrl;\r\n a.download = fileName;\r\n a.click();\r\n URL.revokeObjectURL(fileUrl);\r\n }\r\n\r\n // Compare not undefined/null objects\r\n public static IsEquals(obj1: {}, obj2: {}, ignoreEmptyProps: boolean = false) {\r\n if (obj1 === null || obj2 === null || !this.IsObject(obj1) || !this.IsObject(obj2)) return false;\r\n return this.StringifyObject(obj1, ignoreEmptyProps) === this.StringifyObject(obj2, ignoreEmptyProps);\r\n }\r\n\r\n public static ConvertBlobToImage(image: Blob, result: (image) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n result(reader.result);\r\n }, false);\r\n\r\n if (image && image.size !== 0) {\r\n reader.readAsDataURL(image);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static ConvertBlobToBytesArray(file: Blob, result: (bytes) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const arrayBuffer = (reader.result as ArrayBuffer);\r\n result(Array.from(new Uint8Array(arrayBuffer)));\r\n }, false);\r\n\r\n if (file && file.size !== 0) {\r\n reader.readAsArrayBuffer(file);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static ConvertToBytesArrayObservable(file: Blob): Observable {\r\n const convertedBytesSubject = new Subject();\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const arrayBuffer = (reader.result as ArrayBuffer);\r\n convertedBytesSubject.next(Array.from(new Uint8Array(arrayBuffer)));\r\n }, false);\r\n\r\n if (file && file.size !== 0) {\r\n reader.readAsArrayBuffer(file);\r\n } else {\r\n convertedBytesSubject.next(undefined);\r\n }\r\n\r\n return convertedBytesSubject.asObservable().pipe(take(1));\r\n }\r\n\r\n public static UniqueBy(array: any[], mapFunc: Function = x => x) {\r\n return new Set(array.map(x => mapFunc(x)));\r\n }\r\n\r\n public static LoadJsonFile(path: string): T {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('GET', path, false);\r\n if (xmlhttp.overrideMimeType) {\r\n xmlhttp.overrideMimeType('application/json');\r\n }\r\n xmlhttp.send();\r\n const json = xmlhttp.status == 200 && !xmlhttp.responseText.startsWith('<') ? xmlhttp.responseText : null;\r\n return json ? JSON.parse(json) : null;\r\n }\r\n\r\n // current implementation doesn't allow to have routes with numbers inside\r\n //public static getClearURLFromRoute(event) {\r\n // const route = event.urlAfterRedirects.split('?')[0]\r\n // .replace(/[0-9]/g, '')\r\n // .replace(/\\/$/, '')\r\n // .replace('(', '')\r\n // .replace(')', '');\r\n // return route.substring(0, route.indexOf('_') - 1) + route.substring(route.lastIndexOf('_') + 1);\r\n //}\r\n\r\n public static ToCamelCase | readonly any[]>(input: T): T {\r\n return camelcaseKeys(input, { deep: true }) as T;\r\n }\r\n\r\n public static ParseJSONString(jsonString: string): any {\r\n return JSON.parse(jsonString, this.dateParser);\r\n }\r\n\r\n private static _reISO = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*))(?:Z|(\\+|-)([\\d|:]*))?$/;\r\n private static _reMsAjax = /^\\/Date\\((d|-|.*)\\)[\\/|\\\\]$/;\r\n private static dateParser = (key, value) => {\r\n if (typeof value === 'string') {\r\n let a = Utils._reISO.exec(value);\r\n if (a)\r\n return new Date(value);\r\n a = Utils._reMsAjax.exec(value);\r\n if (a) {\r\n const b = a[1].split(/[-+,.]/);\r\n return new Date(b[0] ? +b[0] : 0 - +b[1]);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n public static StringifyObject(obj: any, ignoreEmptyProps: boolean = false) {\r\n const copyObj = { ...obj };\r\n\r\n //remove empty props\r\n if (ignoreEmptyProps) {\r\n for (const propName in copyObj) {\r\n if (copyObj[propName] === null || copyObj[propName] === undefined || copyObj[propName] === '') {\r\n delete copyObj[propName];\r\n }\r\n }\r\n }\r\n return JSON.stringify(copyObj);\r\n }\r\n\r\n public static DeepProxy(obj: any, subject: Subject = null) {\r\n const self = this;\r\n const mapStore = {};\r\n return new Proxy(obj, {\r\n get(target, property) {\r\n const value = target[property];\r\n // if this property has been proxied, just return\r\n if (mapStore[property] === true) return value;\r\n // if it's an non-proxied object, we return its proxy\r\n if (value && Utils.IsObject(value) && !(value instanceof Date) || Utils.IsArray(value)) {\r\n const proxyValue = mapStore[property] || self.DeepProxy(value, subject);\r\n mapStore[property] = proxyValue;\r\n return proxyValue;\r\n }\r\n // else we just take a mark\r\n mapStore[property] = true;\r\n return value;\r\n },\r\n set(target, property, value) {\r\n const newVal = (Utils.IsObject(value) && value && !(value instanceof Date) || Utils.IsArray(value))\r\n ? self.DeepProxy(value, subject)\r\n : value;\r\n target[property] = newVal;\r\n mapStore[property] = true;\r\n subject && subject.next();\r\n return true;\r\n },\r\n deleteProperty(target, property) {\r\n delete target[property];\r\n delete mapStore[property];\r\n subject && subject.next();\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n public static IsArray(arr: any) {\r\n return Array.isArray(arr);\r\n }\r\n\r\n public static IsObject(obj: any) {\r\n return typeof obj === 'object';\r\n }\r\n\r\n public static IsEmail(email: string, isSupportMultiple: boolean = false) {\r\n if (!email || email.length === 0) {\r\n return false;\r\n }\r\n\r\n const validRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n let emails = [];\r\n\r\n if (isSupportMultiple) {\r\n emails = email.split(';');\r\n } else {\r\n emails.push(email);\r\n }\r\n\r\n for (let i = 0; i < emails.length; i++) {\r\n if (!emails[i].match(validRegex)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public static GetIconStyle(extension: string) {\r\n if (extension) {\r\n switch (extension) {\r\n case '.pdf':\r\n return 'mdi mdi-file-pdf-box';\r\n case '.doc':\r\n case '.docx':\r\n return 'mdi mdi-file-word-box';\r\n case '.xls':\r\n case '.xlsx':\r\n return 'mdi mdi-file-excel-box';\r\n case '.rft':\r\n case '.txt':\r\n return 'mdi mdi-text-box';\r\n case '.zip':\r\n case '.rar':\r\n case '.gzip':\r\n return 'mdi mdi-zip-box';\r\n case '.htm':\r\n case '.html':\r\n return 'mdi mdi-language-html5';\r\n case '.jpg':\r\n case '.jpeg':\r\n return 'mdi mdi-file-jpg-box';\r\n case '.gif':\r\n return 'mdi mdi-file-gif-box';\r\n case '.bmp':\r\n case '.tiff':\r\n case '.png':\r\n return 'mdi mdi-file-png-box';\r\n case '.xml':\r\n return 'mdi mdi-file-xml-box';\r\n default:\r\n return 'mdi mdi-file';\r\n }\r\n }\r\n\r\n return 'mdi mdi-file';\r\n }\r\n\r\n public static Round(num: number) {\r\n return +(Math.round((num + 'e+2') as any) + 'e-2');\r\n }\r\n\r\n public static SearchTree(element: any, value: any, key = 'key') {\r\n if (!element) {\r\n return null;\r\n }\r\n if (element[key] == value) {\r\n return element;\r\n }\r\n if (element.items != null) {\r\n let result = null;\r\n for (let i = 0; result == null && i < element.items.length; i++) {\r\n result = Utils.SearchTree(element.items[i], value, key);\r\n }\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n public static FilterTree = (childNodes: any[], property: string, value: any) => {\r\n const deepCloneArr = Utils.CloneObject(childNodes);\r\n return deepCloneArr.filter((object) => {\r\n\r\n const props = property.split(',');\r\n for (let i = 0; i < props.length; i++) {\r\n const prop = props[i];\r\n if (object[prop] && object[prop].toString().toLowerCase().includes(value?.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n\r\n if (object.items) {\r\n object.items = Utils.FilterTree(object.items, property, value);\r\n return object.items.length;\r\n }\r\n\r\n return false;\r\n });\r\n };\r\n\r\n public static IsIconExists(path: string): boolean {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('HEAD', path, false);\r\n xhr.send();\r\n\r\n const contentType = xhr.getResponseHeader('Content-Type');\r\n return xhr.readyState === 4 && xhr.status === 200 && (contentType.startsWith('image/png') || contentType.startsWith('image/svg'));\r\n }\r\n\r\n public static GroupBy(list: T[], keyGetter: (x: T) => K) {\r\n const map = new Map();\r\n list.forEach((item) => {\r\n const key = keyGetter(item);\r\n const collection = map.get(key);\r\n if (!collection) {\r\n map.set(key, [item]);\r\n } else {\r\n collection.push(item);\r\n }\r\n });\r\n return map;\r\n }\r\n\r\n public static ConvertBase64ToString(str: string) {\r\n if (!str) return str;\r\n return window.atob(str);\r\n }\r\n}\r\n","import { NgModule, Injector } from '@angular/core';\r\nimport { InjectorComponent } from './injector.component';\r\n\r\n@NgModule({\r\n declarations: [InjectorComponent],\r\n exports: [InjectorComponent]\r\n})\r\nexport class InjectorModule {\r\n constructor(_injector: Injector) {\r\n AppInjector = _injector;\r\n }\r\n}\r\n\r\nexport let AppInjector: Injector;\r\n","import { Component } from \"@angular/core\";\r\n\r\n\r\n@Component({\r\n selector: 'm4u-injector',\r\n template: ''\r\n})\r\nexport class InjectorComponent {\r\n}","export enum EnumDemoMobilePhoneColor\r\n{\r\n White = \"White\",\r\n Black = \"Black\",\r\n AlpineGreen = \"AlpineGreen\",\r\n MidnightGray = \"MidnightGray\"\r\n}","export const environment = {\r\n production: true,\r\n version: '1.0.0'\r\n};\r\n","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const ColorInOutAnimation = trigger('colorInOut', [\r\n state('In', style( {\r\n 'background-color': '#8bb389'\r\n })),\r\n state('Out', style({\r\n 'background-color': 'transparent'\r\n })),\r\n transition('In => Out', animate('1000ms ease-in-out'))\r\n]);","import { EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ColorInOutAnimation } from '@m4u-angular/ui/animations/colorinout.animation';\r\n\r\nclass State extends BaseState {\r\n Sections: any[] = [];\r\n InOut: EnumToggle = EnumToggle.Out;\r\n\r\n CurrentOption: SystemOptionEntity;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options-list',\r\n templateUrl: './system-options-list.component.html',\r\n styleUrls: ['./system-options-list.component.scss'],\r\n animations: [ColorInOutAnimation]\r\n})\r\nexport class SystemOptionsListComponent extends BaseComponent {\r\n\r\n @Input() set DataSource(value: SystemOptionEntity[]) {\r\n this.State.Sections = [];\r\n\r\n if (!value) { return; }\r\n\r\n this.CreateSections(value);\r\n }\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionsListComponent', State);\r\n }\r\n\r\n GetElementID(option: SystemOptionEntity) {\r\n let id = option.OptionName;\r\n\r\n if (option.ModuleName) { id = `${id}_${option.ModuleName}`; }\r\n\r\n return id;\r\n }\r\n\r\n GetColorInOut(option: SystemOptionEntity) {\r\n if (!this.State.CurrentOption) { return EnumToggle.Out; }\r\n\r\n if (this.State.CurrentOption.OptionName === option.OptionName && this.State.CurrentOption.ModuleName === option.ModuleName) {\r\n return this.State.InOut;\r\n }\r\n\r\n return EnumToggle.Out;\r\n }\r\n\r\n ShowOption(option: SystemOptionEntity) {\r\n this.State.CurrentOption = option;\r\n\r\n setTimeout(() => {\r\n const element = document.getElementById(this.GetElementID(option));\r\n\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n const inputs = element.getElementsByTagName('input');\r\n\r\n if (inputs.length > 0 && inputs[0].attributes['type'] !== 'hidden') {\r\n inputs[0].focus();\r\n }\r\n\r\n this.State.InOut = EnumToggle.In;\r\n\r\n setTimeout(() => { this.State.InOut = EnumToggle.Out; });\r\n }\r\n });\r\n\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.DeleteOption.emit(option);\r\n }\r\n\r\n private CreateSections(options: SystemOptionEntity[]) {\r\n let section;\r\n\r\n for (let i = 0; i < options.length; i++) {\r\n section = this.State.Sections.find(x => x.name === options[i].SectionInfo);\r\n\r\n if (section == null) {\r\n section = {\r\n name: options[i].SectionInfo,\r\n index: options[i].SectionIndex,\r\n label: this.IsGeneral ? this.RC('lbl' + options[i].SectionInfo) : options[i].SectionInfo,\r\n options: []\r\n };\r\n\r\n this.State.Sections.push(section);\r\n }\r\n\r\n section.options.push(options[i]);\r\n }\r\n\r\n for (let i = 0; i < this.State.Sections.length; i++) {\r\n this.State.Sections[i].options = this.State.Sections[i].options.sort((a, b) => {\r\n if (a.OptionName > b.OptionName) { return 1; }\r\n if (a.OptionName < b.OptionName) { return -1; }\r\n return 0;\r\n });\r\n }\r\n\r\n this.State.Sections = this.State.Sections.sort((a, b) => a.index - b.index);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\";","import { SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SectionName: string;\r\n OptionName: string;\r\n Value: string;\r\n IsServer = true;\r\n IsClient = true;\r\n ModuleName: string = null;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-add-system-option-dialog',\r\n templateUrl: './add-system-option-dialog.component.html',\r\n styleUrls: ['./add-system-option-dialog.component.scss']\r\n})\r\nexport class AddSystemOptionDialogComponent extends BasePageComponent {\r\n\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n @Input() CustomSections: string[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AddSystemOptionDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n IsValidModuleName = () => {\r\n if (this.ModulesDataSource.find(x => x.Value === this.State.ModuleName)) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n OnAddOption() {\r\n const option = new SystemOptionEntity();\r\n option.OptionName = this.State.OptionName;\r\n option.ModuleName = this.State.ModuleName;\r\n option.Value = this.State.Value;\r\n option.IsServer = this.State.IsServer;\r\n option.IsClient = this.State.IsClient;\r\n option.SectionInfo = this.State.SectionName;\r\n\r\n this.CloseDialogWithSuccess(option);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-option',\r\n templateUrl: './system-option.component.html',\r\n styleUrls: ['./system-option.component.scss']\r\n})\r\nexport class SystemOptionComponent extends BaseComponent {\r\n\r\n @Input() Option: SystemOptionEntity;\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionComponent', BaseState);\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteOption.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { EnumMessageBoxTypes, EnumSystemOptionDataTypes, EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { AddSystemOptionDialogComponent } from './Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SystemOptionsListComponent } from './Components/system-options-list/system-options-list.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n GeneralOptions: SystemOptionEntity[];\r\n CustomOptions: SystemOptionEntity[];\r\n\r\n ModulesDataSource: any[];\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n CustomSections: string[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options',\r\n templateUrl: './system-options.component.html',\r\n styleUrls: ['./system-options.component.scss']\r\n})\r\nexport class SystemOptionsComponent extends BasePageComponent {\r\n private GeneralOptionSettings = {\r\n [EnumSystemOptions.AppNameHE]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppNameEN]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppURL]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.SessionTimeout]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.SessionExpiry]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.EnableRequestLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.EnableRemoteLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.ShowExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.ShowAlmostExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.IsSupportedCredentialsManagement]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportedUserWelcome]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedPasswordChange]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedPasswordRecovery]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByPassword]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsAutoCreateCredentials]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.AutoCreateCredentialsType]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsRequireTaxNumberForOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.PasswordChangeIntervalDays]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityLen]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinChars]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinDigits]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.BadLoginAttemptBeforeLock]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n\r\n [EnumSystemOptions.XFrameOptions]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsDeployedBehindLoadBalancer]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportNotificationMethodEmail]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodSMS]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodWhatsApp]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.RetentionPeriodRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodRemoteRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodNotifications]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodSessions]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n };\r\n\r\n @ViewChild(AddSystemOptionDialogComponent) addGeneralOptionDialog: AddSystemOptionDialogComponent;\r\n @ViewChild(SystemOptionsListComponent) systemOptionsList: SystemOptionsListComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private appConfigService: AppConfigService) {\r\n super(A, 'SystemOptionsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitTabs();\r\n this.InitModulesDataSource();\r\n this.InitSystemOptions();\r\n }\r\n\r\n OnClickAdd() {\r\n this.addGeneralOptionDialog.ShowDialogShort((option: SystemOptionEntity) => {\r\n\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.AddGeneralOption(option);\r\n } else {\r\n this.AddCustomOption(option);\r\n }\r\n\r\n this.systemOptionsList.ShowOption(option);\r\n });\r\n }\r\n\r\n OnSaveOptions() {\r\n for (let i = 0; i < this.State.GeneralOptions.length; i++) {\r\n if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Boolean) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueBoolean ? '1' : '0';\r\n } else if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Number) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueNumber.toString();\r\n }\r\n\r\n if (Utils.IsEmpty(this.State.GeneralOptions[i].Value)) {\r\n this.State.CurrentTabIndex = 0;\r\n setTimeout(() => {\r\n this.systemOptionsList.ShowOption(this.State.GeneralOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.State.CustomOptions.length; i++) {\r\n if (Utils.IsEmpty(this.State.CustomOptions[i].Value)) {\r\n setTimeout(() => {\r\n this.State.CurrentTabIndex = 1;\r\n this.systemOptionsList.ShowOption(this.State.CustomOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.Do(this.A.Framework.systemOptionsEndpoint.SaveOptions(this.State.GeneralOptions.concat(this.State.CustomOptions)), true, (response) => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n\r\n this.messageDialog.ShowDialogShort(() => {\r\n option.IsDeleted = true;\r\n });\r\n\r\n this.messageDialog.Title = this.RC('titleDelete');\r\n this.messageDialog.Prompt = this.RC('msgRemoveOption').replace('{0}', option.OptionName);\r\n }\r\n\r\n private InitSystemOptions() {\r\n this.Do(this.A.Framework.systemOptionsEndpoint.GetOptions(), false, (response) => {\r\n this.State.GeneralOptions = [];\r\n this.State.CustomOptions = [];\r\n\r\n let settings;\r\n\r\n response.Entities.forEach((x) => {\r\n x.ModuleName = x.ModuleName ? x.ModuleName : null;\r\n\r\n settings = this.GeneralOptionSettings[x.OptionName];\r\n\r\n if (!settings) {\r\n this.State.CustomOptions.push(x);\r\n\r\n if (this.State.CustomSections.indexOf(x.SectionInfo) < 0) {\r\n this.State.CustomSections.push(x.SectionInfo);\r\n }\r\n } else {\r\n x.SectionInfo = settings.SectionName;\r\n x.SectionIndex = settings.SectionIndex;\r\n x.DataType = settings.DataType;\r\n x.DefaultIsClient = settings.DefaultIsClient;\r\n\r\n if (settings.DataType === EnumSystemOptionDataTypes.Number) {\r\n x.ValueNumber = parseInt(x.Value, 10);\r\n } else if (settings.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n x.ValueBoolean = x.Value === '1' ? true : false;\r\n }\r\n\r\n this.State.GeneralOptions.push(x);\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n private InitModulesDataSource() {\r\n const modules = this.appConfigService.AppConfig.ModuleName.split(',');\r\n\r\n // Add first empty item\r\n this.State.ModulesDataSource = [];\r\n this.State.ModulesDataSource.push({\r\n Text: 'All',\r\n Value: undefined\r\n });\r\n\r\n for (let i = 0; i < modules.length; i++) {\r\n this.State.ModulesDataSource.push({\r\n Text: modules[i],\r\n Value: modules[i]\r\n });\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblGeneral')\r\n }, {\r\n index: 1,\r\n text: this.RC('lblCustom')\r\n }\r\n ];\r\n }\r\n\r\n private AddGeneralOption(option: SystemOptionEntity) {\r\n if (this.State.GeneralOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n const settings = this.GeneralOptionSettings[option.OptionName];\r\n\r\n option.IsClient = settings.DefaultIsClient;\r\n option.DataType = settings.DataType;\r\n option.SectionInfo = settings.SectionName;\r\n option.SectionIndex = settings.SectionIndex;\r\n\r\n if (option.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n option.ValueBoolean = false;\r\n } else if (option.DataType === EnumSystemOptionDataTypes.Number) {\r\n option.ValueNumber = 0;\r\n }\r\n\r\n const options = Utils.CloneObject(this.State.GeneralOptions);\r\n options.push(option);\r\n\r\n this.State.GeneralOptions = options;\r\n }\r\n }\r\n\r\n private AddCustomOption(option: SystemOptionEntity) {\r\n if (this.State.CustomOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n\r\n option.IsClient = true;\r\n option.IsServer = true;\r\n\r\n const options = Utils.CloneObject(this.State.CustomOptions);\r\n options.push(option);\r\n\r\n this.State.CustomOptions = options;\r\n\r\n if (this.State.CustomSections.indexOf(option.SectionInfo) < 0) {\r\n this.State.CustomSections.push(option.SectionInfo);\r\n }\r\n }\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { DxTextBoxComponent, DxTooltipComponent } from 'devextreme-angular';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState{\r\n IsShowPasswordTooltip: boolean;\r\n PasswordComplexityLen: number;\r\n PasswordComplexityMinChars: number;\r\n PasswordComplexityMinDigits: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-password-tooltip',\r\n templateUrl: './password-tooltip.component.html',\r\n styleUrls: ['./password-tooltip.component.scss']\r\n})\r\nexport class PasswordTooltipComponent extends BaseComponent {\r\n\r\n @Input() TextBox: DxTextBoxComponent;\r\n @ViewChild(DxTooltipComponent) tooltip: DxTooltipComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PasswordTooltipComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.PasswordComplexityLen = +this.SystemOption(EnumSystemOptions.PasswordComplexityLen);\r\n this.State.PasswordComplexityMinChars = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinChars);\r\n this.State.PasswordComplexityMinDigits = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinDigits);\r\n }\r\n\r\n override OnInitComponent(){\r\n if(!this.TextBox) return;\r\n\r\n if (!this.TextBox.buttons) { this.TextBox.buttons = []; }\r\n this.TextBox.buttons.push({\r\n location: 'after',\r\n name: 'showTooltip',\r\n options: {\r\n elementAttr: { class: 'btn-size-small password-view-btn', style: 'margin:0;' },\r\n icon: 'mdi mdi-information-outline', \r\n type: 'normal', \r\n onClick: this.OnShowPasswordTooltip\r\n }\r\n });\r\n }\r\n\r\n OnShowPasswordTooltip = () => {\r\n this.State.IsShowPasswordTooltip = !this.State.IsShowPasswordTooltip;\r\n }\r\n}\r\n","export default \"\\r\\n
{{ ('msgPasswordComplexityRequirement' | RC).replace('{0}', State.PasswordComplexityLen)\\r\\n .replace('{1}', State.PasswordComplexityMinDigits)\\r\\n .replace('{2}', State.PasswordComplexityMinChars)}}
\\r\\n
\\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { BaseEntity, BaseState } from \"../entities/BaseEntities\";\r\nimport { BasePageComponent } from \"./BasePageComponent\";\r\nimport { ServiceBagService } from \"./ServiceBag\";\r\n\r\n@Component({ selector: 'app-null', template:'
NULL COMPONENT
NULL COMPONENT' })\r\nexport class NullComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'NullComponent', BaseEntity, BaseState);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SlideInOutAnimation } from '../../../animations/slideinout.animation';\r\nimport { EnumCardMode, EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@base/classes/BaseClasses';\r\nimport { BottomSheetContextMenuParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\n\r\nclass CardState {\r\n IsOpened: boolean;\r\n Toggle: EnumToggle = EnumToggle.Out;\r\n}\r\n\r\n\r\n\r\n/**\r\n * If you want use several modes please specify Input field 'modes'\r\n * \r\n * content \r\n * expand content \r\n * edit content \r\n * \r\n */\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'm4u-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class M4UCardComponent extends BaseComponent {\r\n\r\n @Input() Menu: ContextMenuElement[];\r\n @Input() Class: string;\r\n @Input() Title: string;\r\n @Input() ShowAsUsualOnMobile: boolean;\r\n \r\n\r\n @Output() OnClick: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('expandedCard') expandedCard: ElementRef;\r\n get ExpandedCardHeight() {\r\n return this.expandedCard?.nativeElement?.children[0]?.getBoundingClientRect()?.height; \r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'M4UCardComponent', CardState);\r\n }\r\n\r\n OnCardClick() {\r\n this.OnClick.emit();\r\n }\r\n\r\n // Show one icon if only one visible element\r\n get SingleVisibleElement(): ContextMenuElement {\r\n const visibleMenus = this.Menu.filter(f => f.visible == true || f.visible == undefined);\r\n if (visibleMenus.length === 1) return visibleMenus[0];\r\n return undefined;\r\n }\r\n\r\n ToggleCardState() {\r\n this.State.IsOpened = !this.State.IsOpened;\r\n }\r\n\r\n GetFooterButtonText(): string {\r\n return this.State.IsOpened ? this.RC('lblMinimize') : this.RC('lblShowMore');\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n OnShowContextMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.A.Screen.IsMobile() && !this.ShowAsUsualOnMobile) {\r\n const title = this.Title || this.RC('titleChooseOption');\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = title;\r\n menuParams.Items = this.Menu;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n return;\r\n }\r\n\r\n cm.show(event);\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1 && !SingleVisibleElement\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, HostListener, Output, EventEmitter, Input } from '@angular/core';\r\n\r\n@Component({\r\n\r\n selector: 'm4u-link',\r\n templateUrl: './link.component.html',\r\n styleUrls: ['./link.component.scss'],\r\n})\r\nexport class M4ULinkComponent {\r\n @Input() href: string;\r\n @Input() Type: 'success' | 'danger' | 'normal' | 'default' = 'default';\r\n @Input() Disabled: boolean;\r\n @Input() Icon: string;\r\n @Input() Class: string;\r\n @Output() onClick = new EventEmitter();\r\n\r\n @HostListener(\"click\", [\"$event\"])\r\n public OnClickHandler(event: any) {\r\n event.stopPropagation();\r\n if (this.Disabled) { return };\r\n this.onClick.emit();\r\n }\r\n\r\n GetClass() {\r\n return (this.Class || '') + (this.Type ? (' m4u-link-' + this.Type) : '');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const SlideInOutAnimation = trigger('slideInOut', [\r\n state('In', style({\r\n overflow: 'hidden',\r\n height: '*',\r\n })),\r\n state('Out', style({\r\n opacity: '0',\r\n overflow: 'hidden',\r\n height: '0px',\r\n })),\r\n transition('In => Out', animate('300ms ease-in-out')),\r\n transition('Out => In', animate('300ms ease-in-out'))\r\n])\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@base/component/BaseComponent\";\r\nimport { BaseState } from \"@base/entities/BaseEntities\";\r\nimport { ServiceBagService } from \"@base/component/ServiceBag\";\r\nimport { SlideInOutAnimation } from \"../../../animations/slideinout.animation\";\r\nimport { Utils } from \"@core/helpers/Utils\";\r\nimport { DataGroupInfoHeader } from \"@base/classes/BaseClasses\";\r\n\r\n@Component({\r\n selector: 'm4u-collapsiblegroup',\r\n templateUrl: './collapsiblegroup.component.html',\r\n styleUrls: ['./collapsiblegroup.component.scss'],\r\n animations: [SlideInOutAnimation]\r\n})\r\nexport class CollapsibleGroupComponent extends BaseComponent\r\n{\r\n @Input() Group: DataGroupInfoHeader;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CollapsibleGroupComponent\", BaseState);\r\n }\r\n\r\n get GroupName(): string {\r\n return Utils.IsEmpty(this.Group.Name) ? this.RC('lblNotAssigned') : this.Group.Name;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{ GroupName }} ({{ Group.TotalRows }})\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { EnumGridModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonadd',\r\n templateUrl: './gridbuttonadd.component.html',\r\n styleUrls: ['./gridbuttonadd.component.scss']\r\n})\r\nexport class GridButtonAddComponent {\r\n @Input() Text: string;\r\n @Input() Type: string;\r\n\r\n @Input() WindowPath: string;\r\n @Input() WindowParams: any;\r\n \r\n constructor(private navigator: NavigatorService) { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n\r\n get IsGridEditable() {\r\n return this.gridAny && this.gridAny.G && this.gridAny.G.Mode === EnumGridModes.Editable;\r\n }\r\n\r\n get IsDisabled() {\r\n return this.IsGridEditable && !this.gridAny.G.IsNewRowCreatable();\r\n }\r\n\r\n OnClick() {\r\n this.IsGridEditable\r\n ? this.gridAny.G.CreateNewRow()\r\n : this.navigator.Navigate([this.WindowPath], this.WindowParams);\r\n }\r\n}","export default \"\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonremove',\r\n templateUrl: './gridbuttonremove.component.html',\r\n styleUrls: ['./gridbuttonremove.component.scss']\r\n})\r\nexport class GridButtonRemoveComponent \r\n{\r\n constructor() { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n @Input() public item: any;\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumFileBoxReturnDataTypes } from '@core/framework/sysenums.enum';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-fileboxdialog',\r\n templateUrl: './fileboxdialog.component.html',\r\n styleUrls: ['./fileboxdialog.component.scss']\r\n})\r\nexport class FileBoxDialogComponent extends BaseComponent\r\n{\r\n @ViewChild('fileLoader') fileLoader: ElementRef;\r\n @Input() ReturnDataType: EnumFileBoxReturnDataTypes;\r\n @Input() IsAllowMultiple: boolean;\r\n @Input() AllowedFileTypes: string;\r\n\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'FileBoxDialogComponent', BaseState);\r\n }\r\n\r\n private handler: (e: any) => void;\r\n public ShowDialog(DialogCompletedHandler: (e: any) => void)\r\n {\r\n //Show the dialog\r\n this.handler = DialogCompletedHandler;\r\n this.fileLoader.nativeElement.click();\r\n }\r\n\r\n OnFileSelected()\r\n {\r\n //Get list of files selected\r\n var list: FileList = this.fileLoader.nativeElement.files;\r\n if (list == undefined || list.length == 0) return;\r\n\r\n \r\n\r\n\r\n //Return raw FileList\r\n if (this.ReturnDataType == EnumFileBoxReturnDataTypes.FileList)\r\n {\r\n this.handler(list);\r\n this.ResetInput();\r\n return;\r\n }\r\n\r\n\r\n //Read the file\r\n var reader = new FileReader();\r\n reader.onloadend = (e) =>\r\n {\r\n //Get data\r\n var data: string = (e.srcElement as any).result;\r\n\r\n //Reset value on input, so that next time change event is triggered again\r\n this.fileLoader.nativeElement.value = null;\r\n\r\n //Execute callback\r\n switch (this.ReturnDataType)\r\n {\r\n case EnumFileBoxReturnDataTypes.FileDataAsString:\r\n //Return as plain data\r\n this.handler(data);\r\n\r\n case EnumFileBoxReturnDataTypes.FileDataAsLinesArray:\r\n //Return as lines array\r\n var arrLines = data.split(/\\r?\\n/);\r\n arrLines = arrLines.filter(x => !Utils.IsEmpty(x));\r\n this.handler(arrLines);\r\n return;\r\n\r\n case EnumFileBoxReturnDataTypes.FileDataAsJSONArray:\r\n //Return as JSON\r\n //Return as lines array\r\n var arrObjects = Utils.ConvertCSVToJSONArray(data, \",\");\r\n this.handler(arrObjects);\r\n return;\r\n\r\n }\r\n }\r\n reader.readAsText(list[0]);\r\n this.ResetInput();\r\n }\r\n\r\n private ResetInput() {\r\n this.fileLoader.nativeElement.value = \"\";\r\n }\r\n\r\n\r\n}\r\n","export default \" \";","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumInputBoxTypes } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\n\r\nclass State {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-inputboxdialog',\r\n templateUrl: './inputboxdialog.component.html',\r\n styleUrls: ['./inputboxdialog.component.scss']\r\n})\r\nexport class InputBoxDialogComponent extends BasePageComponent {\r\n @Input() FieldLabel = '';\r\n @Input() Title: string = this.GetDefaultTitle();\r\n @Input() Prompt: string;\r\n @Input() Type: EnumInputBoxTypes = EnumInputBoxTypes.Text;\r\n\r\n @Input() set Value(value: any) {\r\n setTimeout(() => this.State.Value = value);\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'InputBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetDefaultTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseEntity, Media } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DxTileViewComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nclass State {\r\n VideoWidth: number;\r\n VideoHeight: number;\r\n PreviewWidth: number;\r\n PreviewHeight: number;\r\n VideoAspectRatio: number;\r\n\r\n IsPreview: boolean;\r\n PreviewMediaItem: Media;\r\n\r\n VideoStream: MediaStream;\r\n\r\n IsVideoMode: boolean = false;\r\n Recording: Recording = new Recording;\r\n IsOpened = false;\r\n IsCameraStarted = false;\r\n CanUseCamera: boolean = true;\r\n}\r\n\r\nclass Recording {\r\n IsVideoRecording: boolean = false;\r\n MediaRecorder: MediaRecorder = null;\r\n RecordTimeSeconds: number = 0;\r\n RecordTimeString: string;\r\n RecordInterval: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-photoboxdialog',\r\n templateUrl: './photoboxdialog.component.html',\r\n styleUrls: ['./photoboxdialog.component.scss']\r\n})\r\nexport class PhotoBoxDialogComponent extends BasePageComponent\r\n{\r\n private _mediaItems: Media[] = [];\r\n private _imageMimeType: string = \"image/jpeg\";\r\n\r\n @Input() set MediaItems(value) {\r\n this._mediaItems = value;\r\n this._mediaItems?.forEach(item => {\r\n this.SetPreview(item);\r\n })\r\n }\r\n\r\n get MediaItems(): Media[] {\r\n return this._mediaItems;\r\n }\r\n\r\n @Input() Title: string;\r\n @Input() IsAutoSavePhotoAfterTake = false;\r\n @Input() IsAllowVideo: boolean = false;\r\n @Input() MinCount: number;\r\n @Input() MaxCount: number;\r\n\r\n @Input() MaxWidthPx: number;\r\n @Input() MaxHeightPx: number;\r\n @Input() ImageQuality: number = 1; // from 0 to 1\r\n\r\n @ViewChild(\"video\") public video: ElementRef;\r\n @ViewChild(\"canvas\") public canvas: ElementRef;\r\n @ViewChild(\"preview\") public preview: ElementRef;\r\n @ViewChild(\"validationGroup\") validationGroup: DxValidationGroupComponent;\r\n @ViewChild(DxTileViewComponent) public thumbs: DxTileViewComponent;\r\n @Input() ExtraFields: TemplateRef;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer) {\r\n super(A, 'PhotoBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n setTimeout(() => {\r\n this.StartVideo();\r\n this.State.IsOpened = true;\r\n }, 500);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.State.IsOpened = false;\r\n this.State.IsCameraStarted = false;\r\n this.StopVideo();\r\n }\r\n\r\n //Stop video and cleanup\r\n StopVideo() {\r\n if (this.State.VideoStream != undefined) {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.video.nativeElement.pause();\r\n this.video.nativeElement.srcObject = undefined;\r\n this.State.VideoStream.getVideoTracks().forEach(x => x.stop());\r\n this.State.VideoStream = undefined;\r\n this.State.IsCameraStarted = false;\r\n\r\n }\r\n }\r\n\r\n //Plug in video\r\n StartVideo() {\r\n // Check permissions\r\n navigator.permissions.query({ name: \"camera\" as PermissionName })\r\n .then(permissionStatus => {\r\n if (permissionStatus.state !== \"granted\") {\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCameraPermissionDenied'));\r\n return;\r\n }\r\n //Set size\r\n this.State.PreviewWidth = this.GetClientWidth();\r\n this.State.PreviewHeight = (this.GetClientHeight() - 178);\r\n\r\n //Init\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n navigator.mediaDevices.getUserMedia(\r\n {\r\n video:\r\n {\r\n facingMode: 'environment',\r\n width: { ideal: 4096, max: this.MaxWidthPx },\r\n height: { ideal: 2160, max: this.MaxHeightPx },\r\n },\r\n audio: false\r\n\r\n }).then(stream => {\r\n this.State.IsCameraStarted = true;\r\n this.State.VideoStream = stream;\r\n this.State.VideoAspectRatio = stream.getVideoTracks()[0].getSettings().aspectRatio;\r\n this.State.VideoWidth = stream.getVideoTracks()[0].getSettings().width;\r\n this.State.VideoHeight = stream.getVideoTracks()[0].getSettings().height;\r\n this.video.nativeElement.srcObject = stream;\r\n this.video.nativeElement.play();\r\n }, error => {\r\n console.error(error);\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCouldNotStartVideoError')); \r\n }\r\n );\r\n }\r\n }).catch(error => {\r\n console.error(error);\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCouldNotStartVideoError'));\r\n });\r\n }\r\n\r\n\r\n //Build new structure, and add to array\r\n //Give identifiers starting with -1 and going down\r\n OnTakePhoto() {\r\n let photo = this.TakePhoto();\r\n this.MediaItems.push(photo);\r\n if (this.IsAutoSavePhotoAfterTake) { this.OnSavePhotos(); }\r\n }\r\n\r\n OnStartVideoRecording() {\r\n let photo = this.TakePhoto();\r\n\r\n this.State.Recording.RecordInterval = setInterval(() => {\r\n this.State.Recording.RecordTimeSeconds++;\r\n this.State.Recording.RecordTimeString = new Date(this.State.Recording.RecordTimeSeconds * 1000).toISOString().slice(14, 19);\r\n }, 1000);\r\n\r\n this.StartRecording().then((recordedChunks) => {\r\n let recordedBlob = this.GetVideoBlob(recordedChunks);\r\n photo.VideoDataUrl = this.GetSafeUrlFromBlob(recordedBlob);\r\n Utils.ConvertBlobToBytesArray(recordedBlob, (array) => {\r\n photo.VideoBytes = array;\r\n });\r\n this.MediaItems.push(photo);\r\n }).catch((error) => {\r\n console.error(error);\r\n this.UI.StopMessage(`${error?.error} ${error?.message}`);\r\n });\r\n }\r\n\r\n OnStopVideoRecording() {\r\n if (this.State.Recording.MediaRecorder?.state === \"recording\") {\r\n this.State.Recording.MediaRecorder.stop();\r\n this.State.Recording.IsVideoRecording = false;\r\n }\r\n\r\n if (this.State.Recording.RecordInterval) {\r\n clearInterval(this.State.Recording.RecordInterval);\r\n this.State.Recording.RecordInterval = null;\r\n this.State.Recording.RecordTimeString = null;\r\n this.State.Recording.RecordTimeSeconds = 0;\r\n }\r\n }\r\n\r\n OnResizeWindow() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n OnOrientationChanged() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Show photo in the preview box\r\n OnShowMediaItem(item: Media) {\r\n this.State.PreviewMediaItem = item;\r\n this.State.IsPreview = true;\r\n this.DetectChanges();\r\n this.preview.nativeElement.src = item.ImageBase64;\r\n }\r\n\r\n //Switch back to video\r\n OnClosePreview() {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Delete from photo list\r\n OnRemovePhoto() {\r\n this.MediaItems = this.MediaItems.filter(x => x.EntryID != this.State.PreviewMediaItem.EntryID);\r\n this.thumbs.instance.repaint()\r\n this.OnClosePreview();\r\n }\r\n\r\n //Finish - emit the PhotoChanged event to update parent state, and close\r\n OnSavePhotos() {\r\n this.ValidateValidationGroup(this.validationGroup).then(isValid => {\r\n if (!isValid) return;\r\n\r\n if (this.MinCount && this.MediaItems.length < this.MinCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMinCountError', this.MinCount));\r\n return;\r\n }\r\n\r\n if (this.MaxCount && this.MediaItems.length > this.MaxCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMaxCountError', this.MaxCount));\r\n return;\r\n }\r\n\r\n this.StopVideo();\r\n this.CloseDialogWithSuccess(this.MediaItems);\r\n this.ClosePage();\r\n });\r\n }\r\n\r\n OnSetVideoMode() {\r\n this.State.IsVideoMode = true;\r\n }\r\n\r\n OnSetPhotoMode() {\r\n this.State.IsVideoMode = false;\r\n }\r\n\r\n OnFileSelected(e) {\r\n const files = e?.target?.files;\r\n if (!files || files?.length == 0) return;\r\n\r\n const file = files[0];\r\n const isImage = file.type.startsWith(\"image\");\r\n const fileReader = new FileReader();\r\n\r\n if (isImage) {\r\n fileReader.addEventListener(\"load\", (event) => {\r\n\r\n const imageObj = new Image();\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n imageObj.src = event.target.result.toString();\r\n imageObj.onload = () => {\r\n\r\n const ratio = imageObj.width / imageObj.height;\r\n let width = imageObj.width;\r\n let height = imageObj.height;\r\n\r\n if (this.MaxWidthPx && width > this.MaxWidthPx) {\r\n width = this.MaxWidthPx;\r\n height = Math.round(width / ratio);\r\n }\r\n\r\n if (this.MaxHeightPx && height > this.MaxHeightPx) {\r\n height = this.MaxHeightPx;\r\n width = Math.round(height * ratio);\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n context.drawImage(imageObj, 0, 0, width, height);\r\n const base64 = context.canvas.toDataURL(this._imageMimeType, this.ImageQuality);\r\n const photo = this.AddPhoto(base64);\r\n this.MediaItems.push(photo);\r\n };\r\n });\r\n\r\n fileReader.readAsDataURL(files[0]);\r\n }\r\n else {\r\n fileReader.addEventListener('load', async () => {\r\n const arrayBuffer = (fileReader.result as ArrayBuffer);\r\n const result = Array.from(new Uint8Array(arrayBuffer));\r\n const blob = new Blob([new Uint8Array(result)], { type: file.type });\r\n\r\n const media = new Media;\r\n media.EntryID = this.GetNewMediaItemEntryID();\r\n const imagePreviewBlob = await this.GetVideoCover(blob);\r\n\r\n Utils.ConvertBlobToBytesArray(imagePreviewBlob, (array) => {\r\n media.ImageBytes = array;\r\n this.SetPreview(media);\r\n });\r\n\r\n media.VideoBytes = result;\r\n this.SetPreview(media);\r\n this.MediaItems.push(media);\r\n }, false);\r\n\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n\r\n const imageGallery = document.getElementById('image-gallery') as any;\r\n imageGallery && (imageGallery.value = '');\r\n }\r\n\r\n private GetNewMediaItemEntryID() {\r\n return this.MediaItems.reduce((min, p) => p.EntryID < min ? p.EntryID : min, 0) - 1;\r\n }\r\n\r\n private TakePhoto(): Media {\r\n this.canvas.nativeElement.getContext(\"2d\").drawImage(this.video.nativeElement, 0, 0, this.State.VideoWidth, this.State.VideoHeight);\r\n return this.AddPhoto(this.canvas.nativeElement.toDataURL(this._imageMimeType, this.ImageQuality));\r\n }\r\n\r\n private AddPhoto(base64) {\r\n const photo = new Media;\r\n photo.ImageBase64 = base64;\r\n photo.EntryID = this.GetNewMediaItemEntryID();\r\n photo.ImageBytes = Utils.ConvertToBytesArray(photo.ImageBase64);\r\n return photo;\r\n }\r\n\r\n private StartRecording() {\r\n this.State.Recording.MediaRecorder = new MediaRecorder(this.State.VideoStream);\r\n let data = [];\r\n\r\n this.State.Recording.MediaRecorder.ondataavailable = (event) => data.push(event.data);\r\n this.State.Recording.MediaRecorder.start();\r\n this.State.Recording.IsVideoRecording = true;\r\n\r\n let stopped = new Promise((resolve, reject) => {\r\n this.State.Recording.MediaRecorder.onstop = resolve;\r\n this.State.Recording.MediaRecorder.onerror = (event) => reject(event);\r\n });\r\n\r\n return stopped.then(() => data);\r\n }\r\n\r\n private SetPreview(item: Media) {\r\n if (item.VideoBytes?.length > 0 && !item.VideoDataUrl) item.VideoDataUrl = this.GetSafeUrlFromBlob(this.GetVideoBlob([new Uint8Array(item.VideoBytes)]));\r\n if (item.ImageBytes?.length > 0 && !item.ImageBase64) item.ImageBase64 = Utils.GetImageSource(item.ImageBytes, this._imageMimeType);\r\n }\r\n\r\n private GetVideoBlob(data): Blob {\r\n return new Blob(data, { type: \"video/webm\" });\r\n }\r\n\r\n private GetSafeUrlFromBlob(data: Blob) {\r\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(data));\r\n }\r\n\r\n private GetVideoCover(data: Blob, seekTo = 0.0) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // load the file to a video player\r\n const videoPlayer = document.createElement('video');\r\n videoPlayer.setAttribute('src', URL.createObjectURL(data));\r\n videoPlayer.load();\r\n videoPlayer.addEventListener('error', (ex) => {\r\n reject(ex);\r\n });\r\n // load metadata of the video to get video duration and dimensions\r\n videoPlayer.addEventListener('loadedmetadata', () => {\r\n // seek to user defined timestamp (in seconds) if possible\r\n if (videoPlayer.duration < seekTo) {\r\n reject(\"video is too short.\");\r\n return;\r\n }\r\n // delay seeking or else 'seeked' event won't fire on Safari\r\n setTimeout(() => {\r\n videoPlayer.currentTime = seekTo;\r\n }, 200);\r\n // extract video thumbnail once seeking is complete\r\n videoPlayer.addEventListener('seeked', () => {\r\n // define a canvas to have the same dimension as the video\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = videoPlayer.videoWidth;\r\n canvas.height = videoPlayer.videoHeight;\r\n // draw the video frame to canvas\r\n const ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(videoPlayer, 0, 0, canvas.width, canvas.height);\r\n // return the canvas image as a blob\r\n ctx.canvas.toBlob(\r\n blob => {\r\n resolve(blob);\r\n },\r\n \"image/jpeg\",\r\n this.ImageQuality /* quality */\r\n );\r\n });\r\n });\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n }\r\n });\r\n }\r\n\r\n private GetClientWidth() {\r\n return this.GetClientBodyElementRect()?.width || 0;\r\n }\r\n\r\n private GetClientHeight() {\r\n return this.GetClientBodyElementRect()?.height || 0;\r\n }\r\n\r\n private GetClientBodyElementRect() {\r\n const elements = document.querySelectorAll('.page-body');\r\n if (!elements || !elements.length) return null;\r\n return elements[elements.length - 1]?.getBoundingClientRect();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.VideoWidth}}x{{State.VideoHeight}}\\r\\n
\\r\\n
{{ State.Recording.RecordTimeString }}
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'lblCameraModePhoto' | RC:THIS }}
\\r\\n
{{ 'lblCameraModeVideo' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { GenericListEntity, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\n\r\nclass State {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-selectboxdialog',\r\n templateUrl: './selectboxdialog.component.html',\r\n styleUrls: ['./selectboxdialog.component.scss']\r\n})\r\nexport class SelectBoxDialogComponent extends BasePageComponent {\r\n @Input() Values: GenericListEntity[];\r\n @Input() FieldLabel: string;\r\n @Input() Title: string = this.GetTitle();\r\n @Input() Prompt: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\n\r\nclass State {\r\n OkText: string;\r\n ClientWidth: number;\r\n ClientHeight: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-signboxdialog',\r\n templateUrl: './signboxdialog.component.html',\r\n styleUrls: ['./signboxdialog.component.scss']\r\n})\r\nexport class SignBoxDialogComponent extends BasePageComponent {\r\n @ViewChild(SignBoxComponent) signBox: SignBoxComponent;\r\n @Input() Title: string;\r\n @Input() OkButtonText: string;\r\n @Input() MaxSignatureHeight = 0;\r\n @Input() SignatureReadOnly: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SignBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n public set SignatureData(value: string) {\r\n this.signBox.SignatureData = value;\r\n }\r\n\r\n public get SignatureData(): string {\r\n return this.signBox.SignatureData;\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.OkButtonText !== undefined) {\r\n this.State.OkText = this.OkButtonText;\r\n } else {\r\n this.State.OkText = this.RC('genSign');\r\n }\r\n this.SetClientSizes();\r\n }\r\n\r\n OnResetPad() {\r\n this.signBox.ClearSignature();\r\n }\r\n\r\n // Save\r\n OnSaveSignature() {\r\n if (!this.SignatureReadOnly) {\r\n // Make sure signature exists\r\n if (this.signBox.IsEmpty()) {\r\n this.UI.StopMessage(this.RC('msgSignatureRequired'), '#pad');\r\n return;\r\n }\r\n\r\n // Save and close\r\n this.signBox.Save();\r\n this.CloseDialogWithSuccess(this.SignatureData);\r\n } else {\r\n this.CloseDialogWithCancel();\r\n }\r\n }\r\n\r\n private GetCanvasWidth(): number {\r\n return document.querySelector('.signbox-container')?.getBoundingClientRect()?.width - 3 || 0;\r\n }\r\n\r\n private SetClientSizes() {\r\n setTimeout(() => {\r\n this.State.ClientWidth = this.GetCanvasWidth();\r\n this.State.ClientHeight = window.innerHeight / 2;\r\n }, 400);\r\n // wait for animation, TODO: figure out how to subscribe to complete animation template\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'msgSignHere' | RC }}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { Html5Qrcode, Html5QrcodeScanner } from \"html5-qrcode\";\r\nimport { Html5QrcodeCameraScanConfig } from \"html5-qrcode/esm/html5-qrcode\";\r\nimport { Html5QrcodeResult, Html5QrcodeSupportedFormats } from \"html5-qrcode/esm/core\";\r\nimport { DxPopupComponent } from 'devextreme-angular';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { LocalStorageService } from '@core/framework/local-storage.service';\r\n\r\nclass State extends BaseState {\r\n DeviceIDs: string[] = [];\r\n CurrentDeviceIndex = null;\r\n IsInititialized: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-barcodeboxdialog',\r\n templateUrl: './barcodeboxdialog.component.html',\r\n styleUrls: ['./barcodeboxdialog.component.scss']\r\n})\r\nexport class BarcodeBoxDialogComponent extends BasePageComponent{\r\n @ViewChild('reader') ReaderElement: ElementRef | undefined;\r\n\r\n @Input() UseFrontCamera: boolean = false;\r\n\r\n private _lastUsedCameraStorageName: string = 'BarcodeBoxLastUsedCameraID';\r\n\r\n @Input() Config: any = {\r\n fps: 10,\r\n qrbox: this.QrBoxFunction,\r\n useBarCodeDetectorIfSupported: false,\r\n rememberLastUsedCamera: true,\r\n aspectRatio: 4 / 3,\r\n showTorchButtonIfSupported: true,\r\n formatsToSupport: [\r\n Html5QrcodeSupportedFormats.QR_CODE,\r\n Html5QrcodeSupportedFormats.CODABAR,\r\n Html5QrcodeSupportedFormats.CODE_39,\r\n Html5QrcodeSupportedFormats.CODE_93,\r\n Html5QrcodeSupportedFormats.CODE_128,\r\n Html5QrcodeSupportedFormats.ITF,\r\n Html5QrcodeSupportedFormats.EAN_13,\r\n Html5QrcodeSupportedFormats.EAN_8,\r\n Html5QrcodeSupportedFormats.PDF_417,\r\n Html5QrcodeSupportedFormats.RSS_14,\r\n Html5QrcodeSupportedFormats.RSS_EXPANDED,\r\n Html5QrcodeSupportedFormats.UPC_A,\r\n Html5QrcodeSupportedFormats.UPC_E,\r\n Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION,\r\n ],\r\n showZoomSliderIfSupported: true,\r\n defaultZoomValueIfSupported: 2\r\n };\r\n\r\n @Input() ExtraFields: TemplateRef;\r\n @Output() OnTextDecoded: EventEmitter = new EventEmitter();\r\n @Output() OnResultDecoded: EventEmitter = new EventEmitter();\r\n html5QrCode!: Html5Qrcode;\r\n\r\n constructor(A: ServiceBagService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'BarcodeBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsInititialized = true;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n\r\n Html5Qrcode.getCameras().then(devices => {\r\n if (devices && devices.length) {\r\n this.State.DeviceIDs = devices.map(x => x.id);\r\n this.StartHtmlQrCode();\r\n }\r\n }).catch(err => {\r\n console.log(err);\r\n });\r\n\r\n //let html5QrcodeScanner = new Html5QrcodeScanner(\"reader\", undefined, false);\r\n //html5QrcodeScanner.render(this.onScanSuccess, this.onScanFailure);\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this.State.IsInititialized = false;\r\n }\r\n\r\n public override OnClose() {\r\n if (this.StopHtml5QrCode(false)) return false;\r\n this.CloseDialogWithCancel();\r\n return false;\r\n }\r\n\r\n private StartHtmlQrCode() {\r\n if (this.html5QrCode?.isScanning) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n this.html5QrCode.start(\r\n { deviceId: this.GetSavedDeviceID() },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }).catch((err) => {\r\n console.error(err);\r\n });\r\n return;\r\n }\r\n\r\n this.html5QrCode = new Html5Qrcode(this.ReaderElement?.nativeElement?.id);\r\n this.html5QrCode.start(\r\n { deviceId: this.GetSavedDeviceID() },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n private StopHtml5QrCode(isSuccess) {\r\n if (this.html5QrCode) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n isSuccess ? this.CloseDialogWithSuccess() : this.CloseDialogWithCancel();\r\n }).catch((err) => {\r\n console.error(err);\r\n this.CloseDialogWithCancel();\r\n });\r\n return true;\r\n }\r\n }\r\n\r\n OnBarcodeClick (e) {\r\n this.State.CurrentDeviceIndex++;\r\n this.State.CurrentDeviceIndex = this.State.CurrentDeviceIndex % this.State.DeviceIDs.length;\r\n this.SaveDeviceID();\r\n this.StartHtmlQrCode();\r\n }\r\n\r\n QrCodeSuccessCallback = (decodedText: any, decodedResult: Html5QrcodeResult) => {\r\n this.OnTextDecoded.emit(decodedText);\r\n this.OnResultDecoded.emit(decodedResult);\r\n }\r\n\r\n CloseDialog(isSuccess: boolean) {\r\n if (this.StopHtml5QrCode(isSuccess)) return;\r\n this.CloseDialogWithCancel();\r\n }\r\n\r\n private GetSavedDeviceID() {\r\n const deviceID = this.localStorageService.GetItem(this._lastUsedCameraStorageName);\r\n const index = this.State.DeviceIDs.indexOf(deviceID);\r\n if (index < 0) {\r\n this.State.CurrentDeviceIndex = this.State.DeviceIDs.length - 1;\r\n return this.State.DeviceIDs[this.State.CurrentDeviceIndex];\r\n }\r\n\r\n this.State.CurrentDeviceIndex = index;\r\n return deviceID;\r\n }\r\n\r\n private SaveDeviceID() {\r\n this.localStorageService.SetItem(this._lastUsedCameraStorageName, this.State.DeviceIDs[this.State.CurrentDeviceIndex]);\r\n }\r\n\r\n private QrBoxFunction(viewfinderWidth, viewfinderHeight) {\r\n const minval = (val, min) => {\r\n if (val < min) {\r\n return min;\r\n }\r\n return val;\r\n }\r\n\r\n // Square QR Box, with size = 80% of the min edge.\r\n const minWidthThreshold = 250;\r\n const minHeightThreshold = 150;\r\n const edgeSizePercentage = 0.9;\r\n\r\n const minEdgeSize = (viewfinderWidth > viewfinderHeight) ?\r\n viewfinderHeight : viewfinderWidth;\r\n const qrboxWidth = Math.floor(minEdgeSize * edgeSizePercentage);\r\n const qrboxHeight = minval(Math.floor(qrboxWidth / 2), minHeightThreshold);\r\n if (qrboxWidth < minWidthThreshold) {\r\n let width = minval(qrboxWidth, minWidthThreshold);\r\n let height = minval(Math.floor(width / 2), minHeightThreshold);\r\n\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n }\r\n return { width: qrboxWidth, height: qrboxHeight };\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { FrameworkService } from \"@core/framework/framework.service\"\r\n\r\n@Directive({ selector: '[customBuild]' })\r\nexport class M4UCustomBuildDirective\r\n{\r\n private hasView = false;\r\n\r\n constructor(\r\n private templateRef: TemplateRef,\r\n private viewContainer: ViewContainerRef,\r\n private framework: FrameworkService) { }\r\n\r\n @Input() set customBuild(value: string)\r\n {\r\n var bTrue = this.framework.IsCustomBuild(value);\r\n if (this.Reverse) bTrue = !bTrue;\r\n if (bTrue && !this.hasView)\r\n {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasView = true;\r\n } else if (bTrue && this.hasView)\r\n {\r\n this.viewContainer.clear();\r\n this.hasView = false;\r\n }\r\n }\r\n\r\n @Input() Reverse: boolean;\r\n}","import { Component, ElementRef, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-status-column',\r\n templateUrl: './status-column.component.html',\r\n styleUrls: ['./status-column.component.scss']\r\n})\r\nexport class StatusColumnComponent {\r\n\r\n @Input() Icon: string;\r\n @Input() IconUrl: string;\r\n @Input() Text: string;\r\n @Input() Color: string;\r\n @Input() Position: 'start' | 'center' | 'end' = 'start';\r\n\r\n constructor(private elRef: ElementRef) { }\r\n\r\n GetClass() {\r\n return `status-column-position-${this.Position}`;\r\n }\r\n\r\n getHtmlContent() {\r\n return this.elRef.nativeElement;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{Text}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ContextMenuService {\r\n\r\n private _contextMenus: ContextMenu[] = [];\r\n\r\n public addContextMenu(cm: ContextMenu) {\r\n cm.onShow.subscribe(() => {\r\n this._contextMenus.forEach(x => x.hide());\r\n this._contextMenus.push(cm);\r\n });\r\n cm.onHide.subscribe(() => this._contextMenus = this._contextMenus.filter(x => x !== cm));\r\n }\r\n}","import { ComponentFactoryResolver, Directive, HostListener, Input, OnDestroy, Output, EventEmitter, ViewContainerRef, AfterViewInit } from '@angular/core';\r\nimport { IBaseComponent } from '@base/component/IBaseComponent';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { DxDateBoxComponent, DxListComponent, DxNumberBoxComponent, DxSelectBoxComponent, DxTagBoxComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent, DxoLookupComponent } from 'devextreme-angular/ui/nested';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { Subscription } from 'rxjs';\r\nimport { StatusColumnComponent } from '../components/status-column/status-column.component';\r\nimport { FieldDetailComponentX } from '../layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../layouts/fieldlayouts/field-form/fieldform.component';\r\nimport Validator from 'devextreme/ui/validator';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\nimport { ContextMenuService } from '@m4u-angular/core/framework/context-menu.service';\r\n\r\n\r\n@Directive({ selector: 'dx-select-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveSelectBox {\r\n constructor(c: DxSelectBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-tag-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveTagBox {\r\n constructor(c: DxTagBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxo-lookup[configEntitySource]' })\r\nexport class M4UConfigEntitySourceLookupColumn {\r\n constructor(c: DxoLookupComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configMonthYear]' })\r\nexport class M4UConfigMonthYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'MM/yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'year',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configYear]' })\r\nexport class M4UConfigYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'decade',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configTime]' })\r\nexport class M4UConfigTimeDirective {\r\n constructor(c: DxDateBoxComponent, framework: FrameworkService) {\r\n\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n\r\n c.type = 'time';\r\n c.displayFormat = framework.CompanyInfo.TimeFormatShort;\r\n c.pickerType = (!Detector.isMobile() ? 'list' : 'native');\r\n c.min = null;\r\n c.max = null;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatSum]' })\r\nexport class M4UFormatSumDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberSum;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPrice]' })\r\nexport class M4UFormatPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRoundedPrice]' })\r\nexport class M4UFormatRoundedPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n let numberPrice = framework.CompanyInfo.NumberPrice;\r\n const separatorIdx = numberPrice.lastIndexOf(framework.CompanyInfo.DecimalSeparator);\r\n if (separatorIdx !== -1) {\r\n numberPrice = numberPrice.substring(0, separatorIdx);\r\n }\r\n c.format = numberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPriceWithCurrency]' })\r\nexport class FormatPriceWithCurrencyDirective {\r\n\r\n @Input() dataField: string;\r\n @Input() isShowZero = false;\r\n @Input('formatPriceWithCurrency') set currencyField(value: string) {\r\n this.c.calculateCellValue = (data) => {\r\n const number = data[this.dataField];\r\n const currency = data[value];\r\n\r\n if (number === null || number === undefined) {\r\n return null; \r\n }\r\n if (!this.isShowZero && number === 0) {\r\n return null; \r\n }\r\n\r\n let result = formatNumber(number, this.framework.CompanyInfo.NumberSum);\r\n\r\n if (currency) {\r\n result = `${result} ${currency}`; \r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n constructor(private c: DxiColumnComponent, private framework: FrameworkService) { }\r\n}\r\n\r\n@Directive({ selector: '[formatQuantity]' })\r\nexport class M4UFormatQuantityDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberQuantity;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPercent]' })\r\nexport class M4UFormatPercentDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPercent + '\\'%\\'';\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRate]' })\r\nexport class M4UFormatRateDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberRate;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatGeneral]' })\r\nexport class M4UFormatGeneralDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberGeneral;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-box[multiEmail]' })\r\nexport class M4UMultiEmailDirective implements AfterViewInit {\r\n constructor(private c: DxTextBoxComponent, private A: ServiceBagService) {\r\n }\r\n\r\n ngAfterViewInit() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) validatorInstance = new Validator(oElementInstance.element(), {});\r\n const rules = validatorInstance.option('validationRules'); \r\n\r\n rules.push({\r\n type: 'custom',\r\n ignoreEmptyValue: true,\r\n message: this.A.ResourcesService.RC('lblMultiEmailError'),\r\n validationCallback: (e) => {\r\n if (e.value == null) return true;\r\n return Utils.IsEmail(e.value, true);\r\n }\r\n });\r\n\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatCurrency]' })\r\nexport class M4UFormatCurrencyDirective {\r\n constructor(private c: DxNumberBoxComponent, private framework: FrameworkService) {\r\n }\r\n\r\n //Append currency value to the current format\r\n _Currency: string;\r\n @Input('formatCurrency') set Currency(value: string) {\r\n this._Currency = value;\r\n if (value == undefined) return;\r\n let format;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberGeneral)) format = this.framework.CompanyInfo.NumberGeneral;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberPrice)) format = this.framework.CompanyInfo.NumberPrice;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberSum)) format = this.framework.CompanyInfo.NumberSum;\r\n\r\n if (!format) return;\r\n this.c.format = format.split(';').reduce((acc: string, a: string) => acc += `${a} ${this._Currency};`, '').slice(0, -1);\r\n }\r\n get Currency(): string {\r\n return this._Currency;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[stop-click-propagation]' })\r\nexport class M4UStopClickPropagation {\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[field-empty]' })\r\nexport class M4UFieldEmptyDirective {\r\n @Input() Component: IBaseComponent;\r\n @Input() IsHideLabel: boolean;\r\n\r\n constructor(f: FieldFormComponent, private screen: ScreenService) {\r\n f.Component = this.Component;\r\n f.Name = 'Empty';\r\n f.IsHideLabel = this.IsHideLabel;\r\n f.IsHide = this.screen.IsMobile();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[fieldx-empty]' })\r\nexport class M4UFieldXEmptyDirective extends M4UFieldEmptyDirective {\r\n constructor(f: FieldDetailComponentX, screen: ScreenService) {\r\n super(f, screen);\r\n f.Value = 'Empty';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configBooleanColumn]' })\r\nexport class M4UConfigBooleanColumnDirective {\r\n @Input() TrueColor: string;\r\n @Input() FalseColor: string;\r\n @Input() Text: string;\r\n @Input() UseColumnCaption = false;\r\n @Input() ReverseValue = false;\r\n\r\n private _defaultActiveColor = '#0fbe7b';\r\n\r\n constructor(column: DxiColumnComponent,\r\n private viewContainerRef: ViewContainerRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private A: ServiceBagService) {\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, options) => {\r\n const value = this.ReverseValue ? !options.value : !!options.value;\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(StatusColumnComponent);\r\n const component = this.viewContainerRef.createComponent(componentFactory);\r\n component.instance.Text = this.Text || (this.UseColumnCaption\r\n ? options.column.caption\r\n : this.A.ResourcesService.RC(value ? 'genYes' : 'genNo'));\r\n component.instance.Color = value\r\n ? this.TrueColor || this._defaultActiveColor\r\n : this.FalseColor || undefined;\r\n const content = component.instance.getHtmlContent();\r\n container.appendChild(content);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[list-with-pagination]' })\r\nexport class M4UListWithPagination {\r\n @Input() Page: BasePageComponent;\r\n\r\n constructor(private list: DxListComponent) { }\r\n\r\n ngOnInit() {\r\n const listTop = this.list['element'].nativeElement.getBoundingClientRect().top;\r\n\r\n // Calculate grid height fit to the page\r\n const height = window.innerHeight - listTop;\r\n\r\n // Get page footer height\r\n const pageFooters = document.querySelectorAll('.page-container m4u-footer');\r\n const pageFooter = pageFooters[pageFooters.length - 1];\r\n const pageFooterHeight = pageFooter && pageFooter['offsetParent'] && (pageFooter['offsetParent'].offsetHeight - pageFooter['offsetTop']) || 0;\r\n\r\n // Get layout padding\r\n const pageContainers = document.getElementsByClassName('page-content-container');\r\n const currentLayoutPadding = +document.defaultView\r\n .getComputedStyle(pageContainers[pageContainers.length - 1], '')\r\n .getPropertyValue('padding-bottom').match(/\\d/g).join('');\r\n\r\n // If less than header and one row add window height\r\n this.list.height = (height < 160 ? height + window.innerHeight : height) - currentLayoutPadding - pageFooterHeight; // Layout padding, page footer\r\n\r\n }\r\n\r\n}\r\n\r\n@Directive({ selector: '[field-link]' })\r\nexport class M4UFieldLinkDirective {\r\n @Input() NavPath: string;\r\n @Input() NavParams: any;\r\n @Input() NavEntryID: number;\r\n\r\n private _disabled: boolean;\r\n @Input() set Disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this._disabled) this.component.elementAttr = { class: 'm4u-link disabled' };\r\n }\r\n\r\n constructor(private component: DxTextBoxComponent,\r\n private navigatorService: NavigatorService) {\r\n this.component.elementAttr = { class: 'm4u-link' };\r\n this.component.focusStateEnabled = false;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n if (this._disabled) return;\r\n\r\n if (!this.NavPath.endsWith('/')) this.NavPath = `${this.NavPath}/`;\r\n const navEntryID = this.NavEntryID || this.component.value;\r\n const fullPath = `${this.NavPath}${navEntryID}`;\r\n\r\n this.navigatorService.Navigate([fullPath], this.NavParams);\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[link-column]' })\r\nexport class M4ULinkColumnDirective {\r\n @Input() Disabled: (cell: any) => boolean;\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.cssClass = `${column.cssClass || ''} link-column`;\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, cell) => {\r\n const disabled = this.Disabled && this.Disabled(cell);\r\n container.innerHTML = cell.displayValue || '';\r\n if (disabled) {\r\n container.classList.add('disabled');\r\n return;\r\n }\r\n \r\n container.onclick = (event) => {\r\n event.stopPropagation();\r\n this.OnClick.emit(cell);\r\n };\r\n };\r\n}\r\n\r\n@Directive({ selector: 'p-contextMenu[contextMenu]' })\r\nexport class M4UContextMenuDirective {\r\n constructor(cm: ContextMenu, private contextMenuService: ContextMenuService) {\r\n this.contextMenuService.addContextMenu(cm);\r\n }\r\n}\r\n\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { DxSelectBoxComponent, DxTagBoxComponent } from 'devextreme-angular';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n@Directive({ selector: '[configSearch]' })\r\nexport class M4UConfigSearchDirective {\r\n\r\n //Set default options\r\n constructor(private c: DxSelectBoxComponent) {\r\n //Enables typing in\r\n c.searchEnabled = true;\r\n\r\n //Set mode. This is what supported on the server\r\n c.searchMode = \"contains\";\r\n\r\n this.SetItemTemplate();\r\n }\r\n\r\n searchText: string = ''\r\n\r\n //Set some properties related to server search mode\r\n _DataMode: string;\r\n get DataMode(): string { return this._DataMode; }\r\n @Input() set DataMode(value: string) {\r\n this._DataMode = value;\r\n\r\n //If local, no need for minimum\r\n this.c.minSearchLength = (this._DataMode == 'server' ? 2 : 0);\r\n\r\n //Opening causes a full load. If in client mode, we don't care\r\n this.c.openOnFieldClick = (this._DataMode == 'server' ? false : true);\r\n }\r\n\r\n _ShowExtra: boolean;\r\n get ShowExtra(): boolean { return this._ShowExtra; }\r\n @Input() set ShowExtra(value: boolean) {\r\n this._ShowExtra = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate();\r\n }\r\n\r\n //Set template that highlights the typed in item, shows the value, and enables search by value\r\n _ShowValue: boolean;\r\n get ShowValue(): boolean { return this._ShowValue; }\r\n @Input() set ShowValue(value: boolean) {\r\n this._ShowValue = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n _ItemCssClass: string;\r\n get ItemCssClass(): string { return this._ItemCssClass; }\r\n @Input() set ItemCssClass(value: string) {\r\n this._ItemCssClass = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n //Set the template\r\n SetItemTemplate() {\r\n this.c.itemTemplate = this.PrepareItemTemplate.bind(this);\r\n }\r\n\r\n //Have to expose this one as well to allow overriding it, since the code itself overrides this field on the base control\r\n _DisplayExpr: string;\r\n get DisplayExpr(): string { return this._DisplayExpr; }\r\n @Input() set DisplayExpr(value: string) {\r\n this._DisplayExpr = value;\r\n this.SetDisplayExpression();\r\n }\r\n\r\n @HostListener('onInput') onInput() {\r\n this.searchText = String(this.c.instance.option('text'))\r\n }\r\n\r\n @HostListener('onSelectionChanged') onSelectionChanged() {\r\n this.searchText = ''\r\n }\r\n\r\n //Set correct display and search strings\r\n SetDisplayExpression() {\r\n\r\n //Set display expression to the one set manually, or build an automatic one depending on the Value/Text fields\r\n if (this.DisplayExpr != undefined) {\r\n this.c.displayExpr = this.DisplayExpr;\r\n } else {\r\n if (this._ShowValue || (this._ShowExtra && this.ExtraField)) {\r\n this.c.displayExpr = (item) => (item != null\r\n ? `${Utils.NZ(item[this._ShowExtra ? this.ExtraField : this.ValueField])} - ${Utils.NZ(item[this.TextField])}`\r\n : null);\r\n }\r\n else {\r\n this.c.displayExpr = this.TextField;\r\n }\r\n }\r\n\r\n const arr = [];\r\n arr.push(this.TextField);\r\n if (this.ShowValue) arr.push(this.ValueField);\r\n if (this.ShowExtra) arr.push(this.ExtraField);\r\n this.c.searchExpr = arr;\r\n }\r\n\r\n //Set that field that is being used as a text, to allow customer datasources\r\n _TextField: string = \"Text\";\r\n get TextField(): string { return this._TextField; }\r\n @Input() set TextField(value: string) {\r\n if (this._TextField != value) {\r\n this._TextField = value;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a value, to allow customer datasources\r\n _ValueField: string = \"Value\";\r\n get ValueField(): string { return this._ValueField; }\r\n @Input() set ValueField(value: string) {\r\n if (this._ValueField != value) {\r\n this._ValueField = value;\r\n value && (this.c.valueExpr = value);\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a extra \r\n _ExtraField: string = \"Extra\";\r\n get ExtraField(): string { return this._ExtraField; }\r\n @Input() set ExtraField(extra: string) {\r\n if (this._ExtraField != extra) {\r\n this._ExtraField = extra;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n private GetValueFromPath(obj: any, path: string): string {\r\n const value = path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n return typeof value === 'number' ? value.toString() : value;\r\n }\r\n\r\n //Prepare the template\r\n private PrepareItemTemplate(itemData, itemIndex, itemElement): string {\r\n var sEnteredString: string = this.searchText;\r\n\r\n //Get extra\r\n var sExtraPart: string = '';\r\n if (this.ShowExtra) sExtraPart = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.ExtraField), \"extra\");\r\n\r\n //Return either both parts, or just one\r\n if (this._ShowValue) {\r\n var sValuePart: string = this.GetHighlightedString(sEnteredString, `${this.GetValueFromPath(itemData, this.ValueField)}`, \"value\");\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"text\");\r\n return `${sValuePart}${sTextPart}` + (this.ShowExtra ? sExtraPart : '');\r\n }\r\n else {\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"textnovalue\");\r\n return sTextPart + (this.ShowExtra ? sExtraPart : '');;\r\n }\r\n }\r\n\r\n //Return a highlighten string for a line\r\n private GetHighlightedString(sEnteredString: string, sItemString: string, sClass: string): string {\r\n var sValue: string;\r\n if (!Utils.IsEmpty(sEnteredString) && !Utils.IsEmpty(sItemString)) {\r\n var iPos = sItemString.toLowerCase().indexOf(sEnteredString.toLowerCase());\r\n if (iPos >= 0) {\r\n //Put the text we found inside a span\r\n var iLen = sEnteredString.length;\r\n sValue = `${sItemString.slice(0, iPos)}${sItemString.slice(iPos, iPos + iLen)}${sItemString.slice(iPos + iLen)}`;\r\n }\r\n else {\r\n //Not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n }\r\n else {\r\n //Same as not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n\r\n //Return div for this line\r\n return `
${sValue}
`;\r\n }\r\n}\r\n","import { EnumCustomFilterTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { Directive, Input } from '@angular/core';\r\n\r\n\r\n@Directive({ selector: 'dxi-column[configServerSideCustomFilter]' })\r\nexport class M4UConfigServerSideCustomFilterDirective {\r\n @Input() CustomFilterType: EnumCustomFilterTypes;\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.calculateFilterExpression = this.getCalculateFilterExpression();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n getCalculateFilterExpression(): Function {\r\n switch (this.CustomFilterType) {\r\n case EnumCustomFilterTypes.RelatedToAtLeastOne:\r\n return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n default: return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n }\r\n }\r\n\r\n RelatedToAtLeastOneFilterExpressionBuilder(this: Column, filterValue: any, selectedFilterOperation: string, target) {\r\n return [this.dataField, EnumCustomFilterTypes.RelatedToAtLeastOne, filterValue];\r\n }\r\n}\r\n","//This is based on the standard routerLink directive\r\n\r\nimport { Attribute, Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\n\r\n\r\n\r\n@Directive({ selector: ':not(a):not(area)[Link]' })\r\nexport class M4URouterLinkEx\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(\r\n private Navigator: NavigatorService,\r\n @Attribute('tabindex') tabIndex: string,\r\n renderer: Renderer2,\r\n el: ElementRef)\r\n {\r\n if (tabIndex == null) renderer.setAttribute(el.nativeElement, 'tabindex', '0');\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n\r\n @HostListener('click')\r\n onClick(): boolean\r\n {\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n\r\n\r\n@Directive({ selector: 'a[Link],area[Link]' })\r\nexport class M4URouterLinkExWithHref\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(private Navigator: NavigatorService)\r\n {\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'])\r\n onClick(button: number, ctrlKey: boolean, metaKey: boolean, shiftKey: boolean): boolean\r\n {\r\n if (button !== 0 || ctrlKey || metaKey || shiftKey) return true;\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[view-container]',\r\n})\r\nexport class M4UViewContainerDirective {\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from '@angular/platform-browser';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { truncate } from 'lodash';\r\n\r\n\r\n\r\n@Pipe({ name: 'RC', pure: true })\r\nexport class RCPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent, ...args: string[] | number[]): string {\r\n return this.resources.RC(value, component && component.ModuleName, ...args);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCM', pure: true })\r\nexport class RCMPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName: string): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCX', pure: false })\r\nexport class RCXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent): string {\r\n return this.resources.RC(value, component && component.ModuleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCMX', pure: false })\r\nexport class RCMXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesNo' })\r\nexport class YesNoPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return this.resources.RC((value ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'YesNoYN' })\r\nexport class YesNoPipeYN implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string): string {\r\n return this.resources.RC((value == 'Y' ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesEmpty' })\r\nexport class YesEmptyPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return value ? this.resources.RC('genYes') : '';\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'LookupList' })\r\nexport class LookupListPipe implements PipeTransform {\r\n transform(value: any, Entities: any[], propName: string = \"Text\", sDefault: string = undefined, sNullValue: string = undefined): string {\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`\r\n\r\n if (!Entities || !Entities.length) return sNullValue;\r\n //Lookup\r\n var result = Entities.find(entity => entity.Value == value);\r\n\r\n //If not found\r\n if (result == undefined) return sDefault;\r\n\r\n //Get result from the selected property\r\n var sReturn = result[propName];\r\n\r\n //Handle null\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n //Finish\r\n return sReturn;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'Lookup' })\r\nexport class LookupPipe implements PipeTransform {\r\n transform(value: number, dataSource: BaseDataSourceAbstract | [], propName: string | ((r) => string) = \"Text\", sDefault: string = undefined, sNullValue: string = undefined, keyName: string = \"EntryID\"): Observable {\r\n\r\n const getStringFromResult = (result: any) => {\r\n if (result == undefined) return sDefault;\r\n\r\n let sReturn: string;\r\n if (typeof propName === 'string')\r\n sReturn = result[propName];\r\n else if (typeof propName === 'function')\r\n sReturn = propName(result);\r\n\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n return sReturn;\r\n }\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`;\r\n\r\n if (Utils.IsEmpty(value)) return of(sDefault);\r\n\r\n if (dataSource == undefined) return of('');\r\n\r\n if ((dataSource as any).Store) {\r\n const ds = dataSource as BaseDataSourceAbstract;\r\n //Get value\r\n var promise = ds.Store.byKey(value)\r\n .then(result => {\r\n return getStringFromResult(result);\r\n })\r\n .catch(() => {\r\n console.warn(`Lookup value ${value} not found`);\r\n return sDefault;\r\n });\r\n\r\n return from(promise);\r\n } else {\r\n let result = (dataSource as []).find(x => x[keyName] == value);\r\n return of(getStringFromResult(result));\r\n }\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberShort' })\r\nexport class FormatNumberShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: number): string {\r\n return formatNumber(value, \"#,##0.#\");\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberGeneral' })\r\nexport class FormatNumberGeneralPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberGeneral);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberSum' })\r\nexport class FormatNumberSumPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberSum);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPrice' })\r\nexport class FormatNumberPricePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPrice);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberQuantity' })\r\nexport class FormatNumberQuantityPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberQuantity);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPercent' })\r\nexport class FormatNumberPercentPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPercent);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberRate' })\r\nexport class FormatNumberRatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberRate);\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'formatDate' })\r\nexport class FormatDatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatLong);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDateShort' })\r\nexport class FormatDateShortPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date | string, fallback: string = undefined): string {\r\n if (value == undefined) return fallback;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatShort);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateCompact' })\r\nexport class FormatDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatCompact);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateApproximate' })\r\nexport class FormatDateApproximatePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDateApproximate(value);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateAtTime' })\r\nexport class FormatDateAtTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService,\r\n private resources: ResourcesService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const correctValue = value instanceof Date ? value : new Date(value);\r\n\r\n const date = formatDate(correctValue, this.framework.CompanyInfo.DateFormatLong);\r\n const time = formatDate(correctValue, this.framework.CompanyInfo.TimeFormatShort);\r\n\r\n return `${date} ${this.resources.RC('lblAt')} ${time}`;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateFull' })\r\nexport class FormatFullDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatFull);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatTime' })\r\nexport class FormatTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.TimeFormatShort);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayName' })\r\nexport class FormatDayNamePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayName(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayNameShort' })\r\nexport class FormatDayNameShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayNameShort(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatPriceWithCurrency' })\r\nexport class FormatPriceWithCurrencyPipe implements PipeTransform \r\n{\r\n constructor(private framework: FrameworkService) { }\r\n\r\n transform(value: number, currency: string = null, isShowZero: boolean = false, isHideCharge: boolean = false, cutCharge: boolean = false): string {\r\n let result = '';\r\n\r\n if(value == null) value = 0;\r\n if(value == 0 && !isShowZero) return result;\r\n\r\n result = formatNumber(value, !isHideCharge ? this.framework.CompanyInfo.NumberSum : this.framework.CompanyInfo.NumberGeneral);\r\n if (cutCharge) { \r\n const decimalIdx = result.indexOf(this.framework.CompanyInfo.DecimalSeparator);\r\n if (decimalIdx !== -1) result = result.substring(0, decimalIdx);\r\n }\r\n\r\n if(currency != null) {\r\n result += ' ' + currency;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n\r\n@Pipe({ name: 'highlight' })\r\nexport class HighlightPipe implements PipeTransform {\r\n constructor(public sanitizer: DomSanitizer) { }\r\n\r\n transform(text: any, search: string): string {\r\n if (search == undefined || text == undefined) return text;\r\n var pattern = search\r\n .replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\")\r\n .split(' ')\r\n .filter((t) => t.length > 0)\r\n .join('|');\r\n\r\n var regex = new RegExp(pattern, 'gi');\r\n\r\n return search\r\n ? `${text}`.replace(regex, (match) => `${match}`)\r\n : text;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: \"orderBy\" })\r\nexport class ArrayOrderByPipe implements PipeTransform {\r\n transform(array: any, field: string): any[] {\r\n if (!Array.isArray(array)) return;\r\n\r\n array.sort((a: any, b: any) => {\r\n // null value always on top\r\n if (a[field] == null) return -1;\r\n if (b[field] == null) return 1;\r\n\r\n if (a[field] < b[field]) {\r\n return -1;\r\n } else if (a[field] > b[field]) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n return array;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'safe' })\r\nexport class SafePipe implements PipeTransform {\r\n constructor(protected sanitizer: DomSanitizer) { }\r\n\r\n public transform(value: string, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\r\n switch (type) {\r\n case 'html':\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case 'style':\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case 'script':\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case 'url':\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case 'resourceUrl':\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n }\r\n }\r\n}\r\n\r\n@Pipe({ name: 'stringBr' })\r\nexport class StringBrPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return value.replace(/[\\r\\n]+/g, '
');\r\n }\r\n}\r\n\r\n@Pipe({ name: 'fileSize' })\r\nexport class FileSizePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n const MByte = 1024 * 1024;\r\n if (value === undefined || value === null) return '';\r\n if (value < 1024) return (value + 'b');\r\n if (value < MByte) return Math.round(value / 1024) + 'KB';\r\n return formatNumber(+(value / MByte), this.framework.CompanyInfo.NumberGeneral) + 'MB';\r\n }\r\n}\r\n\r\n@Pipe({ name: 'abs' })\r\n\r\nexport class AbsPipe implements PipeTransform {\r\n transform(value: number): number {\r\n return Math.abs(value);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'truncate' })\r\nexport class TruncatePipe implements PipeTransform {\r\n constructor() {}\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return truncate(value)\r\n }\r\n}","import { Directive, Input, AfterViewInit } from '@angular/core';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { DxTextBoxComponent, DxSelectBoxComponent, DxNumberBoxComponent, DxCheckBoxComponent,\r\n DxRadioGroupComponent, DxDateBoxComponent, DxTextAreaComponent, DxTagBoxComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { ValidationRule } from 'devextreme/common';\r\nimport Validator from 'devextreme/ui/validator';\r\n\r\nexport class M4UStandardDirective implements AfterViewInit {\r\n constructor(private c: any,\r\n private rule: 'async' | 'compare' | 'custom' | 'email' | 'numeric' | 'pattern' | 'range' | 'required' | 'stringLength',\r\n private IsColumn: boolean,\r\n private resourcesService: ResourcesService) { }\r\n\r\n private m_bInitComplete: boolean;\r\n\r\n _Enabled = true;\r\n @Input() set Enabled(value: boolean) {\r\n\r\n // Prevent double execution\r\n if (this.Enabled === value) {\r\n return;\r\n }\r\n\r\n this._Enabled = value;\r\n\r\n\r\n // Run only if changing after initialization\r\n if (this.m_bInitComplete) {\r\n this.Init();\r\n }\r\n }\r\n\r\n @Input() RequiredMessage: string;\r\n @Input() DoNotShowRequiredMsg: boolean;\r\n\r\n ngAfterViewInit() {\r\n this.Init();\r\n this.m_bInitComplete = true;\r\n }\r\n\r\n private Init() {\r\n if (this.IsColumn) {\r\n this.InitColumnRules();\r\n } else {\r\n this.InitNormalRules();\r\n }\r\n }\r\n\r\n InitNormalRules() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) {\r\n validatorInstance = new Validator(oElementInstance.element(), {});\r\n }\r\n\r\n // var overlay = validatorInstance.element().find(\".dx-invalid-message.dx-overlay\");\r\n // overlay.dxValidationMessage(\"instance\" ).option( \"position\", {\r\n // my: 'bottom right',\r\n // at: \"top right\",\r\n // });\r\n\r\n const rules = validatorInstance.option('validationRules').filter(x => x.type !== this.rule);\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({\r\n type: this.rule,\r\n message: this.DoNotShowRequiredMsg ? '' : (this.RequiredMessage || (this.resourcesService.RC('errorRequiredMessage')))\r\n });\r\n }\r\n\r\n // Set\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n\r\n InitColumnRules() {\r\n let rules = this.c._getOption('validationRules') as ValidationRule[];\r\n if (rules === undefined) {\r\n rules = [];\r\n }\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({ type: this.rule });\r\n } else {\r\n rules = rules.filter(x => x.type !== this.rule);\r\n }\r\n\r\n // Set\r\n this.c._setOption('validationRules', rules);\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-text-box[configRequired]' })\r\nexport class M4URequiredDirectiveTextBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-number-box[configRequired]' })\r\nexport class M4URequiredDirectiveNumberBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxNumberBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-select-box[configRequired]' })\r\nexport class M4URequiredDirectiveSelectBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxSelectBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-check-box[configRequired]' })\r\nexport class M4URequiredDirectiveCheckBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxCheckBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-radio-group[configRequired]' })\r\nexport class M4URequiredDirectiveRadioGroup extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxRadioGroupComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-date-box[configRequired]' })\r\nexport class M4URequiredDirectiveDateBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxDateBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configRequired]' })\r\nexport class M4URequiredDirectiveColumn extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxiColumnComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', true, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-area[configRequired]' })\r\nexport class M4URequiredDirectiveTextArea extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextAreaComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-tag-box[configRequired]' })\r\nexport class M4URequiredDirectiveTagBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTagBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output, ElementRef, Renderer2 } from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n\r\n/**\r\n * \r\n */\r\n\r\n@Directive({\r\n selector: '[throttleevent]'\r\n})\r\nexport class ThrottleEventDirective implements OnInit, OnDestroy {\r\n @Input() EventName: string; // Event name, like 'keydown'\r\n @Input() DebounceTime: number = 500;\r\n @Input() IgnoreNavigationKeys: boolean = false;\r\n @Output() ThrottledEvent = new EventEmitter(); //The resulting event that should be handled\r\n\r\n ignoreKeyCodes = [37, 38, 39, 40, 33, 34, 36, 35];\r\n\r\n private eventsQueue = new Subject();\r\n private subscription: Subscription;\r\n private eventUnsubscribeFunction: any;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2) { }\r\n\r\n //Handle the event\r\n OnEvent(event) {\r\n //Add event to the queue\r\n this.eventsQueue.next(event);\r\n }\r\n\r\n //Initialize listener and the new queue\r\n ngOnInit() {\r\n //Listen to the requested event\r\n this.eventUnsubscribeFunction = this.renderer.listen(this.elementRef.nativeElement, this.EventName, (event) => {\r\n if (!event) return;\r\n if (this.IgnoreNavigationKeys && event.keyCode) {\r\n if (this.ignoreKeyCodes.indexOf(event.keyCode) === -1) {\r\n this.OnEvent(event);\r\n }\r\n } else {\r\n this.OnEvent(event);\r\n }\r\n });\r\n\r\n //Listen to the events queue and throttle them\r\n this.subscription = this.eventsQueue.pipe(debounceTime(this.DebounceTime)).subscribe(e => this.ThrottledEvent.emit(e));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n this.eventUnsubscribeFunction();\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { ClientException } from '@base/entities/BaseEntities';\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { EnumApplicationMode } from '../framework/sysenums.enum';\r\nimport { RC } from '../framework/resources.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { FrameworkService } from '../framework/framework.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-exception',\r\n templateUrl: './exception.component.html',\r\n styleUrls: ['./exception.component.scss']\r\n})\r\nexport class ExceptionComponent implements OnInit, OnDestroy {\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private appConfigService: AppConfigService,\r\n private activatedRoute: ActivatedRoute,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.activatedRoute.data.subscribe(data => {\r\n if (data && data.MessageCode) {\r\n const exception = new ClientException;\r\n exception.Message = RC(data.MessageCode);\r\n SysGlobals.LastException = exception;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription && this.subscription.unsubscribe();\r\n }\r\n\r\n GetButtonText() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard\r\n ? RC('btnReEntry')\r\n : RC('btnReload');\r\n }\r\n\r\n OnReload() {\r\n if (this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard) {\r\n this.frameworkService.NavigateDefault();\r\n return;\r\n }\r\n //For SiglePage and IFrame modes reload application\r\n //Application path was taken from 'unsupported-browsers' script that sets path on the application start\r\n window.location.href = window['applicationPath'];\r\n }\r\n\r\n E(): ClientException {\r\n return SysGlobals.LastException;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'titleException' | RC}}
\\r\\n \\r\\n \\r\\n
\\r\\n

\\r\\n \\r\\n

\\r\\n {{E()?.Message}}\\r\\n

\\r\\n {{E()?.StackTrace}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { BaseEntitiesResponse, HistoryChangesSet } from \"@base/entities/BaseEntities\";\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class HistoryEndpoint extends BaseEndpointCRUD {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"History\", api);\r\n }\r\n}\r\n","import { SwPush } from '@angular/service-worker';\r\nimport { Injectable } from '@angular/core';\r\nimport { ResourcesService } from './resources.service';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { environment } from \"../../environment/environment\";\r\nimport { NavigatorService } from './navigator.service';\r\n\r\n@Injectable()\r\nexport class NativeNotificationsService\r\n{\r\n\r\n public OnNotificationClicked: any;\r\n\r\n //Pass all notification clicks to it's respective handler\r\n constructor(private swPush: SwPush, private resources: ResourcesService)\r\n {\r\n if (!this.IsSupported()) return;\r\n this.swPush.notificationClicks.subscribe(event => this.OnNotificationClicked(event.notification.data, event.action, this.NavigateCallback));\r\n }\r\n\r\n //Since this can run when application is closed, support both navigating using router, and just setting the location\r\n public NavigateCallback(sURL: string)\r\n {\r\n\r\n //Any kind of navigation is causing errors, so just disable it for now\r\n return;\r\n\r\n if (!this.IsSupported()) return;\r\n try\r\n {\r\n var navigator = AppInjector.get(NavigatorService);\r\n navigator.Navigate([sURL]);\r\n }\r\n catch\r\n {\r\n location.replace(sURL);\r\n }\r\n }\r\n\r\n //Request permission to display notifications\r\n public RequestNotificationPermission()\r\n {\r\n if (!this.IsSupported()) return;\r\n if (Notification.permission != 'granted') Notification.requestPermission();\r\n }\r\n\r\n //Shows a desktop notification\r\n public ShowNotification(options: any)\r\n {\r\n try {\r\n if (!this.IsSupported()) return;\r\n } catch (e) {\r\n return;\r\n } \r\n if (navigator.serviceWorker == undefined) return;\r\n navigator.serviceWorker.getRegistration().then(registration =>\r\n {\r\n try\r\n {\r\n registration.showNotification(this.resources.RC('AppTitles.Messages'), options as any);\r\n }\r\n catch\r\n {}\r\n });\r\n\r\n }\r\n\r\n //Check support. on iPhone for instance there is no support\r\n private IsSupported(): boolean\r\n {\r\n return (('Notification' in window) && (environment.production));\r\n }\r\n}\r\n\r\n","import { EnumLanguages } from './../framework/sysenums.enum';\r\nimport { HttpErrorResponse, HttpEvent, HttpEventType, HttpHandler, HttpInterceptor, HttpProgressEvent, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { BaseResponse } from '@base/entities/BaseEntities';\r\nimport { NavigatorService } from '../framework/navigator.service';\r\nimport { RC } from '../framework/resources.service';\r\nimport { EnumRequestProgressTracking } from '../framework/sysenums.enum';\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { SessionService } from '../framework/session.service';\r\nimport { LocalStorageService } from '../framework/local-storage.service';\r\nimport { ClientFingerprintService } from '../framework/client-fingerprint.service';\r\nimport { UiService } from '../framework/ui.service';\r\n\r\n@Injectable()\r\nexport class APIGatewayInterceptor implements HttpInterceptor {\r\n private dateRegex = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(Z?)$/;\r\n private IsIphone: boolean;\r\n constructor(private session: SessionService,\r\n private deviceDetector: DeviceDetectorService,\r\n private localStorageService: LocalStorageService,\r\n private Navigator: NavigatorService,\r\n private ui: UiService,\r\n private clientFingerprintService: ClientFingerprintService) {\r\n if (this.deviceDetector.browser == \"Safari\" || this.deviceDetector.device == \"ipad\" || this.deviceDetector.device == \"iphone\") this.IsIphone = true;\r\n }\r\n\r\n //Formats value for sending to the server, without time zone\r\n private ConvertToServerDate(value: Date): string {\r\n var D = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));\r\n var S = D.toISOString();\r\n if (S.endsWith(\"Z\")) S = S.substring(0, S.length - 1);\r\n return S;\r\n }\r\n\r\n //Append headers for communication\r\n private AddHeaders(request: HttpRequest): HttpRequest {\r\n\r\n // Set language\r\n var lang;\r\n try {\r\n lang = this.localStorageService.GetItem('Language');\r\n } catch (e) { }\r\n if (!lang) { lang = EnumLanguages.Hebrew; }\r\n request = request.clone({ headers: request.headers.set('m4u-language', lang) });\r\n\r\n if (!this.session.IsLoggedIn) return request;\r\n \r\n if (request.method == 'POST' && request.detectContentTypeHeader() == null \r\n && (!request.params.has('autoContentType') || !request.params.get('autoContentType'))) { \r\n\r\n request = request.clone({ headers: request.headers.set('Content-Type', 'application/octet-stream') }); \r\n }\r\n\r\n const clientFingerprint = this.clientFingerprintService.GetClientFingerprint();\r\n request = request.clone({ headers: request.headers.set('m4u-client-fingerprint', clientFingerprint) });\r\n\r\n return request.clone({ headers: request.headers.set('m4u-session', this.session.SessionID as any) });\r\n }\r\n\r\n //Intercept the request pipeline\r\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n //Append headers\r\n const httpRequest: HttpRequest = this.AddHeaders(request);\r\n\r\n //Turn on progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) {\r\n SysGlobals.IsProgressTracking = true;\r\n SysGlobals.ProgressPercent = 0;\r\n }\r\n\r\n //Format dates on send\r\n this.FormatFields(httpRequest.body, 1);\r\n\r\n //Pipe request for additional handling\r\n return next.handle(httpRequest).pipe(\r\n tap((event: HttpEvent) => this.HandleEvent(httpRequest, event)),\r\n catchError((httpResponse: any) => this.HandleError(httpRequest, httpResponse)));\r\n }\r\n\r\n //Return response\r\n private GetErrorResponse(sError: string, responseCode: number): BaseResponse {\r\n var response = new BaseResponse;\r\n response.IsSuccess = false;\r\n response.ResponseCode = responseCode;\r\n response.ResponseMessage = RC(sError);\r\n return response;\r\n }\r\n\r\n //If error has occured, replace the response with an error\r\n private HandleError(httpRequest: HttpRequest, httpResponse: HttpErrorResponse) {\r\n //Handle according to error code\r\n var response: BaseResponse;\r\n switch (httpResponse.status) {\r\n case (0):\r\n //Means there is a communication problem. Did not get any response - write to console\r\n {\r\n response = this.GetErrorResponse(\"errorNetwork\", 999);\r\n console.error(`Server communication problem - check your network - ${httpRequest.url}`);\r\n console.error(httpResponse);\r\n break;\r\n }\r\n\r\n\r\n case (401):\r\n //Means user is invalid. Server will return the error as the body\r\n //Redirect to login page\r\n {\r\n response = httpResponse.error;\r\n // this.session.ClearSessionData();\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/sessionexpired']); });\r\n break;\r\n }\r\n\r\n\r\n case (402):\r\n //Means we have license issues. Server will return the error as the body\r\n {\r\n response = httpResponse.error;\r\n break;\r\n }\r\n\r\n case (403):\r\n //Means that session has expired - Re-direct\r\n {\r\n response = this.GetErrorResponse(\"errorSessionExpired\", httpResponse.status);\r\n // this.session.ClearSessionData();\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/sessionexpired']); }, true)\r\n break;\r\n }\r\n\r\n\r\n case (412):\r\n //Means user is not authorized for this action - return to the caller as is\r\n {\r\n response = this.GetErrorResponse(\"errorUnauthorized\", httpResponse.status);\r\n break;\r\n }\r\n\r\n case (418):\r\n //Special case of a handled exception returned by the server. \r\n //Server will return the error as the body\r\n //The server has logged the exception anyway. Convert the received data\r\n {\r\n //Substitute data from the returned data\r\n response = httpResponse.error;\r\n if (response == null) response = new BaseResponse;\r\n response.ResponseCode = httpResponse.status;\r\n response.ResponseMessage = RC(\"errorUnexpected\", Utils.NZ(response.ResponseMessage));\r\n\r\n\r\n //Write to console\r\n console.error(`Server exception received: \\n ${Utils.NZ(response.ResponseMessage)} \\n ${Utils.NZ(response.ResponseExtendedMessage)}`);\r\n break;\r\n }\r\n case (419):\r\n //Means that MID is missing or wrong\r\n response = httpResponse.error;\r\n this.Navigator.Navigate(['/system/midstore']);\r\n break;\r\n\r\n case (423):\r\n //Password expired - logout, and redirect\r\n // this.session.LogoutAndResetSession();\r\n response = this.GetErrorResponse(\"errorPasswordExpired\", httpResponse.status);\r\n const userName = this.session.UserInfos && this.session.UserInfos.length ? this.session.UserInfos[0]?.Name : undefined;\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/passwordchangeexpired'], { UserName: userName }); });\r\n break;\r\n\r\n case (430): \r\n // Session is frozen\r\n response = this.GetErrorResponse(\"errorSessionIsFrozen\", httpResponse.status);\r\n this.ui.StopMessage(response.ResponseMessage);\r\n console.error(response.ResponseMessage);\r\n break;\r\n \r\n default:\r\n //Unexpected errors\r\n {\r\n //Substitute data from the status code\r\n response = new BaseResponse;\r\n response.IsSuccess = false;\r\n response.ResponseCode = httpResponse.status;\r\n response.ResponseMessage = httpResponse.statusText;\r\n\r\n //Write to console\r\n let stack = new Error(httpResponse.message).stack;\r\n let errMsg = (httpResponse.message) ? httpResponse.message : httpResponse.status ? `${httpResponse.status} - ${httpResponse.statusText}` : 'Server error';\r\n console.error(errMsg);\r\n if (stack) console.error(stack);\r\n\r\n break;\r\n }\r\n }\r\n\r\n //Turn off progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) SysGlobals.IsProgressTracking = false;\r\n\r\n //Return as observable\r\n return new Observable>((observer) => {\r\n var httpResponse = new HttpResponse({ body: response });\r\n observer.next(httpResponse);\r\n observer.complete();\r\n })\r\n\r\n }\r\n\r\n //Tap into HTTP events\r\n private HandleEvent(httpRequest: HttpRequest, httpEvent: HttpEvent) {\r\n //Handle request finish\r\n if (httpEvent instanceof HttpResponse) {\r\n //Format response data\r\n this.FormatFields(httpEvent.body, 2);\r\n\r\n //Turn off progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) SysGlobals.IsProgressTracking = false;\r\n }\r\n\r\n //Progress tracking\r\n if (httpEvent.type == HttpEventType.DownloadProgress || httpEvent.type == HttpEventType.UploadProgress) {\r\n var track: EnumRequestProgressTracking = this.GetTrackProgressHeader(httpRequest);\r\n if (track != undefined) this.HandleTrackProgressEvent(httpEvent as HttpProgressEvent, track);\r\n }\r\n\r\n if (!httpRequest.context.get(SysGlobals.IgnoreSessionRefreshRequestToken)) {\r\n this.session.RefreshExpiredSessionTimeout();\r\n }\r\n }\r\n\r\n //Return the track progress header indicator\r\n private GetTrackProgressHeader(request: HttpRequest): EnumRequestProgressTracking {\r\n var header = request.headers.get(\"m4u-trackprogress\");\r\n return header ? header[0] as EnumRequestProgressTracking : undefined;\r\n }\r\n\r\n //Handle progress events\r\n private HandleTrackProgressEvent(event: HttpProgressEvent, TrackProgress: EnumRequestProgressTracking) {\r\n\r\n //If tracking should be disabled (shouldnt get here anyway)\r\n if (TrackProgress == EnumRequestProgressTracking.Send && event.type == HttpEventType.DownloadProgress) return;\r\n if (TrackProgress == EnumRequestProgressTracking.Receive && event.type == HttpEventType.UploadProgress) return;\r\n\r\n //Set the percent, depending on what we're tracking\r\n var fPercent: number = event.loaded / event.total * 100;\r\n if (TrackProgress == EnumRequestProgressTracking.Both) {\r\n if (event.type == HttpEventType.UploadProgress) fPercent = fPercent * 0.5;\r\n if (event.type == HttpEventType.DownloadProgress) fPercent = 50 + fPercent * 0.5;\r\n }\r\n\r\n //Set progress\r\n SysGlobals.ProgressPercent = fPercent;\r\n\r\n }\r\n\r\n //\r\n private FormatFields(object: Object, iDirection: number) {\r\n\r\n\r\n //Skip nulls\r\n if (!object || !(object instanceof Object)) return;\r\n\r\n\r\n //Recurse arrays\r\n if (object instanceof Array) {\r\n for (const item of object) {\r\n this.FormatFields(item, iDirection);\r\n }\r\n }\r\n\r\n\r\n for (const key of Object.keys(object)) {\r\n\r\n //Recurse arrays\r\n const value = object[key];\r\n if (value instanceof Array) {\r\n for (const item of value) {\r\n this.FormatFields(item, iDirection);\r\n }\r\n }\r\n\r\n //Recurse objects\r\n if (value instanceof Object) this.FormatFields(value, iDirection);\r\n\r\n //Format dates on sending to local date\r\n if (iDirection == 1) {\r\n if (value instanceof Date) object[key] = this.ConvertToServerDate(value);\r\n }\r\n\r\n //Format on receiving\r\n if (iDirection == 2) {\r\n\r\n //Format dates on receiving as Date object\r\n //Notice the special fix for iPHONE - otherwise dates are shifted by the timezone\r\n if (typeof value === 'string' && this.dateRegex.test(value)) {\r\n if (this.IsIphone && value != null) {\r\n object[key] = new Date(\r\n (+value.substring(0, 4)),\r\n (+value.substring(5, 7) - 1),\r\n (+value.substring(8, 10)),\r\n (+value.substring(11, 13)),\r\n (+value.substring(14, 16)),\r\n (+value.substring(17, 19)));\r\n }\r\n else {\r\n object[key] = new Date(value);\r\n }\r\n }\r\n\r\n //Replace null values returned by the server with undefined, to maintain consistancy\r\n if (value === null) object[key] = undefined;\r\n }\r\n }\r\n }\r\n}\r\n","import { APP_BASE_HREF, DOCUMENT } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, HostBinding, Inject, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { MainMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { SessionService, SessionStates } from '@m4u-angular/core/framework/session.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { combineLatest, filter, map, mergeMap, Subscription, take, takeWhile, tap } from 'rxjs';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { ShareService } from '@m4u-angular/core/framework/share.service';\r\n\r\n@Component({\r\n selector: 'm4u-app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @HostBinding('class') get getClass() {\r\n const rtlClass = this.screen.IsRTL() ? ' RTL' : '';\r\n const classList = `${Object.keys(this.screen.Sizes).filter(cl => this.screen.Sizes[cl]).join(' ')}${rtlClass}`;\r\n return classList;\r\n }\r\n @ViewChild('sidebarContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n @ViewChild('bottomSheetContainer', { read: ViewContainerRef }) bottomSheetContainerRef: ViewContainerRef;\r\n\r\n shouldGetInitialURL = true;\r\n initialURL: string;\r\n loadPanelVisible = false;\r\n isLoading = false;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n private menuItems: MainMenuElement[];\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document,\r\n @Inject(APP_BASE_HREF) private baseUrl: string,\r\n public screen: ScreenService,\r\n private router: Router,\r\n private events: SysEventsService,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService,\r\n private sidebarService: SidebarService,\r\n private shareService: ShareService,\r\n private activatedRoute: ActivatedRoute,\r\n private bottomSheetService: BottomSheetService,\r\n ) {\r\n //bottomSheet: BottomSheetProvider,\r\n // vcRef: ViewContainerRef) {\r\n //bottomSheet.rootVcRef = vcRef;\r\n }\r\n\r\n ngOnInit() {\r\n // get initial url to select ccertain menu item.\r\n // cannot do it inside main cycle of handling routes cuz angular.ROUTES object raises this event earlier\r\n // that we make possible to handle it with all necessary data\r\n this.getInitialRoute();\r\n\r\n this._subscriptions.push(this.sessionService.sessionStateChanged$.subscribe(state => {\r\n if (state === SessionStates.Started) {\r\n this.handleRoutes();\r\n }\r\n }));\r\n this._subscriptions.push(this.events.LoadPanel.subscribe(visible => {\r\n this.loadPanelVisible = visible;\r\n if (visible) {\r\n setTimeout(() => {\r\n if (this.loadPanelVisible) this.loadPanelVisible = false;\r\n }, 3000);\r\n }\r\n }));\r\n this._subscriptions.push(this.events.Loading$.subscribe(visible => {\r\n this.isLoading = visible;\r\n if (visible) {\r\n setTimeout(() => {\r\n if (this.isLoading) this.isLoading = false;\r\n }, 10000);\r\n }\r\n }));\r\n\r\n if (this.baseUrl) {\r\n const baseElements = this.document.getElementsByTagName('base');\r\n\r\n if (baseElements.length > 0) {\r\n baseElements[0].setAttribute('href', this.baseUrl);\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.sidebarService.ViewContainerRef = this.containerRef;\r\n this.shareService.ViewContainerRef = this.containerRef;\r\n this.bottomSheetService.ViewContainerRef = this.bottomSheetContainerRef;\r\n }\r\n\r\n getSelectedMenuItem(menuItems: MainMenuElement[], selectedRoute: string): MainMenuElement {\r\n let selectedMenuItem;\r\n menuItems.forEach(menuItem => {\r\n if (menuItem.path === selectedRoute) {\r\n selectedMenuItem = menuItem;\r\n return;\r\n }\r\n if (!selectedMenuItem && menuItem.items) selectedMenuItem = this.getSelectedMenuItem(menuItem.items, selectedRoute);\r\n });\r\n return selectedMenuItem;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n handleNavigationEnd(selectedRoute: string) {\r\n const selectedMenuItem = this.getSelectedMenuItem(this.menuItems, selectedRoute);\r\n this.events.ChangeSelectedRoute(selectedMenuItem && selectedMenuItem.menu);\r\n }\r\n\r\n getInitialRoute() {\r\n // getting \r\n this.router.events\r\n .pipe(\r\n takeWhile(x => this.shouldGetInitialURL),\r\n filter(event => event instanceof NavigationEnd))\r\n .subscribe(event => {\r\n if (this.shouldGetInitialURL) {\r\n if (this.menuItems) {\r\n this.shouldGetInitialURL = false;\r\n } else {\r\n this.initialURL = this.GetCurrentUrl();\r\n }\r\n }\r\n });\r\n }\r\n\r\n handleRoutes() {\r\n // Only after session starts get menu items\r\n this._subscriptions.push(\r\n combineLatest([this.appConfigService.AppConfig.OnGetMenu(this.sessionService.UserInfoDict), \r\n this.appConfigService.AppConfig.OnGetNavbarItems(this.sessionService.UserInfoDict)])\r\n .pipe(\r\n map(([menuItems, navbarItems]) => [...menuItems, ...navbarItems]),\r\n take(1),\r\n tap(x => {\r\n this.menuItems = x;\r\n if (this.initialURL) {\r\n this.shouldGetInitialURL = false;\r\n this.handleNavigationEnd(this.initialURL);\r\n this.initialURL = null;\r\n }\r\n }),\r\n mergeMap(() => this.router.events),\r\n filter(event => event instanceof NavigationEnd))\r\n .subscribe(event => {\r\n this.shouldGetInitialURL = false;\r\n this.handleNavigationEnd(this.GetCurrentUrl());\r\n })\r\n );\r\n }\r\n\r\n private GetCurrentUrl() {\r\n let route = this.activatedRoute;\r\n let urlSegments = route.snapshot.url;\r\n // get the bottom route and url by all the tree\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n urlSegments = [...urlSegments, ...route.snapshot.url];\r\n }\r\n if (route.snapshot.params && route.snapshot.params.EntryID && !route.snapshot.data.IsExternal) {\r\n const entryIdUrlSegment = urlSegments.find(x => x.path === route.snapshot.params.EntryID);\r\n entryIdUrlSegment && (urlSegments = urlSegments.filter(x => x !== entryIdUrlSegment));\r\n }\r\n const url = urlSegments.map(x => x.path).join('/');\r\n return `/${url.substring(0, url.indexOf('_') - 1)}${url.substring(url.lastIndexOf('_') + 1)}`;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'm4u-empty-layout',\r\n templateUrl: './emptylayout.component.html',\r\n styleUrls: ['./emptylayout.component.scss']\r\n})\r\nexport class EmptyLayoutComponent {\r\n constructor(public screen: ScreenService) {\r\n\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MessageBoxOptions } from '@base/classes/BaseClasses';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumMenuPositions } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'm4u-mainlayout',\r\n templateUrl: './mainlayout.component.html',\r\n styleUrls: ['./mainlayout.component.scss']\r\n})\r\nexport class MainLayoutComponent implements OnInit, OnDestroy {\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n MenuOpened = false;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(public screen: ScreenService,\r\n private events: SysEventsService,\r\n private ui: UiService) {\r\n this._subscriptions.push(this.events.OpenMessageBoxSubject.subscribe((options: MessageBoxOptions) => {\r\n this.OpenMessageBoxDialog(options);\r\n }));\r\n }\r\n\r\n ngOnInit() {\r\n this._subscriptions.push(this.events.MenuPositon.subscribe(p => this.SetMenuPositon(p)));\r\n }\r\n\r\n SetMenuPositon(position?: EnumMenuPositions) {\r\n if (!position) {\r\n this.MenuOpened = !this.MenuOpened;\r\n this.events.SetMenuPositon(this.MenuOpened ? EnumMenuPositions.Open : EnumMenuPositions.Close);\r\n } else {\r\n this.MenuOpened = position === EnumMenuPositions.Open;\r\n }\r\n }\r\n\r\n OpenMessageBoxDialog(options: MessageBoxOptions) {\r\n this.messageBoxDialog.Type = options.Type;\r\n this.messageBoxDialog.Prompt = options.Prompt;\r\n this.messageBoxDialog.ShowDialogShort(() => { \r\n this.ui.CloseMessageBox(true); \r\n }, () => { \r\n this.ui.CloseMessageBox(false); \r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement, MainMenuElement } from '@base/classes/BaseClasses';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxTreeViewComponent } from 'devextreme-angular/ui/tree-view';\r\nimport { AppConfigService, VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { LoginEndpoint } from '@m4u-angular/core/endpoints/login.endpoint';\r\nimport { EnumLanguages, EnumMenuPositions, EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Subscription } from 'rxjs';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\n\r\nclass MenuTooltip {\r\n Target: Element;\r\n Content: string;\r\n Visible: boolean;\r\n}\r\n\r\nclass State extends BaseState {\r\n ModulesVersion: VersionDescriptor[] = [];\r\n MenuItems: MainMenuElement[] = [];\r\n MenuTooltip: MenuTooltip = new MenuTooltip;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-navmenu',\r\n templateUrl: './navmenu.component.html',\r\n styleUrls: ['./navmenu.component.scss']\r\n})\r\nexport class NavMenuComponent extends BaseComponent {\r\n @ViewChild(DxTreeViewComponent, { static: true }) menu: DxTreeViewComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n @ViewChild('dynamicContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n private _menuOpened = false;\r\n @Input() set MenuOpened(value) {\r\n if (value === this._menuOpened) return;\r\n\r\n this._menuOpened = value;\r\n if (!this.MenuInstance) return;\r\n if (!value) this.MenuInstance.collapseAll();\r\n else this.ExpandParentItems();\r\n }\r\n get MenuOpened() {\r\n return this._menuOpened;\r\n }\r\n\r\n private get MenuInstance() {\r\n const menuInstance = this.menu && this.menu.instance;\r\n if (menuInstance && !menuInstance['_contentReadyAction']) menuInstance['_initContentReadyAction']();\r\n return menuInstance;\r\n }\r\n\r\n UserMenuItems: ContextMenuElement[] = [];\r\n private _selectedItem: string;\r\n private _subscriptions: Subscription[] = [];\r\n private IsMultiLanguage: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n private resourcesService: ResourcesService,\r\n private loginEndpoint: LoginEndpoint,\r\n private languageService: LanguageService,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private routeHistoryService: RouteHistoryService,\r\n private appConfigService: AppConfigService) {\r\n super(A, 'NavMenuComponent', State);\r\n }\r\n\r\n OnOpenContactUs;\r\n\r\n override OnInitComponent() {\r\n this.IsMultiLanguage = this.appConfigService.M4UConfig.isMultiLanguage;\r\n this.InitMenuItems();\r\n\r\n this._subscriptions.push(this.A.SysEvents.MenuItems.subscribe((isNeedToReload) => {\r\n if (isNeedToReload) {\r\n this.InitializeItems();\r\n this.MenuInstance && this.MenuInstance.repaint();\r\n }\r\n }));\r\n\r\n this.State.ModulesVersion = this.A.AppConfigService.getModulesVersion();\r\n \r\n this.UserMenuItems = this.GetUserMenuItems();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this._subscriptions.push(this.A.SysEvents.SelectedRoute.subscribe(selectedRoute => {\r\n this._selectedItem = selectedRoute;\r\n this.MenuInstance && this.MenuInstance.selectItem(selectedRoute);\r\n }));\r\n\r\n SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n if (x.TargetComponentType !== 'contact-us') return;\r\n\r\n if (x.IsVisibleButton && !x.IsVisibleButton({ DisplayMode: EnumPageDisplayModes.FullScreen } as BasePageComponent)) {\r\n return;\r\n }\r\n\r\n // Resolve an injectable component\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n const componentRef = this.containerRef.createComponent>(componentFactory);\r\n\r\n this.OnOpenContactUs = () => componentRef.instance.BaseAction();\r\n });\r\n }\r\n\r\n InitMenuItems() {\r\n this._subscriptions.push(this.A.AppConfigService.AppConfig.OnGetMenu(this.A.Session.UserInfoDict)\r\n .subscribe(items => {\r\n this.State.MenuItems = items;\r\n this.InitializeItems();\r\n })\r\n );\r\n }\r\n\r\n ToggleMenu() {\r\n this.MenuOpened = !this.MenuOpened;\r\n this.A.SysEvents.SetMenuPositon(this.MenuOpened ? EnumMenuPositions.Open : EnumMenuPositions.Close);\r\n }\r\n\r\n GetUserMenuItems = (): any[] => {\r\n const showPasswordChangeLink = this.A.Framework.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordChange);\r\n\r\n const langs = this.resourcesService.GetLanguagesList().filter(item => item.Value !== SysGlobals.Language).map(item => ({\r\n label: item.Text,\r\n visible: this.IsMultiLanguage,\r\n command: () => this.SwitchLanguage(item.Value as EnumLanguages)\r\n }));\r\n\r\n return [{\r\n label: this.RC('btnContactUs'),\r\n visible: !!this.OnOpenContactUs,\r\n command: this.OnOpenContactUs\r\n }, {\r\n label: this.RC('btnChangePassword'),\r\n visible: showPasswordChangeLink,\r\n command: this.OnChangePassword.bind(this)\r\n },\r\n ...langs,\r\n {\r\n label: this.RC('btnLogout'),\r\n visible: true,\r\n command: this.OnLogout.bind(this)\r\n }];\r\n };\r\n\r\n IsUserMenuOpened(cm) {\r\n return cm?.containerViewChild?.nativeElement?.style?.display == 'block';\r\n }\r\n\r\n InitializeItems() {\r\n this.State.MenuItems.forEach(menu => this.InitializeItem(menu));\r\n this.MenuInstance && this.MenuInstance.option('items', this.State.MenuItems);\r\n }\r\n\r\n InitializeItem(menu: MainMenuElement) {\r\n menu.text = this.GetMenuTranslation(menu);\r\n this.InitMenuItem(menu);\r\n\r\n if (menu.items) menu.items.forEach(x => this.InitializeItem(x));\r\n }\r\n\r\n InitMenuItem(menu: MainMenuElement) {\r\n const menuUserInfo = menu.moduleName && this.A.Session.UserInfoDict[menu.moduleName];\r\n const permissionResult = Utils.IsEmpty(menu.permission)\r\n ? true\r\n : menuUserInfo && menuUserInfo.hasOwnProperty(menu.permission) && menuUserInfo[menu.permission];\r\n const permissionFunctionResult = Utils.IsEmpty(menu.permissionFunction)\r\n ? true\r\n : menu.permissionFunction(menuUserInfo);\r\n menu.visible = !!permissionResult && permissionFunctionResult;\r\n \r\n // add 'rtl' class for custom icons in RTL\r\n if (this.A.Screen.IsRTL() && menu.icon && menu.icon.startsWith('m4u-ico')) menu.icon = `${menu.icon} rtl`;\r\n\r\n // set common icon for folders if it is empty\r\n if (menu.items && Utils.IsEmpty(menu.icon)) menu.icon = 'mdi mdi-folder-open';\r\n\r\n // hide main menu elements for mobile\r\n if (this.A.Screen.IsMobile()) menu.visible = menu.visible && (menu.isVisibleOnMobile == undefined ? true : menu.isVisibleOnMobile);\r\n\r\n if (this._selectedItem && this._selectedItem === menu.menu) {\r\n (menu as any).selected = true;\r\n }\r\n }\r\n\r\n ExpandParentItems() {\r\n if (!this.MenuInstance || !this._menuOpened) return;\r\n\r\n const parentMenus = this.GetParentMenus();\r\n parentMenus.forEach(x => this.MenuInstance.expandItem(x));\r\n }\r\n\r\n GetParentMenus() {\r\n const search = (parents, item: MainMenuElement): string[] => item.menu === this._selectedItem\r\n ? [...parents]\r\n : item.items?.length > 0 ? item.items.reduce((acc, child) => acc.concat(search([...parents, item.menu], child)), []) : [];\r\n\r\n let parentMenus = [];\r\n this.State.MenuItems.filter(x => x.items?.length).forEach(x => {\r\n parentMenus = [...parentMenus, ...search([], x)];\r\n });\r\n return parentMenus;\r\n }\r\n\r\n GetMenuTranslation(menu: MainMenuElement) {\r\n const menuWithoutModule = menu.menu.substring(menu.menu.indexOf(\".\") + 1, menu.menu.length);\r\n return menu.text || this.A.ResourcesService.RC(`$$Pages.${menuWithoutModule}`, menu.moduleName);\r\n }\r\n\r\n OnItemClick(event: any) {\r\n // Do nothing if menu was already selected\r\n if (event.node.selected) return;\r\n\r\n // If menu closed and it the highest level and it has children then just open it\r\n if (!this.MenuOpened && !event.node.parent && event.itemData.items) {\r\n this.A.SysEvents.SetMenuPositon(EnumMenuPositions.Open);\r\n return;\r\n }\r\n\r\n // Do nothing if menu path is empty\r\n const menu = event.itemData;\r\n \r\n if (menu.click && typeof menu.click === 'function') {\r\n menu.click();\r\n return;\r\n }\r\n\r\n if (!menu.path) return;\r\n\r\n const menuUserInfo = menu.moduleName ? this.A.Session.UserInfoDict[menu.moduleName] : this.A.Session.UserInfos[0];\r\n const pathParams = menu.pathParams && menu.pathParams(menuUserInfo) || [];\r\n\r\n this.routeHistoryService.ClearHistory();\r\n // Navigate my menu path and params\r\n this.A.Navigator.Navigate([menu.path, pathParams], menu.queryParams || null).then(() => {\r\n // Close menu after navigation\r\n if (this.MenuOpened) this.A.SysEvents.SetMenuPositon(EnumMenuPositions.Close);\r\n });\r\n }\r\n\r\n OnContentReady(e: any) {\r\n const elements = e.component.element().querySelectorAll('.dx-treeview-item');\r\n elements.forEach((el, index) => {\r\n if (!this.State.MenuItems || !this.State.MenuItems[index]) return;\r\n\r\n el.addEventListener('mouseenter', event => {\r\n if (this.MenuOpened) return;\r\n\r\n const target = event.target as Element;\r\n this.State.MenuTooltip = {\r\n Target: document.querySelector(`${Array.from(target.classList).map(x => `.${x}`).join('')} .menu-icon-container`),\r\n Content: this.State.MenuItems[index]?.text,\r\n Visible: !!target\r\n };\r\n });\r\n el.addEventListener('mouseleave', event => this.State.MenuTooltip = new MenuTooltip);\r\n });\r\n }\r\n\r\n GetMenuIconElement(element: Element) {\r\n if (!element) return null;\r\n if (element.classList.contains('menu-icon-container') || !element.children || !element.children.length) return element;\r\n\r\n const r = Array.from(element.children).find(x => this.GetMenuIconElement(x));\r\n return r;\r\n }\r\n\r\n GetVersion(): string {\r\n return `S-${this.A.Framework.CompanyInfo.ServerVersion} : C-${Utils.NZ(this.A.Framework.CompanyInfo.ClientVersion)}`;\r\n }\r\n\r\n GetDisplayUserName(): string {\r\n if (this.A.Session.DisplayUserName == undefined) return '';\r\n return this.A.Session.DisplayUserName.substring(0, 25);\r\n }\r\n\r\n GetDisplayUserDescription(): string {\r\n return Utils.NZ(this.A.Session.DisplayUserDescription, this.RC('lblUser')).substring(0, 25);\r\n }\r\n\r\n OnShowUserMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.toggle(event);\r\n }\r\n\r\n OnChangePassword() {\r\n this.Navigate(['/system/passwordchange']);\r\n }\r\n\r\n OnLogout() {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgLogoutQuestion');\r\n this.messageBox.ShowDialogShort(() => {\r\n this.Navigate(['/system/logout']);\r\n });\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.General', moduleName);\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.A.AppConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n SwitchLanguage(language: EnumLanguages) {\r\n this.languageService.SetLanguage(language);\r\n this._subscriptions.push(this.loginEndpoint.ChangeLanguage(language).subscribe((response: BaseResponse) => {\r\n if (response.IsSuccess) window.location.reload();\r\n }));\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{ GetAppTitle() }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n {{State.MenuTooltip.Content}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{data.text}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\\"\\\"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{GetDisplayUserDescription()}}
\\r\\n
\\r\\n {{GetDisplayUserName()}}\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{version.moduleName}}: {{version.major}}.{{version.minor}}.{{version.build}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { MainMenuElement } from '@base/classes/BaseClasses';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { AppConfigService, VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Router } from '@angular/router';\r\nimport { M4URouteRandomizers } from '../../../../core/framework/navigator.service';\r\n\r\nclass MenuTooltip {\r\n Target: Element;\r\n Content: string;\r\n Visible: boolean;\r\n}\r\n\r\nclass State extends BaseState {\r\n MenuItems: MainMenuElement[] = [];\r\n HomeMenu: MainMenuElement;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-menu-button-list',\r\n templateUrl: './menu-button-list.component.html',\r\n styleUrls: ['./menu-button-list.component.scss']\r\n})\r\nexport class MenuButtonListComponent extends BasePageComponent {\r\n\r\n private _subscriptions: Subscription[] = [];\r\n private IsMultiLanguage: boolean;\r\n private currentPath: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private routeHistoryService: RouteHistoryService,\r\n private appConfigService: AppConfigService) {\r\n super(A, 'MenuButtonListComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.currentPath = this.A.Navigator.GetCurrentRoute();\r\n\r\n //Remove randomizer prefix from path\r\n M4URouteRandomizers.forEach(x => {\r\n this.currentPath = this.currentPath.replace('/'+x, '/');\r\n });\r\n\r\n this.IsMultiLanguage = this.appConfigService.M4UConfig.isMultiLanguage;\r\n this.InitMenuItems();\r\n }\r\n\r\n\r\n protected override OnInitTitle(): string {\r\n var menuTitle = this.RC('MenuButtonListComponent');\r\n if (this.State.HomeMenu) {\r\n const menuWithoutModule = this.State.HomeMenu.menu.substring(this.State.HomeMenu.menu.indexOf(\".\") + 1, this.State.HomeMenu.menu.length);\r\n menuTitle = this.A.ResourcesService.RC(`$$Pages.${menuWithoutModule}`, this.State.HomeMenu.moduleName);\r\n }\r\n return menuTitle;\r\n }\r\n\r\n InitMenuItems() {\r\n this._subscriptions.push(this.A.AppConfigService.AppConfig.OnGetMenu(this.A.Session.UserInfoDict)\r\n .subscribe(items => {\r\n // Filter out the menu item that matches the current path\r\n this.State.MenuItems = items\r\n .filter(menu => menu.path !== this.currentPath);\r\n this.InitializeItems();\r\n\r\n var titleMenu = items.find(menu => menu.path === this.currentPath);\r\n if (titleMenu) {\r\n this.State.HomeMenu = titleMenu;\r\n }\r\n\r\n // Update title\r\n this.RepaintToolbar();\r\n })\r\n );\r\n }\r\n\r\n InitializeItems() {\r\n this.State.MenuItems.forEach(menu => this.InitializeItem(menu));\r\n }\r\n\r\n InitializeItem(menu: MainMenuElement) {\r\n menu.text = this.GetMenuTranslation(menu);\r\n this.InitMenuItem(menu);\r\n\r\n if (menu.items) menu.items.forEach(x => this.InitializeItem(x));\r\n }\r\n\r\n GetMenuTranslation(menu: MainMenuElement) {\r\n const menuWithoutModule = menu.menu.substring(menu.menu.indexOf(\".\") + 1, menu.menu.length);\r\n return menu.text || this.A.ResourcesService.RC(`$$Pages.${menuWithoutModule}`, menu.moduleName);\r\n }\r\n\r\n InitMenuItem(menu: MainMenuElement) {\r\n const menuUserInfo = menu.moduleName && this.A.Session.UserInfoDict[menu.moduleName];\r\n const permissionResult = Utils.IsEmpty(menu.permission)\r\n ? true\r\n : menuUserInfo && menuUserInfo.hasOwnProperty(menu.permission) && menuUserInfo[menu.permission];\r\n const permissionFunctionResult = Utils.IsEmpty(menu.permissionFunction)\r\n ? true\r\n : menu.permissionFunction(menuUserInfo);\r\n menu.visible = !!permissionResult && permissionFunctionResult;\r\n\r\n // add 'rtl' class for custom icons in RTL\r\n if (this.A.Screen.IsRTL() && menu.icon && menu.icon.startsWith('m4u-ico')) menu.icon = `${menu.icon} rtl`;\r\n\r\n // set common icon for folders if it is empty\r\n if (menu.items && Utils.IsEmpty(menu.icon)) menu.icon = 'mdi mdi-folder-open';\r\n\r\n // hide main menu elements for mobile\r\n if (this.A.Screen.IsMobile()) menu.visible = menu.visible && (menu.isVisibleOnMobile == undefined ? true : menu.isVisibleOnMobile);\r\n }\r\n\r\n OnButtonClick(menu: MainMenuElement) {\r\n if (menu.click && typeof menu.click === 'function') {\r\n menu.click();\r\n return;\r\n }\r\n\r\n if (!menu.path) return;\r\n\r\n const menuUserInfo = menu.moduleName ? this.A.Session.UserInfoDict[menu.moduleName] : this.A.Session.UserInfos[0];\r\n const pathParams = menu.pathParams && menu.pathParams(menuUserInfo) || [];\r\n\r\n this.routeHistoryService.ClearHistory();\r\n this.A.Navigator.Navigate([menu.path, pathParams], menu.queryParams || null);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\n\r\n@Component({\r\n selector: 'm4u-progresspanel',\r\n templateUrl: 'progresspanel.component.html',\r\n styleUrls: ['./progresspanel.component.scss']\r\n})\r\n\r\nexport class ProgressPanelComponent extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ProgressPanelComponent', BaseState);\r\n }\r\n\r\n IsVisible(): boolean {\r\n return SysGlobals.IsProgressTracking;\r\n }\r\n\r\n GetText = (ratio: number, value: number): string => {\r\n return Math.round(ratio * 100) + '%' + ' ' + this.RC('progressIndicator');\r\n }\r\n\r\n GetValue(): number {\r\n return SysGlobals.ProgressPercent;\r\n }\r\n\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumSidebarStates } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseComponent } from '../../../base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../base/component/ServiceBag';\r\nimport { BaseState, PushMessageListParams } from '../../../base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n IsLoadAllNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-list',\r\n templateUrl: './push-message-list.component.html',\r\n styleUrls: ['./push-message-list.component.scss']\r\n})\r\nexport class PushMessageListComponent extends BaseComponent implements IBottomSheetComponent {\r\n\r\n @Output() OnAllNotificationsLoad = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint,\r\n private sidebarService: SidebarService) {\r\n super(A, 'PushMessageListComponent', State);\r\n }\r\n Context: BottomSheetDialogComponent;\r\n\r\n private _sidebarStateSubscription: Subscription;\r\n\r\n protected override OnInitComponent(): void {\r\n this.LoadPushMessages();\r\n\r\n this._sidebarStateSubscription = this.sidebarService.SidebarState.subscribe((state) => {\r\n if (state.SidebarName === 'Notifications' && state.State === EnumSidebarStates.Opened && this.DS('PushMessages')) {\r\n this.DS('PushMessages').Reload();\r\n }\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._sidebarStateSubscription && this._sidebarStateSubscription.unsubscribe();\r\n }\r\n\r\n LoadPushMessages() {\r\n const params = new PushMessageListParams;\r\n params.IsLoadAllNotifications = this.State.IsLoadAllNotifications;\r\n\r\n this.DataSources['PushMessages'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.pushMessageEndpoint.GetPushMessages(params, options), undefined, undefined, false);\r\n }\r\n\r\n OnLoadAllNotifications() {\r\n this.State.IsLoadAllNotifications = true;\r\n this.LoadPushMessages();\r\n this.Context?.Repaint();\r\n this.OnAllNotificationsLoad.emit(this.State.IsLoadAllNotifications);\r\n }\r\n\r\n GetNoDataText() {\r\n return !this.State.IsLoadAllNotifications ? this.RC('lblNoUnreadMessages') : this.RC('genNoData');\r\n }\r\n\r\n OnNotificationRead() {\r\n this.DS('PushMessages').Reload();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { Component, ComponentFactoryResolver, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumApplicationMode, EnumPageDisplayModes } from '@core/framework/sysenums.enum';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { PushMessageListComponent } from '@m4u-angular/ui/notifications/push-message-list/push-message-list.component';\r\nimport { DxContextMenuComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n ToolbarButtons: any[] = [];\r\n ToolbarSettings: ToolbarSettings = new ToolbarSettings;\r\n IsBreadcrumbVisible: boolean;\r\n IsAllowNotifications: boolean;\r\n InjectedComponents: Set = new Set();\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-toolbar',\r\n templateUrl: 'toolbar.component.html',\r\n styleUrls: ['./toolbar.component.scss']\r\n})\r\nexport class ToolbarComponent extends BaseComponent {\r\n @Input() PageComponentName: string;\r\n @Input() ToolbarButtonsBefore: TemplateRef;\r\n @Input() ToolbarButtonsCenter: TemplateRef;\r\n @Input() ToolbarButtonsAfter: TemplateRef;\r\n @Input() HideBreadcrumbs: boolean = false;\r\n\r\n @ViewChild('mnuViewModes') protected viewModesMenu: DxContextMenuComponent;\r\n @ViewChild('dynamicContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n get ShowBreadcrumb() {\r\n return this.A.AppConfigService.AppConfig.ShowBreadcrumb()\r\n && this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window\r\n && !this.State.ToolbarSettings?.Page?.IsShowAsFullScreen()\r\n && this.A.RouteHistoryService.HistoryLength > 2 && !this.HideBreadcrumbs;\r\n }\r\n\r\n get ShowTitle() {\r\n return (!this.A.Screen.IsMobile() && this.State.ToolbarSettings?.Page?.DisplayMode !== EnumPageDisplayModes.BottomSheet)\r\n || (!this.A.Screen.IsMobile() && ((this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window\r\n && !this.State.ToolbarSettings?.Page?.ShowAsWindowOnMobile)\r\n || (this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.SinglePage\r\n && this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.FullScreen)));\r\n }\r\n\r\n get ShowTitleOnMobile() {\r\n return this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.BottomSheet\r\n || (this.A.Screen.IsMobile() && (this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Dialog\r\n || (this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window\r\n && (this.State.ToolbarSettings?.Page?.ShowAsWindowOnMobile || this.State.ToolbarSettings?.Page?.IsShowAsFullScreen()))));\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService,\r\n private sidebarService: SidebarService,\r\n private bottomSheetService: BottomSheetService,\r\n private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(A, 'ToolbarComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.RegisterSubscription(this.A.SysEvents.Toolbar.subscribe((settings: ToolbarSettings) => {\r\n if (!settings || settings.PageComponentName !== this.PageComponentName) return;\r\n\r\n this.State.ToolbarSettings = { ...this.State.ToolbarSettings, ...settings };\r\n this.State.IsAllowNotifications = this.A.AppConfigService.AppConfig.IsAllowNotifications\r\n && this.State.ToolbarSettings?.Page?.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n \r\n this.InitInjectedComponents();\r\n this.DetectChanges();\r\n }));\r\n\r\n this.RegisterSubscription(this.A.SysEvents.Breadcrumb.subscribe(isVisible => {\r\n this.State.IsBreadcrumbVisible = isVisible;\r\n }));\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this.InitInjectedComponents();\r\n }\r\n\r\n InitInjectedComponents() {\r\n SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n if (x.TargetModuleName !== this.State.ToolbarSettings.Page?.ModuleName) {\r\n return;\r\n }\r\n if (x.TargetComponentName && x.TargetComponentName !== this.State.ToolbarSettings.Page.ComponentName) {\r\n return true;\r\n }\r\n if (x.IsVisibleButton && !x.IsVisibleButton(this.State.ToolbarSettings.Page)) {\r\n return;\r\n }\r\n\r\n const injectedComponent = `${x.TargetComponentType}-${x.ComponentType?.name}`;\r\n if(!this.containerRef || this.State.InjectedComponents.has(injectedComponent)) {\r\n return;\r\n }\r\n\r\n // Resolve an injectable component\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n const componentRef = this.containerRef.createComponent>(componentFactory);\r\n // Set fields\r\n componentRef.instance.TargetComponentName = this.State.ToolbarSettings.Page.ComponentName;\r\n componentRef.instance.TargetAppName = this.State.ToolbarSettings.Page.ModuleName;\r\n componentRef.instance.EntityType = this.State.ToolbarSettings.Page.EntityType;\r\n\r\n // Handle the injectable component on high levels\r\n this.State.ToolbarSettings.Page.OnInitInjectableComponent(componentRef.instance);\r\n\r\n if (!this.screen.IsMobile() || x.ShowInToolbarOnMobile) {\r\n // Add buttons to toolbar\r\n const buttonSettings = {\r\n Icon: x.ButtonIcon,\r\n Text: !x.ButtonIcon ? x.ButtonText : undefined,\r\n Hint: x.ButtonIcon ? x.ButtonText : undefined,\r\n Click: () => {\r\n componentRef.instance.BaseAction();\r\n }\r\n };\r\n this.State.ToolbarButtons.push(buttonSettings);\r\n\r\n // Give buttons settings to ths injectable component\r\n componentRef.instance.ButtonSettings = buttonSettings;\r\n } else {\r\n this.State.ToolbarSettings.Page.ContextMenuDefault.push({\r\n icon: x.ButtonIcon,\r\n text: x.ButtonText,\r\n onClick: () => {\r\n componentRef.instance.BaseAction();\r\n }\r\n });\r\n }\r\n\r\n this.State.InjectedComponents.add(injectedComponent);\r\n });\r\n }\r\n\r\n //Determine whether to show the close button icon instead of back\r\n public IsShowCloseButton() {\r\n return this.IsStandardApplicationMode() && this.State.ToolbarSettings && this.State.ToolbarSettings.ShowCloseButton;\r\n }\r\n\r\n public IsShowBackButton(): boolean {\r\n return this.IsStandardApplicationMode() && this.State.ToolbarSettings && this.State.ToolbarSettings.ShowBackButton;\r\n }\r\n\r\n IsStandardApplicationMode(): boolean {\r\n return this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard;\r\n }\r\n\r\n OnNavigateHomeOrSwitchMode() {\r\n if (this.State.ToolbarSettings.OnTitleClick) {\r\n this.State.ToolbarSettings.OnTitleClick();\r\n } else if (this.IsShowViewModesButton()) {\r\n //Switch mode\r\n this.OnShowViewModes();\r\n } else {\r\n //Go to home route\r\n if (!this.IsStandardApplicationMode() || !this.State.ToolbarSettings.Page\r\n || this.State.ToolbarSettings.Page.DisplayMode != EnumPageDisplayModes.FullScreen) return;\r\n this.A.Framework.NavigateDefault();\r\n }\r\n }\r\n\r\n ToggleMenu = (e) => {\r\n this.A.SysEvents.SetMenuPositon();\r\n e.stopPropagation();\r\n };\r\n\r\n OnShowPushMessages(e) {\r\n if (!this.screen.IsMobile()) {\r\n this.sidebarService.Show('Notifications', this.RC('lblNotifications'), PushMessageListComponent);\r\n return;\r\n }\r\n\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'Notifications';\r\n contentParams.Title = this.RC('lblNotifications');\r\n contentParams.Content = PushMessageListComponent;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n\r\n IsShowViewModesButton() {\r\n return this.State.ToolbarSettings.ViewModes?.length;\r\n }\r\n\r\n //Show menu after refresh - since menu items may change\r\n OnShowViewModes = () => {\r\n this.viewModesMenu.instance.show();\r\n };\r\n\r\n //Set the title, and call the attached callback\r\n OnViewModesMenuClick(e) {\r\n this.State.ToolbarSettings.Title = e.itemData.text;\r\n e.itemData.callback();\r\n }\r\n\r\n OnBack() {\r\n this.State.ToolbarSettings.BackButtonClick();\r\n }\r\n\r\n //Close page or navigate back using custom callback\r\n OnClosePage() {\r\n this.State.ToolbarSettings.CloseButtonClick();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n IsShowDesktopBackButton() {\r\n return this.A.Screen.IsDesktop() && this.State.ToolbarSettings.Page?.DisplayMode !== EnumPageDisplayModes.Window\r\n || this.A.Screen.IsMobile();\r\n }\r\n\r\n IsShowWindowBackButton() {\r\n return this.A.Screen.IsDesktop() && this.State.ToolbarSettings.Page?.DisplayMode === EnumPageDisplayModes.Window;\r\n }\r\n\r\n HasBreadcrumb() {\r\n return document.querySelector('.toolbar-group-top m4u-breadcrumb')?.childElementCount > 0;\r\n }\r\n\r\n //ShowHideToolbarButtons() {\r\n // const currentPageSelectorPrefix = `.${this.State.ToolbarSettings.PageComponentName}.page-container`;\r\n // const flexibleToolbarButtons = document\r\n // .querySelectorAll(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-button`);\r\n // const toolbarButtons = document\r\n // .querySelectorAll(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-buttons toolbar-buttons > *`);\r\n // const hiddableElements = [...Array.prototype.slice.call(flexibleToolbarButtons), ...Array.prototype.slice.call(toolbarButtons)];\r\n\r\n // if (hiddableElements.length === 0) return;\r\n\r\n // const toolbarLeft = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-left`);\r\n // const toolbarLeftWidth = toolbarLeft && toolbarLeft.getBoundingClientRect().width || 0;\r\n\r\n // const toolbar = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar`);\r\n // const toolbarPadding = this.A.Screen.IsMobile() ? 8 : 34;\r\n // const toolbarWidth = (toolbar && toolbar.getBoundingClientRect().width - 2 * toolbarPadding) || 0;\r\n\r\n // const toolbarRight = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-right`);\r\n // const toolbarRightWidth = toolbarRight && toolbarRight.getBoundingClientRect().width || 0;\r\n\r\n // const moreButton = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar .more-button`);\r\n // const moreButtonWidth = moreButton && moreButton.getBoundingClientRect().width || 0;\r\n\r\n // if (toolbarLeftWidth + toolbarRightWidth > toolbarWidth) {\r\n // const lastItem = hiddableElements[hiddableElements.length - 1];\r\n // const lastItemWidth = lastItem.getBoundingClientRect().width;\r\n // lastItem.setAttribute('width', lastItemWidth.toString());\r\n\r\n // const li = document.createElement(\"li\");\r\n // li.appendChild(lastItem);\r\n\r\n // const contextMenus = document.querySelectorAll('.more-button-context-menu ul');\r\n // const currentContextMenu = contextMenus[contextMenus.length - 1];\r\n // currentContextMenu.appendChild(li);\r\n\r\n // this.ShowHideMoreButton();\r\n // this.ShowHideToolbarButtons();\r\n // return;\r\n // }\r\n\r\n // const moreButtonItems = document.querySelectorAll('.more-button-context-menu ul li > *');\r\n // const firstMoreElement = moreButtonItems[0];\r\n\r\n // if (firstMoreElement) {\r\n // const firstMoreElementWidth = +firstMoreElement.getAttribute('width') || 0;\r\n // let occupiedWidth = toolbarLeftWidth + toolbarRightWidth + firstMoreElementWidth;\r\n // if (moreButtonItems.length == 1) occupiedWidth -= moreButtonWidth;\r\n // if (occupiedWidth < toolbarWidth) {\r\n // const toolbarButtonsContainer = document\r\n // .querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-buttons toolbar-buttons`);\r\n // toolbarButtonsContainer && toolbarButtonsContainer.appendChild(firstMoreElement);\r\n\r\n // this.ShowHideMoreButton();\r\n // this.ShowHideToolbarButtons();\r\n // }\r\n // }\r\n\r\n // this.ShowHideMoreButton();\r\n //}\r\n\r\n //private ShowHideMoreButton() {\r\n // const currentPageSelectorPrefix = `.${this.State.ToolbarSettings.PageComponentName}.page-container`;\r\n // const moreButtonContainer = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar .more-button-container`);\r\n // if (!moreButtonContainer) return;\r\n\r\n // if (document.querySelectorAll('.more-button-context-menu ul li > *').length === 0) {\r\n // moreButtonContainer.classList.add('m4u-hidden');\r\n // } else {\r\n // moreButtonContainer.classList.remove('m4u-hidden');\r\n // }\r\n //}\r\n}\r\n\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.ToolbarSettings.Title}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{State.ToolbarSettings.Subtitle}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, AfterViewInit } from '@angular/core';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\n\r\n\r\n@Component({\r\n selector: 'm4u-comingsoon',\r\n templateUrl: './comingsoon.component.html',\r\n styleUrls: ['./comingsoon.component.scss']\r\n})\r\nexport class ComingSoonComponent extends BasePageComponent implements AfterViewInit\r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'ComingSoonComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override ngAfterViewInit()\r\n {\r\n setTimeout(() => { this.Navigate(['/pages/dashboard'], { Language: SysGlobals.Language }); }, 4000);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
{{'titleComingSoonTitle' | RC}}
\\r\\n \\r\\n
{{'titleLogoutLast' | RC}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, HostListener, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseState, LoginParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport {\r\n EnumLanguages, EnumLoginExtensionLinkType, EnumLoginSecureKeyTypes,\r\n EnumNotificationDeliveryOptions, EnumCheckCredentialsResult\r\n} from '@core/framework/sysenums.enum';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { LoginExtensionLink } from '@base/classes/BaseClasses';\r\nimport { VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseState {\r\n IsSaveCredentials: boolean;\r\n ShowPasswordRecoveryLink: boolean;\r\n LoginExtensionLinks: LoginExtensionLink[];\r\n ReturnUrl: string;\r\n IsSupportedLoginByOTP: boolean;\r\n Stage: number;\r\n ModulesVersion: VersionDescriptor[] = [];\r\n SessionID: string;\r\n DisplayName: string;\r\n UserName: string;\r\n Password: string;\r\n MFACode: string;\r\n SecureKeyType: EnumLoginSecureKeyTypes = EnumLoginSecureKeyTypes.Password;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss']\r\n})\r\nexport class LoginComponent extends BasePageComponent {\r\n @HostListener('document:keypress', ['$event'])\r\n EnterPress(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.OnSubmit();\r\n }\r\n }\r\n\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n get IsOtpButtonVisible(): boolean {\r\n return this.State.IsSupportedLoginByOTP && !this.IsUseSessionCredentials;\r\n }\r\n\r\n get IsUseSessionCredentials(): boolean {\r\n return !!this.State.SessionID && !!this.State.DisplayName;\r\n }\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private sessionService: SessionService,\r\n private localStorageService: LocalStorageService,\r\n private languageService: LanguageService) {\r\n super(A, 'LoginComponent', LoginParams, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.A.AppConfigService.AppConfig.OnLoginPage();\r\n\r\n //If authentication is set to OAuth - redirec to a separate page\r\n if (this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOAuth)) {\r\n this.Navigate(['/system/login-oauth'], { Language: SysGlobals.Language, ReturnUrl: this.State.ReturnUrl });\r\n return;\r\n }\r\n\r\n //Checking support of the login by otp is needed for to avoid an endless loop of transitions between 'login' & login-otp'\r\n if (!this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByPassword) && this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP)) {\r\n this.Navigate(['/system/login-otp'], { Language: SysGlobals.Language, ReturnUrl: this.State.ReturnUrl });\r\n return;\r\n }\r\n\r\n this.State.Stage = 1;\r\n\r\n this.State.ModulesVersion = this.A.AppConfigService.getModulesVersion();\r\n\r\n this._subscriptions.push(this.languageService.Language$.subscribe(language => {\r\n if (this.Entity.Language === language) return;\r\n\r\n this.Entity.Language = language;\r\n this.A.Navigator.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n setTimeout(() => this.A.Navigator.ReloadApplication(), 500);\r\n }));\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n this.State.IsSupportedLoginByOTP = this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP);\r\n this.State.ReturnUrl = this.A.Navigator.FixDeploymentLocation(this.QueryParams.ReturnUrl);\r\n \r\n this.State.DisplayName = this.sessionService.GetUserName();\r\n this.State.SessionID = this.sessionService.GetSessionID();\r\n \r\n if(this.IsUseSessionCredentials) {\r\n this.State.SecureKeyType = EnumLoginSecureKeyTypes.Session;\r\n }\r\n }\r\n\r\n override OnInitEntity() {\r\n //Take default language from URL to allow presetting it\r\n if (this.QueryParams.Language != undefined) {\r\n this.Entity.Language = this.QueryParams.Language;\r\n } else {\r\n const language = this.localStorageService.GetItem('Language');\r\n this.Entity.Language = language || this.A.AppConfigService.M4UConfig.defaultLanguage;\r\n }\r\n this.languageService.SetLanguage(this.Entity.Language);\r\n\r\n //Take sure if was passed in\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.LoadExtension();\r\n }\r\n\r\n //Perform the login\r\n // We can login by either by session credentials or by username and password\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n\r\n this.PrepareEntity();\r\n\r\n this.loginService.DoLogin(this.Entity, this.IsUseSessionCredentials, this.State.IsSaveCredentials, \r\n () => {\r\n this.OnAfterInit(); \r\n }, \r\n (failedResponse) => {\r\n if(failedResponse.ResponseCode != 999 && this.IsUseSessionCredentials) {\r\n this.ClearSavedSessionState();\r\n this.Entity.SecureKey = undefined;\r\n }\r\n }, \r\n (deliveryOption: EnumNotificationDeliveryOptions) => {\r\n this.MFACodeSent(deliveryOption); \r\n })\r\n .subscribe(() => {});\r\n }\r\n\r\n OnAfterInit() {\r\n if (this.State.ReturnUrl) {\r\n this.A.Navigator.NavigateByUrl(this.State.ReturnUrl);\r\n return;\r\n }\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n override OnSubmitPage() {\r\n this.OnSubmit();\r\n }\r\n\r\n OnPasswordRecovery() {\r\n this.Navigate(['/system/passwordrecovery'], { UserName: this.State.UserName });\r\n }\r\n\r\n LoadExtension() {\r\n this.A.AppConfigService.AppConfig.OnGetAppLoginExtensionLinks()\r\n .subscribe(links => this.State.LoginExtensionLinks = links);\r\n }\r\n\r\n OnExtensionLinkClick(link: LoginExtensionLink) {\r\n (link.Type === EnumLoginExtensionLinkType.Route || link.Type === EnumLoginExtensionLinkType.ButtonLink)\r\n && this.Navigate([link.Link]);\r\n }\r\n\r\n GoToLoginByOTP() {\r\n if (this.State.IsSupportedLoginByOTP) this.Navigate(['/system/login-otp'], { Language: this.Entity.Language });\r\n }\r\n\r\n MFACodeSent(deliveryOption: EnumNotificationDeliveryOptions) {\r\n this.Entity.DeliveryOption = deliveryOption;\r\n this.State.Stage = 2;\r\n this.State.IsSaveCredentials = false;\r\n this.State.SecureKeyType = EnumLoginSecureKeyTypes.MFACode;\r\n\r\n const message = this.Entity.DeliveryOption == EnumNotificationDeliveryOptions.Email\r\n ? this.RC('titleMFACodeOnEmailSent')\r\n : this.RC('titleMFACodeOnPhoneSent');\r\n this.UI.InfoMessage(message);\r\n }\r\n\r\n GetAdditionalTitle() {\r\n if (this.State.Stage == 2) {\r\n if (this.Entity.DeliveryOption == EnumNotificationDeliveryOptions.Email) return this.RC('titleMFACodeOnEmailSent');\r\n else return this.RC('titleMFACodeOnPhoneSent');\r\n }\r\n return '';\r\n }\r\n\r\n OnCodeFieldInitialized(e) {\r\n setTimeout(() => e.component.instance().focus(), 500);\r\n }\r\n\r\n OnClearSavedSession() {\r\n this.ClearSavedSessionState();\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n private ClearSavedSessionState() {\r\n this.sessionService.ClearSessionCredentials();\r\n this.State.DisplayName = undefined;\r\n this.State.SessionID = undefined;\r\n this.State.SecureKeyType = EnumLoginSecureKeyTypes.Password;\r\n }\r\n\r\n private PrepareEntity() {\r\n this.Entity.SecureKeyType = this.State.SecureKeyType;\r\n this.Entity.UserName = this.State.UserName;\r\n \r\n if(this.IsUseSessionCredentials) {\r\n this.Entity.SecureKey = this.State.SessionID;\r\n // When we use session ID to log in we'd like to keep it in the storage till user explicitly logs out or this sessionID is expired\r\n this.State.IsSaveCredentials = true;\r\n return;\r\n }\r\n\r\n if(this.State.SecureKeyType == EnumLoginSecureKeyTypes.Password) {\r\n this.Entity.SecureKey = this.State.Password;\r\n return;\r\n }\r\n\r\n this.Entity.SecureKey = this.State.MFACode;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{State.DisplayName}}
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'btnRecoverPassword' | RCX}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","/* eslint-disable max-len */\r\nimport { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseDataResponse, BaseState, LoginParams } from '@base/entities/BaseEntities';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { EnumLoginSecureKeyTypes } from '@core/framework/sysenums.enum';\r\nimport { VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { LoginEndpoint } from '@m4u-angular/core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n ReturnUrl: string;\r\n Stage: number;\r\n ModulesVersion: VersionDescriptor[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-login-oauth',\r\n templateUrl: './login-oauth.component.html',\r\n styleUrls: ['./login-oauth.component.scss']\r\n})\r\nexport class LoginOAuthComponent extends BasePageComponent {\r\n \r\n \r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private loginEndpoint: LoginEndpoint) {\r\n super(A, 'LoginComponent', LoginParams, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.A.AppConfigService.AppConfig.OnLoginPage();\r\n\r\n //Support for return URL\r\n this.State.ReturnUrl = this.A.Navigator.FixDeploymentLocation(this.State.ReturnUrl);\r\n\r\n \r\n //Coming back from redirect. Manually decode, since double encoding is used for state\r\n if (this.QueryParams.code != undefined && this.QueryParams.iss != undefined) {\r\n this.State.Stage = 2;\r\n this.Entity.UserName ='oAuth';\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.OAuth;\r\n this.Entity.SecureKey = this.QueryParams.code;\r\n this.State.ReturnUrl = decodeURIComponent(this.QueryParams.state);\r\n console.log(`Came from redirect with:${this.State.ReturnUrl}`);\r\n this.OnDoLogin();\r\n } else {\r\n this.State.Stage = 1;\r\n this.OnRedirectToAuthority();\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n //Perform the login\r\n OnDoLogin() {\r\n this.loginService.DoLogin(this.Entity, false, false, () => {\r\n this.OnAfterLogin();\r\n }, null, null)\r\n .subscribe(() => { });\r\n }\r\n\r\n OnAfterLogin() {\r\n if (this.State.ReturnUrl) {\r\n this.A.Navigator.NavigateByUrl(this.State.ReturnUrl);\r\n } else {\r\n this.A.Framework.NavigateDefault();\r\n }\r\n }\r\n\r\n\r\n\r\n OnRedirectToAuthority() {\r\n console.log(`Initiating redirect with:${this.State.ReturnUrl}`);\r\n this.Do(this.loginEndpoint.GetOAuthRedirectURL(this.State.ReturnUrl), false, (response: BaseDataResponse) => {\r\n if (response.IsSuccess) {\r\n console.log(`Redirecting to:${response.Data}`);\r\n this.A.Navigator.NavigateExternal(response.Data, false);\r\n } else {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\";","import { Component, OnInit } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-logout',\r\n templateUrl: './logout.component.html',\r\n styleUrls: ['./logout.component.scss']\r\n})\r\nexport class LogoutComponent extends BasePageComponent implements OnInit {\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'LogoutComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override ngOnInit() {\r\n this.loginService.DoLogout(() => {\r\n this.sidebarService.ClearSidebars();\r\n setTimeout(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); }, 4000);\r\n }); \r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, AfterViewInit } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-sessionexpire',\r\n templateUrl: './sessionexpire.component.html',\r\n styleUrls: ['./sessionexpire.component.scss']\r\n})\r\nexport class SessionExpireComponent extends BasePageComponent implements AfterViewInit {\r\n\r\n constructor(A: ServiceBagService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'SessionExpireComponent', BaseEntity, BaseState);\r\n }\r\n\r\n\r\n override ngAfterViewInit() {\r\n this.sidebarService.ClearSidebars();\r\n setTimeout(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); }, 2000);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BaseEntityResponse,\r\n CredentialActivityStatus,\r\n BaseEntitiesResponse,\r\n CredentialLoginParams,\r\n CredentialLogin, CredentialType\r\n} from '@base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEndpoint } from '@base/endpoint/BaseEndpoint';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class CredentialActivityEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('CredentialActivity', api);\r\n }\r\n\r\n public ListActivity(CredentialType: number, options: DataLoadOptions): Observable> {\r\n return this.api.ExecuteGetAction(\r\n this.ControllerName,\r\n 'ListActivity',\r\n { CredentialType: CredentialType, options: options?.GetLoadOptions() });\r\n }\r\n\r\n public ListCredentialTypes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ListCredentialTypes');\r\n }\r\n\r\n public ListLogins(Params: CredentialLoginParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListLogins', Params, options?.GetLoadOptions());\r\n }\r\n}\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseEntity, BaseState, CredentialType } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from \"@base/datalayer/BaseDataSources\";\r\nimport { GridExtender } from \"@base/grid/Grid.extender\";\r\nimport { CredentialActivityStatusGridComponent } from './grid/credentials-activity-status-grid.component';\r\nimport { CredentialActivityEndpoint } from \"@core/endpoints/credential-activity.endpoint\";\r\n\r\nclass State extends BaseState {\r\n CredentialsInfo: CredentialType[] = [];\r\n CredentialType: number = -1;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-credentials-activity-status',\r\n templateUrl: './credentials-activity-status.component.html',\r\n styleUrls: ['./credentials-activity-status.component.scss']\r\n})\r\n\r\nexport class CredentialsActivityStatusComponent extends BasePageComponent{\r\n @ViewChild('credentialActivityGrid') credentialActivityGrid: CredentialActivityStatusGridComponent;\r\n public get G(): GridExtender {\r\n return this.credentialActivityGrid?.G;\r\n }\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'CredentialsActivityStatusComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitDataSources() {\r\n this.LoadDataSource();\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialsInfo = response.Entities;\r\n\r\n response.Entities.forEach(entity => {\r\n if (entity.Value == null) {\r\n entity.Value = -999;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private LoadDataSource() {\r\n this.DataSources['Data'] = new DataSourceCustomAction(\r\n (options) => this.credentialActivityEndpoint.ListActivity(this.State.CredentialType ?? -999, options),\r\n undefined, (entities) => {\r\n entities.forEach(entity => {\r\n if (entity.CredentialType == null) {\r\n entity.CredentialType = -999;\r\n }\r\n });\r\n }, false);\r\n this.DS('Data').Reload();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.G\r\n };\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = -1;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnRefresh() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, GenericListEntity, Notification, NotificationListParams, NotificationView } from '@base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\n\r\n\r\n@Injectable()\r\nexport class NotificationEndpoint extends BaseEndpointCRUD {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"Notification\", api);\r\n }\r\n \r\n public GetNotificationsReport(Params: NotificationListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetNotificationsReport', Params, options?.GetLoadOptions());\r\n }\r\n public GetRelevantDeliveryOptions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantDeliveryOptions', { });\r\n }\r\n public GetNotificationsTemplates(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetNotificationsTemplates', { });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseEntity, BaseState, GenericListEntity, Notification } from '@base/entities/BaseEntities';\r\nimport { BaseGridComponent } from \"@base/component/BaseGridComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n Templates: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notificationgrid',\r\n templateUrl: './notificationgrid.component.html',\r\n styleUrls: ['./notificationgrid.component.scss']\r\n})\r\nexport class NotificationGridComponent extends BaseGridComponent\r\n{\r\n @Input() set Templates (value: GenericListEntity[]) {\r\n this.State.Templates = value;\r\n }\r\n @Output() OnRefresh = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, componentName: string) {\r\n super(A, componentName, Notification, State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n if (this.G) this.G.grid.columnHidingEnabled = false;\r\n }\r\n \r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/general/notificationview\", e.data.EntryID]);\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n this.OnRefresh.emit();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\";","import { Component, ViewChild } from '@angular/core';\r\nimport {\r\n BaseEntity, BaseState, GenericListEntity,\r\n BaseEntitiesResponse, Notification, NotificationListParams, BaseDataResponse\r\n} from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@base/datalayer/BaseDataSources';\r\nimport { NotificationEndpoint } from '@core/endpoints/notification.endpoint';\r\nimport { EnumNotificationDeliveryOptions, EnumSystemOptions, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { NotificationGridComponent } from './notification-grid/notificationgrid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EmailHistoryGridComponent } from './notification-grid/email-history-grid/email-history-grid.component';\r\nimport { SmsHistoryGridComponent } from './notification-grid/sms-history-grid/sms-history-grid.component';\r\nimport { PushMessageHistoryGridComponent } from './notification-grid/push-message-history-grid/push-message-history-grid.component';\r\nimport { SharingHistoryGridComponent } from './notification-grid/sharing-history-grid/sharing-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n SearchAddress: string;\r\n SearchUntilDate: Date;\r\n SearchFromDate: Date;\r\n SearchTemplate: string;\r\n Templates: GenericListEntity[];\r\n CurrentTabIndex: number = 0;\r\n CurrentDeliveryOption: EnumNotificationDeliveryOptions;\r\n IsTabsVisible = false;\r\n RelevantNotificationTypes: any[] = [];\r\n IsNoData = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-notificationshistory',\r\n templateUrl: './notificationshistory.component.html',\r\n styleUrls: ['./notificationshistory.component.scss']\r\n})\r\nexport class NotificationsHistoryComponent extends BasePageComponent{\r\n @ViewChild('emailGrid') public emailGrid: EmailHistoryGridComponent;\r\n @ViewChild('smsGrid') public smsGrid: SmsHistoryGridComponent;\r\n @ViewChild('pushMessageGrid') public pushMessageGrid: PushMessageHistoryGridComponent;\r\n @ViewChild('whatsAppGrid') public whatsAppGrid: SmsHistoryGridComponent;\r\n @ViewChild('sharingAppGrid') public sharingAppGrid: SharingHistoryGridComponent;\r\n @ViewChild(NotificationGridComponent) public grid: NotificationGridComponent;\r\n\r\n constructor(A: ServiceBagService, private notificationEndpoint: NotificationEndpoint) {\r\n super(A, 'NotificationsHistoryComponent', Notification, State);\r\n }\r\n\r\n override OnInitDataSources() {\r\n this.Do(this.notificationEndpoint.GetNotificationsTemplates(), false, (response: BaseEntitiesResponse) => {\r\n this.State.Templates = response.Entities;\r\n });\r\n\r\n this.Do(this.notificationEndpoint.GetRelevantDeliveryOptions(),\r\n false, (response: BaseDataResponse) => {\r\n this.State.RelevantNotificationTypes = this.LIST('NotificationTypes')\r\n .filter(x => response.Data.some(y => y === x.Value) && this.IsDeliveryOptionAvailable(x.Value));\r\n if (response.Data.length === 0) {\r\n this.State.IsNoData = true;\r\n return;\r\n }\r\n\r\n this.State.IsTabsVisible = response.Data.length > 1;\r\n this.State.CurrentDeliveryOption = response.Data[0];\r\n\r\n this.LoadDataSource();\r\n });\r\n }\r\n\r\n //Load the report\r\n LoadDataSource() {\r\n if (!this.State.CurrentDeliveryOption) return;\r\n\r\n const params = new NotificationListParams();\r\n params.DeliveryOption = this.State.CurrentDeliveryOption;\r\n params.Address = this.State.SearchAddress;\r\n params.UntilDate = this.State.SearchUntilDate;\r\n params.FromDate = this.State.SearchFromDate;\r\n params.Template = this.State.SearchTemplate;\r\n\r\n this.DataSources['Notifications'] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.notificationEndpoint.GetNotificationsReport(params, options),\r\n undefined, undefined, false);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/general/notificationview', e.data.EntryID],\r\n { WindowWidth: this.State.CurrentDeliveryOption == EnumNotificationDeliveryOptions.Email ? EnumWindowSizes.WindowLarge : EnumWindowSizes.WindowMedium });\r\n }\r\n\r\n OnNavigateCard(e) {\r\n this.Navigate(['/pages/general/notificationview', e.EntryID],\r\n { WindowWidth: this.State.CurrentDeliveryOption == EnumNotificationDeliveryOptions.Email ? EnumWindowSizes.WindowLarge : EnumWindowSizes.WindowMedium });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: () => this.GetGridExtender()\r\n } as ToolbarSettings;\r\n }\r\n\r\n private GetGridExtender = () => {\r\n switch (this.State.CurrentDeliveryOption) {\r\n case EnumNotificationDeliveryOptions.Email: return this.emailGrid?.G;\r\n case EnumNotificationDeliveryOptions.SMS: return this.smsGrid?.G;\r\n case EnumNotificationDeliveryOptions.PushMessage: return this.pushMessageGrid?.G;\r\n case EnumNotificationDeliveryOptions.WhatsApp: return this.whatsAppGrid?.G;\r\n case EnumNotificationDeliveryOptions.Share: return this.sharingAppGrid?.G;\r\n default: return this.emailGrid?.G;\r\n }\r\n };\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.SearchAddress = this.State.SearchFromDate = this.State.SearchUntilDate = this.State.SearchTemplate = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnTabChanged(event) {\r\n this.State.CurrentTabIndex = event.itemIndex;\r\n this.State.CurrentDeliveryOption = event.itemData.Value;\r\n this.LoadDataSource();\r\n\r\n setTimeout(() => this.ReloadToolbar());\r\n }\r\n\r\n IsDeliveryOptionAvailable(option: string) {\r\n switch (option) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n case EnumNotificationDeliveryOptions.PushMessage:\r\n return true;\r\n case EnumNotificationDeliveryOptions.Share:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n OnRefresh() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
{{'msgNoData' | RC}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { BaseEntityResponse, BaseState, Notification } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumNotificationStatuses, EnumPageDisplayModes, EnumWindowSizes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { NotificationEndpoint } from \"@m4u-angular/core/endpoints/notification.endpoint\";\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n WindowWidth: EnumWindowSizes;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-notificationview',\r\n templateUrl: './notificationview.component.html',\r\n styleUrls: ['./notificationview.component.scss']\r\n})\r\nexport class NotificationViewComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private notificationEndpoint: NotificationEndpoint, public sanitizer: DomSanitizer) {\r\n super(A, 'NotificationViewComponent', Notification, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.WindowWidth = this.QueryParams.WindowWidth ? this.QueryParams.WindowWidth : EnumWindowSizes.WindowMedium;\r\n const entryID = this.A.Navigator.GetRouteParams().EntryID;\r\n this.SetEntity(Notification, this.notificationEndpoint.Get(entryID), false, (response: BaseEntityResponse) => {});\r\n }\r\n\r\n GetStatusColor() {\r\n switch(this.Entity.Status) {\r\n case EnumNotificationStatuses.Sent:\r\n return 'green-cyan';\r\n case EnumNotificationStatuses.Failure:\r\n return 'cinnabar';\r\n case EnumNotificationStatuses.Sending:\r\n return 'atomic-tangerine';\r\n case EnumNotificationStatuses.Draft:\r\n return 'portage';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Input,Component, ViewChild } from \"@angular/core\";\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { GridExtender } from \"@base/grid/Grid.extender\";\r\n\r\nimport { HistoryEventTypesEnum, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HistoryViewGridComponent } from '@m4u-angular/ui/components/general/history-view/grid/historyview-grid.component'\r\nimport { BaseEntity, BaseState, HistoryChangeDetails, HistoryChangesSet } from '@base/entities/BaseEntities';\r\nimport dxScrollView from 'devextreme/ui/scroll_view';\r\n\r\nclass State extends BaseState {\r\n SearchUntilDate: Date;\r\n SearchFromDate: Date;\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-historyview',\r\n templateUrl: './historyview.component.html',\r\n styleUrls: ['./historyview.component.scss']\r\n})\r\n\r\nexport class HistoryViewComponent extends BasePageComponent { \r\n\r\n @Input() Entities: HistoryChangesSet[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HistoryViewComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n setTimeout(() => {\r\n const scroll = dxScrollView.getInstance(document.querySelector('.history-view-page .page-body')) as any;\r\n scroll && scroll.scrollTo({ top: scroll.scrollHeight() });\r\n });\r\n }\r\n\r\n IsShowDate(item: HistoryChangesSet) {\r\n const itemIndex = this.Entities.indexOf(item);\r\n return itemIndex === 0 || this.Entities[itemIndex - 1].CreatedDate.ToDate().getTime() != item.CreatedDate.ToDate().getTime();\r\n }\r\n\r\n GetEntityChangesContext(item: HistoryChangesSet) {\r\n return { items: item.HistoryChanges, type: 'entity', getChangeLabel: (item: HistoryChangeDetails) => this.GetEntityChangeLabel(item) };\r\n }\r\n\r\n private GetEntityChangeLabel(item: HistoryChangeDetails) {\r\n const entityName = item.Name && item.EntityType !== item.Name ? item.Name : '';\r\n switch (item.Action) {\r\n case HistoryEventTypesEnum.RowAdded:\r\n return this.RC('lblHistoryChangeAdded', item.EntityType, entityName);\r\n case HistoryEventTypesEnum.RowDeleted:\r\n return this.RC('lblHistoryChangeRemoved', item.EntityType, entityName);\r\n case HistoryEventTypesEnum.FieldChange:\r\n case HistoryEventTypesEnum.Special:\r\n return `${item.EntityType} ${entityName}`;\r\n }\r\n }\r\n\r\n GetLineChangesContext(item: HistoryChangesSet) {\r\n return { items: item.HistoryLineChanges, type: 'lines', getChangeLabel: (item: HistoryChangeDetails) => this.GetLineChangeLabel(item) };\r\n }\r\n\r\n GetLineChangeLabel(item: HistoryChangeDetails) {\r\n switch (item.Action) {\r\n case HistoryEventTypesEnum.RowAdded:\r\n return this.RC('lblHistoryLineAdded', item.EntityType, `${item.EntityLineID + 1}`);\r\n case HistoryEventTypesEnum.RowDeleted:\r\n return this.RC('lblHistoryLineRemoved', item.EntityType, `${item.EntityLineID + 1}`);\r\n case HistoryEventTypesEnum.FieldChange:\r\n return `${item.EntityType} ${item.EntityLineID + 1}`;\r\n }\r\n }\r\n\r\n ShowChangeLabel(items: HistoryChangeDetails[], item: HistoryChangeDetails, index: number, type: 'entity' | 'lines') {\r\n return (item.Action !== 'Special') && index > 0 \r\n ? type === 'entity' \r\n ? items[index].EntityEntryID !== items[index - 1].EntityEntryID || items[index].Action !== items[index - 1].Action\r\n : items[index].EntityLineID !== items[index - 1].EntityLineID || items[index].Action !== items[index - 1].Action\r\n : true;\r\n }\r\n\r\n IsItemCollapsed(item) {\r\n return this.Entities.indexOf(item) !== this.Entities.length - 1;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ item.CreatedDate | formatDateShort }}\\r\\n {{ item.CreatedDate | formatTime }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{ getChangeLabel(change) }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{change.FieldName}}:
\\r\\n
{{change.OldValue || '-'}}
\\r\\n
\\r\\n
{{change.NewValue || '-'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\";","import { NgModule } from '@angular/core';\r\n\r\n//DevExpress built-in stuff\r\nimport { DevExtremeModule } from 'devextreme-angular';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n imports:\r\n [\r\n DevExtremeModule\r\n ],\r\n \r\n exports:\r\n [\r\n DevExtremeModule\r\n ]\r\n \r\n})\r\nexport class M4UDevExpressModule\r\n{\r\n\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n OldPassword: string\r\n NewPassword1: string\r\n NewPassword2: string\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordchange',\r\n templateUrl: './passwordchange.component.html',\r\n styleUrls: ['./passwordchange.component.scss']\r\n})\r\nexport class PasswordChangeComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n //This procedure is done since the session has expired on the server because of the change, and we need a new one\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.OldPassword;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePassword(params), false, () => {\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n // this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); });\r\n });\r\n }\r\n\r\n OnCancel() {\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseResponse, BaseState, CredentialsCheckResponse, LoginParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { EnumCheckCredentialsResult, EnumLoginSecureKeyTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ClientFingerprintService } from '@m4u-angular/core/framework/client-fingerprint.service';\r\n\r\nclass State extends BaseState {\r\n UserName: string\r\n OldPassword: string\r\n NewPassword1: string\r\n NewPassword2: string\r\n ShowPasswordRecoveryLink: boolean;\r\n Stage: number;\r\n MFACode: string;\r\n AdditionalTitle: string;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordchangeexpired',\r\n templateUrl: './passwordchangeexpired.component.html',\r\n styleUrls: ['./passwordchangeexpired.component.scss']\r\n})\r\nexport class PasswordChangeExpiredComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n private loginEndpoint: LoginEndpoint,\r\n private clientFingerprintService: ClientFingerprintService) {\r\n super(A, 'ChangePasswordExpiredComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial username\r\n override OnInitState() {\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Stage = 1;\r\n this.State.AdditionalTitle = this.RC('titleChangePassword');\r\n }\r\n\r\n //Make the change. \r\n //After making the change, show the login screen\r\n //Also, reset the stored password\r\n //This procedure is done since the session has expired on the server because of the change, and we need a new one\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new LoginParams();\r\n params.Language = SysGlobals.Language;\r\n params.UserName = this.State.UserName;\r\n params.ClientFingerprint = this.clientFingerprintService.GetClientFingerprint();\r\n\r\n if (this.State.Stage === 1) {\r\n params.SecureKey = this.State.OldPassword;\r\n params.NewPassword = this.State.NewPassword1;\r\n } else {\r\n params.SecureKey = this.State.MFACode;\r\n params.SecureKeyType = EnumLoginSecureKeyTypes.MFACode;\r\n params.NewPassword = this.State.NewPassword1;\r\n }\r\n\r\n this.loginEndpoint.ChangePasswordExpired(params).subscribe((response: CredentialsCheckResponse | BaseResponse) => {\r\n if (response instanceof BaseResponse) {\r\n if (!response.IsSuccess) this.UI.StopMessage(response.ResponseMessage);\r\n this.GoToLogin();\r\n return;\r\n }\r\n switch (response.CheckResult) {\r\n case EnumCheckCredentialsResult.Success:\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n this.GoToLogin();\r\n return;\r\n case EnumCheckCredentialsResult.MFAEmailSent:\r\n this.State.Stage = 2;\r\n this.State.AdditionalTitle = this.RC('titleMFACodeOnEmailSent');\r\n return;\r\n case EnumCheckCredentialsResult.MFASMSSent:\r\n this.State.Stage = 2;\r\n this.State.AdditionalTitle = this.RC('titleMFACodeOnPhoneSent');\r\n return;\r\n default:\r\n (response.CheckResultMessage || response['ResponseMessage']) && (this.UI.StopMessage(response.CheckResultMessage || response['ResponseMessage']));\r\n this.GoToLogin();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n OnCancel() {\r\n this.GoToLogin();\r\n }\r\n\r\n GoToLogin() {\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language, UserName: this.State.UserName }); });\r\n }\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n OnForgotPassword() {\r\n this.Navigate(['/system/passwordrecovery']);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { BaseDataResponse, CredentialCheckResponse } from './../../../../base/entities/BaseEntities';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, PasswordRecoveryParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\n\r\nclass State extends BaseState {\r\n Stage: number;\r\n UserName: string;\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n Email: string;\r\n Phone: string;\r\n Token: string;\r\n NewPassword1: string;\r\n NewPassword2: string;\r\n UserNameCheckResponse: CredentialCheckResponse;\r\n DeliveryOptions: any[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordrecovery',\r\n templateUrl: './passwordrecovery.component.html',\r\n styleUrls: ['./passwordrecovery.component.scss']\r\n})\r\nexport class PasswordRecoveryComponent extends BasePageComponent{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private languageService: LanguageService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'PasswordRecoveryComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial username\r\n override OnInitState() {\r\n this.State.Stage = 1;\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n //Send the recovery code to the phone/email as specified\r\n //If phone or email are invalid, an error will be returned\r\n //Upon success, move to the next stage\r\n OnSendRecoveryCode() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.DeliveryOption = this.State.DeliveryOption;\r\n params.Address = (this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email ? this.State.Email : this.State.Phone);\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.RecoverPassword(params), false, (response) => {\r\n if (response.IsSuccess) {\r\n this.UI.InfoMessage(this.RC('msgNotificationSentTo').replace('{0}', params.Address ));\r\n this.State.Stage = 3;\r\n } else {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n });\r\n }\r\n\r\n OnCheckUsername() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n\r\n const params = new LoginParams();\r\n params.UserName = this.State.UserName;\r\n this.Do(this.loginEndpoint.CheckUserName(params), false, (response) => {\r\n this.State.UserNameCheckResponse = response.Entity;\r\n\r\n if (!this.State.UserNameCheckResponse.IsExists) {\r\n this.UI.UnexpectedMessage(this.RC('errorUserNameNotFound'));\r\n } else if (!this.State.UserNameCheckResponse.HasEmail && !this.State.UserNameCheckResponse.HasPhone) {\r\n this.UI.UnexpectedMessage(this.RC('errorIsNotExistsPhoneAndEmail'));\r\n } else {\r\n if (!this.State.UserNameCheckResponse.HasPhone)\r\n this.State.DeliveryOptions = this.State.DeliveryOptions.filter(x => x.Value == EnumNotificationDeliveryOptions.Email);\r\n if (!this.State.UserNameCheckResponse.HasEmail)\r\n this.State.DeliveryOptions = this.State.DeliveryOptions.filter(x => x.Value != EnumNotificationDeliveryOptions.Email);\r\n this.State.Stage = 2;\r\n this.State.DeliveryOption = this.State.DeliveryOptions?.length > 0 ? this.State.DeliveryOptions[0].Value : null;\r\n }\r\n });\r\n }\r\n\r\n //Verify the recovery token\r\n //Upon success, move to the next screen\r\n OnVerifyRecoveryToken() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyRecoveryToken(params), false, () => this.State.Stage = 4);\r\n }\r\n\r\n //Go back to previous stage\r\n OnResend() {\r\n this.InitState();\r\n this.State.Stage = 1;\r\n }\r\n\r\n OnCancel() {\r\n this.Navigate(['system/login']);\r\n }\r\n\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n const params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params),\r\n false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePasswordByToken(params), false, () => {\r\n this.UI.InfoMessage(RC('titlePasswordChanged'));\r\n // this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => {\r\n this.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n });\r\n });\r\n }\r\n\r\n GetAdditionalTitle() {\r\n switch (this.State.Stage) {\r\n case 1: return this.RC('titleRecoverPassword1');\r\n case 2: return this.RC('titleRecoverPassword2');\r\n case 3: return this.RC('titleRecoverPassword3');\r\n case 4: return this.RC('titleRecoverPassword4');\r\n }\r\n\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, PasswordRecoveryParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n Stage: number;\r\n UserName: string\r\n Token: string;\r\n NewPassword1: string;\r\n NewPassword2: string;\r\n\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordwelcome',\r\n templateUrl: './passwordwelcome.component.html',\r\n styleUrls: ['./passwordwelcome.component.scss']\r\n})\r\nexport class PasswordWelcomeComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordExpiredComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial params\r\n override OnInitState() {\r\n this.State.Stage = 2;\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.Token = this.QueryParams.Token;\r\n\r\n //Set language\r\n if (this.QueryParams.Language != undefined) {\r\n SysGlobals.Language = this.QueryParams.Language;\r\n this.Framework.InitLanguage();\r\n this.Framework.InitializeDevExpress();\r\n }\r\n }\r\n\r\n\r\n //Verify the recovery token\r\n //Upon success, move to the next screen\r\n OnVerifyRecoveryToken() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyRecoveryToken(params), false, () => this.State.Stage = 3);\r\n }\r\n\r\n //Go back to previous stage\r\n OnResend() {\r\n this.InitState();\r\n this.State.Stage = 1;\r\n }\r\n\r\n OnCancel() {\r\n this.Navigate(['system/login']);\r\n }\r\n\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePasswordByToken(params), false, () => {\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n //this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); });\r\n });\r\n }\r\n\r\n GetAdditionalTitle() {\r\n return this.State.Stage === 2 ? this.RC('titleWelcomePassword2') : this.State.Stage === 3 ? this.RC('titleRecoverPassword3') : '';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { SaveCredentialsParams } from './../../../../base/entities/BaseEntities';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport {\r\n BaseState, BaseEntity, BaseEntityResponse, CredentialExternalInfo,\r\n BaseDataResponse, WebAPICredentialInfo, WebAPICredential, WebAPIAllowedIP\r\n} from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumNotificationDeliveryOptions, EnumMFAMethods } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { WelcomeUserDialogComponent } from './welcome-user-dialog/welcome-user-dialog.component';\r\n\r\n\r\nclass State extends BaseState {\r\n Credential: WebAPICredential = new WebAPICredential;\r\n WebAPIAllowedIPs: WebAPIAllowedIP[] = [];\r\n CredentialInfo: CredentialExternalInfo = new CredentialExternalInfo;\r\n IsExists: boolean = false;\r\n IsLockedOut: boolean = false;\r\n IsSupportedUserWelcome: boolean = false;\r\n MFAMethodList: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordmanage',\r\n templateUrl: './passwordmanage.component.html',\r\n styleUrls: ['./passwordmanage.component.scss']\r\n})\r\nexport class PasswordManageComponent extends BasePageComponent{\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild('welcomeUserDialog') welcomeUserDialog: WelcomeUserDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'PasswordManageComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadCredentials();\r\n this.LoadCredentialsInfo();\r\n }\r\n\r\n override OnInitTitle() {\r\n const userName = this.State.CredentialInfo && this.State.CredentialInfo.DisplayUserName;\r\n return userName && `${this.GetDefaultTitle()} - ${userName}`;\r\n }\r\n\r\n LoadCredentials() {\r\n this.Do(this.loginEndpoint.GetCredentialInfo(this.QueryParams.CredentialID, this.QueryParams.Type),\r\n false, (response: BaseDataResponse) => {\r\n this.State.IsExists = true;\r\n if (response.Data) {\r\n this.State.Credential.UserName = response.Data.UserName;\r\n this.State.Credential.Type = response.Data.Type;\r\n this.State.Credential.IsActive = response.Data.IsActive;\r\n this.State.Credential.IsPendingWelcome = response.Data.IsPendingWelcome;\r\n this.State.Credential.MFAMethod = response.Data.MFAMethod;\r\n this.State.Credential.IsRestrictByIP = response.Data.IsRestrictByIP;\r\n this.State.Credential.IsExcludeFromMFA = response.Data.IsExcludeFromMFA;\r\n this.State.IsLockedOut = response.Data.IsLockedOut;\r\n this.State.IsSupportedUserWelcome = response.Data.IsSupportedUserWelcome;\r\n this.State.WebAPIAllowedIPs = response.Data.WebAPIAllowedIPs;\r\n }\r\n }, () => {\r\n this.State.IsExists = false;\r\n this.State.Credential.MFAMethod = EnumMFAMethods.None;\r\n this.OnGenerateRandomPassword();\r\n });\r\n }\r\n\r\n LoadCredentialsInfo() {\r\n this.Do(this.loginEndpoint.GetExternalInfo(this.QueryParams.CredentialID, this.QueryParams.Type),\r\n false, (response: BaseEntityResponse) => {\r\n if (response.Entity) {\r\n this.State.CredentialInfo = response.Entity;\r\n this.NotifyReloadTitle();\r\n if (!this.State.IsExists) {\r\n this.State.Credential.UserName = this.State.CredentialInfo.Email;\r\n this.State.Credential.Type = this.QueryParams.Type;\r\n\r\n if (!this.State.Credential.UserName) {\r\n this.State.Credential.UserName = this.QueryParams.UserName;\r\n }\r\n }\r\n this.OnInitMFAMethodsList();\r\n }\r\n });\r\n }\r\n\r\n OnGenerateRandomPassword() {\r\n this.Do(this.loginEndpoint.GenerateRandomPassword(), false,\r\n (response: BaseDataResponse) => this.State.Credential.Password = response.Data);\r\n }\r\n\r\n OnSaveChanges() {\r\n if (!this.IsValid()) {\r\n return;\r\n }\r\n\r\n this.ValidateValidationGroup(this.validationGroup).then((isValid) => {\r\n if (isValid) {\r\n const params = new SaveCredentialsParams();\r\n params.CredentialID = this.QueryParams.CredentialID;\r\n params.UserName = this.State.Credential.UserName;\r\n params.Password = this.State.Credential.Password;\r\n params.Type = this.State.Credential.Type;\r\n params.MFAMethod = this.State.Credential.MFAMethod;\r\n params.IsRestrictByIP = this.State.Credential.IsRestrictByIP;\r\n params.IsExcludeFromMFA = this.State.Credential.IsExcludeFromMFA;\r\n params.WebAPIAllowedIPs = this.State.WebAPIAllowedIPs;\r\n params.IsActive = this.State.Credential.IsActive;\r\n\r\n this.Do(this.loginEndpoint.SaveCredentials(params), true, () => {\r\n if (!this.State.IsExists) {\r\n this.LoadCredentials();\r\n return;\r\n }\r\n this.NotifyEntitySaved(this.State.Credential, WebAPICredential);\r\n const params = this.QueryParams.ReturnUrlParams ? JSON.parse(this.QueryParams.ReturnUrlParams) : undefined;\r\n this.QueryParams.ReturnUrl\r\n ? this.A.Navigator.Navigate([this.QueryParams.ReturnUrl], params)\r\n : this.A.RouteHistoryService.GoBack();\r\n });\r\n }\r\n });\r\n }\r\n\r\n OnMFAMethodChanged() {\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.None) {\r\n this.State.Credential.IsExcludeFromMFA = false;\r\n } else {\r\n this.State.Credential.IsRestrictByIP = false;\r\n }\r\n }\r\n\r\n OnIsRestrictByIPChanged() {\r\n if (!this.State.Credential.IsRestrictByIP) {\r\n this.State.Credential.IsExcludeFromMFA = false;\r\n }\r\n }\r\n\r\n IsMFAMethodNone() {\r\n return this.State.Credential.MFAMethod === EnumMFAMethods.None;\r\n }\r\n\r\n OnIPEditorPreparing(e) {\r\n if (e.dataField === 'IPRangeStart') {\r\n const defaultValueChangeHandler = e.editorOptions.onValueChanged;\r\n\r\n e.editorOptions.onValueChanged = (args) => {\r\n defaultValueChangeHandler(args);\r\n\r\n if (!e.row.data.IPRangeEnd) {\r\n e.component.cellValue(e.row.rowIndex, 'IPRangeEnd', e.row.data.IPRangeStart);\r\n }\r\n };\r\n }\r\n }\r\n\r\n OnUnlockUser() {\r\n this.State.IsLockedOut = false;\r\n this.Do(this.loginEndpoint.UnlockCredentials(this.QueryParams.CredentialID), true);\r\n }\r\n\r\n OnWelcomeUser() {\r\n this.welcomeUserDialog.CredentialID = this.QueryParams.CredentialID;\r\n this.welcomeUserDialog.CredentialInfo = this.State.CredentialInfo;\r\n this.welcomeUserDialog.ShowDialogShort(() => {\r\n this.ClosePage();\r\n });\r\n }\r\n\r\n private IsValid() {\r\n if (this.State.Credential.IsRestrictByIP || this.State.Credential.IsExcludeFromMFA) {\r\n if (this.State.WebAPIAllowedIPs.length === 0) {\r\n this.UI.StopMessage(this.RC('msgIPRangesIsEmpty'));\r\n\r\n return false;\r\n } else {\r\n if (this.State.WebAPIAllowedIPs.some(x => Utils.IsEmpty(x.IPRangeStart) && Utils.IsEmpty(x.IPRangeEnd))) {\r\n this.UI.StopMessage(this.RC('msgIPRangeIsEmpty'));\r\n\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private OnInitMFAMethodsList() {\r\n const isEmailChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n const isSMSChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n const isWhatsAppChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n\r\n this.State.MFAMethodList = this.LIST('MFAMethods').filter(x => {\r\n if (x.Value === EnumMFAMethods.None) return true;\r\n\r\n // Check MFAMethod Email\r\n if (x.Value === EnumMFAMethods.Email) {\r\n // If Email is filled then add MFAMethod to the list\r\n if (this.State.CredentialInfo.Email && isEmailChannelActive) return true;\r\n // If old MFAMethod is Email, set it as disabled and add to the list\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.Email) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n // Check MFAMethod SMS\r\n if (x.Value === EnumMFAMethods.SMS) {\r\n // If Phone is filled then add MFAMethod to the list\r\n if (this.State.CredentialInfo.Phone && isSMSChannelActive) return true;\r\n // If old MFAMethod is SMS, set it as disabled and add to the list\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.SMS) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n if (x.Value === EnumMFAMethods.WhatsApp) {\r\n if (this.State.CredentialInfo.Phone && isWhatsAppChannelActive) return true;\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.WhatsApp) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n //GetPasswordTooltipLabel(): string {\r\n // return this.RC('msgPasswordComplexityRequirement').replace('{0}', this.SystemOption(EnumSystemOptions.PasswordComplexityLen))\r\n // .replace('{1}', this.SystemOption(EnumSystemOptions.PasswordComplexityMinDigits))\r\n // .replace('{2}', this.SystemOption(EnumSystemOptions.PasswordComplexityMinChars));\r\n //}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
{{'lblCredentialsNotExist' | RC}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{'lblPendingWelcome' | RC}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, Output, EventEmitter } from \"@angular/core\";\r\nimport { AppConfigService } from '../../../../configuration/app.config.service';\r\n\r\n@Component({\r\n selector: 'm4u-captcha',\r\n templateUrl: './captcha.component.html',\r\n styleUrls: ['./captcha.component.scss']\r\n})\r\nexport class CaptchaComponent {\r\n @Output() OnResolved = new EventEmitter();\r\n // setup re-captcha -> https://www.google.com/recaptcha/admin/create\r\n SiteKey = this.appConfigService.M4UConfig.captchaKey;\r\n\r\n constructor(private appConfigService: AppConfigService) { }\r\n\r\n OnCaptchaResolved(e) {\r\n this.OnResolved.emit(e);\r\n }\r\n}","export default \"\";","import { Component, Output, EventEmitter, Input, ViewChild } from '@angular/core';\r\nimport { BaseState, AttachedFile, Media } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { FileBoxDialogComponent } from '../../../dialogs/filebox-dialog/fileboxdialog.component';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { FileSizePipe } from '../../../directives/Pipes';\r\nimport { PhotoBoxDialogComponent } from '@ui/dialogs/photobox-dialog/photoboxdialog.component';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n Language: string;\r\n Files: AttachedFile[];\r\n DragOverCount = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-attachedfiles',\r\n templateUrl: './attached-files.component.html',\r\n styleUrls: ['./attached-files.component.scss'],\r\n providers: [FileSizePipe]\r\n})\r\nexport class AttachedFilesComponent extends BaseComponent {\r\n @Input() set Files(value: AttachedFile[]) {\r\n this.State.Files = value;\r\n this.ExtendFileInfo();\r\n }\r\n\r\n @Input() HideSelectingFileOnMobile = false;\r\n @Input() AllowOnlyImages = false;\r\n @Input() AllowDownload = true;\r\n @Input() AllowUpload = true;\r\n @Input() Disabled: boolean;\r\n @Input() Accept: string;\r\n @Output() FilesChanged = new EventEmitter();\r\n @Output() DownloadItem = new EventEmitter();\r\n @Output() DeleteItem = new EventEmitter();\r\n @Input() MaxFileSize: number = 20 * 1024 * 1024;\r\n @Input() MaxFileSizeMessage = 'msgFileSizeRestriction';\r\n @Input() MaxFileSizeErrorMessage = 'errorMaxSizeUploadError';\r\n @Input() NotImageErrorErrorMessage = 'errorOnlyImageAllowed';\r\n @Input() AllowDragAndDrop: boolean;\r\n @Input() AllowMakePhoto: boolean;\r\n @Input() IsAutoSavePhotoAfterTake = false;\r\n @Input() IsShowExtension = true;\r\n\r\n @ViewChild(FileBoxDialogComponent) fileBoxDialog: FileBoxDialogComponent;\r\n @ViewChild(PhotoBoxDialogComponent) photoBoxDialog: PhotoBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService,\r\n private fileSizePipe: FileSizePipe) {\r\n super(A, 'AttachedFilesComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Language = SysGlobals.Language;\r\n this.State.Files = this.State.Files || [];\r\n }\r\n\r\n OnDownloadItem(file: AttachedFile) {\r\n if (this.AllowDownload) {\r\n this.DownloadItem.emit(file);\r\n }\r\n }\r\n\r\n OnDeleteItem(file: AttachedFile) {\r\n const idx = this.State.Files.findIndex(f => f.Name === file.Name);\r\n if (idx !== -1) {\r\n this.State.Files.splice(idx, 1);\r\n this.DeleteItem.emit(file);\r\n this.FilesChanged.emit(this.State.Files);\r\n }\r\n }\r\n\r\n OnAddFilesToUpload() {\r\n this.fileBoxDialog.ShowDialog((list: File[]) => {\r\n if (list && list.length) {\r\n this.OnChangeUpload(list);\r\n }\r\n });\r\n }\r\n\r\n OnChangeUpload(files: File[]) {\r\n let maxSizeError = false;\r\n let notImageError = false;\r\n\r\n let _files = [];\r\n if (this.Accept) {\r\n const acceptFileExtensions = this.Accept.split(';').join(',').split(',').map(x => x.trim().toLowerCase().split('.').pop());\r\n for (const file of files) {\r\n const fileExtension = file.name.trim().toLowerCase().split('.').pop();\r\n if (acceptFileExtensions.find(a => a === fileExtension) != null) _files.push(file);\r\n }\r\n } else {\r\n _files = files;\r\n }\r\n\r\n for (const file of _files) {\r\n const newFiles = this.State.Files.filter(f => !!f.NewFile);\r\n if (newFiles.findIndex(fu => fu.NewFile.name === file.name) === -1) {\r\n\r\n if (this.AllowOnlyImages && !this.IsImage(file.type)) {\r\n notImageError = true;\r\n } else if (file.size > this.MaxFileSize) {\r\n maxSizeError = true;\r\n } else {\r\n const newFile = {\r\n Name: file.name,\r\n NewFile: file,\r\n Size: file.size,\r\n IconStyle: 'mdi mdi-file-outline',\r\n IsDisplayedAsImage: this.IsImage(file.type)\r\n } as AttachedFile;\r\n this.State.Files.push(newFile);\r\n }\r\n }\r\n }\r\n\r\n if (notImageError) this.UI.StopMessage(RC(this.NotImageErrorErrorMessage));\r\n if (maxSizeError) this.UI.StopMessage(RC(this.MaxFileSizeErrorMessage, this.fileSizePipe.transform(this.MaxFileSize)));\r\n\r\n this.FilesChanged.emit(this.State.Files);\r\n }\r\n\r\n OnDropFiles(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount--;\r\n this.OnChangeUpload(e.dataTransfer.files);\r\n }\r\n\r\n OnDragLeave(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount--;\r\n }\r\n\r\n OnDragEnter(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount++;\r\n }\r\n\r\n OnDragOver(e) {\r\n this.PreventDefault(e);\r\n }\r\n\r\n IsDragOver(): boolean {\r\n return this.State.DragOverCount > 0 ? true : false;\r\n }\r\n\r\n OnShowPhotoBox() {\r\n this.photoBoxDialog.ShowDialogShort((photos: Media[]) => {\r\n if (photos) {\r\n let photoNumber = 0;\r\n this.OnChangeUpload(photos.map((photo) => this.ConvertBase64ToImageJpeg(photo.ImageBase64, photoNumber++)));\r\n }\r\n });\r\n }\r\n\r\n private IsImage(fileType: string): boolean {\r\n return fileType.startsWith('image');\r\n }\r\n\r\n private ExtendFileInfo() {\r\n if (this.State.Files) {\r\n this.State.Files.forEach(f => {\r\n f.IconStyle = this.GetIconStyle(f);\r\n });\r\n }\r\n }\r\n\r\n private GetIconStyle(file: AttachedFile): string {\r\n return Utils.GetIconStyle(file.Extension);\r\n }\r\n\r\n private PreventDefault(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n private ConvertBase64ToImageJpeg(base64: string, imageNumber: number) {\r\n const photoInfo = base64.split(';');\r\n const decodedData = window.atob(photoInfo[1].substring(photoInfo[1].indexOf(',') + 1));\r\n let dataLength = decodedData.length;\r\n const u8arr = new Uint8Array(dataLength);\r\n\r\n while (dataLength--) {\r\n u8arr[dataLength] = decodedData.charCodeAt(dataLength);\r\n }\r\n\r\n const name = `Photo_${this.GetStringDateNow()}.jpg`;\r\n\r\n return new File([u8arr], name, { type: 'image/jpeg' });\r\n }\r\n\r\n private GetStringDateNow() {\r\n const now = new Date();\r\n\r\n // eslint-disable-next-line max-len\r\n return `${this.FormatDatePart(now.getDate())}${this.FormatDatePart(now.getMonth() + 1)}${now.getFullYear()} _${this.FormatDatePart(now.getHours())}${this.FormatDatePart(now.getMinutes())}${this.FormatDatePart(now.getSeconds())}`;\r\n }\r\n\r\n private FormatDatePart(part: number) {\r\n return part.toString().padStart(2, '0');\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n {{'lblDragAndDrop' | RC}}\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{(MaxFileSizeMessage | RC:THIS).replace('{0}', (MaxFileSize | fileSize))}}\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\";","import { BaseState, AttachedFile } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ImageBoxDialogComponent } from '@ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n ImageSource: string;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-filecard',\r\n templateUrl: './file-card.component.html',\r\n styleUrls: ['./file-card.component.scss']\r\n})\r\nexport class FileCardComponent extends BaseComponent {\r\n @Input() Entity: AttachedFile;\r\n @Input() AllowDownload = true;\r\n @Input() Disabled = false;\r\n @Input() ShowDeleteOptionForcely = false;\r\n @Input() ShowDownloadOptionForcely = false;\r\n @Output() DeleteItem = new EventEmitter();\r\n @Output() DownloadItem = new EventEmitter();\r\n @Input() IsShowExtension = true;\r\n\r\n @ViewChild(ImageBoxDialogComponent) imageDialog: ImageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FileCardComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.Entity.IsDisplayedAsImage) {\r\n Utils.LoadFilesBody([this.Entity.NewFile], (uploadFiles) => {\r\n const file = uploadFiles[0];\r\n this.State.ImageSource = Utils.GetImageSource(file.Data, this.Entity.NewFile.type);\r\n });\r\n }\r\n }\r\n\r\n OnImageClick() {\r\n if (!this.Entity?.IsDisplayedAsImage) {\r\n return;\r\n }\r\n\r\n this.imageDialog.ImageSource = this.State.ImageSource;\r\n this.imageDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n OnCloseClick() {\r\n this.imageDialog.CloseDialogWithSuccess();\r\n }\r\n\r\n OnDeleteItem() {\r\n this.DeleteItem.emit(this.Entity);\r\n }\r\n\r\n OnDownloadItem() {\r\n this.DownloadItem.emit(this.Entity);\r\n }\r\n\r\n OnClose() {\r\n this.NavigateBack();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{Entity.Name + (IsShowExtension ? Entity.Extension : '')}}\\r\\n
\\r\\n
\\r\\n
{{Entity.Size | fileSize}}
\\r\\n
|
\\r\\n
{{ Entity.Date | formatDate }}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { BaseState } from \"@base/entities/BaseEntities\";\r\nimport { BaseComponent } from \"@base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@base/component/ServiceBag\";\r\n\r\n/**\r\n * Example of usage:\r\n * \r\n */\r\n@Component({\r\n selector: 'm4u-search',\r\n templateUrl: './search.component.html',\r\n styleUrls: ['./search.component.scss']\r\n})\r\nexport class M4USearchComponent extends BaseComponent\r\n{\r\n @Input() SearchText: string = '';\r\n @Input() Placeholder: string = this.RC('lblSearch');\r\n @Input() DebounceTime: number = 500;\r\n @Input() MinSymbols: number = 0;\r\n @Input() Min: number = 0;\r\n @Input() Max: number = 0;\r\n @Output() OnSearch = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"M4USearchComponent\", BaseState);\r\n }\r\n\r\n Search(force: boolean) {\r\n\r\n if (this.SearchText == null || this.SearchText == '') {\r\n this.SearchText = '';\r\n this.OnSearch.emit('');\r\n return;\r\n }\r\n\r\n if (this.MinSymbols > 0 && !force) {\r\n if (this.SearchText && this.SearchText.length >= this.MinSymbols) {\r\n this.OnSearch.emit(this.SearchText);\r\n }\r\n return;\r\n }\r\n\r\n this.OnSearch.emit(this.SearchText);\r\n }\r\n\r\n Clear(event?: any) {\r\n if (!event || !event.value) {\r\n this.SearchText = '';\r\n this.Search(true);\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'm4u-loading-animation',\r\n templateUrl: './loading-animation.component.html',\r\n styleUrls: ['./loading-animation.component.scss']\r\n})\r\nexport class M4ULoadingAnimationComponent {\r\n constructor() { }\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Injectable, Type } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class InjectedComponentsBaseService {\r\n\r\n GetComponents(destination: string): Type[] {\r\n return [];\r\n }\r\n}","import { Component, ComponentFactoryResolver, Input, OnInit, ViewContainerRef } from '@angular/core';\r\nimport { InjectedComponentsBaseService } from '@core/framework/injected-components-base.service';\r\n\r\n@Component({\r\n selector: 'm4u-injected-components',\r\n templateUrl: './injected-components.component.html'\r\n})\r\nexport class InjectedComponentsComponent implements OnInit {\r\n @Input() Destination: string;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef,\r\n private service: InjectedComponentsBaseService) { }\r\n\r\n ngOnInit() {\r\n this.loadComponents();\r\n }\r\n\r\n loadComponents() {\r\n (this.service.GetComponents(this.Destination) || []).forEach((buttonComponent) => {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(buttonComponent);\r\n componentFactory.inputs\r\n this.viewContainerRef.createComponent(componentFactory);\r\n });\r\n }\r\n}\r\n","export default \"\";","import { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseState, LoginParams, BaseResponse, BaseDataResponse } from '@base/entities/BaseEntities';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport {\r\n EnumLanguages, EnumLoginExtensionLinkType, EnumLoginSecureKeyTypes,\r\n EnumNotificationDeliveryOptions\r\n} from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { LoginExtensionLink } from '@base/classes/BaseClasses';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\n\r\nclass State extends BaseState {\r\n IsSupportedLoginByPassword: boolean;\r\n IsSaveCredentials: boolean;\r\n IsRequireTaxNumberForOTP: boolean;\r\n ShowPasswordRecoveryLink: boolean;\r\n LoginExtensionLinks$: Observable;\r\n ReturnUrl: string;\r\n ReturnUrlParams: string;\r\n Stage: number;\r\n DeliveryOptions: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-login-by-otp',\r\n templateUrl: './login-by-otp.component.html',\r\n styleUrls: ['./login-by-otp.component.scss']\r\n})\r\nexport class LoginByOtpComponent extends BasePageComponent {\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private loginEndpoint: LoginEndpoint,\r\n private languageService: LanguageService) {\r\n super(A, 'LoginByOtpComponent', LoginParams, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n\r\n //If authentication is set to OAuth - redirec to a separate page\r\n if (this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOAuth)) {\r\n this.Navigate(['/system/login-oauth'], { Language: SysGlobals.Language, ReturnUrl: this.State.ReturnUrl });\r\n return;\r\n }\r\n\r\n //If not supported, go to main login page\r\n if (this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP) == false) {\r\n this.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n return;\r\n }\r\n\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n this.State.IsSupportedLoginByPassword = this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByPassword);\r\n this.State.IsRequireTaxNumberForOTP = this.SystemOptionFlag(EnumSystemOptions.IsRequireTaxNumberForOTP);\r\n this.Entity.DeliveryOption = this.State.DeliveryOptions[0]?.Value;\r\n this.State.ReturnUrl = this.A.Navigator.FixDeploymentLocation(this.State.ReturnUrl);\r\n this.State.ReturnUrlParams = this.QueryParams.ReturnUrlParams;\r\n this.State.Stage = 1;\r\n\r\n this.LoadExtension();\r\n\r\n this._subscriptions.push(this.languageService.Language$.subscribe(language => {\r\n if (this.Entity.Language === language) return;\r\n\r\n this.Entity.Language = language;\r\n\r\n this.A.Navigator.Navigate(['/system/login-otp'], { Language: SysGlobals.Language });\r\n setTimeout(() => this.A.Navigator.ReloadApplication(), 500);\r\n }));\r\n }\r\n\r\n override OnInitEntity() {\r\n //Take default language from URL to allow presetting it\r\n if (this.QueryParams.Language != undefined) {\r\n this.Entity.Language = this.QueryParams.Language;\r\n } else {\r\n this.Entity.Language = this.A.AppConfigService.M4UConfig.defaultLanguage;\r\n }\r\n this.languageService.SetLanguage(this.Entity.Language);\r\n\r\n //Take sure if was passed in\r\n this.Entity.UserName = this.QueryParams.UserName;\r\n }\r\n\r\n OnExtensionLinkClick(link: LoginExtensionLink) {\r\n if (link.Type === EnumLoginExtensionLinkType.Route) this.Navigate([link.Link]);\r\n }\r\n\r\n OnPasswordRecovery() {\r\n this.Navigate(['/system/passwordrecovery'], { UserName: this.Entity.UserName });\r\n }\r\n\r\n override OnSubmitPage() {\r\n if (this.State.Stage == 1) this.OnSendOtp();\r\n else if (this.State.Stage == 2) this.OnLogin();\r\n }\r\n\r\n // Send otp\r\n OnSendOtp() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.Do(this.loginEndpoint.SendOtp(this.Entity), false, (response) => {\r\n if (response.IsSuccess) {\r\n this.UI.InfoMessage(this.RC('msgNotificationSentTo').replace('{0}', this.Entity.UserName));\r\n this.State.Stage = 2;\r\n } else {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n });\r\n }\r\n\r\n // Perform the login\r\n OnLogin() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.Otp;\r\n this.loginService.DoLogin(this.Entity, false, this.State.IsSaveCredentials, () => {\r\n this.OnAfterInit();\r\n })\r\n .subscribe(() => { });\r\n }\r\n\r\n OnResend() {\r\n this.State.Stage = 1;\r\n }\r\n\r\n GoToLogin() {\r\n if (this.State.IsSupportedLoginByPassword) this.Navigate(['/system/login']);\r\n }\r\n\r\n private LoadExtension() {\r\n this.State.LoginExtensionLinks$ = this.A.AppConfigService.AppConfig.OnGetAppLoginExtensionLinks();\r\n }\r\n\r\n private OnAfterInit() {\r\n if (this.State.ReturnUrl) {\r\n const params = this.State.ReturnUrlParams ? JSON.parse(this.State.ReturnUrlParams) : undefined;\r\n this.A.Navigator.Navigate([this.State.ReturnUrl], params);\r\n return;\r\n }\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('$$AppTitles.LoginAppName', moduleName);\r\n }\r\n\r\n GetAppCompanyName() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('$$AppTitles.LoginCompanyName', moduleName);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'btnRecoverPassword' | RCX}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BaseEntity, BaseState, NotificationServer } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationServerEndpoint } from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server-list',\r\n templateUrl: './notification-server-list.component.html',\r\n styleUrls: ['./notification-server-list.component.scss']\r\n})\r\nexport class NotificationServerListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationServerEndpoint: NotificationServerEndpoint) {\r\n super(A, 'NotificationServerListComponent', BaseEntity, BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === NotificationServer) this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['NotificationServers'] = new BaseDataStoreCRUDServer(this.notificationServerEndpoint);\r\n }\r\n\r\n OnNavigate() {\r\n this.Navigate(['/pages/general/notification-server/new']);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, ViewChild} from '@angular/core';\r\nimport {NotificationServerEndpoint} from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport {BaseResponse, BaseState, NotificationServer, NotificationTestParams} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagService, ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {BasePageCRUDComponent} from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport {EnumMessageBoxTypes, EnumPageDisplayModes} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport {ContextMenuElement} from '@base/classes/BaseClasses';\r\nimport {NotificationTestDialogComponent, State} from '@ui/notifications/notification-test-dialog/notification-test-dialog.component';\r\nimport {MessageBoxDialogComponent} from '@ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server',\r\n templateUrl: './notification-server.component.html'\r\n})\r\nexport class NotificationServerComponent extends BasePageCRUDComponent\r\n{\r\n @ViewChild('dialog') dialog: NotificationTestDialogComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: NotificationServerEndpoint, private notificationServerEndpoint: NotificationServerEndpoint)\r\n {\r\n super(A, 'NotificationServerComponent', NotificationServer, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) { return undefined; }\r\n\r\n return [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n }\r\n\r\n override OnDelete(): void {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgDeleteNotificationServerQuestion');\r\n this.messageBox.ShowDialogShort(() => { this.DeleteEntity(); });\r\n }\r\n\r\n OnTestNotification() {\r\n this.dialog.ShowDialogShort((state: State) => {\r\n const params = new NotificationTestParams;\r\n params.NotificationServerID = this.Entity.EntryID;\r\n params.DeliveryOption = state.DeliveryOption;\r\n params.FromAddress = state.FromAddress;\r\n params.Address = state.Address;\r\n\r\n this.Do(this.notificationServerEndpoint.TestNotificationServer(params), true, undefined,\r\n (response: BaseResponse) => this.A.UI.StopMessage(this.RC('lblNotificationServerWrong')));\r\n });\r\n }\r\n\r\n OnPredefinedSmtpServerSelected(e: any) {\r\n this.Entity.SMTPServer = e.itemData.SMTPServer;\r\n this.Entity.SMTPPort = e.itemData.SMTPPort;\r\n this.Entity.SMTPUseSSL = e.itemData.SMTPUseSSL;\r\n }\r\n\r\n OnPredefinedSmsServerSelected(e: any) {\r\n this.Entity.SMSEndpoint = e.itemData.SMSEndpoint;\r\n this.Entity.SMSToken = e.itemData.SMSToken;\r\n this.Entity.SMSEndPointIsInforU = e.itemData.SMSEndPointIsInforU;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntity, BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-list',\r\n templateUrl: './notification-template-list.component.html',\r\n styleUrls: ['./notification-template-list.component.scss']\r\n})\r\nexport class NotificationTemplateListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint) {\r\n super(A, 'NotificationTemplateListComponent', BaseEntity, BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === NotificationTemplate) this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['NotificationTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.notificationTemplateEndpoint.GetListViews());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { Component, ViewChild } from '@angular/core';\r\n\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-mid-store',\r\n templateUrl: './mid-store.component.html'\r\n})\r\nexport class MidStoreComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private systemEndpoint: SystemEndpoint) {\r\n super(A, ' MidStoreComponent', BaseEntity, BaseState);\r\n }\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n\r\n override OnInitComponentFinishedInternal() {\r\n this.inputBoxDialog.ShowDialogShort((value: string) => {\r\n this.Do(this.systemEndpoint.StoreMID(value), false, () => { this.Navigate(['/system/login'], { Language: SysGlobals.Language })})\r\n }, () => this.Navigate(['/system/login'], { Language: SysGlobals.Language }));\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport {BaseState} from '@base/entities/BaseEntities';\r\nimport {BaseComponent} from '@base/component/BaseComponent';\r\nimport {ServiceBagService} from '@base/component/ServiceBag';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\nclass State extends BaseState {\r\n Value: number = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-buttons',\r\n templateUrl: './demo-buttons.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoButtonsComponent extends BaseComponent implements IBottomSheetComponent {\r\n Context: BottomSheetDialogComponent;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoButtonsComponent', State);\r\n }\r\n \r\n\r\n public OnButtonClicked() {\r\n this.State.Value++;\r\n }\r\n}\r\n","export default \"\\r\\n

Buttons

\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n

(OnClick) - specifies callback function on click. Current\\r\\n value: {{State.Value}}.

\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

Mode - changes initial styles.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

Disabled - specifies if the button is clickable.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

Type - changes background color for solid buttons.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n

Icon - add icon in button. Could be used with or without text.\\r\\n

\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

IsRound - specifies if the button is rounded.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

Size - changes height and width.

\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-demo-layout',\r\n templateUrl: './demo-layout.component.html',\r\n styleUrls: ['./demo-layout.component.scss']\r\n})\r\nexport class DemoLayoutComponent extends BaseComponent {\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoLayoutComponent', State);\r\n }\r\n}","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","import {Component} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport DataSource from \"devextreme/data/data_source\";\r\nimport ArrayStore from \"devextreme/data/array_store\";\r\n\r\nclass State extends BaseState {\r\n SelectOptions: any[] = [];\r\n SelectGroupedOptions: DataSource;\r\n SelectedOption: number;\r\n SelectedDataItems: string[] = [];\r\n Number: number;\r\n IsTextAreaOutlined: boolean = false;\r\n RadioGroupItems: any[] = [];\r\n ButtonGroupOptions: any[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-editors',\r\n templateUrl: './demo-editors.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoEditorsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoEditorsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Number = 47.853;\r\n\r\n this.State.SelectOptions = this.GetSelectOptions();\r\n this.State.RadioGroupItems = this.GetRadioGroupItems();\r\n this.State.ButtonGroupOptions = this.GetButtonGroupOptions();\r\n this.State.SelectGroupedOptions = this.GetSelectGroupOptions();\r\n }\r\n\r\n public GetSelectedDataItems(): string {\r\n return this.State.SelectedDataItems.join(', ');\r\n }\r\n\r\n private GetButtonGroupOptions(): any[] {\r\n return [\r\n {\r\n text: 'Option 1',\r\n value: 'Value 1'\r\n },\r\n {\r\n text: 'Option 2',\r\n value: 'Value 2'\r\n },\r\n {\r\n text: 'Option 3',\r\n value: 'Value 3'\r\n }\r\n ];\r\n }\r\n\r\n private GetRadioGroupItems(): any[] {\r\n return [\r\n {\r\n Text: 'Option 1',\r\n Value: 'Value 1'\r\n },\r\n {\r\n Text: 'Option 2',\r\n Value: 'Value 2'\r\n },\r\n {\r\n Text: 'Option 3',\r\n Value: 'Value 3'\r\n }\r\n ]\r\n }\r\n\r\n private GetSelectOptions(): any[] {\r\n return [\r\n {\r\n Name: \"Option 1\",\r\n ExtraField: \"Extra Field 1\",\r\n EntryID: 1\r\n },\r\n {\r\n Name: \"Option 2\",\r\n ExtraField: \"Extra Field 2\",\r\n EntryID: 2\r\n },\r\n {\r\n Name: \"Option 3\",\r\n ExtraField: \"Extra Field 3\",\r\n EntryID: 3\r\n }\r\n ];\r\n }\r\n\r\n private GetSelectGroupOptions(): DataSource {\r\n return new DataSource({\r\n store: new ArrayStore({\r\n data: [\r\n {\r\n Name: \"Option 1\",\r\n ExtraField: \"Extra Field 1\",\r\n Group: \"Group 1\",\r\n EntryID: 1\r\n },\r\n {\r\n Name: \"Option 2\",\r\n ExtraField: \"Extra Field 2\",\r\n Group: \"Group 1\",\r\n EntryID: 2\r\n },\r\n {\r\n Name: \"Option 3\",\r\n ExtraField: \"Extra Field 3\",\r\n Group: \"Group 2\",\r\n EntryID: 3\r\n },\r\n {\r\n Name: \"Option 4\",\r\n ExtraField: \"Extra Field 4\",\r\n Group: \"Group 2\",\r\n EntryID: 4\r\n }],\r\n key: \"EntryID\"\r\n }),\r\n group: 'Group'\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n

Editors

\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n

dx-radio-group - represents group of radio buttons with single\\r\\n selection.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

dx-button-group - represents group of buttons with single\\r\\n selection.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n

dx-text-box - represents field for entering text.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

dx-text-box as link. Use field-link directive to get this

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n

dx-text-area - represents field for entering long text.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n

dx-select-box - field with single selection. Current value:\\r\\n {{State.SelectedOption}}.

\\r\\n\\r\\n

configEntitySource - sets for element displayExpr to Name and valueExpr to EntryId.\\r\\n *This directive could be applied only to dx-select-box, dx-tag-box and dxo-lookup.

\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n

Select with configEntitySource directive.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n

Simple outlined select with clear button.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n

Select with grouping by field.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n

Select with search.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n

Select with search by display name, value and extra\\r\\n field.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

dx-tag-box - field with multiple selection.

\\r\\n

0\\\">Current values:\\r\\n {{GetSelectedDataItems()}}

\\r\\n\\r\\n \\r\\n \\r\\n

dx-tag-box with selection controls and search.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n

dx-tag-box with grouped options.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n

Simple dx-tag-box with configEntitySource.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n

dx-number-box - represents field for entering numbers.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n

All formats that could be applied to dx-number-box.

\\r\\n

*All formats are loaded on app start into CompanyInfo entity in frameworkService

\\r\\n \\r\\n \\r\\n

formatSum - configures input to format a number as sum.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

formatPrice - configures input to format a number as price.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

formatQuantity - configures input to format a number as quantity.

\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n

formatPercent - configures input to format a number as a percentage.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

formatRate - configures input to format a number as rate.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

formatGeneral - configures input to format a number as general.

\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n

dx-date-box - field for selecting date.

\\r\\n \\r\\n \\r\\n

Simple dx-date-box.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

configMonthYear - directive that enables selection of month and\\r\\n year only.

\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n

configYear - directive that enables selection of year only.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

configTime - directive that enables selection of time.

\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-demo-layouts',\r\n templateUrl: './demo-layouts.component.html',\r\n styleUrls: ['./demo-layouts.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoLayoutsComponent {\r\n\r\n constructor() {\r\n }\r\n}\r\n","export default \"\\r\\n

Layouts

\\r\\n\\r\\n

For building forms you can use m4u-column, m4u-row\\r\\n and m4u-pagebuttons.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

For aligning elements to center vertically in row you can use combination of\\r\\n m4u-row\\r\\n with class\\r\\n align-center.

\\r\\n\\r\\n
\\r\\n \\r\\n

Some text

\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

For aligning elements to center vertically in column you can combination of\\r\\n m4u-column\\r\\n with class\\r\\n align-center.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

For creating narrow m4u-column, you need to add class small to it.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\n\r\nclass State extends BaseState {\r\n Types: any[];\r\n Styles: any[];\r\n SelectedType: 'default' | 'outlined' = 'outlined';\r\n SelectedStyle: 'light' | 'dark' = 'light';\r\n IsCollapsable: boolean = false;\r\n WithShadow: boolean = true;\r\n WithTitleAndIcon: boolean = true;\r\n WithCustomIcon: boolean = false;\r\n IsHeaderLink: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-sections',\r\n templateUrl: './demo-sections.component.html',\r\n styleUrls: ['./demo-sections.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSectionsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoSectionsComponent', State);\r\n }\r\n \r\n protected override OnInitComponent() {\r\n this.State.Types = [\r\n {\r\n Text: \"Default\",\r\n Value: \"default\"\r\n },\r\n {\r\n Text: \"Outlined\",\r\n Value: \"outlined\"\r\n }\r\n ];\r\n \r\n this.State.Styles = [\r\n {\r\n Text: \"Light\",\r\n Value: \"light\"\r\n },\r\n {\r\n Text: \"Dark\",\r\n Value: \"dark\"\r\n }\r\n ];\r\n }\r\n\r\n GetSectionMarkup() : string {\r\n let result = ''\r\n }\r\n\r\n OnHeaderClick(e) {\r\n console.log(e);\r\n }\r\n}\r\n","export default \"

Sections

\\r\\n\\r\\n

m4u-section - represents wrapper for form with fields.

\\r\\n

Your result markup {{GetSectionMarkup()}}.

\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Menu = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-cards',\r\n templateUrl: './demo-cards.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoCardsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoCardsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n\r\n this.State.Menu = [\r\n {\r\n label: 'Edit',\r\n icon: 'dx-icon dx-edit',\r\n command: () => {\r\n console.log('edit clicked');\r\n }\r\n },\r\n {\r\n label: 'Delete',\r\n icon: 'dx-icon dx-trash',\r\n command: () => {\r\n console.log('delete clicked')\r\n }\r\n }\r\n ];\r\n }\r\n}\r\n","export default \"

Cards

\\r\\n\\r\\n\\r\\n \\r\\n

Card without Menu and Title.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Card with Menu and without Title.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Card with Title and Menu.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n

Card with horizontal m4u-fielddetail and Icon.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Card with horizontal m4u-fielddetail, Icon and hidden label.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Card with horizontal m4u-fielddetail, Icon and ValueAlignment=\\\"end\\\".

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n

Card with vertical m4u-fielddetail.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n

Card with expand-card.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import {Component} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Tabs: any[] = [];\r\n CurrentTabIndex: number = 0;\r\n IsShowOnlyTabs: boolean = false;\r\n IsShowOnlyAccordion: boolean = false;\r\n IsShowStepNumbers: boolean = false;\r\n IsShowCustomButtonText: boolean = false;\r\n IsShowCustomButtonIcon: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-tabs',\r\n templateUrl: './demo-tabs.component.html',\r\n styleUrls: ['./demo-tabs.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoTabsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoTabsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Tabs = this.GetPageTabs();\r\n }\r\n \r\n public OnIsShowOnlyTabsChanged() {\r\n if (this.State.IsShowOnlyTabs)\r\n this.State.IsShowOnlyAccordion = false;\r\n }\r\n \r\n public OnIsShowOnlyAccordionChanged() {\r\n if (this.State.IsShowOnlyAccordion)\r\n this.State.IsShowOnlyTabs = false;\r\n }\r\n\r\n public GetTabsMarkup() : string {\r\n let result = ''\r\n }\r\n \r\n private GetPageTabs(): any[] {\r\n return [\r\n {\r\n index: 0,\r\n text: 'Tab Name 1',\r\n Name: \"Tab1\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Tab Name 2',\r\n Name: \"Tab2\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Tab Name 3',\r\n Name: \"Tab3\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Tab Name 4',\r\n Name: \"Tab4\"\r\n },\r\n ];\r\n }\r\n}\r\n","export default \"

Tabs

\\r\\n\\r\\n

m4u-tabs - used for showing different content depending on selected tab. On desktop by default it shows Tabs, and on mobile phones Accordion.

\\r\\n

Your result markup: {{GetTabsMarkup()}}.

\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n

Tab 1 content

\\r\\n
\\r\\n
\\r\\n

Tab 2 content

\\r\\n
\\r\\n
\\r\\n

Tab 3 content

\\r\\n
\\r\\n
\\r\\n

Tab 4 content

\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \";","import {Component, ViewChild} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {DemoMobilePhone, DemoMobilePhoneBrand, DemoMobilePhoneModel} from \"@ui/demo/models/demo-mobile-phone\";\r\nimport {EnumDemoMobilePhoneColor} from \"@ui/demo/models/enum-demo-mobile-phone-color\";\r\nimport {DxDataGridComponent} from \"devextreme-angular\";\r\nimport {GridExtender, GridCellEditParams} from \"@base/grid/Grid.extender\";\r\nimport {Utils} from \"@core/helpers/Utils\";\r\n\r\nclass State extends BaseState {\r\n Phones: DemoMobilePhone[] = [];\r\n Brands: DemoMobilePhoneBrand[] = [];\r\n Models: DemoMobilePhoneModel[] = [];\r\n Colors: any[] = [];\r\n\r\n SelectedPhones: DemoMobilePhone[] = [];\r\n \r\n TotalSum: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-grids',\r\n templateUrl: './demo-grids.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoGridsComponent extends BaseComponent {\r\n\r\n @ViewChild(\"gridExample\") grid: DxDataGridComponent;\r\n public get G(): GridExtender { return (this.grid as any)?.G};\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoGridsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitData();\r\n this.State.Colors = this.GetColors();\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.G.AttachColumnEditHandler(this, \"Amount\", { AfterEdit: 'OnAmountColumnChanged' });\r\n this.G.AttachColumnEditHandler(this, \"Price\", { AfterEdit: 'OnPriceColumnChanged' });\r\n this.G.AttachColumnEditHandler(this, \"TotalSum\", { AfterEdit: 'OnTotalSumColumnChanged' });\r\n }\r\n \r\n public OnSearchToolbarPreparing(event: any) {\r\n event.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'gridViewTemplate',\r\n isCustom: true\r\n });\r\n }\r\n\r\n public OnAmountColumnChanged(e: GridCellEditParams) {\r\n console.log(e);\r\n this.G.SetData(\r\n \"TotalSum\",\r\n Utils.ValEx(this.G.GetData('Amount', e)) * Utils.ValEx(this.G.GetData('Price', e)), \r\n e);\r\n }\r\n \r\n public OnPriceColumnChanged(e: GridCellEditParams) {\r\n this.G.SetData(\r\n \"TotalSum\",\r\n Utils.ValEx(this.G.GetData('Price', e)) * Utils.ValEx(this.G.GetData('Amount', e)),\r\n e);\r\n }\r\n \r\n public OnTotalSumColumnChanged(e: GridCellEditParams) {\r\n this.G.SetData(\r\n \"Price\",\r\n Utils.ValEx(this.G.GetData('TotalSum', e)) / Utils.ValEx(this.G.GetData('Amount', e)),\r\n e);\r\n }\r\n \r\n public CalculateBrandDisplayName = (rowData) => {\r\n if (!rowData.BrandID)\r\n return;\r\n\r\n return this.State.Brands.find(x => x.EntryID === rowData.BrandID).Name;\r\n }\r\n\r\n public CalculateModelDisplayName = (rowData) => {\r\n if (!rowData.ModelID)\r\n return;\r\n\r\n return this.State.Models.find(x => x.EntryID === rowData.ModelID).Name;\r\n }\r\n\r\n public GetModelsToSelect(data) { \r\n return this.State.Brands.find(x => x.EntryID === data.data.BrandID).Models;\r\n }\r\n\r\n public CalculateTotalSum() {\r\n this.State.TotalSum = this.State.Phones.map(i => i.TotalSum).reduce((a, b) => a + b);\r\n }\r\n \r\n public OnTrashClicked(event: any) {\r\n console.log(event);\r\n }\r\n \r\n private GetColors(): any[] {\r\n return [\r\n {\r\n Value: EnumDemoMobilePhoneColor.White,\r\n Text: 'White',\r\n SortOrder: 1,\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.Black,\r\n Text: 'Black',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.AlpineGreen,\r\n Text: 'Alpine Green',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.MidnightGray,\r\n Text: 'Midnight Gray',\r\n SortOrder: 4\r\n }\r\n ]\r\n }\r\n\r\n private InitData() {\r\n \r\n let s22Ultra = {\r\n EntryID: 1,\r\n Name: \"S22 Ultra\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let s22 = {\r\n EntryID: 2,\r\n Name: \"S22\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let fold = {\r\n EntryID: 3,\r\n Name: \"Fold\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let samsungBrand = {\r\n EntryID: 1,\r\n Name: \"Samsung\",\r\n Models: [s22Ultra, s22, fold]\r\n } as DemoMobilePhoneBrand;\r\n\r\n let iPhone13 = {\r\n EntryID: 4,\r\n Name: \"iPhone 13\"\r\n } as DemoMobilePhoneModel;\r\n\r\n let iPhone12 = {\r\n EntryID: 5,\r\n Name: \"iPhone 12\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let appleBrand = {\r\n EntryID: 2,\r\n Name: \"Apple\",\r\n Models: [iPhone13, iPhone12]\r\n } as DemoMobilePhoneBrand;\r\n \r\n this.State.Brands = [samsungBrand, appleBrand];\r\n this.State.Models = [s22Ultra, s22, fold, iPhone12, iPhone13];\r\n \r\n this.State.Phones = [\r\n {\r\n ModelID: s22Ultra.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.Black,\r\n IsAvailable: true,\r\n Amount: 3,\r\n Price: 1099,\r\n TotalSum: 3297\r\n },\r\n {\r\n ModelID: s22.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.White,\r\n IsAvailable: false,\r\n Amount: 2,\r\n Price: 899,\r\n TotalSum: 1798\r\n },\r\n {\r\n ModelID: fold.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.MidnightGray,\r\n IsAvailable: true,\r\n Amount: 5,\r\n Price: 1699,\r\n TotalSum: 8495\r\n },\r\n {\r\n ModelID: iPhone13.EntryID,\r\n BrandID: appleBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.AlpineGreen,\r\n IsAvailable: true,\r\n Amount: 1,\r\n Price: 899,\r\n TotalSum: 899\r\n },\r\n {\r\n ModelID: iPhone12.EntryID,\r\n BrandID: appleBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.White,\r\n IsAvailable: false,\r\n Amount: 0,\r\n Price: 799,\r\n TotalSum: 0\r\n }\r\n ];\r\n \r\n this.CalculateTotalSum();\r\n }\r\n}\r\n","export default \"\\r\\n

Grids

\\r\\n\\r\\n

*To setup [dataSource] of component, you need to set data in OnInitDatasources like this.DataSources['DS_NAME'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.GetList(options)), and then set in attribute [dataSource]=\\\"DS('DS_NAME')\\\" of dx-data-grid.

\\r\\n \\r\\n \\r\\n \\r\\n

Simple dx-data-grid.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

\\r\\n You can pass Grid toolbar parameters to the component that extends from BaseGridComponent.\\r\\n To set grid row context menu - override GetGridRowContextMenu method.\\r\\n To make column as link - use link-column directive\\r\\n

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n

Grid with icon button and hint that displays on hover.

\\r\\n

*If you need to have more than one icon button, it is better to use context menu.

\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n

Grid with column filtering and column chooser.

\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n

Grid with search panel and elements in it.\\r\\n

\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Grid with custom buttons in toolbar.

\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Grid with multiple selection.

\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n

Grid with edit, add and delete\\r\\n actions. Also includes cascade selecting and simple recalculation in columns.

\\r\\n

Total sum: {{State.TotalSum}}

\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \";","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ContextMenuElement } from '@base/classes/BaseClasses';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetContextMenuParams, BottomSheetListParams, BottomSheetService } from '@core/framework/bottom-sheet.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n ListItems: any[] = [];\r\n ContextMenu: ContextMenuElement[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-bottom-sheets',\r\n templateUrl: './demo-bottom-sheets.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoBottomSheetsComponent extends BaseComponent {\r\n\r\n @ViewChild('template') template: TemplateRef;\r\n\r\n private bottomListSubscription: Subscription;\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService, private bottomSheetService: BottomSheetService) {\r\n super(A, 'DemoBottomSheetsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.ListItems = this.GetListItems();\r\n this.State.ContextMenu = this.GetContextMenu();\r\n }\r\n \r\n protected override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n \r\n this.bottomListSubscription?.unsubscribe();\r\n }\r\n \r\n public OnShowComponentClicked() {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Content = DemoButtonsComponent;\r\n contentParams.Title = 'Component Example';\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n \r\n public OnShowTemplateClicked() {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Content = this.template;\r\n contentParams.Title = 'Template Example';\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n \r\n public OnShowListClicked() {\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = 'Items';\r\n listParams.DataSource = this.State.ListItems;\r\n listParams.OnCompleted = (result) => console.log(result);\r\n\r\n this.bottomSheetService.ShowList(listParams);\r\n }\r\n\r\n public OnShowContextMenuClicked() {\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = 'Context Menu Example';\r\n menuParams.Items = this.State.ContextMenu;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n }\r\n \r\n public GetContextMenu() : ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ];\r\n }\r\n \r\n public GetListItems() {\r\n return [\r\n {\r\n EntryID: 1,\r\n Name: 'Clock',\r\n Icon: 'mdi mdi-clock-outline'\r\n },\r\n {\r\n EntryID: 2,\r\n Name: 'Map',\r\n Icon: 'mdi mdi-map-outline'\r\n },\r\n {\r\n EntryID: 3,\r\n Name: 'Agenda',\r\n Icon: 'mdi mdi-view-agenda-outline'\r\n }\r\n ];\r\n }\r\n}\r\n","export default \"

Bottom Sheets

\\r\\n\\r\\n

BottomSheetService used for showing different types of content at bottom popup window.

\\r\\n

It can show Page, Component, Template, List or Context Menu.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n

Template content

\\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {}\r\n\r\n@Component({\r\n selector: 'app-demo-pages',\r\n templateUrl: './demo-pages.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPagesComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoPagesComponent', State);\r\n }\r\n \r\n public OnHeadersExampleClicked() {\r\n this.Navigate(['demo/page-examples/header-buttons']);\r\n }\r\n \r\n public OnToolbarExampleClicked() {\r\n this.Navigate(['demo/page-examples/toolbar-buttons']);\r\n }\r\n}\r\n","export default \"

Pages

\\r\\n\\r\\n

Extending your page from BasePageComponent gives you ability to easily customize it.

\\r\\n\\r\\n

Examples with header and toolbar.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BasePageComponent} from \"../../../../../../base/component/BasePageComponent\";\r\nimport {BaseEntity, BaseState} from \"../../../../../../base/entities/BaseEntities\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ContextMenuElement, ToolbarSettings} from \"@base/classes/BaseClasses\";\r\nimport { Location } from '@angular/common';\r\n\r\nclass State extends BaseState {}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-page-toolbar-buttons',\r\n templateUrl: './demo-page-toolbar-buttons.component.html',\r\n styleUrls: ['../../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPageToolbarButtonsComponent extends BasePageComponent {\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private location: Location) {\r\n \r\n super(A, 'DemoPageToolbarButtons', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitTitle() : string {\r\n return 'Toolbar buttons';\r\n }\r\n \r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = true;\r\n\r\n settings.ShowBackButton = true;\r\n settings.BackButtonClick = () => this.location.back();\r\n\r\n settings.ContextMenuTitle = \"Context menu\";\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n\r\n return settings;\r\n }\r\n\r\n private GetContextMenu(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ]\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n

Header

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n

Footer

\\r\\n
\\r\\n\\r\\n \\r\\n

This page has Class=\\\"no-padding\\\" to remove all paddings.

\\r\\n

Right toolbar buttons, back button and context menu could be set in overriden OnGetToolbarSettings function.

\\r\\n

Position (header, toolbar) of default buttons could be set in attribute ButtonsPosition of m4u-page.

\\r\\n

Custom elements could be placed by passing ng-template to ToolbarButtonsBefore and ToolbarButtonsAfter page properties.\\r\\n \\r\\n\";","import {Component} from '@angular/core';\r\nimport {BasePageComponent} from \"../../../../../../base/component/BasePageComponent\";\r\nimport {BaseEntity, BaseState} from \"../../../../../../base/entities/BaseEntities\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ContextMenuElement, ToolbarSettings} from \"@base/classes/BaseClasses\";\r\nimport {Location} from '@angular/common';\r\n\r\nclass State extends BaseState {\r\n ContextMenu: ContextMenuElement[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-page-header-buttons',\r\n templateUrl: './demo-page-header-buttons.component.html',\r\n styleUrls: ['../../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPageHeaderButtonsComponent extends BasePageComponent {\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private location: Location) {\r\n\r\n super(A, 'DemoPageToolbarButtons', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return 'Header buttons';\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = true;\r\n\r\n settings.ShowBackButton = true;\r\n settings.BackButtonClick = () => this.location.back();\r\n \r\n settings.ContextMenuTitle = \"Context menu\";\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n\r\n return settings;\r\n }\r\n\r\n private GetContextMenu(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ]\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n

Header

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n

Footer

\\r\\n
\\r\\n \\r\\n \\r\\n

This page has Class=\\\"no-top-padding no-bottom-padding\\\" to remove top and bottom paddings.

\\r\\n

Right toolbar buttons, back button and context menu could be set in overriden OnGetToolbarSettings function.

\\r\\n

Position (header, toolbar) of default buttons could be set in attribute ButtonsPosition of m4u-page.

\\r\\n

Left toolbar elements could be added through passing ng-template to QuickFilters page property.

\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import {Component, TemplateRef, ViewChild} from '@angular/core';\r\nimport {SidebarService} from \"@core/framework/sidebar.service\";\r\nimport {DemoBottomSheetsComponent} from \"@ui/demo/components/bottom-sheets/demo-bottom-sheets.component\";\r\n\r\n@Component({\r\n selector: 'app-demo-sidebars',\r\n templateUrl: './demo-sidebars.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSidebarsComponent {\r\n\r\n @ViewChild('template') template: TemplateRef;\r\n \r\n constructor(private sidebarService: SidebarService) {\r\n }\r\n\r\n public OnShowComponentClicked() {\r\n this.sidebarService.Show(\"Component\", \"Component Example\", DemoBottomSheetsComponent);\r\n }\r\n \r\n public OnShowTemplateClicked() {\r\n this.sidebarService.Show(\"Template\", \"Template Example\", this.template);\r\n }\r\n \r\n public OnCloseTemplateClicked() {\r\n this.sidebarService.Close(\"Template\");\r\n }\r\n}\r\n","export default \"

Sidebars

\\r\\n\\r\\n

SidebarService used for showing different types of content at right side of window.

\\r\\n

It can show only Component or Template.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n

Template content

\\r\\n\\r\\n \\r\\n
\";","import {Component} from '@angular/core';\r\nimport {EnumPageDisplayModes, EnumPageEntitySources} from \"../../../../../core/framework/sysenums.enum\";\r\nimport {BaseEntity, BaseState} from \"../../../../../base/entities/BaseEntities\";\r\nimport {BasePageComponent} from \"../../../../../base/component/BasePageComponent\";\r\nimport {ServiceBagService} from \"../../../../../base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-simple-dialog',\r\n templateUrl: './demo-simple-dialog.component.html',\r\n styleUrls: ['../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSimpleDialogComponent extends BasePageComponent {\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoSimpleDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override GetDefaultTitle(): string {\r\n return 'Simple dialog';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n HTMLBody: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-htmlbox-dialog',\r\n templateUrl: './htmlbox-dialog.component.html',\r\n styleUrls: ['./htmlbox-dialog.component.scss']\r\n})\r\nexport class HtmlBoxDialogComponent extends BasePageComponent {\r\n\r\n @Input() HTMLBody: string;\r\n @Input() Language: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HtmlBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.HTMLBody = this.HTMLBody;\r\n }\r\n\r\n GetHtmlEditorClass() {\r\n const rtlClass = this.A.Screen.IsRTL() ? 'html-editor-rtl' : 'html-editor-ltr';\r\n return `html-text-editor ${rtlClass}`;\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-previewdialog',\r\n templateUrl: './previewdialog.component.html',\r\n styleUrls: ['./previewdialog.component.scss']\r\n})\r\nexport class PreviewDialogComponent extends BasePageComponent {\r\n @Input() Url: string;\r\n\r\n constructor(A: ServiceBagService, public sanitizer: DomSanitizer) {\r\n super(A, 'PreviewDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n get src() {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(this.Url)\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import {Component, ViewChild} from '@angular/core';\r\nimport {BaseState, GenericListEntity, Media} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {DemoSimpleDialogComponent} from \"@ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component\";\r\nimport {BarcodeBoxDialogComponent} from \"@ui/dialogs/barcodebox-dialog/barcodeboxdialog.component\";\r\nimport {FileBoxDialogComponent} from \"@ui/dialogs/filebox-dialog/fileboxdialog.component\";\r\nimport {HtmlBoxDialogComponent} from \"@ui/dialogs/htmlbox-dialog/htmlbox-dialog.component\";\r\nimport {ImageBoxDialogComponent} from \"@ui/dialogs/imagebox-dialog/imageboxdialog.component\";\r\nimport {InputBoxDialogComponent} from \"@ui/dialogs/inputbox-dialog/inputboxdialog.component\";\r\nimport {EnumFileBoxReturnDataTypes, EnumInputBoxTypes, EnumMessageBoxTypes} from \"@core/framework/sysenums.enum\";\r\nimport {MessageBoxDialogComponent} from \"@ui/dialogs/messagebox-dialog/messageboxdialog.component\";\r\nimport {PhotoBoxDialogComponent} from \"@ui/dialogs/photobox-dialog/photoboxdialog.component\";\r\nimport {PreviewDialogComponent} from \"@ui/dialogs/preview-dialog/previewdialog.component\";\r\nimport {SelectBoxDialogComponent} from \"@ui/dialogs/selectbox-dialog/selectboxdialog.component\";\r\nimport {SignBoxDialogComponent} from \"@ui/dialogs/signbox-dialog/signboxdialog.component\";\r\n\r\nclass State extends BaseState {\r\n HTMLBody: string;\r\n SelectOptions: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-dialogs',\r\n templateUrl: './demo-dialogs.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoDialogsComponent extends BaseComponent {\r\n\r\n @ViewChild(DemoSimpleDialogComponent) simpleDialog: DemoSimpleDialogComponent;\r\n @ViewChild(BarcodeBoxDialogComponent) barcodeBoxDialog: BarcodeBoxDialogComponent;\r\n @ViewChild(FileBoxDialogComponent) fileBoxDialog: FileBoxDialogComponent;\r\n @ViewChild(HtmlBoxDialogComponent) htmlBoxDialog: HtmlBoxDialogComponent;\r\n @ViewChild(ImageBoxDialogComponent) imageBoxDialog: ImageBoxDialogComponent;\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild(PhotoBoxDialogComponent) photoBoxDialog: PhotoBoxDialogComponent;\r\n @ViewChild(PreviewDialogComponent) previewDialog: PreviewDialogComponent;\r\n @ViewChild(SelectBoxDialogComponent) selectBoxDialog: SelectBoxDialogComponent;\r\n @ViewChild(SignBoxDialogComponent) signBoxDialog: SignBoxDialogComponent;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoDialogsComponent', State);\r\n }\r\n \r\n override OnInitComponent() {\r\n this.State.HTMLBody = \"Html content\";\r\n this.State.SelectOptions = this.GetSelectBoxDialogOptions();\r\n }\r\n\r\n public OpenSimpleDialog() {\r\n this.simpleDialog.ShowDialogShort((_) => console.log('Simple Dialog closed'));\r\n }\r\n \r\n public OpenBarcodeBoxDialog() {\r\n this.barcodeBoxDialog.ShowDialogShort((_) => console.log('Barcode Box Dialog closed'))\r\n }\r\n \r\n public OnTextDecoded(event) {\r\n console.log('On text decoded');\r\n console.log(event);\r\n }\r\n\r\n public OnResultDecoded(event) {\r\n console.log('On result decoded');\r\n console.log(event);\r\n }\r\n\r\n public OpenFileBoxDialog() {\r\n this.fileBoxDialog.ReturnDataType = EnumFileBoxReturnDataTypes.FileList;\r\n this.fileBoxDialog.ShowDialog((list: File[]) => {\r\n console.log(\"File Box Dialog closed\");\r\n console.log(list);\r\n });\r\n }\r\n \r\n public OpenHtmlBoxDialog() {\r\n this.htmlBoxDialog.ShowDialogShort((state: any) => {\r\n console.log(\"Html Box Dialog closed\");\r\n console.log(state.HTMLBody);\r\n this.State.HTMLBody = state.HTMLBody;\r\n });\r\n }\r\n\r\n public OpenImageBoxDialog() {\r\n this.imageBoxDialog.ImageSource = 'https://i.pinimg.com/originals/8e/19/19/8e19199e990ba486fe79426a560c1b84.jpg';\r\n this.imageBoxDialog.ShowDialogShort(() => { \r\n console.log('Image Box Dialog closed');\r\n });\r\n }\r\n \r\n public CloseImageBoxDialog() {\r\n this.imageBoxDialog.CloseDialogWithSuccess();\r\n }\r\n \r\n public OpenInputBoxDialog() {\r\n this.inputBoxDialog.FieldLabel = \"Field label\";\r\n this.inputBoxDialog.Prompt = \"Field prompt\";\r\n this.inputBoxDialog.Type = EnumInputBoxTypes.Number;\r\n \r\n this.inputBoxDialog.ShowDialogShort((value: number) => {\r\n console.log('Input Box Dialog closed. Value: ' + value);\r\n });\r\n }\r\n \r\n public OpenMessageBoxDialog() {\r\n this.messageBoxDialog.Prompt = \"Prompt message\";\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.ShowDialogShort((e) => {\r\n console.log(\"Message Box Dialog closed with success\");\r\n }, () => {\r\n console.log(\"Message Box Dialog closed with failure\");\r\n });\r\n }\r\n \r\n public OpenPhotoBoxDialog() {\r\n this.photoBoxDialog.ShowDialogShort((data: Media[]) => {\r\n console.log('Photo Box Dialog closed');\r\n console.log(data);\r\n });\r\n }\r\n \r\n public OpenPreviewDialog() {\r\n this.previewDialog.Url = 'https://www.microsoft.com/uk-ua/';\r\n this.previewDialog.ShowDialogShort(() => {\r\n console.log('Preview Dialog closed');\r\n });\r\n }\r\n \r\n public OpenSelectBoxDialog() {\r\n this.selectBoxDialog.ShowDialogShort((result) => {\r\n console.log(result);\r\n });\r\n }\r\n \r\n private GetSelectBoxDialogOptions(): GenericListEntity[] {\r\n return [\r\n {\r\n EntryID: 1,\r\n Text: \"Option 1\",\r\n Value: \"Value 1\",\r\n Description: \"Description 1\"\r\n },\r\n {\r\n EntryID: 2,\r\n Text: \"Option 2\",\r\n Value: \"Value 2\",\r\n Description: \"Description 2\"\r\n }\r\n ];\r\n }\r\n \r\n public OpenSignBoxDialog() {\r\n this.signBoxDialog.ShowDialogShort((signature) => {\r\n console.log('Sign Box Dialog closed');\r\n console.log(signature);\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n

Dialogs

\\r\\n

Dialog is a type of modal window that appears in front of app content\\r\\n to provide critical information, ask for a decision or to input needed information.

\\r\\n

You can create your own custom dialog window, if none of the predefined dialogs\\r\\n suits you.

\\r\\n\\r\\n \\r\\n \\r\\n

Example of Custom Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Barcode Box Dialog.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of File Box Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Html Box Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Image Box Dialog.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Input Box Dialog.

\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n

Example of Message Box Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Photo Box Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Preview Dialog.

\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Select Box Dialog.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n

Example of Sign Box Dialog.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {EnumNotificationStatuses} from \"@core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseState {\r\n Status: EnumNotificationStatuses;\r\n Number: number;\r\n Date: Date;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-pipes',\r\n templateUrl: './demo-pipes.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPipesComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoPipesComponent', State);\r\n }\r\n \r\n override OnInitComponent() {\r\n this.State.Number = 1234.456\r\n this.State.Date = new Date();\r\n }\r\n}\r\n","export default \"\\r\\n

Pipes

\\r\\n \\r\\n

RC - pipe for translating resources by provided key.

\\r\\n

For translating core resources, you need to use pipe RC. Example: { { 'lblName' | RC } }- output {{'lblName' | RC}}.

\\r\\n

For translating project resources, you need to use RC:THIS.

\\r\\n

RCX - the same as RC, but with pure=true property of pipe, that allows page to instantly apply changes. *Used for login page, is not recommended for usage. Example: { { 'RESOURCE_NAME' | RCX } }.

\\r\\n

RCMX - wrapper around RC to search resource in provided module. *Is not recommended for usage. Example: { { 'RESOURCE_NAME' | RCMX:'MODULE_NAME' } }.

\\r\\n \\r\\n

Location of core resources: ClientApp/src/_resources.

\\r\\n

Location of project resources: ClientApp/projects/PROJECT_NAME/_resources or PROJECT_FOLDER/_resources.

\\r\\n \\r\\n
\\r\\n \\r\\n

LookupList pipe provides functionality to search through DataSource by provided value. Example: { State.Status | LookupList:LIST('NotificationStatuses') }

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n

Value: {{State.Status | LookupList:LIST('NotificationStatuses')}}

\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n

*All formats are loaded on app start into CompanyInfo entity in frameworkService

\\r\\n \\r\\n

formatNumberShort - formatting as short. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberShort }}

\\r\\n

formatNumberGeneral - formatting according to the format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberGeneral }}

\\r\\n

formatNumberSum - formatting according to the sum format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberSum }}

\\r\\n

formatNumberPrice - formatting according to the price format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberPrice }}

\\r\\n

formatNumberQuantity - formatting according to the quantity format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberQuantity }}

\\r\\n

formatNumberPercent - formatting according to the percent format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberPercent }}

\\r\\n

formatNumberRate - formatting according to the rate format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberRate }}

\\r\\n\\r\\n
\\r\\n\\r\\n

*All formats are loaded on app start into CompanyInfo entity in frameworkService

\\r\\n \\r\\n

formatDate - formatting according to the long date format provided by company. Formatted: {{ State.Date | formatDate }}

\\r\\n

formatDateShort - formatting according to the short date format provided by company. Formatted: {{ State.Date | formatDateShort }}

\\r\\n

formatDateCompact - formatting according to the compact date format provided by company. Formatted: {{ State.Date | formatDateCompact }}

\\r\\n

formatDateApproximate - formatting approximate date. Formatted: {{ State.Date | formatDateApproximate }}

\\r\\n

formatDateAtTime - formatting according to the long date and long time formats provided by company. Formatted: {{ State.Date | formatDateAtTime }}

\\r\\n

formatDateFull - formatting according to the full date format provided by company. Formatted: {{ State.Date | formatDateFull }}

\\r\\n

formatTime - formatting according to the short time format provided by company. Formatted: {{ State.Date | formatTime }}

\\r\\n

formatDayNameShort - formatting according to the short day format provided by company. Formatted: {{ State.Date | formatDayNameShort }}

\\r\\n \\r\\n
\\r\\n \\r\\n

stringBr - used for replacing \\\\r\\\\n in value to <br/>.

\\r\\n\\r\\n

fileSize - used for formatting number to file size. Raw: 1000000, Formatted: {{ 1000000 | fileSize}}

\\r\\n \\r\\n

abs - used for formatting number to its absolute value. Raw: -123, Formatted: {{ -123 | abs}}

\\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {AttachedFile, BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n IsLoadingBarVisible: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-components',\r\n templateUrl: './demo-components.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoComponentsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoComponentsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n \r\n \r\n public FilesChanged(files: AttachedFile[]) {\r\n console.log(files);\r\n }\r\n}\r\n","export default \"

Components

\\r\\n\\r\\n

m4u-attachedfiles - component for managing files. There are options to show\\r\\n input files and download them, or upload new files.

\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n

m4u-loading-animation - infinite loading bar. Positionated at the center of the window.

\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"../../../../../base/component/ServiceBag\";\r\nimport { BaseState, CredentialType, CredentialLogin, WebAPICredential } from \"../../../../../base/entities/BaseEntities\";\r\nimport { BaseGridComponent } from \"../../../../../base/component/BaseGridComponent\";\r\nimport { ContextMenuElement } from \"@m4u-angular/base/classes/BaseClasses\";\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-login-history-grid',\r\n templateUrl: './credential-login-history-grid.component.html'\r\n})\r\nexport class CredentialLoginHistoryGridComponent extends BaseGridComponent{\r\n @Input() Credentials: any;\r\n @Input() CredentialsInfo: CredentialType[];\r\n @Output() OnRefresh = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CredentialLoginHistoryGridComponent', CredentialLogin, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnManageCredentials'),\r\n visible: !!options?.data?.CredentialID,\r\n onClick: () => this.Navigate(['/pages/passwordmanage'], { CredentialID: options.data.CredentialID })\r\n }, {\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.CredentialID })\r\n }, {\r\n text: this.RC('btnGoToCredentialsReport'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/credentials-report'], { CredentialID: options.data.CredentialID })\r\n }];\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n this.OnRefresh.emit();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { WebAPICredential } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpointCRUD } from \"@m4u-angular/base/endpoint/BaseEndpointCRUD\";\r\n\r\n@Injectable()\r\nexport class WebAPICredentialEndpoint extends BaseEndpointCRUD\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"WebAPICredential\", api);\r\n }\r\n}\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { CredentialActivityEndpoint } from '@core/endpoints/credential-activity.endpoint';\r\nimport { EnumUserLoginStatus } from '@core/framework/sysenums.enum';\r\nimport { BaseState, CredentialType, CredentialLogin, CredentialLoginParams } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { DataSourceCustomAction } from '@base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport {\r\n CredentialLoginHistoryGridComponent\r\n} from '@ui/components/general/credential-login-history/grid/credential-login-history-grid.component';\r\nimport { WebAPICredentialEndpoint } from '@m4u-angular/core/endpoints/webapi-credential.endpoint';\r\n\r\nexport class State extends BaseState {\r\n CurrentCredentialID: number;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n Status: EnumUserLoginStatus;\r\n CredentialType: number = -1;\r\n\r\n CredentialsInfo: CredentialType[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-login-history',\r\n templateUrl: './credential-login-history.component.html'\r\n})\r\nexport class CredentialLoginHistoryComponent extends BasePageComponent {\r\n\r\n @ViewChild(CredentialLoginHistoryGridComponent) grid: CredentialLoginHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private webAPICredentialEndpoint: WebAPICredentialEndpoint) {\r\n super(A, 'CredentialLoginHistoryComponent', CredentialLogin, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n this.LoadCredentials();\r\n\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialsInfo = response.Entities;\r\n });\r\n }\r\n\r\n private LoadDataSource() {\r\n this.DataSources['UserLogins'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const params = new CredentialLoginParams();\r\n\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.Status = this.State.Status;\r\n params.CredentialType = this.State.CredentialType !== undefined ? this.State.CredentialType : -999;\r\n params.CredentialID = this.State.CurrentCredentialID;\r\n\r\n return this.credentialActivityEndpoint.ListLogins(params, options);\r\n }, undefined, undefined, false);\r\n\r\n this.DS['UserLogins']?.Reload();\r\n }\r\n\r\n override InitState() {\r\n this.State.DateFrom = DateHelpers.BOM(new Date());\r\n this.State.DateTo = DateHelpers.EOM(new Date());\r\n this.State.Status = EnumUserLoginStatus.All;\r\n this.State.CredentialType = -1;\r\n this.State.CurrentCredentialID = null;\r\n\r\n this.ReadQuery();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.GridExtender = this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadCredentials() {\r\n this.DataSources['Credentials'] =\r\n new DataSourceCustomAction((options) => this.webAPICredentialEndpoint.GetList(options),\r\n (entryID) => this.webAPICredentialEndpoint.Get(entryID));\r\n }\r\n\r\n private ReadQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CurrentCredentialID = +this.QueryParams.CredentialID;\r\n }\r\n }\r\n\r\n OnRefresh() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, CredentialActivityStatus, WebAPIRequest, WebAPIRequestListParams } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport {DataLoadOptions} from \"@base/datalayer/DataLoadOptions\";\r\nimport { BaseEndpointCRUD } from \"@m4u-angular/base/endpoint/BaseEndpointCRUD\";\r\n\r\n@Injectable()\r\nexport class WebAPIRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"WebAPIRequest\", api);\r\n }\r\n \r\n public ListEx(Params: WebAPIRequestListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, {options: options?.GetLoadOptions()});\r\n }\r\n\r\n public GetPossibleControllers(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleControllers');\r\n }\r\n\r\n public GetPossibleActions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleActions');\r\n }\r\n\r\n public GetPossibleModules(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleModules');\r\n }\r\n}\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history-grid',\r\n templateUrl: './request-history-grid.component.html',\r\n styleUrls: ['./request-history-grid.component.scss']\r\n})\r\nexport class RequestHistoryGridComponent extends BaseGridComponent {\r\n @Output() OnRefresh = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'RequestHistoryGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnRowClick(e) {\r\n if (e.data.EntryID) { this.Navigate(['/pages/general/request-history', e.data.EntryID]); }\r\n }\r\n\r\n GetStatusColor(isSuccess: boolean) {\r\n return isSuccess ? 'green-cyan' : 'cinnabar';\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n this.OnRefresh.emit();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseEntity, BaseState, WebAPIRequestListParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { WebAPICredentialEndpoint } from '@m4u-angular/core/endpoints/webapi-credential.endpoint';\r\nimport { WebAPIRequestEndpoint } from '@m4u-angular/core/endpoints/webapi-request.endpoint';\r\nimport { RequestHistoryGridComponent } from '../request-history-grid/request-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n CurrentCredentialID: number;\r\n\r\n Module: string;\r\n Controller: string;\r\n Action: string;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n Controllers: string[];\r\n Actions: string[];\r\n Modules: string[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history-list',\r\n templateUrl: './request-history-list.component.html',\r\n styleUrls: ['./request-history-list.component.scss']\r\n})\r\nexport class RequestHistoryListComponent extends BasePageComponent {\r\n\r\n @ViewChild(RequestHistoryGridComponent) grid: RequestHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private webAPICredentialEndpoint: WebAPICredentialEndpoint,\r\n private webAPIRequestEndpoint: WebAPIRequestEndpoint) {\r\n super(A, 'RequestHistoryListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadCredentials();\r\n this.InitControllers();\r\n this.InitActions();\r\n this.InitModules();\r\n\r\n this.ReadQuery();\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.GridExtender = this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.State.Module = undefined;\r\n this.State.Controller = undefined;\r\n this.State.Action = undefined;\r\n this.State.DateFrom = undefined;\r\n this.State.DateTo = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n public OnCredentialChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public OnDateFromChange(dateFrom) {\r\n if (!dateFrom?.value) return;\r\n\r\n this.State.DateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n }\r\n\r\n public OnDateToChange(dateTo) {\r\n if (!dateTo?.value) return;\r\n\r\n this.State.DateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n }\r\n\r\n private LoadCredentials() {\r\n this.DataSources['Credentials'] = new DataSourceCustomAction((options) => this.webAPICredentialEndpoint.GetList(options), (entryID) => this.webAPICredentialEndpoint.Get(entryID));\r\n }\r\n\r\n private LoadDataSource() {\r\n if (!this.State.CurrentCredentialID) {\r\n this.DataSources['Requests'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new WebAPIRequestListParams();\r\n params.CredentialID = this.State.CurrentCredentialID;\r\n params.ModuleName = this.State.Module;\r\n params.Controller = this.State.Controller;\r\n params.Action = this.State.Action;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.DataSources['Requests'] = new DataSourceCustomAction((options) => this.webAPIRequestEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private InitControllers() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleControllers(), false, (response) => {\r\n this.State.Controllers = response.Data;\r\n });\r\n }\r\n\r\n private InitActions() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleActions(), false, (response) => {\r\n this.State.Actions = response.Data;\r\n });\r\n }\r\n\r\n private InitModules() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleModules(), false, (response) => {\r\n this.State.Modules = response.Data;\r\n });\r\n }\r\n\r\n private ReadQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CurrentCredentialID = +this.QueryParams.CredentialID;\r\n this.OnCredentialChanged();\r\n }\r\n }\r\n\r\n OnRefresh() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, WebAPIRequest } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { WebAPIRequestEndpoint } from '@m4u-angular/core/endpoints/webapi-request.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Body: string;\r\n Response: string;\r\n QueryString: string;\r\n Tabs: any[];\r\n CurrentTabIndex: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history',\r\n templateUrl: './request-history.component.html',\r\n styleUrls: ['./request-history.component.scss']\r\n})\r\nexport class RequestHistoryComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, webAPIRequestEndpoint: WebAPIRequestEndpoint) {\r\n super(A, 'RequestHistoryComponent', WebAPIRequest, State, webAPIRequestEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.InitBody();\r\n this.InitResponse();\r\n this.InitQueryString();\r\n this.InitTabs();\r\n }\r\n\r\n public CopyText() {\r\n navigator.clipboard.writeText(this.State.CurrentTabIndex === 0 ? this.State.Body : this.State.Response);\r\n this.UI.InfoMessage(this.RC(\"msgTextCopied\"));\r\n }\r\n\r\n private InitBody() {\r\n if (this.Entity?.Body) {\r\n const json = JSON.parse(this.Entity.Body);\r\n this.State.Body = JSON.stringify(json, undefined, 4);\r\n }\r\n }\r\n\r\n private InitResponse() {\r\n if (this.Entity?.Response) {\r\n try {\r\n const json = JSON.parse(this.Entity.Response);\r\n this.State.Response = JSON.stringify(json, undefined, 4);\r\n } catch (error) {\r\n this.State.Response = this.Entity.Response;\r\n }\r\n }\r\n }\r\n\r\n private InitQueryString() {\r\n if (this.Entity?.QueryString) {\r\n this.State.QueryString = this.Entity.QueryString;\r\n if (this.State.QueryString.startsWith('?')) { this.State.QueryString = this.State.QueryString.substring(1); }\r\n this.State.QueryString = this.State.QueryString.split('&').join('\\r\\n')\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [];\r\n\r\n if (this.Entity.Body) {\r\n this.State.Tabs.push({\r\n index: 0,\r\n text: this.RC(\"lblBody\"),\r\n Name: \"Body\"\r\n });\r\n\r\n this.State.CurrentTabIndex = 0;\r\n } else {\r\n this.State.CurrentTabIndex = 1;\r\n }\r\n\r\n this.State.Tabs.push({\r\n index: 1,\r\n text: this.RC(\"lblResponse\"),\r\n Name: \"Response\"\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BaseEntitiesResponse,\r\n SystemCredentialInfo, CredentialsCheckerMetadata, \r\n BaseDataResponse, CredentialExternalInfo, CreateCredentialsParams, SystemCredentialParams, GenericListEntity\r\n} from '@base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEndpoint } from '@base/endpoint/BaseEndpoint';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class SystemCredentialsEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('SystemCredentials', api);\r\n }\r\n\r\n public ListSystemCredentials(Params: SystemCredentialParams, options: DataLoadOptions)\r\n : Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListSystemCredentials', Params, options?.GetLoadOptions());\r\n }\r\n\r\n public ListCredentialsForCreations(params: SystemCredentialParams): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListCredentialsForCreations', params);\r\n }\r\n\r\n public CreateCredentials(params: CreateCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CreateCredentials', params);\r\n }\r\n\r\n public SendWelcomeUserMessage(params: CreateCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendWelcomeUserMessage', params);\r\n }\r\n\r\n public GetAdditionalInfoMetadata(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetAdditionalInfoMetadata');\r\n }\r\n\r\n public GetAvailableCredentialFilters(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetAvailableCredentialFilters', { });\r\n }\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumNotificationDeliveryOptions, EnumPageDisplayModes,\r\n EnumPageEntitySources, EnumSystemOptions\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State {\r\n NotificationDeliveryOptions: any[] = [];\r\n UserCreationOptions: any[] = [];\r\n NotificationDeliveryOption: EnumNotificationDeliveryOptions;\r\n UserCreationOptionID: number = 0;\r\n Languages: any[] = [];\r\n LanguageID: string = 'HE';\r\n}\r\n\r\n@Component({\r\n selector: 'app-welcome-message-config-dialog',\r\n templateUrl: './welcome-message-config-dialog.component.html',\r\n styleUrls: ['./welcome-message-config-dialog.component.scss']\r\n})\r\nexport class WelcomeMessageConfigDialogComponent extends BasePageComponent {\r\n @Input() ShowUserCreationOption: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'WelcomeMessageConfigDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.ShowUserCreationOption ? 'Credential creation' : this.RC('Pages.WelcomeMessageConfigDialogComponent');\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.NotificationDeliveryOptions = this.LIST('WelcomeDeliveryOptions')\r\n .sort((a, b) => a.SortOrder > b.SortOrder ? 1 : -1)\r\n .filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return true;\r\n });\r\n if (!this.ShowUserCreationOption) {\r\n this.State.NotificationDeliveryOptions = this.State.NotificationDeliveryOptions\r\n .filter(x => x.Value !== EnumNotificationDeliveryOptions.DontSend);\r\n }\r\n this.State.NotificationDeliveryOption = this.State.NotificationDeliveryOptions[0]?.Value;\r\n this.State.UserCreationOptions = this.LIST('UserCreationOptions');\r\n this.State.Languages = this.LIST('Languages');\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialsCheckerMetadata, CredentialExternalInfo, CredentialType, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-grid',\r\n templateUrl: './system-credentials-grid.component.html'\r\n})\r\nexport class SystemCredentialsGridComponent extends BaseGridComponent{\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() IsAllowPagination: boolean = true;\r\n @Input() CredentialTypes: CredentialType[];\r\n @Input() AdditionalInfoMetadata: CredentialsCheckerMetadata;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Output() OnRefresh = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemCredentialsGridComponent', SystemCredentialInfo, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if(this.IsSelectionMode) {\r\n return [];\r\n }\r\n\r\n return [{\r\n text: this.RC('btnManageCredentials'),\r\n visible: true,\r\n onClick: () => this.OnManageCredentials(options)\r\n }, {\r\n text: this.RC('btnGoToLoginHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/credential-login-history'], { CredentialID: options.data.EntryID })\r\n }, {\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.EntryID })\r\n }];\r\n }\r\n\r\n OnNavigate(e) {\r\n if (!this.IsSelectionMode && e?.data) {\r\n this.OnManageCredentials(e);\r\n }\r\n }\r\n\r\n OnGetLastUsedBeforeText(rowData): string {\r\n return rowData.LastUseDate ? DateHelpers.GetDateApproximate((rowData as SystemCredentialInfo).LastUseDate, false) : '';\r\n }\r\n\r\n GetCaption(rowData, captionField): string {\r\n return rowData[captionField];\r\n }\r\n\r\n OnManageCredentials(options: any) {\r\n const { Type, EntryID } = options.data;\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: EntryID, Type: Type });\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n this.OnRefresh.emit();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport {\r\n BaseState, CreateCredentialsParams, CredentialsCheckerMetadata,\r\n CredentialExternalInfo, CredentialType, SystemCredentialParams, SystemCredentialInfo, GenericListEntity, BaseEntitiesResponse\r\n}\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@m4u-angular/core/endpoints/system-credentials.endpoint';\r\nimport { EnumSystemOptions, EnumYesNo } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { SystemCredentialsGridComponent } from './system-credentials-grid/system-credentials-grid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nexport class State extends BaseState {\r\n CredentialTypes: CredentialType[];\r\n AdditionalInfoMetadata: CredentialsCheckerMetadata;\r\n SelectedRows: CredentialExternalInfo[] = [];\r\n CredentialType: number;\r\n CredentialID: number;\r\n IsActive: any;\r\n IsPendingWelcome: any;\r\n IsLockedOut: any;\r\n CredentialFilters: GenericListEntity[] = []\r\n CredentialFilter: number;\r\n IsSupportedUserWelcome: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials',\r\n templateUrl: './system-credentials.component.html',\r\n styleUrls: ['./system-credentials.component.scss']\r\n})\r\nexport class SystemCredentialsComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n @ViewChild(SystemCredentialsGridComponent) grid: SystemCredentialsGridComponent;\r\n\r\n get IsAllowPagination() : boolean {\r\n return !this.State.CredentialFilter;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private systemCredentialEndpoint: SystemCredentialsEndpoint) {\r\n super(A, 'SystemCredentialsComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.GetParamsFromQuery();\r\n this.LoadDataSource();\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialTypes = response.Entities;\r\n });\r\n this.Do(this.systemCredentialEndpoint.GetAdditionalInfoMetadata(), false, (response) => {\r\n this.State.AdditionalInfoMetadata = response.Data;\r\n });\r\n\r\n this.Do(\r\n this.systemCredentialEndpoint.GetAvailableCredentialFilters(), \r\n false, \r\n (response: BaseEntitiesResponse) => {\r\n this.State.CredentialFilters = response.Entities ?? [];\r\n }\r\n );\r\n }\r\n \r\n override InitState() {\r\n super.InitState();\r\n this.State.IsSupportedUserWelcome = this.A.Framework.SystemOptionFlag(EnumSystemOptions.IsSupportedUserWelcome);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.grid?.G;\r\n settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.grid.G.gridAny?.instance?.getScrollable()?.scrollTo({ top: 0 });\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = undefined;\r\n this.State.CredentialID = undefined;\r\n this.State.IsActive = undefined;\r\n this.State.IsPendingWelcome = undefined;\r\n this.State.IsLockedOut = undefined;\r\n this.State.CredentialFilter = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n private GetParamsFromQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CredentialID = +this.QueryParams.CredentialID;\r\n }\r\n }\r\n private LoadDataSource() {\r\n this.DataSources['SystemCredentials'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const request = new SystemCredentialParams();\r\n request.CredentialType = this.State.CredentialType;\r\n request.CredentialID = this.State.CredentialID;\r\n request.IsActive = this.State.IsActive === EnumYesNo.Yes ?\r\n true : this.State.IsActive === EnumYesNo.No ? false : undefined;\r\n request.IsPendingWelcome = this.State.IsPendingWelcome === EnumYesNo.Yes ?\r\n true : this.State.IsPendingWelcome === EnumYesNo.No ? false : undefined;\r\n request.IsLockedOut = this.State.IsLockedOut === EnumYesNo.Yes ?\r\n true : this.State.IsLockedOut === EnumYesNo.No ? false : undefined;\r\n request.CredentialFilter = this.State.CredentialFilter;\r\n \r\n return this.systemCredentialEndpoint.ListSystemCredentials(request, options);\r\n }, undefined, undefined, !this.IsAllowPagination);\r\n\r\n this.DS['SystemCredentials']?.Reload();\r\n }\r\n\r\n OnSelectionChanged(event) {\r\n this.State.SelectedRows = event;\r\n }\r\n\r\n ShowMessageConfigDialog() {\r\n this.dialog.ShowDialogShort((data) => {\r\n const { NotificationDeliveryOption, LanguageID } = data;\r\n const params = new CreateCredentialsParams();\r\n params.Language = LanguageID;\r\n params.DeliveryOption = NotificationDeliveryOption;\r\n params.CredentialsForCreation = this.State.SelectedRows;\r\n this.Do(this.systemCredentialEndpoint.SendWelcomeUserMessage(params), false, (data) => {\r\n this.ReloadComponent();\r\n this.UI.InfoMessage(`${this.RC('msgSuccess')}: ${data.Data} ${this.RC('lblTimes')}`);\r\n });\r\n });\r\n }\r\n\r\n OnRefresh() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialsCheckerMetadata, CredentialExternalInfo, CredentialType, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-creation-grid',\r\n templateUrl: './system-credentials-creation-grid.component.html',\r\n styleUrls: ['./system-credentials-creation-grid.component.scss']\r\n})\r\nexport class SystemCredentialsCreationGridComponent extends BaseGridComponent {\r\n @Input() AdditionalInfoMetadata: CredentialsCheckerMetadata;\r\n @ViewChild('grid') grid: any;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Input() CredentialTypes: CredentialType[];\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'SystemCredentialsCreationGridComponent', SystemCredentialInfo, State);\r\n\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnCreateCredentials'),\r\n visible: true,\r\n onClick: () => this.OnManageCredentials(options)\r\n }];\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n\r\n OnManageCredentials(options: any) {\r\n const { Type, EntryID } = options.data;\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: EntryID, Type: Type });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport {\r\n BaseState, CreateCredentialsParams, CredentialsCheckerMetadata,\r\n CredentialExternalInfo, CredentialType, SystemCredentialInfo, SystemCredentialParams\r\n}\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@m4u-angular/core/endpoints/system-credentials.endpoint';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { SystemCredentialsCreationGridComponent } from './system-credentials-creation-grid/system-credentials-creation-grid.component';\r\n\r\nexport class State extends BaseState {\r\n AdditionalInfoMetadata: CredentialsCheckerMetadata;\r\n SelectedRows: CredentialExternalInfo[] = [];\r\n CredentialTypes: CredentialType[];\r\n CredentialType: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-creation',\r\n templateUrl: './system-credentials-creation.component.html',\r\n styleUrls: ['./system-credentials-creation.component.scss']\r\n})\r\nexport class SystemCredentialsCreationComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n @ViewChild(SystemCredentialsCreationGridComponent) grid: SystemCredentialsCreationGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private systemCredentialEndpoint: SystemCredentialsEndpoint) {\r\n super(A, 'SystemCredentialsCreationComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n this.Do(this.systemCredentialEndpoint.GetAdditionalInfoMetadata(), false, (response) => {\r\n this.State.AdditionalInfoMetadata = response.Data;\r\n });\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialTypes = response.Entities;\r\n });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.grid?.G\r\n };\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n const request = new SystemCredentialParams();\r\n request.CredentialType = this.State.CredentialType;\r\n this.DataSources['Credentials'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n return this.systemCredentialEndpoint.ListCredentialsForCreations(request);\r\n });\r\n\r\n this.DS['Credentials']?.Reload();\r\n }\r\n\r\n OnSelectionChanged(event) {\r\n this.State.SelectedRows = event;\r\n }\r\n\r\n ShowMessageConfigDialog() {\r\n this.dialog.ShowDialogShort((data) => {\r\n const { NotificationDeliveryOption, LanguageID, UserCreationOptionID } = data;\r\n const params = new CreateCredentialsParams();\r\n params.Language = LanguageID;\r\n params.DeliveryOption = NotificationDeliveryOption;\r\n params.CredentialsForCreation = this.State.SelectedRows;\r\n params.UserCreationOption = UserCreationOptionID;\r\n this.Do(this.systemCredentialEndpoint.CreateCredentials(params), false, (data) => {\r\n this.ReloadComponent();\r\n this.UI.InfoMessage(`${this.RC('msgSuccess')}: ${data.Data} ${this.RC('lblTimes')}`);\r\n if (params.CredentialsForCreation?.length === 1) {\r\n const creds = params.CredentialsForCreation[0];\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: creds.EntryID , Type: creds.Type });\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEntitiesResponse, DataEditorView } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class DataEditorEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('DataEditor', api);\r\n }\r\n\r\n public ListViews(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ListViews');\r\n }\r\n\r\n public CheckPerformance(views: any) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckPerformance', views);\r\n }\r\n\r\n public CheckValidity(views: any) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckValidity', views);\r\n }\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseState, DataEditorView, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataEditorEndpoint } from '@m4u-angular/core/endpoints/data-editor.endpoint';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\n\r\nexport class State extends BaseState {\r\n Views: DataEditorView[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-view-list',\r\n templateUrl: './data-view-list.component.html',\r\n})\r\nexport class DataViewListComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private dataEditorEndpoint: DataEditorEndpoint) {\r\n super(A, 'DataViewListComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n this.Do(this.dataEditorEndpoint.ListViews(), false, (res) => this.State.Views = res.Entities);\r\n }\r\n\r\n CheckPerformance() {\r\n this.IsLoading = true;\r\n this.Do(this.dataEditorEndpoint.CheckPerformance({ Views: this.State.Views }), true, res => {\r\n this.State.Views = res.Entities;\r\n this.IsLoading = false;\r\n })\r\n }\r\n\r\n CheckValidity() {\r\n this.IsLoading = true;\r\n this.Do(this.dataEditorEndpoint.CheckValidity({ Views: this.State.Views }), true, res => {\r\n this.State.Views = res.Entities;\r\n this.IsLoading = false;\r\n })\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseEntityResponse, NotificationDispatch, NotificationDispatchListParams, SendNotificationDispatchParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { Observable } from 'rxjs';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class NotificationDispatchEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {\r\n super('NotificationDispatch', api);\r\n }\r\n \r\n public GetNotificationDispatchesReport(Params: NotificationDispatchListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetNotificationDispatchesReport', Params, options?.GetLoadOptions());\r\n }\r\n\r\n public SendNotificationDispatch(params: SendNotificationDispatchParams): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendNotificationDispatch', params);\r\n }\r\n\r\n public CancelPushNotification(NotificationDispatchID: number) : Observable> {\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CancelPushNotification', undefined, { NotificationDispatchID: NotificationDispatchID } );\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { \r\n BaseEntityResponse,\r\n BaseState, CredentialExternalInfo, NotificationDispatch, NotificationTemplate, SendNotificationDispatchParams\r\n} from '@m4u-angular/base/entities/BaseEntities';\r\nimport { \r\n EnumNotificationDeliveryOptions, EnumNotificationStatuses, EnumPageDisplayModes, EnumSystemOptions\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { NotificationDispatchEndpoint } from '@m4u-angular/core/endpoints/notification-dispatch.endpoint';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nexport class State extends BaseState {\r\n Recipients: CredentialExternalInfo[] = [];\r\n NotificationTemplate: NotificationTemplate;\r\n NotificationDeliveryOptions: any[] = [];\r\n Subject: string;\r\n Body: string;\r\n Header: string;\r\n ///When set to true, user should edit only Header text and Body text omiting HTML\r\n IsSimplifiedHtmlBodyEdit: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-dispatch',\r\n templateUrl: './notification-dispatch.component.html',\r\n styleUrls: ['./notification-dispatch.component.scss']\r\n})\r\nexport class NotificationDispatchComponent extends BasePageCRUDComponent {\r\n\r\n get IsReadOnly() : boolean {\r\n return !(this.Entity?.Status == EnumNotificationStatuses.Draft);\r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint,\r\n public sanitizer: DomSanitizer,\r\n private endpoint: NotificationDispatchEndpoint) {\r\n super(A, 'NotificationDispatchComponent', NotificationDispatch, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadNotificationTemplates();\r\n this.InitDeliveryOptions();\r\n }\r\n\r\n protected override OnEntityNew() {\r\n this.Entity.Status = EnumNotificationStatuses.Draft;\r\n this.Entity.CreatedDate = new Date();\r\n }\r\n\r\n \r\n OnNotificationTemplateChange(e) {\r\n if(e.value) {\r\n this.DS('NotificationTemplates').FindAsync(e.value).subscribe((item : NotificationTemplate) => {\r\n this.State.NotificationTemplate = item;\r\n\r\n this.State.IsSimplifiedHtmlBodyEdit = item.Name.startsWith('GenericNotificationDispatch') \r\n && this.Entity.DeliveryMethod == EnumNotificationDeliveryOptions.Email;\r\n\r\n this.State.Body = this.NotificationBody();\r\n this.State.Subject = item.Subject;\r\n });\r\n } else {\r\n this.State.NotificationTemplate = undefined;\r\n }\r\n }\r\n\r\n OnDeliveryMethodChange(e: any) {\r\n this.State.Body = this.NotificationBody();\r\n\r\n if(e.value != EnumNotificationDeliveryOptions.Email) {\r\n this.State.Subject = undefined;\r\n } else if(!this.State.Subject) {\r\n this.State.Subject = this.State.NotificationTemplate?.Subject;\r\n }\r\n }\r\n\r\n NotificationTemplateDisplayExpr(item?: NotificationTemplate) {\r\n if (!item) return;\r\n\r\n return `${item.Name}_${item.Language}`;\r\n }\r\n\r\n OnRecipientsSelectionChanged(recipients: CredentialExternalInfo[]) {\r\n this.State.Recipients = recipients;\r\n }\r\n\r\n OnSaveNotificationDispatch() {\r\n if (!this.IsValid()) {\r\n return;\r\n }\r\n\r\n this.ValidateValidationGroup(this.validationGroup).then((isValid) => {\r\n if (isValid) {\r\n const params = new SendNotificationDispatchParams();\r\n params.DeliveryMethod = this.Entity.DeliveryMethod;\r\n params.NotificationTemplateID = this.Entity.NotificationTemplateID;\r\n params.Name = this.Entity.Name;\r\n params.Description = this.Entity.Description;\r\n params.Subject = this.State.Subject;\r\n params.Body = this.State.Body;\r\n params.Header = this.State.Header;\r\n params.IsSimplifiedHtmlBodyEdit = this.State.IsSimplifiedHtmlBodyEdit;\r\n\r\n params.RecipientIDs = this.State.Recipients.map(r => r.EntryID);\r\n\r\n this.Do(\r\n this.endpoint.SendNotificationDispatch(params), \r\n false, \r\n (response) => {\r\n this.UI.InfoMessage(response.ResponseMessage);\r\n this.NotifyEntitySaved(response.Entity, NotificationDispatch);\r\n this.ClosePage();\r\n },\r\n (response) => {\r\n this.UI.StopMessage(response.ResponseMessage); \r\n\r\n if(response.ResponseExtendedMessage != 'validationError') {\r\n this.NotifyEntitySaved(response.Entity, NotificationDispatch);\r\n this.ClosePage();\r\n }\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n GetStatusColor() {\r\n switch(this.Entity.Status) {\r\n case EnumNotificationStatuses.Sent:\r\n return 'green-cyan';\r\n case EnumNotificationStatuses.Failure:\r\n return 'cinnabar';\r\n case EnumNotificationStatuses.Sending:\r\n return 'atomic-tangerine';\r\n case EnumNotificationStatuses.Draft:\r\n return 'portage';\r\n }\r\n }\r\n\r\n private IsValid() : boolean {\r\n if(!this.State.Recipients?.length){\r\n this.UI.StopMessage(this.RC('msgRecipientsAreEmpty'));\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private InitDeliveryOptions() {\r\n this.State.NotificationDeliveryOptions = this.LIST('NotificationDispatchDeliveryOptions')\r\n .filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n case EnumNotificationDeliveryOptions.PushMessage:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n });\r\n\r\n this.Entity.DeliveryMethod = this.State.NotificationDeliveryOptions[0]?.Value;\r\n }\r\n\r\n private LoadNotificationTemplates() {\r\n this.DataSources['NotificationTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.notificationTemplateEndpoint.GetList(options));\r\n \r\n }\r\n\r\n private NotificationBody() : string {\r\n if(this.State.IsSimplifiedHtmlBodyEdit) {\r\n return '';\r\n }\r\n\r\n switch (this.Entity.DeliveryMethod) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.State.NotificationTemplate?.HTMLBody;\r\n case EnumNotificationDeliveryOptions.PushMessage:\r\n return this.State.NotificationTemplate?.PushMessageBody;\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.State.NotificationTemplate?.WhatsAppBody;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.State.NotificationTemplate?.SMSBody;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { \r\n BaseEntitiesResponse, BaseEntity, BaseState, GenericListEntity, NotificationDispatch, NotificationDispatchListParams \r\n} from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationDispatchEndpoint } from '@m4u-angular/core/endpoints/notification-dispatch.endpoint';\r\nimport { NotificationEndpoint } from '@m4u-angular/core/endpoints/notification.endpoint';\r\nimport { \r\n EnumCRUDActions, EnumNotificationDeliveryOptions, EnumNotificationStatuses, EnumSystemOptions \r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { NotificationDispatchGridComponent } from '../notification-dispatch-grid/notification-dispatch-grid.component';\r\n\r\nexport class State extends BaseState {\r\n public FromDate: Date;\r\n public UntilDate: Date;\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public Statuses: EnumNotificationStatuses[] = [];\r\n public TemplateID: number;\r\n public Templates: any[];\r\n public RelevantNotificationDeliveryOptions: any[];\r\n public StatusesOptions: EnumNotificationStatuses[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-dispatch-list',\r\n templateUrl: './notification-dispatch-list.component.html',\r\n styleUrls: ['./notification-dispatch-list.component.scss']\r\n})\r\nexport class NotificationDispatchListComponent extends BasePageComponent {\r\n @ViewChild('notificationDispatchGrid') public notificationDispatchGrid: NotificationDispatchGridComponent;\r\n \r\n constructor(A: ServiceBagService,\r\n private notificationEndpoint: NotificationEndpoint,\r\n private notificationDispatchEndpoint: NotificationDispatchEndpoint) {\r\n super(A, 'NotificationDispatchListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnInitDataSources() {\r\n this.Do(this.notificationEndpoint.GetNotificationsTemplates(), false, (response: BaseEntitiesResponse) => {\r\n this.State.Templates = response.Entities;\r\n });\r\n\r\n this.LoadDeliveryOptions();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, \r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n\r\n if (ExternalEntityType === NotificationDispatch) {\r\n this.LoadDataSource();\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: false,\r\n GridExtender: () => this.notificationDispatchGrid?.G\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.FromDate = this.State.UntilDate = this.State.TemplateID = undefined;\r\n this.State.Statuses = [];\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n const params = new NotificationDispatchListParams();\r\n params.FromDate = this.State.FromDate;\r\n params.UntilDate = this.State.UntilDate;\r\n params.DeliveryMethod = this.State.DeliveryMethod;\r\n params.Statuses = this.State.Statuses;\r\n params.TemplateID = this.State.TemplateID;\r\n\r\n this.DataSources['NotificationDispatches'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.notificationDispatchEndpoint.GetNotificationDispatchesReport(params, options));\r\n }\r\n\r\n private LoadDeliveryOptions() {\r\n this.State.RelevantNotificationDeliveryOptions = this.LIST('NotificationDispatchDeliveryOptions')\r\n .sort((a, b) => a.SortOrder > b.SortOrder ? 1 : -1)\r\n .filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n case EnumNotificationDeliveryOptions.PushMessage:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseDataResponse, BaseEntitiesResponse, Log, LogParams} from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable } from 'rxjs';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class LogEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {\r\n super('Log', api);\r\n }\r\n \r\n public ListEx(Params: LogParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions());\r\n }\r\n\r\n public GetObjectTypes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetObjectTypes');\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, Log, LogParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LogEndpoint } from '@core/endpoints/log.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumLogLevel } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n ObjectType: string;\r\n ObjectID: number;\r\n Level: EnumLogLevel;\r\n Body: string;\r\n\r\n ObjectTypes: string[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-logs',\r\n templateUrl: './logs.component.html',\r\n styleUrls: ['./logs.component.scss']\r\n})\r\nexport class LogsComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private logEndpoint: LogEndpoint) {\r\n super(A, 'LogsComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.ObjectType = this.QueryParams.ObjectType;\r\n if (this.QueryParams.ObjectID) {\r\n this.State.ObjectID = +this.QueryParams.ObjectID;\r\n }\r\n this.NotifyReloadTitle();\r\n this._initDataSource();\r\n this._initObjectTypes();\r\n }\r\n\r\n public override GetTitle(): string {\r\n let title = this.RC('ttlLogs');\r\n\r\n if (this.State.ObjectType) {\r\n title = `${title}. ${this.State.ObjectType}`;\r\n }\r\n\r\n if (this.State.ObjectID) {\r\n title = `${title} - ${this.State.ObjectID}`;\r\n }\r\n\r\n return title;\r\n }\r\n\r\n public onSelectLog(log: Log) {\r\n this.State.Body = log?.Body;\r\n }\r\n\r\n public onApply() {\r\n this._initDataSource();\r\n }\r\n\r\n private _initDataSource() {\r\n const params = new LogParams();\r\n params.RelatedObjectID = !Utils.IsEmpty(this.State.ObjectID) ? +this.State.ObjectID : undefined;\r\n params.RelatedObjectType = this.State.ObjectType;\r\n params.Level = this.State.Level ? this.State.Level : EnumLogLevel.Unknown;\r\n\r\n this.DataSources['Logs'] = new DataSourceCustomAction( (options: DataLoadOptions) => \r\n this.logEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private _initObjectTypes() {\r\n this.Do(this.logEndpoint.GetObjectTypes(), false, (response) => {\r\n this.State.ObjectTypes = response.Data;\r\n });\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{State.Body}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","/* eslint-disable max-len */\r\nimport { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { PrepareRoutes } from '@core/framework/navigator.service';\r\nimport { ExceptionComponent } from '@core/exceptions/exception.component';\r\nimport { LoginGuard } from '@core/framework/login.guard';\r\nimport { CredentialsActivityStatusComponent } from '@ui/components/general/credential-activity-status/credentials-activity-status.component';\r\nimport { NotificationsHistoryComponent } from '@ui/notifications/notifications-history/notificationshistory.component';\r\nimport { NotificationViewComponent } from '@ui/notifications/notifications-history/notification-view/notificationview.component';\r\nimport { EmptyLayoutComponent } from '@ui/layouts/layout/empty-layout/emptylayout.component';\r\nimport { MainLayoutComponent } from '@ui/layouts/layout/main-layout/mainlayout.component';\r\nimport { ComingSoonComponent } from '@ui/components/login/coming-soon/comingsoon.component';\r\nimport { LoginComponent } from '@ui/components/login/login/login.component';\r\nimport { LoginOAuthComponent } from '@ui/components/login/login-oauth/login-oauth.component';\r\nimport { LogoutComponent } from '@ui/components/login/logout/logout.component';\r\nimport { SessionExpireComponent } from '@ui/components/login/session-expire/sessionexpire.component';\r\nimport { PasswordChangeComponent } from '@ui/components/password/password-change/passwordchange.component';\r\nimport { PasswordChangeExpiredComponent } from '@ui/components/password/password-change-expired/passwordchangeexpired.component';\r\nimport { PasswordManageComponent } from '@ui/components/password/password-manage/passwordmanage.component';\r\nimport { PasswordRecoveryComponent } from '@ui/components/password/password-recovery/passwordrecovery.component';\r\nimport { PasswordWelcomeComponent } from '@ui/components/password/password-welcome/passwordwelcome.component';\r\nimport { LoginByOtpComponent } from '@ui/components/login/login-by-otp/login-by-otp.component';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { NotificationServerListComponent } from '@ui/notifications/notification-server/list/notification-server-list.component';\r\nimport { NotificationServerComponent } from '@ui/notifications/notification-server/notification-server.component';\r\nimport { NotificationTemplateListComponent } from '@m4u-angular/ui/notifications/notification-template/notification-template-list/notification-template-list.component';\r\nimport { NotificationTemplateComponent } from '@m4u-angular/ui/notifications/notification-template/notification-template.component';\r\nimport { SystemOptionsComponent } from '@ui/components/general/system-options/system-options.component';\r\nimport { MidStoreComponent } from '@core/mid/mid-store.component';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { DemoLayoutComponent } from '@ui/demo/layouts/demo-layout/demo-layout.component';\r\nimport { DemoEditorsComponent } from '@ui/demo/components/editors/demo-editors.component';\r\nimport { DemoLayoutsComponent } from '@ui/demo/components/layouts/demo-layouts.component';\r\nimport { DemoSectionsComponent } from '@ui/demo/components/sections/demo-sections.component';\r\nimport { DemoCardsComponent } from '@ui/demo/components/cards/demo-cards.component';\r\nimport { DemoTabsComponent } from '@ui/demo/components/tabs/demo-tabs.component';\r\nimport { DemoGridsComponent } from '@ui/demo/components/grids/demo-grids.component';\r\nimport { DemoBottomSheetsComponent } from '@ui/demo/components/bottom-sheets/demo-bottom-sheets.component';\r\nimport { DemoPagesComponent } from '@ui/demo/components/pages/demo-pages.component';\r\nimport { HistoryViewComponent } from '@ui/components/general/history-view/historyview.component';\r\nimport {\r\n DemoPageToolbarButtonsComponent\r\n} from '@ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component';\r\nimport {\r\n DemoPageHeaderButtonsComponent\r\n} from '@ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component';\r\nimport { DemoSidebarsComponent } from '@ui/demo/components/sidebars/demo-sidebars.component';\r\nimport { DemoDialogsComponent } from '@ui/demo/components/dialogs/demo-dialogs.component';\r\nimport { DemoPipesComponent } from '@ui/demo/components/pipes/demo-pipes.component';\r\nimport { DemoComponentsComponent } from '@ui/demo/components/components/demo-components.component';\r\nimport { CredentialLoginHistoryComponent } from '@ui/components/general/credential-login-history/credential-login-history.component';\r\nimport { RequestHistoryListComponent } from '@ui/components/general/request-history/request-history-list/request-history-list.component';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { SystemCredentialsComponent } from '@m4u-angular/ui/components/general/system-credentials/system-credentials.component';\r\nimport { SystemCredentialsCreationComponent } from '@m4u-angular/ui/components/general/system-credentials-creation/system-credentials-creation.component';\r\nimport { DataViewListComponent } from '@m4u-angular/ui/components/general/data-views/data-view-list.component';\r\nimport { NotificationDispatchComponent } from '@m4u-angular/ui/notifications/notification-dispatch/notification-dispatch.component';\r\nimport { NotificationDispatchListComponent } from '@m4u-angular/ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component';\r\nimport { MenuButtonListComponent } from '@m4u-angular/ui/components/general/menu-button-list/menu-button-list.component';\r\n\r\nimport { LogsComponent } from '@ui/components/logs/logs.component';\r\n\r\nconst routes: Routes = [\r\n // Demo routes\r\n {\r\n path: 'demo', component: DemoLayoutComponent,\r\n children: [\r\n { path: 'buttons', component: DemoButtonsComponent },\r\n { path: 'editors', component: DemoEditorsComponent },\r\n { path: 'layouts', component: DemoLayoutsComponent },\r\n { path: 'components', component: DemoComponentsComponent },\r\n { path: 'sections', component: DemoSectionsComponent },\r\n { path: 'cards', component: DemoCardsComponent },\r\n { path: 'tabs', component: DemoTabsComponent },\r\n { path: 'grids', component: DemoGridsComponent },\r\n { path: 'page-examples', component: DemoPagesComponent },\r\n { path: 'page-examples/toolbar-buttons', component: DemoPageToolbarButtonsComponent },\r\n { path: 'page-examples/header-buttons', component: DemoPageHeaderButtonsComponent },\r\n { path: 'sidebars', component: DemoSidebarsComponent },\r\n { path: 'bottom-sheets', component: DemoBottomSheetsComponent },\r\n { path: 'dialogs', component: DemoDialogsComponent },\r\n { path: 'pipes', component: DemoPipesComponent }\r\n ]\r\n },\r\n //System routes\r\n {\r\n path: 'system', component: EmptyLayoutComponent,\r\n children: [\r\n { path: 'login', component: LoginComponent },\r\n { path: 'login-oauth', component: LoginOAuthComponent },\r\n { path: 'login-otp', component: LoginByOtpComponent },\r\n { path: 'logout', component: LogoutComponent },\r\n { path: 'sessionexpired', component: SessionExpireComponent },\r\n { path: 'exception', component: ExceptionComponent },\r\n { path: 'comingsoon', component: ComingSoonComponent },\r\n { path: 'passwordchange', component: PasswordChangeComponent, canActivate: [LoginGuard] },\r\n { path: 'passwordchangeexpired', component: PasswordChangeExpiredComponent },\r\n { path: 'passwordrecovery', component: PasswordRecoveryComponent },\r\n { path: 'passwordwelcome', component: PasswordWelcomeComponent },\r\n { path: 'midstore', component: MidStoreComponent },\r\n { path: 'buttons', component: DemoButtonsComponent }\r\n ]\r\n },\r\n {\r\n path: 'pages', component: MainLayoutComponent,\r\n children: [\r\n //General routes\r\n ...PrepareRoutes([\r\n { path: 'passwordmanage', component: PasswordManageComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n { path: 'menu', component: MenuButtonListComponent, data: { Menu: 'menu' }, canActivate: [LoginGuard] }]),\r\n {\r\n path: 'general',\r\n children: PrepareRoutes([\r\n {\r\n path: 'credentials-activity-status',\r\n component: CredentialsActivityStatusComponent,\r\n data: { Menu: 'credentials_activity_status' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notificationshistory',\r\n component: NotificationsHistoryComponent,\r\n data: { Menu: 'notificationshistory' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notificationview/:EntryID',\r\n component: NotificationViewComponent,\r\n data: { Menu: 'notificationview' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'notification-servers',\r\n component: NotificationServerListComponent,\r\n data: { Menu: 'notification_servers' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notification-server/:EntryID',\r\n component: NotificationServerComponent,\r\n data: { Menu: 'notification_server' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'notification-templates',\r\n component: NotificationTemplateListComponent,\r\n data: { Menu: 'notification_templates' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notification-template/:EntryID',\r\n component: NotificationTemplateComponent,\r\n data: { Menu: 'notification_template' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'notification-dispatches',\r\n component: NotificationDispatchListComponent,\r\n data: { Menu: 'notification_dispatches' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notification-dispatch/:EntryID',\r\n component: NotificationDispatchComponent,\r\n data: { Menu: 'notification_dispatch' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'system-options',\r\n component: SystemOptionsComponent,\r\n data: { Menu: 'system_options' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credential-login-history',\r\n component: CredentialLoginHistoryComponent,\r\n data: { Menu: 'credential_login_history' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'requests-history',\r\n component: RequestHistoryListComponent,\r\n data: { Menu: 'request_history' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'request-history/:EntryID', component: RequestHistoryComponent, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'historyview',\r\n component: HistoryViewComponent,\r\n data: { Menu: 'historyview' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credentials-report',\r\n component: SystemCredentialsComponent,\r\n data: { Menu: 'credentials_report' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credentials-creation',\r\n component: SystemCredentialsCreationComponent,\r\n data: { Menu: 'credentials_creation' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'data-views',\r\n component: DataViewListComponent,\r\n data: { Menu: 'data_views' }, canActivate: [LoginGuard]\r\n },\r\n { path: 'logs', component: LogsComponent, canActivate: [LoginGuard] }\r\n ])\r\n },\r\n //Custom anonymous routes\r\n ...PrepareRoutes(AppConfigService.loadConfig().RoutesAnonymous),\r\n //Custom protected routes\r\n ...PrepareRoutes(AppConfigService.loadConfig().RoutesProtected)\r\n ]\r\n },\r\n //Custom routes with empty layout\r\n {\r\n path: 'pages', component: EmptyLayoutComponent,\r\n children: PrepareRoutes(AppConfigService.loadConfig().RoutesWithEmptyLayout)\r\n },\r\n //Redirect to login on entry or to home page\r\n {\r\n path: '',\r\n redirectTo: AppConfigService.loadConfig().OnGetHomePagePath()\r\n ? `pages/${PrepareRoutes([{ path: AppConfigService.loadConfig().OnGetHomePagePath() }])[0].path}`\r\n : 'system/login',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: '**',\r\n component: ExceptionComponent,\r\n data: {\r\n MessageCode: 'msgRouteNotFound'\r\n }\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, {\r\n onSameUrlNavigation: 'reload',\r\n relativeLinkResolution: 'legacy'\r\n })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule {\r\n}\r\n","import { ErrorHandler, Injectable } from \"@angular/core\";\r\nimport { AppInjector } from \"../injector/injector.module\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { ClientException } from \"@base/entities/BaseEntities\";\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SysGlobals } from \"../framework/sysglobals\";\r\nimport { environment } from \"../../environment/environment\";\r\nimport { NavigatorService } from \"../framework/navigator.service\";\r\n\r\n@Injectable()\r\nexport class ExceptionHandler implements ErrorHandler {\r\n handleError(error) {\r\n //Error info\r\n var Exception = new ClientException;\r\n Exception.Message = error.message || error.toString();\r\n Exception.Type = error.name;\r\n Exception.StackTrace = error.stack;\r\n\r\n //Dispatch 'errorOccured' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event['errorMessage'] = Exception.Message;\r\n event.initEvent('errorOccured', true, true);\r\n document.dispatchEvent(event);\r\n\r\n SysGlobals.LastException = Exception;\r\n\r\n //Skip when debugging\r\n if (!environment.production) {\r\n console.error(error);\r\n throw (error);\r\n }\r\n\r\n //Print error\r\n console.error(error);\r\n\r\n //Device info\r\n var Detector = AppInjector.get(DeviceDetectorService);\r\n Exception.Device = Detector.device;\r\n Exception.DeviceType = (!Detector.isMobile() ? 'D' : (Detector.isMobile() ? 'M' : 'T'));\r\n Exception.Browser = Detector.browser;\r\n Exception.BrowserVersion = Detector.browser_version;\r\n Exception.OS = Detector.os;\r\n Exception.OSVersion = Detector.os_version;\r\n\r\n //Execute\r\n var api = AppInjector.get(APIGatewayService);\r\n api.ExecutePostAction(\"System\", \"LogClientException\", Exception).subscribe(x => {\r\n var Navigator = AppInjector.get(NavigatorService);\r\n Navigator.Navigate(['/system/exception']);\r\n history.replaceState(null, null, '/system/exception') // replace last broken page url\r\n });\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport class Environment \r\n{ \r\n production: boolean; \r\n version: string;\r\n dbSchema: string;\r\n}\r\n\r\nexport const ENVIRONMENT = new InjectionToken('Token for environment constant');\r\n","import { Component } from \"@angular/core\";\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\n\r\nclass State extends BaseState\r\n{\r\n DataSourceName: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-commonsettings',\r\n templateUrl: './commonsetting.component.html'\r\n})\r\n\r\nexport class CommonSettingComponent extends BasePageComponent\r\n{\r\n override ModuleName = this.A.Navigator.GetCustomRouteData().ModuleName || '';\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'CommonSettingComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitTitle()\r\n {\r\n const title = this.A.Navigator.GetCustomRouteData().Title;\r\n if (title) { return this.RC(title); }\r\n }\r\n\r\n protected override OnInitState(): void\r\n {\r\n this.State.DataSourceName = this.A.Navigator.GetCustomRouteData().DataSource;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent {\r\n @Input() Class: string = '';\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxAccordionComponent, DxTabsComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss']\r\n})\r\nexport class TabsComponent implements AfterViewInit {\r\n\r\n @Input() Items: any[];\r\n\r\n private _selectedIndex: number;\r\n @Input() set SelectedIndex(value: number) {\r\n if (Utils.IsEmpty(value)) return;\r\n\r\n this._selectedIndex = value;\r\n this.SelectedIndexChange.emit(value);\r\n }\r\n get SelectedIndex() {\r\n return this._selectedIndex;\r\n }\r\n\r\n @Input() set Visible(value: boolean) {\r\n this._visible = value;\r\n this.SetVisibility();\r\n }\r\n\r\n @Input() IsTabsNavHidden: boolean = false;\r\n @Input() IsShowOnlyTabs: boolean = false;\r\n @Input() IsShowOnlyAccordion: boolean = false;\r\n @Input() IsShowStepNumbers: boolean = false;\r\n @Input() CustomButtonText: string;\r\n @Input() CustomButtonIcon: string;\r\n\r\n @Output() SelectedIndexChange = new EventEmitter();\r\n @Output() OnItemClick = new EventEmitter();\r\n @Output() OnCustomButtonClicked = new EventEmitter();\r\n\r\n @ViewChild('tabs') tabs: DxTabsComponent;\r\n @ViewChild('accordion') accordion: DxAccordionComponent;\r\n\r\n get Instance() {\r\n const instance = (this.tabs && this.tabs.instance) || (this.accordion && this.accordion.instance);\r\n if (instance && !instance['_contentReadyAction']) instance['_initContentReadyAction']();\r\n return instance;\r\n }\r\n\r\n private _currentItemIndex;\r\n private _visible = true;\r\n IsInitialized: boolean;\r\n\r\n constructor(public screen: ScreenService) { }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.IsInitialized = true;\r\n }, 200);\r\n this.accordion && this.accordion.instance.updateDimensions();\r\n this.SetVisibility();\r\n this.Instance && this.Instance.repaint();\r\n this._currentItemIndex = this.SelectedIndex;\r\n }\r\n\r\n onItemClick(event) {\r\n this.OnItemClick.emit(event);\r\n this.SelectedIndexChange.emit(event.itemIndex);\r\n if (event.itemIndex != this._currentItemIndex) {\r\n this.accordion && this.accordion.instance.repaint();\r\n this._currentItemIndex = event.itemIndex;\r\n }\r\n }\r\n\r\n OnCustomButtonClick(event, index) {\r\n if (event) event.stopPropagation();\r\n this.OnCustomButtonClicked.emit(index);\r\n }\r\n\r\n SetVisibility() {\r\n if (this.tabs) this.tabs.visible = this._visible;\r\n else if (this.accordion) this.accordion.visible = this._visible;\r\n } \r\n \r\n ResetSelectedAndRepaint() {\r\n this.tabs.instance.option('selectedIndex', 0);\r\n this.Instance && this.Instance.repaint();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ index + 1 }}
\\r\\n
{{tab.text}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { ResourcesService } from '../../../../core/framework/resources.service';\r\nimport { AppConfigService, VersionDescriptor } from '../../../../configuration/app.config.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { Orientation, ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n selector: 'm4u-login-page',\r\n templateUrl: './login-base.component.html',\r\n styleUrls: ['./login-base.component.scss']\r\n})\r\nexport class LoginBaseComponent implements OnInit, OnDestroy {\r\n @Input() MainTitle: string;\r\n @Input() AdditionalTitle: string;\r\n\r\n IsMultiLanguage: boolean;\r\n Language: string;\r\n ModulesVersion: VersionDescriptor[] = [];\r\n ScreenMode: string;\r\n IsScreenModeVisible = false;\r\n Orientation: Orientation;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(public resourcesService: ResourcesService,\r\n private appConfigService: AppConfigService,\r\n private languageService: LanguageService,\r\n public screen: ScreenService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.IsMultiLanguage = this.appConfigService.M4UConfig.isMultiLanguage;\r\n this._subscriptions.push(\r\n this.languageService.Language$.subscribe(language => (this.Language = language) && setTimeout(() => this.delteRtl()))\r\n );\r\n this.ModulesVersion = this.appConfigService.getModulesVersion();\r\n\r\n if (this.screen.IsDesktop()) {\r\n this.ScreenMode = 'Desktop';\r\n } else if (this.screen.IsTablet()) {\r\n this.ScreenMode = 'Tablet';\r\n } else if (this.screen.IsMobile()) {\r\n this.ScreenMode = 'Mobile';\r\n }\r\n\r\n this.Orientation = this.screen.Orientation();\r\n this.screen.LogDeviceInfo();\r\n }\r\n\r\n OnToggleScreenMode(e) {\r\n e && e.stopPropagation && e.stopPropagation();\r\n this.IsScreenModeVisible = !this.IsScreenModeVisible;\r\n }\r\n\r\n private delteRtl(): void { \r\n if (this.screen.IsRTL()) {\r\n return;\r\n }\r\n\r\n const rtlElements = document.querySelectorAll('.login-form-content .dx-rtl');\r\n rtlElements.forEach(x => x.classList.remove('dx-rtl'));\r\n }\r\n\r\n OnLanguageChanged(e) {\r\n this.languageService.SetLanguage(this.Language);\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.resourcesService.RC('$$AppTitles.LoginAppName', moduleName);\r\n }\r\n\r\n GetAppCompanyName() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.resourcesService.RC('$$AppTitles.LoginCompanyName', moduleName);\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n GetLanguageIcon() {\r\n const path = 'assets/icons/';\r\n const iconName = this.Language.toLowerCase() + '.svg';\r\n return `${path}${iconName}`;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{MainTitle || GetAppTitle()}}
\\r\\n
{{AdditionalTitle || GetAppCompanyName()}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DxButtonComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss']\r\n})\r\nexport class ButtonComponent {\r\n @Input() Mode: 'transparent' | 'light' | 'base' | 'solid' | 'text';\r\n @Input() Type: 'success' | 'danger' | 'normal' | 'default';\r\n @Input() Size: 'default' | 'large' | 'small' = 'default';\r\n @Input() Icon: string;\r\n @Input() TabIndex: number;\r\n @Input() Text: string;\r\n @Input() Hint: string;\r\n @Input() Class: string;\r\n @Input() Visible = true;\r\n @Input() FocusStateEnabled: boolean;\r\n @Input() Disabled: boolean;\r\n @Input() IsRound: boolean;\r\n @Input() IsFullWidth: boolean;\r\n @Input() IsHideTextOnMobile: boolean;\r\n @Input() IsLoading: boolean;\r\n @Input() DoNotUseIconColorForText: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n @ViewChild('btn') btn: DxButtonComponent;\r\n\r\n private _id: string;\r\n get ID() {\r\n if (!this._id) this._id = 'btn_' + Math.random().toString(36).replace('0.', '');\r\n return this._id;\r\n }\r\n\r\n constructor(public screen: ScreenService) {\r\n }\r\n\r\n GetClass() {\r\n return `${this.Class || ''} ${this.Mode ? ('btn-' + this.Mode) : ''} ${this.IsRound ? ' btn-round' : ''} btn-size-${this.Size} ${this.DoNotUseIconColorForText ? 'do-not-use-icon-color-for-text' : ''}`;\r\n }\r\n\r\n GetText() {\r\n return this.screen.IsMobile() && this.IsHideTextOnMobile ? '' : this.Text;\r\n }\r\n\r\n GetStylingMode() {\r\n switch (this.Mode) {\r\n case 'transparent':\r\n case 'base':\r\n return 'outlined';\r\n case 'solid':\r\n return 'contained';\r\n case 'light':\r\n case 'text':\r\n return 'text';\r\n }\r\n }\r\n\r\n Click(e) {\r\n this.OnClick.emit(e.event);\r\n }\r\n\r\n Repaint() {\r\n this.btn && this.btn.instance && this.btn.instance.repaint();\r\n }\r\n\r\n OnTooltipShowing(e) {\r\n e.component?.content()?.parentElement?.classList?.add('button-tooltip');\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{Hint}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialType, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credentialactivitystatus-grid',\r\n templateUrl: './credentials-activity-status-grid.component.html',\r\n styleUrls: ['./credentials-activity-status-grid.component.scss']\r\n})\r\nexport class CredentialActivityStatusGridComponent extends BaseGridComponent{\r\n @Input() CredentialsInfo: CredentialType[];\r\n @Output() OnRefresh = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CredentialActivityStatusGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnGetLastUsedBeforeText(rowData): string {\r\n return DateHelpers.GetDateApproximate((rowData as CredentialActivityStatus).LastUseDate, false);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnGoToLoginHistory'),\r\n visible: true,\r\n onClick: () => this.OnGoToLoginHistory(options)\r\n }, {\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.OnGoToRequestsHistory(options)\r\n }];\r\n }\r\n\r\n private OnGoToLoginHistory(options) {\r\n this.Navigate(['pages/general/credential-login-history'], { CredentialID: options.data.CredentialID });\r\n }\r\n\r\n private OnGoToRequestsHistory(options) {\r\n this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.CredentialID });\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n this.OnRefresh.emit();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DxTooltipComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.scss']\r\n})\r\nexport class TagComponent {\r\n @Input() Size: 'small' | 'large' = 'small';\r\n @Input() Icon: string;\r\n @Input() Text: string;\r\n @Input() Hint: string;\r\n @Input() Visible: boolean;\r\n @Input() Color: string = '#0098fa';\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n \r\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {\r\n }\r\n\r\n ngOnInit() {\r\n this.SetElementStyles();\r\n }\r\n\r\n SetElementStyles() {\r\n const largeTagHeight = '36px';\r\n const smallTagHeight = '28px';\r\n const height = this.Size === 'small' ? smallTagHeight : largeTagHeight;\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'style', `--tag-color: ${this.Color}; --tag-height: ${height}`);\r\n }\r\n\r\n Click(e) {\r\n this.OnClick.emit(e);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n {{ Text }}\\r\\n \\r\\n \\r\\n {{ Hint }} \\r\\n \\r\\n\\r\\n\";","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { SessionService, SessionStates } from '@m4u-angular/core/framework/session.service';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\nimport { SystemEndpoint } from '@core/endpoints/system.endpoint';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n@Component({\r\n selector: 'm4u-session-expired',\r\n templateUrl: './session-expired.component.html',\r\n styleUrls: ['./session-expired.component.scss']\r\n})\r\nexport class SessionExpiredComponent implements OnInit, OnDestroy {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n private sessionState$Subscription: Subscription;\r\n // @ts-ignore\r\n private isMessageDialogInDOM: boolean = true;\r\n\r\n constructor(private sessionService: SessionService,\r\n private resourcesService: ResourcesService,\r\n private navigatorService: NavigatorService,\r\n private systemOptionsService: SystemOptionsService,\r\n private systemEndpoint: SystemEndpoint,\r\n private sidebarService: SidebarService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.sessionState$Subscription = this.sessionService.sessionStateChanged$\r\n .subscribe(state => {\r\n if (state === SessionStates.AlmostExpired || state === SessionStates.Expired) {\r\n this.ShowExpiredDialog(state);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.sessionState$Subscription && this.sessionState$Subscription.unsubscribe();\r\n }\r\n\r\n ShowExpiredDialog(state: SessionStates) {\r\n const showDialog = (title, prompt, onClose?: (e: any) => void) => {\r\n this.messageDialog.Type = EnumMessageBoxTypes.Custom;\r\n if (state === SessionStates.AlmostExpired) {\r\n this.messageDialog.Buttons = [\r\n { Text: this.resourcesService.RC('btnLogOff'), ButtonID: 0 },\r\n { Text: this.resourcesService.RC('btnStayConnected'), ButtonID: 1 }\r\n ];\r\n }\r\n else if (state === SessionStates.Expired) {\r\n this.messageDialog.Buttons = [\r\n { Text: this.resourcesService.RC('btnGoToHomePage'), ButtonID: 0 },\r\n ];\r\n }\r\n this.messageDialog.Title = title;\r\n this.messageDialog.Prompt = prompt;\r\n this.messageDialog.ShowDialogShort(onClose);\r\n };\r\n\r\n if (state === SessionStates.AlmostExpired &&\r\n this.systemOptionsService.getSystemOptionAsBoolean(EnumSystemOptions.ShowAlmostExpiredTimeoutAlert)) {\r\n showDialog(\r\n this.resourcesService.RC('lblSessionAlmostExpiredTitle'),\r\n this.resourcesService.RC('lblSessionAlmostExpiredPrompt'), e => {\r\n if (e === 0) {\r\n this.sidebarService.ClearSidebars();\r\n this.navigatorService.Navigate(['/system/logout']);\r\n } else if (e === 1) {\r\n this.systemEndpoint.KeepAlive().subscribe(_ => { });\r\n }\r\n });\r\n }\r\n\r\n if (state === SessionStates.Expired &&\r\n this.systemOptionsService.getSystemOptionAsBoolean(EnumSystemOptions.ShowExpiredTimeoutAlert)) {\r\n showDialog(this.resourcesService.RC('lblSessionExpiredTitle'), this.resourcesService.RC('lblSessionExpiredPrompt'), () => {\r\n // Switch off/on a message-dialog to restart the native angular lifecycle. \r\n // Hack! Related to an issue when the message-box doesn't appear after the first showing.\r\n // Remove after an issue will be fixed.\r\n this.isMessageDialogInDOM = false;\r\n\r\n setTimeout(() => {\r\n this.sidebarService.ClearSidebars();\r\n this.navigatorService.Navigate(['/system/login']);\r\n this.isMessageDialogInDOM = true;\r\n }, 200);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","export default \"\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-gridbottomcontainer',\r\n templateUrl: './grid-bottom-container.component.html',\r\n styleUrls: ['./grid-bottom-container.component.scss']\r\n})\r\nexport class GridBottomContainerComponent { } //TODO: delete\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","import {AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-tooltip',\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.scss']\r\n})\r\nexport class TooltipComponent implements AfterViewInit {\r\n // @ts-ignore\r\n private LabelLines: string[] = [];\r\n\r\n @Input() IconClass: string;\r\n @Input() IconColor: string;\r\n @Input() set Label(value: string) {\r\n this.LabelLines = value ? value.split('\\n') : [];\r\n }\r\n\r\n @ViewChild('tooltipIcon') tooltipEl: ElementRef;\r\n\r\n constructor(private renderer: Renderer2) {\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.InitTooltipContainer();\r\n }\r\n\r\n public InitTooltipContainer(): string {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'dx-icon');\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'tooltip-icon-fonst-size');\r\n\r\n if (this.IconClass) {\r\n if (this.IconClass.includes('mdi')) {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi');\r\n }\r\n\r\n this.renderer.addClass(this.tooltipEl.nativeElement, this.IconClass);\r\n } else {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi');\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi-information');\r\n }\r\n\r\n if (this.IconColor) {\r\n this.renderer.setStyle(this.tooltipEl.nativeElement, 'color', this.IconColor);\r\n return;\r\n }\r\n\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'tooltip-icon-color');\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n
{{labelLine}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import {ComponentFactoryResolver, ComponentRef, Directive, Input, OnChanges, OnInit, SimpleChanges, ViewContainerRef} from '@angular/core';\r\nimport {TooltipComponent} from '@ui/components/tooltip/tooltip.component';\r\nimport {DxTextBoxComponent} from 'devextreme-angular';\r\n\r\nexport class M4UConfigTooltipDirectiveBase implements OnInit, OnChanges {\r\n\r\n @Input() Label: string;\r\n @Input() Visible = true;\r\n private _viewContainerRef: ViewContainerRef;\r\n private _componentFactoryResolver: ComponentFactoryResolver\r\n private _tooltipComponent: ComponentRef;\r\n\r\n constructor(viewContainerRef: ViewContainerRef, componentFactoryResolver: ComponentFactoryResolver) {\r\n this._viewContainerRef = viewContainerRef;\r\n this._componentFactoryResolver = componentFactoryResolver;\r\n }\r\n\r\n ngOnInit() {\r\n this.SetVisible();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.Visible && changes.Visible.currentValue !== changes.Visible.previousValue) {\r\n this.SetVisible();\r\n }\r\n if (changes.Label && changes.Label.currentValue !== changes.Label.previousValue) {\r\n if (this._tooltipComponent) {this._tooltipComponent.instance.Label = this.Label; }\r\n }\r\n }\r\n\r\n SetVisible() {\r\n if (this.Visible) {\r\n if (!this._viewContainerRef.element.nativeElement.classList.contains('with-tooltip')) {\r\n this._viewContainerRef.element.nativeElement.classList.add('with-tooltip');\r\n }\r\n if (!this._tooltipComponent) {\r\n const componentFactory = this._componentFactoryResolver.resolveComponentFactory(TooltipComponent);\r\n this._tooltipComponent = this._viewContainerRef.createComponent(componentFactory);\r\n }\r\n else {\r\n this._viewContainerRef.insert(this._tooltipComponent.hostView);\r\n }\r\n this._tooltipComponent.instance.Label = this.Label;\r\n }\r\n else {\r\n if (this._viewContainerRef.element.nativeElement.classList.contains('with-tooltip')) {\r\n this._viewContainerRef.element.nativeElement.classList.remove('with-tooltip');\r\n }\r\n if (this._tooltipComponent) {\r\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._tooltipComponent.hostView));\r\n }\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: ':not(dx-text-box)[configTooltip]',\r\n})\r\nexport class M4UConfigTooltipDirective extends M4UConfigTooltipDirectiveBase {\r\n constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(viewContainerRef, componentFactoryResolver);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'dx-text-box[configTooltip]',\r\n})\r\nexport class M4UConfigTextBoxTooltipDirective extends M4UConfigTooltipDirectiveBase {\r\n\r\n constructor(private textBox: DxTextBoxComponent, private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(viewContainerRef, componentFactoryResolver);\r\n }\r\n\r\n override SetVisible() {\r\n super.SetVisible();\r\n if (this.Visible) {\r\n if (!this.textBox.buttons) {\r\n this.textBox.buttons = [];\r\n }\r\n\r\n if (this.textBox.buttons.find((b: any) => b.name === 'tooltip') === undefined) {\r\n this.textBox.buttons.push({\r\n name: 'tooltip',\r\n location: 'after',\r\n options: {\r\n hoverStateEnabled: false,\r\n elementAttr: {class: 'tooltip-placeholder-button'}\r\n }\r\n });\r\n setTimeout(() => this.textBox.instance.repaint());\r\n }\r\n }\r\n else {\r\n if (this.textBox.buttons) {\r\n this.textBox.buttons = this.textBox.buttons.filter((b: any) => b.name !== 'tooltip');\r\n setTimeout(() => this.textBox.instance.repaint());\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, OnInit } from '@angular/core';\r\nimport { DxTextBoxComponent } from 'devextreme-angular';\r\n\r\n@Directive({\r\n selector: '[configViewPasswordButton]',\r\n})\r\nexport class M4UConfigViewPasswordDirective implements OnInit {\r\n\r\n constructor(private textBox: DxTextBoxComponent) {\r\n }\r\n\r\n ngOnInit() {\r\n const button = {\r\n name: 'viewPassword',\r\n location: 'after',\r\n options: {\r\n icon: 'assets/eye-open.svg',\r\n elementAttr: { class: 'btn-size-small password-view-btn', style: 'margin:0;' },\r\n type: 'normal',\r\n onClick: (e) => {\r\n this.textBox.mode = this.textBox.mode === 'text' ? 'password' : 'text';\r\n const icon = this.textBox.mode === 'text' ? 'assets/eye-closed.svg' : 'assets/eye-open.svg';\r\n e.component.option('icon', icon);\r\n }\r\n }\r\n };\r\n if (!this.textBox.buttons) {\r\n this.textBox.buttons = [];\r\n }\r\n this.textBox.buttons.unshift(button as any);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationService } from '@m4u-angular/core/framework/notification.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n UnreadCount: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-badge',\r\n templateUrl: './push-message-badge.component.html',\r\n styleUrls: ['./push-message-badge.component.scss']\r\n})\r\nexport class PushMessageBadgeComponent extends BaseComponent {\r\n\r\n private _subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationService: NotificationService) {\r\n super(A, 'PushMessageBadgeComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscription = this.notificationService.NotificationUnread$\r\n .subscribe((unreadCount) => this.State.UnreadCount = unreadCount);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscription && this._subscription.unsubscribe();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{ State.UnreadCount }}\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, NotificationServer } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server-grid',\r\n templateUrl: './notification-server-grid.component.html',\r\n styleUrls: ['./notification-server-grid.component.scss']\r\n})\r\nexport class NotificationServerGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationServerGridComponent', NotificationServer, BaseState);\r\n }\r\n\r\n OnNavigate(e: any) {\r\n this.Navigate(['/pages/general/notification-server', e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-grid',\r\n templateUrl: './notification-template-grid.component.html',\r\n styleUrls: ['./notification-template-grid.component.scss']\r\n})\r\nexport class NotificationTemplateGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationTemplateGridComponent', NotificationTemplate, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/general/notification-template', e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\n\r\n@Injectable()\r\nexport class NotificationConfigurationBaseService extends BaseService {\r\n\r\n GetButtons(notification: Notification): any[] {\r\n return [];\r\n }\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, NotificationDispatch } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationDispatchEndpoint } from '@m4u-angular/core/endpoints/notification-dispatch.endpoint';\r\nimport { EnumMessageBoxTypes, EnumNotificationDeliveryOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-dispatch-grid',\r\n templateUrl: './notification-dispatch-grid.component.html',\r\n styleUrls: ['./notification-dispatch-grid.component.scss']\r\n})\r\nexport class NotificationDispatchGridComponent extends BaseGridComponent {\r\n @ViewChild('messageDialog') messageDialog: MessageBoxDialogComponent;\r\n \r\n constructor(A: ServiceBagService,\r\n private notificationDispatchEndpoint: NotificationDispatchEndpoint) {\r\n super(A, 'NotificationDispatchGridComponent', NotificationDispatch, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [\r\n {\r\n text: this.RC('btnCancelNotifications'),\r\n visible: options?.data?.CanCancel,\r\n onClick: () => this.OnCancelPushNotifications(options)\r\n }\r\n ];\r\n }\r\n\r\n private OnCancelPushNotifications(options: any) {\r\n if(!options?.data?.DeliveryMethod || !options?.data?.EntryID) {\r\n return;\r\n }\r\n\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Prompt = this.RC('lblCancelNotificationsPrompt');\r\n \r\n this.messageDialog.ShowDialogShort(() => {\r\n this.Do(\r\n this.notificationDispatchEndpoint.CancelPushNotification(options.data.EntryID), \r\n true, \r\n () => {\r\n this.NotifyEntitySaved(undefined, NotificationDispatch);\r\n }\r\n );\r\n }); \r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntitiesResponse, BaseEntity, BaseState, CredentialsCheckerMetadata, \r\n CredentialExternalInfo, CredentialType, GenericListEntity, SystemCredentialParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@m4u-angular/core/endpoints/system-credentials.endpoint';\r\nimport { EnumYesNo } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { \r\n SystemCredentialsGridComponent \r\n} from '@m4u-angular/ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component';\r\n\r\nexport class State extends BaseState {\r\n CredentialTypes: CredentialType[];\r\n AdditionalInfoMetadata: CredentialsCheckerMetadata;\r\n SelectedRows: CredentialExternalInfo[] = [];\r\n CredentialType: number;\r\n CredentialID: number;\r\n IsActive: EnumYesNo | undefined = undefined;\r\n IsPendingWelcome: EnumYesNo | undefined = undefined;\r\n IsLockedOut: EnumYesNo | undefined = undefined;\r\n CredentialFilters: GenericListEntity[] = [];\r\n CredentialFilter: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-dispatch-recipients',\r\n templateUrl: './notification-dispatch-recipients.component.html',\r\n styleUrls: ['./notification-dispatch-recipients.component.scss']\r\n})\r\nexport class NotificationDispatchRecipientsComponent extends BasePageComponent {\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @ViewChild(SystemCredentialsGridComponent) grid: SystemCredentialsGridComponent;\r\n\r\n get IsAllowPagination() : boolean {\r\n return !this.State.CredentialFilter;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private systemCredentialEndpoint: SystemCredentialsEndpoint,) {\r\n super(A, 'NotificationDispatchRecipientsComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadSystemCredentials();\r\n\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialTypes = response.Entities;\r\n });\r\n\r\n this.Do(this.systemCredentialEndpoint.GetAdditionalInfoMetadata(), false, (response) => {\r\n this.State.AdditionalInfoMetadata = response.Data;\r\n });\r\n\r\n this.Do(\r\n this.systemCredentialEndpoint.GetAvailableCredentialFilters(), \r\n false, \r\n (response: BaseEntitiesResponse) => {\r\n this.State.CredentialFilters = response.Entities ?? [];\r\n }\r\n );\r\n }\r\n\r\n OnFilterChanged() {\r\n this.grid.G.gridAny?.instance?.getScrollable()?.scrollTo({ top: 0 });\r\n this.LoadSystemCredentials();\r\n }\r\n\r\n OnCredentialsSelectionChanged(credentials: CredentialExternalInfo[]) {\r\n this.OnSelectionChanged.emit(credentials);\r\n }\r\n\r\n private LoadSystemCredentials() {\r\n this.DataSources['SystemCredentials'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const request = new SystemCredentialParams();\r\n request.CredentialType = this.State.CredentialType;\r\n request.CredentialID = this.State.CredentialID;\r\n request.IsActive = this.ToRequestBoolParam(this.State.IsActive);\r\n request.IsPendingWelcome = this.ToRequestBoolParam(this.State.IsPendingWelcome);\r\n request.IsLockedOut = this.ToRequestBoolParam(this.State.IsLockedOut);\r\n request.CredentialFilter = this.State.CredentialFilter;\r\n return this.systemCredentialEndpoint.ListSystemCredentials(request, options);\r\n }, undefined, undefined, !this.IsAllowPagination);\r\n\r\n this.DS['SystemCredentials']?.Reload();\r\n }\r\n\r\n private ToRequestBoolParam(value: EnumYesNo | undefined) {\r\n if(value) {\r\n return value === EnumYesNo.Yes;\r\n }\r\n\r\n return undefined;\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { AfterViewInit, Component, Input } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntitiesResponse, BaseState, GenericListEntity, NotificationListParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationEndpoint } from '@m4u-angular/core/endpoints/notification.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { EnumNotificationDeliveryOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n Templates: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-dispatch-notifications',\r\n templateUrl: './notification-dispatch-notifications.component.html',\r\n})\r\nexport class NotificationDispatchNotificationsComponent extends BaseComponent implements AfterViewInit {\r\n @Input() NotificationDispatchID: number;\r\n @Input() NotificationDispatchDeliveryMethod: EnumNotificationDeliveryOptions;\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationEndpoint: NotificationEndpoint) {\r\n super(A, 'NotificationDispatchNotificationsComponent', State);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n this.Do(this.notificationEndpoint.GetNotificationsTemplates(), false, (response: BaseEntitiesResponse) => {\r\n this.State.Templates = response.Entities;\r\n });\r\n \r\n const params = new NotificationListParams();\r\n params.NotificationDispatchID = this.NotificationDispatchID;\r\n\r\n this.DataSources['Notifications'] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.notificationEndpoint.GetNotificationsReport(params, options),\r\n undefined, undefined, false);\r\n }\r\n}","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationEndpoint } from '@m4u-angular/core/endpoints/notification.endpoint';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { NotificationConfigurationBaseService } from '@m4u-angular/core/framework/notification-configuration-base.service';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { BottomSheetContext } from 'swipe-bottom-sheet/angular';\r\nimport { Notification } from '../../../base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message',\r\n templateUrl: './push-message.component.html',\r\n styleUrls: ['./push-message.component.scss']\r\n})\r\nexport class PushMessageComponent extends BaseComponent {\r\n\r\n private _notification: Notification;\r\n @Input() set Notification(value: Notification) {\r\n if (!value) return;\r\n this._notification = value;\r\n this.NotificationButtons = this.notificationConfigurationService.GetButtons(value);\r\n }\r\n get Notification() { return this._notification; }\r\n\r\n @Input() BottomSheetContext: BottomSheetContext;\r\n @Output() OnNotificationRead = new EventEmitter();\r\n\r\n NotificationButtons: any[];\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint,\r\n private notificationConfigurationService: NotificationConfigurationBaseService) {\r\n super(A, 'PushMessageComponent', BaseState);\r\n }\r\n\r\n OnItemClick() {\r\n if (!this.Notification || this.Notification.IsRead) return;\r\n\r\n this.Notification.IsRead = true;\r\n setTimeout(() => this.Do(this.pushMessageEndpoint.ReadPushNotification(this.Notification.EntryID), false,\r\n (response: BaseResponse) => response.IsSuccess && this.OnNotificationRead.emit()), 500);\r\n }\r\n\r\n IsNotificationButtonsExists() {\r\n return this.NotificationButtons && this.NotificationButtons.length && this.NotificationButtons.some(x => x.Visible);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
{{ Notification.CreatedDate | formatDateApproximate }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationService } from '@m4u-angular/core/framework/notification.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Message, MessageService } from 'primeng/api';\r\nimport { Toast } from 'primeng/toast';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-toasts',\r\n templateUrl: './push-message-toasts.component.html',\r\n styleUrls: ['./push-message-toasts.component.scss']\r\n})\r\nexport class PushMessageToastsComponent extends BaseComponent {\r\n\r\n private notificationsSubscription: Subscription;\r\n Notifications: Notification[] = [];\r\n\r\n @ViewChild('toast') toast: Toast;\r\n \r\n constructor(A: ServiceBagService,\r\n private notificationService: NotificationService,\r\n private messageService: MessageService) {\r\n super(A, 'PushMessageToastsComponent', BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.notificationsSubscription = this.notificationService.Notifications$\r\n .subscribe((notifications: Notification[]) => {\r\n this.Notifications = notifications;\r\n \r\n const messages = this.Notifications.map(x => this.ConvertToMessage(x));\r\n this.ShowToasts(messages);\r\n });\r\n }\r\n\r\n private ConvertToMessage(notitification: Notification): Message {\r\n return { \r\n id: notitification.EntryID, \r\n key: 'pm', \r\n life: 15000, \r\n closable: false, \r\n styleClass: 'push-message-toast', \r\n data: notitification \r\n } as Message;\r\n }\r\n\r\n private ShowToasts(messages: Message[]) {\r\n setTimeout(() => this.messageService.addAll(messages), 1000);\r\n }\r\n\r\n OnNotificationRead(notitication: Notification) {\r\n const messageToDeleteIndex = this.toast.messages.findIndex(x => x.id === notitication.EntryID);\r\n const messageToDelete = this.toast.messages.find(x => x.id === notitication.EntryID);\r\n this.toast.onMessageClose({ index: messageToDeleteIndex, message: messageToDelete });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this.notificationsSubscription && this.notificationsSubscription.unsubscribe();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\nimport { AttachedFile, BaseState, FileView } from '@m4u-angular/base/entities/BaseEntities';\nimport { Notification } from '@base/entities/BaseEntities';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { FileEndpoint } from '@core/endpoints/file.endpoint';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\n\nclass State extends BaseState {\n PreviewBody: any;\n FileView: FileView;\n}\n\n@Component({\n providers: ServiceBagServices,\n selector: 'app-email-history-item',\n templateUrl: './email-history-item.component.html',\n styleUrls: ['./email-history-item.component.scss']\n})\nexport class EmailHistoryItemComponent extends BaseComponent {\n\n @Input() Entity: Notification;\n @ViewChild(PrintBoxDialogComponent) printBoxDialog: PrintBoxDialogComponent;\n\n constructor(A: ServiceBagService,\n public sanitizer: DomSanitizer,\n private fileEndpoint: FileEndpoint) {\n super(A, 'EmailHistoryItemComponent', State);\n }\n\n protected override OnInitComponentFinished() {\n this.LoadAttachment();\n\n setTimeout(() => {\n this.State.PreviewBody = this.sanitizer.bypassSecurityTrustHtml(this.Entity.Body)\n });\n }\n\n OnGoToAttachment() {\n this.Do(this.fileEndpoint.GetView(this.Entity.SharedFileUID, true), false, response => {\n if (!response.IsSuccess) return;\n\n this.State.FileView = response.Entity;\n\n if (this.State.FileView.Extension == '.pdf') {\n this.printBoxDialog.PDFData = Utils.ConvertToBase64(this.State.FileView.FileData);\r\n this.printBoxDialog.ShowDialogShort(() => { });\n return;\n }\n\n const file = new AttachedFile;\r\n file.Extension = this.State.FileView.Extension;\r\n file.Name = this.State.FileView.Name;\r\n Utils.DoFileDownload(file, Utils.ConvertToBase64(this.State.FileView.FileData), this.State.FileView.ContentType);\n });\n }\n\n private LoadAttachment() {\n if (!this.Entity.SharedFileUID) return;\n this.Do(this.fileEndpoint.GetView(this.Entity.SharedFileUID, false), false, response => this.State.FileView = response.Entity);\n }\n}\n","export default \"
\\r\\n \\r\\n \\r\\n {{ Entity.CreatedDate | formatDateFull }}\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Notification } from '@base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-history-item',\r\n templateUrl: './push-message-history-item.component.html',\r\n styleUrls: ['./push-message-history-item.component.scss']\r\n})\r\nexport class PushMessageHistoryItemComponent extends BaseComponent {\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PushMessageHistoryItemComponent', BaseState);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{ Entity.Body }}\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Notification } from '@base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sms-history-item',\r\n templateUrl: './sms-history-item.component.html',\r\n styleUrls: ['./sms-history-item.component.scss']\r\n})\r\nexport class SmsHistoryItemComponent extends BaseComponent {\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SmsHistoryItemComponent', BaseState);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{ Entity.Body }}\\r\\n
\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\nimport { EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\n\n@Component({\n providers: ServiceBagServices,\n selector: 'app-email-history-grid',\n templateUrl: './email-history-grid.component.html',\n styleUrls: ['./email-history-grid.component.scss']\n})\nexport class EmailHistoryGridComponent extends NotificationGridComponent {\n \n constructor(A: ServiceBagService) {\n super(A, 'EmailHistoryGridComponent');\n }\n\n override OnNavigate(e) {\n this.Navigate([\"/pages/general/notificationview\", e.data.EntryID], { WindowWidth: EnumWindowSizes.WindowLarge });\n }\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, OnInit } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sms-history-grid',\r\n templateUrl: './sms-history-grid.component.html',\r\n styleUrls: ['./sms-history-grid.component.scss']\r\n})\r\nexport class SmsHistoryGridComponent extends NotificationGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SmsHistoryGridComponent');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-history-grid',\r\n templateUrl: './push-message-history-grid.component.html',\r\n styleUrls: ['./push-message-history-grid.component.scss']\r\n})\r\nexport class PushMessageHistoryGridComponent extends NotificationGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PushMessageHistoryGridComponent');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, Input} from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumInfoUTypes,\r\n EnumNotificationDeliveryOptions,\r\n EnumPageDisplayModes,\r\n EnumPageEntitySources\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n FromAddress: string;\r\n Address: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-test-dialog',\r\n templateUrl: './notification-test-dialog.component.html',\r\n styleUrls: ['./notification-test-dialog.component.scss']\r\n})\r\nexport class NotificationTestDialogComponent extends BasePageComponent {\r\n\r\n @Input() SMSEndPointIsInforU: EnumInfoUTypes;\r\n\r\n infoUPhonePattern: any = /^[a-zA-Z0-9\\s]*$/;\r\n\r\n NotificationTypes = this.LIST('NotificationTypes').filter(x => x.Value !== EnumNotificationDeliveryOptions.PushMessage);\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationTestDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.DeliveryOption = EnumNotificationDeliveryOptions.Email;\r\n }\r\n\r\n OnDeliveryOptionChange() {\r\n this.State.FromAddress = undefined;\r\n if (this.State.DeliveryOption === EnumNotificationDeliveryOptions.SMS && !this.State.FromAddress) {\r\n if (this.SMSEndPointIsInforU === EnumInfoUTypes.InforU) {\r\n this.State.FromAddress = this.RC('lblDefaultFromAddressForInforU');\r\n }\r\n else if (this.SMSEndPointIsInforU === EnumInfoUTypes.Unicell) {\r\n this.State.FromAddress = this.RC('lblDefaultFromAddressForUnicel');\r\n }\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, Input, OnInit } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n HtmlBody: SafeHtml;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-preview-dialog',\r\n templateUrl: './notification-preview-dialog.component.html',\r\n styleUrls: ['./notification-preview-dialog.component.scss']\r\n})\r\nexport class NotificationPreviewDialogComponent extends BasePageComponent {\r\n\r\n @Input() set HTMLBody(value: string) {\r\n if (value) { this.State.HtmlBody = this.sanitizer.bypassSecurityTrustHtml(value); }\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'NotificationPreviewDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { MainMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { combineLatest, Observable, Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n NavbarItems: MainMenuElement[] = [];\r\n SelectedIndex: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-nav-bar',\r\n templateUrl: './nav-bar.component.html',\r\n styleUrls: ['./nav-bar.component.scss']\r\n})\r\nexport class NavBarComponent extends BaseComponent {\r\n\r\n private _navbarItems$: Observable;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private sessionService: SessionService,\r\n private resourceService: ResourcesService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'NavBarComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._navbarItems$ = this.A.AppConfigService.AppConfig.OnGetNavbarItems(this.sessionService.UserInfoDict);\r\n this._subscriptions.push(this._navbarItems$.subscribe(items => {\r\n items.forEach(item => this.InitializeItem(item));\r\n this.State.NavbarItems = items;\r\n }));\r\n this._subscriptions.push(\r\n combineLatest([this._navbarItems$, this.A.SysEvents.SelectedRoute]).subscribe(([navbarItems, selectedRoute]) => {\r\n this.State.SelectedIndex = selectedRoute ? navbarItems.findIndex(x => x.menu === selectedRoute) : undefined;\r\n })\r\n );\r\n }\r\n\r\n OnItemClick(idx) {\r\n if (idx == this.State.SelectedIndex) return;\r\n\r\n const menu = this.State.NavbarItems[idx];\r\n\r\n this.routeHistoryService.ClearHistory();\r\n\r\n const menuUserInfo = menu.moduleName ? this.sessionService.UserInfoDict[menu.moduleName] : this.sessionService.UserInfos[0];\r\n const navigateParams = menu.pathParams && menu.pathParams(menuUserInfo) || [];\r\n navigateParams.unshift(menu.path);\r\n \r\n this.A.Navigator.Navigate(navigateParams, menu.queryParams || null);\r\n }\r\n\r\n private InitializeItem(menu: MainMenuElement): void {\r\n menu.text = this.GetItemTranslation(menu);\r\n menu.visible = this.GetItemVisible(menu);\r\n }\r\n\r\n private GetItemTranslation(menu: MainMenuElement): string {\r\n const menuWithoutModule = menu.menu.substring(menu.menu.indexOf(\".\") + 1, menu.menu.length);\r\n return menu.text || this.resourceService.RC(`$$Pages.${menuWithoutModule}`, menu.moduleName);\r\n }\r\n\r\n private GetItemVisible(menu: MainMenuElement) {\r\n const menuUserInfo = menu.moduleName && this.sessionService.UserInfoDict[menu.moduleName];\r\n const permissionResult = Utils.IsEmpty(menu.permission) \r\n ? true \r\n : menuUserInfo && menuUserInfo.hasOwnProperty(menu.permission) && menuUserInfo[menu.permission];\r\n const permissionFunctionResult = Utils.IsEmpty(menu.permissionFunction) \r\n ? true \r\n : menu.permissionFunction(menuUserInfo);\r\n\r\n return !!permissionResult && permissionFunctionResult;\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n {{item.text}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { BaseComponent } from '../../../base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../base/component/ServiceBag';\r\nimport { BaseState } from '../../../base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n IsLoadAllNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-list-popup',\r\n templateUrl: './push-message-list-popup.component.html',\r\n styleUrls: ['./push-message-list-popup.component.scss']\r\n})\r\nexport class PushMessageListPopupComponent extends BaseComponent {\r\n\r\n @Input() Visible: boolean;\r\n @Output() VisibleChange = new EventEmitter();\r\n\r\n @Input() PositionTarget: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint) {\r\n super(A, 'PushMessageListPopupComponent', State);\r\n console.log('PushMessageListPopupComponentPushMessageListPopupComponentPushMessageListPopupComponent')\r\n }\r\n\r\n OnOptionChanged(e) {\r\n if (e.name === 'visible') this.VisibleChange.emit(e.value);\r\n }\r\n\r\n OnLoadAllNotifications(value: boolean) {\r\n this.State.IsLoadAllNotifications = value;\r\n }\r\n\r\n OnHidden() {\r\n this.State.IsLoadAllNotifications = false;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumFilterPanelActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-page-filter',\r\n templateUrl: './page-filter.component.html',\r\n styleUrls: ['./page-filter.component.scss']\r\n})\r\nexport class PageFilterComponent extends BaseComponent {\r\n @Input() DisableApply = false;\r\n @Input() Context: BottomSheetDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'PageFilterComponent', BaseState);\r\n }\r\n\r\n ApplyFilter() {\r\n if (this.DisableApply) return;\r\n this.A.SysEvents.FilterPanelAction(EnumFilterPanelActions.Apply);\r\n this.sidebarService.Hide('Filters');\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n\r\n ClearFilter() {\r\n this.A.SysEvents.FilterPanelAction(EnumFilterPanelActions.Clear);\r\n this.sidebarService.Hide('Filters');\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component, ElementRef, Input, OnInit, Renderer2, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetContextMenuParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumApplicationMode } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HistoryViewComponent } from '@m4u-angular/ui/components/general/history-view/historyview.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n ToolbarSettings: ToolbarSettings;\r\n ContextMenuItems: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-page-toolbar-buttons',\r\n templateUrl: './page-toolbar-buttons.component.html',\r\n styleUrls: ['./page-toolbar-buttons.component.scss']\r\n})\r\nexport class PageToolbarButtonsComponent extends BaseComponent {\r\n @Input() PageComponentName: string;\r\n @Input() FilterTemplateRef: TemplateRef;\r\n\r\n @ViewChild('historyView') protected historyViewDialog: HistoryViewComponent;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n public element: ElementRef,\r\n private renderer: Renderer2,\r\n private sidebarService: SidebarService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'PageToolbarButtonsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscriptions.push(this.A.SysEvents.Toolbar.subscribe((toolbarSettings: ToolbarSettings) => {\r\n if (!toolbarSettings) return;\r\n if (this.PageComponentName === toolbarSettings.PageComponentName) {\r\n this.State.ToolbarSettings = toolbarSettings;\r\n this.InitContextMenuItems();\r\n }\r\n }));\r\n }\r\n\r\n InitContextMenuItems() {\r\n const contextMenuItems = this.State.ToolbarSettings.OnGetContextMenuItems();\r\n this.State.ContextMenuItems = contextMenuItems.map(x => {\r\n return {\r\n label: x.text,\r\n icon: x.icon,\r\n visible: x.visible,\r\n command: x.onClick,\r\n separator: (x as any).separator\r\n };\r\n });\r\n }\r\n\r\n IsShowContextMenuButton() {\r\n return this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard\r\n && this.State.ContextMenuItems && this.State.ContextMenuItems.length;\r\n }\r\n\r\n OpenFilter() {\r\n if (this.A.Screen.IsMobile()) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'Filters';\r\n contentParams.Title = this.RC('lblFilters');\r\n contentParams.Class = 'no-page-scroll';\r\n contentParams.Content = this.FilterTemplateRef;\r\n this.bottomSheetService.Show(contentParams, true);\r\n } else {\r\n let className = `filters-sidebar ${this.State.ToolbarSettings.CustomFilterCssClass || ''}`\r\n this.sidebarService.Show('Filters', this.RC('lblFilters'), this.FilterTemplateRef,\r\n this.State.ToolbarSettings.FilterPanelWidth, null, null, className);\r\n }\r\n }\r\n\r\n ExcelExport() {\r\n const gridExtender = this.GetGridExternder();\r\n gridExtender && gridExtender.ExportExcel();\r\n }\r\n\r\n Print(e) {\r\n if (this.State.ToolbarSettings?.OnPrintButtonClick) {\r\n this.State.ToolbarSettings.OnPrintButtonClick(e);\r\n } else {\r\n const gridExtender = this.GetGridExternder();\r\n gridExtender ? gridExtender.Print() : window.print();\r\n }\r\n }\r\n\r\n Share(e) {\r\n if (this.State.ToolbarSettings?.OnShareButtonClick) {\r\n this.State.ToolbarSettings.OnShareButtonClick(e);\r\n }\r\n }\r\n\r\n private GetGridExternder() {\r\n return typeof this.State.ToolbarSettings?.GridExtender === 'function' ? this.State.ToolbarSettings?.GridExtender() : this.State.ToolbarSettings?.GridExtender;\r\n }\r\n\r\n OnShowContextMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.A.Screen.IsMobile() && !this.State.ToolbarSettings?.ShowContextMenuAsUsualOnMobile) {\r\n const title = this.State.ToolbarSettings?.ContextMenuTitle || this.RC('titleChooseOption');\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = title;\r\n menuParams.Items = this.State.ContextMenuItems;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n return;\r\n }\r\n\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n OnContextMenuShow() {\r\n this.InitContextMenuItems();\r\n\r\n const contextMenuTitle = this.State.ToolbarSettings && this.State.ToolbarSettings.ContextMenuTitle;\r\n if (!contextMenuTitle) return;\r\n\r\n const pageContextMenuHeaderId = 'page-context-menu-header';\r\n const pageContextMenuHeader = document.getElementById(pageContextMenuHeaderId);\r\n if (!pageContextMenuHeader) {\r\n const contextMenuHeaderContainer = this.renderer.createElement('div');\r\n this.renderer.setProperty(contextMenuHeaderContainer, 'id', pageContextMenuHeaderId);\r\n this.renderer.setProperty(contextMenuHeaderContainer, 'innerHTML', contextMenuTitle);\r\n this.renderer.insertBefore(document.querySelector('.page-context-menu'), contextMenuHeaderContainer, document.querySelector('.page-context-menu p-contextmenusub'));\r\n }\r\n }\r\n\r\n ShowHistory(e, hs) {\r\n this.State.ToolbarSettings.Page.GetHistory().subscribe(history => {\r\n if (!history || history.length == 0) {\r\n this.UI.StopMessage(this.RC('lblHistoryNotFound'));\r\n return;\r\n }\r\n this.historyViewDialog.Entities = history;\r\n this.historyViewDialog.ShowDialogShort(undefined);\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-spin-loader',\r\n templateUrl: './spin-loader.component.html',\r\n styleUrls: ['./spin-loader.component.scss']\r\n})\r\nexport class SpinLoaderComponent {\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {DemoPage} from \"@ui/demo/models/demo-page\";\r\n\r\nclass State extends BaseState {\r\n Pages: DemoPage[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-demo-navbar',\r\n templateUrl: './demo-navbar.component.html',\r\n styleUrls: ['./demo-navbar.component.scss']\r\n})\r\nexport class DemoNavbarComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoNavbarComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Pages = this.GetPages();\r\n }\r\n \r\n public onPageSelected(url: string) {\r\n this.Navigate([url]);\r\n }\r\n \r\n private GetPages(): DemoPage[] {\r\n return [\r\n { Text: \"Buttons\", Url: \"/demo/buttons\" },\r\n { Text: \"Editors\", Url: \"/demo/editors\" },\r\n { Text: \"Layouts\", Url: \"/demo/layouts\" },\r\n { Text: \"Components\", Url: \"/demo/components\" }, // Add upload component and spinner-loader \r\n { Text: \"Sections\", Url: \"/demo/sections\" },\r\n { Text: \"Cards\", Url: \"/demo/cards\" },\r\n { Text: \"Tabs\", Url: \"/demo/tabs\" },\r\n { Text: \"Grids\", Url: \"/demo/grids\" },\r\n { Text: \"Pages\", Url: \"/demo/page-examples\" },\r\n { Text: \"Sidebars\", Url: \"/demo/sidebars\" },\r\n { Text: \"Bottom Sheets\", Url: \"/demo/bottom-sheets\" },\r\n { Text: \"Dialogs\", Url: \"/demo/dialogs\" },\r\n { Text: \"Pipes\", Url: \"/demo/pipes\" }\r\n ]\r\n }\r\n}","export default \"
\\r\\n

Demo

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import {Component, Input} from '@angular/core';\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseEntity, BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseGridComponent} from \"../../../../../base/component/BaseGridComponent\";\r\nimport {DemoMobilePhoneBrand, DemoMobilePhoneModel} from \"@ui/demo/models/demo-mobile-phone\";\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n selector: 'app-demo-grid',\r\n templateUrl: './demo-grid.component.html'\r\n})\r\nexport class DemoGridComponent extends BaseGridComponent {\r\n\r\n @Input() Brands: DemoMobilePhoneBrand[] = [];\r\n @Input() Models: DemoMobilePhoneModel[] = [];\r\n @Input() Colors: any[] = [];\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('someContextMenuTitle'),\r\n onClick: () => console.log(options)\r\n }]\r\n }\r\n\r\n OnColumnClick(e) {\r\n console.log(e);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HistoryItem, RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n History: HistoryItem[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss']\r\n})\r\nexport class BreadcrumbComponent extends BaseComponent {\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'BreadcrumbComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscriptions.push(this.routeHistoryService.HistoryItems$.subscribe(history => {\r\n this.State.History = [ ...history];\r\n }));\r\n this.A.SysEvents.SetBreadCrumbVisible(true);\r\n }\r\n\r\n OnItemClick(item: HistoryItem) {\r\n this.routeHistoryService.NavigateHistoryItem(item);\r\n }\r\n\r\n OnBack() {\r\n this.routeHistoryService.GoBack();\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{ item.Title }}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity, CredentialExternalInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LoginEndpoint } from '@m4u-angular/core/endpoints/login.endpoint';\r\nimport { EnumLanguages, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources, EnumSystemOptions }\r\n from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n DeliveryOptions: any[];\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n Language: EnumLanguages;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-welcome-user-dialog',\r\n templateUrl: './welcome-user-dialog.component.html',\r\n styleUrls: ['./welcome-user-dialog.component.scss']\r\n})\r\nexport class WelcomeUserDialogComponent extends BasePageComponent {\r\n\r\n @Input() CredentialID: number;\r\n @Input() CredentialInfo: CredentialExternalInfo;\r\n\r\n constructor(A: ServiceBagService,\r\n private loginEndpoint: LoginEndpoint) {\r\n super(A, 'WelcomeUserDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Language = SysGlobals.Language as EnumLanguages;\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail) && this.CredentialInfo.Email;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS) && this.CredentialInfo.Phone;\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp) && this.CredentialInfo.Phone;\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n if (this.State.DeliveryOptions.length > 0) this.State.DeliveryOption = this.State.DeliveryOptions[0].Value;\r\n }\r\n\r\n WelcomeUser() {\r\n const address = this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email ?\r\n this.CredentialInfo.Email : this.CredentialInfo.Phone;\r\n this.Do(this.loginEndpoint.WelcomeUser(+this.CredentialID, this.State.DeliveryOption, address, this.State.Language), true, () => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-historyview-grid',\r\n templateUrl: './historyview-grid.component.html',\r\n styleUrls: ['./historyview-grid.component.scss']\r\n})\r\nexport class HistoryViewGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HistoryViewGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n/** Utility functions for interaction with html components */\r\nexport class HtmlUtils\r\n{\r\n public static HexToRgbColorString(hexColor: string) {\r\n const colorString = hexColor.substring(1);\r\n const rgbArr = colorString.match(/.{1,2}/g)\r\n .map(function(hex) { return parseInt(hex, 16) });\r\n return rgbArr.join();\r\n }\r\n\r\n public static HexToInt(hexColor: string): number {\r\n const colorString = hexColor.substring(1);\r\n return ~parseInt(colorString, 16)^0x00FFFFFF;\r\n }\r\n\r\n public static IntToHex(number: number): string {\r\n return '#' + (number & 0x00FFFFFF).toString(16).padStart(6, '0');\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HtmlUtils } from '@core/helpers/HtmlUtils';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-total-balance',\r\n templateUrl: './total-balance-card.component.html',\r\n styleUrls: ['./total-balance-card.component.scss']\r\n})\r\nexport class TotalBalanceCardComponent extends BaseComponent {\r\n\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() Amount: number;\r\n @Input() Icon: string;\r\n @Input() Color: string;\r\n @Input() IsHideCharge: boolean = false;\r\n @Input() AmountTemplate: TemplateRef;\r\n @Input() AdditionalTemplate: TemplateRef;\r\n @Input() ViewStyle: 'normal' | 'line-to-side' = 'normal';\r\n @Input() Tooltip: string;\r\n private TooltipUIID: string;\r\n\r\n private _onClickObserved: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceCardComponent', BaseState);\r\n this.TooltipUIID = 'tbc-tooltip' + (Math.round(Math.random() * 1000000)).toString();\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._onClickObserved = this.OnClick.observed;\r\n }\r\n\r\n HasClickEvent(event) {\r\n return this._onClickObserved;\r\n }\r\n\r\n OnCardClick(event) {\r\n this.OnClick && this.OnClick.emit(event);\r\n }\r\n\r\n GetBoxShadowStyle() {\r\n if (!this.Color) return '';\r\n \r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `0 4px 14px rgba(${rgb}, 0.4)`;\r\n }\r\n\r\n GetIconBackgroundColor() {\r\n if (!this.Color) return '';\r\n\r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `rgba(${rgb}, 0.12)`;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
{{Title}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true : true }}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{ Tooltip }}
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss']\r\n})\r\nexport class IconComponent {\r\n @Input() Name: string;\r\n @Input() Size: number = 24;\r\n @Input() Tip: string;\r\n\r\n @HostBinding('style.width') get width() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.height') get height() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.line-height') get lineHeight() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.font-size') get fontSize() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.background-size') get backgroundSize() {\r\n return `${this.Size}px ${this.Size}px`;\r\n }\r\n\r\n get isLink() {\r\n return /\\//.test(this.Name);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialsCheckerMetadata, CredentialExternalInfo, DataEditorView, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-view-grid',\r\n templateUrl: './data-view-grid.component.html',\r\n})\r\nexport class DataViewGridComponent extends BaseGridComponent {\r\n @Input() Views: DataEditorView[];\r\n @ViewChild('grid') grid: any;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'DataViewGridComponent', SystemCredentialInfo, State);\r\n\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Directive, Input } from '@angular/core';\r\nimport { IBaseComponent } from '../component/IBaseComponent';\r\nimport { DxPivotGridComponent } from 'devextreme-angular/ui/pivot-grid';\r\n\r\n@Directive({ selector: '[configPivotGrid]' })\r\nexport class M4UConfigPivotGridDirective {\r\n constructor(private pivotGrid: DxPivotGridComponent) {\r\n }\r\n\r\n @Input() set Component(value: IBaseComponent) { \r\n this.Init(value);\r\n }\r\n\r\n protected Init(component: IBaseComponent) {\r\n if (component == undefined || this.pivotGrid == undefined) return;\r\n \r\n const stateStoring = this.pivotGrid.stateStoring;\r\n this.pivotGrid.stateStoring = {\r\n storageKey:\r\n stateStoring?.storageKey || `${component.ComponentStateName}.PivotGrid.State`\r\n };\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-switch-button',\r\n templateUrl: './switch-button.component.html',\r\n styleUrls: ['./switch-button.component.scss']\r\n})\r\nexport class SwitchButton extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, \"SwitchButton\", BaseState);\r\n }\r\n\r\n @ViewChild('slider') slider: ElementRef;\r\n @ViewChildren('input') inputs: QueryList;\r\n\r\n @Input() Value: string | number;\r\n @Output() ValueChange = new EventEmitter();\r\n @Input() ValueExpr: string = 'Value';\r\n @Input() DisplayExpr: string = 'Text';\r\n\r\n _items = [];\r\n @Input()\r\n set Items(v) {\r\n // if (v.length !== 2) {\r\n // throw new Error('Items has to contain exactly 2 elements');\r\n // }\r\n this._items = v;\r\n };\r\n get Items() {\r\n return this._items;\r\n }\r\n\r\n Id(value: string) {\r\n return 'm4u-switch-button-' + value;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n setTimeout(() => {\r\n const input = this.inputs.find(item => item.nativeElement.checked);\r\n this.MoveSlider(input.nativeElement);\r\n }, 200);\r\n }\r\n\r\n OnChange({ target }) {\r\n this.ValueChange.emit(target.value);\r\n this.MoveSlider(target);\r\n }\r\n\r\n MoveSlider(target: HTMLInputElement) {\r\n if (!target) return;\r\n\r\n const label = target.labels[0];\r\n if (!label) return;\r\n this.slider.nativeElement.style.width = label.clientWidth + 'px';\r\n\r\n let shift = this.A.Screen.IsRTL() ? label.clientWidth + label.offsetLeft - label.offsetParent.clientWidth : label.offsetLeft;\r\n this.slider.nativeElement.style.transform = `translateX(${shift}px)`;\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\";","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\nimport { ShareEndpoint } from '@core/endpoints/share.endpoint';\r\nimport { AttachedFile, Notification } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { FileEndpoint } from '@core/endpoints/file.endpoint';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sharing-history-grid',\r\n templateUrl: './sharing-history-grid.component.html'\r\n})\r\nexport class SharingHistoryGridComponent extends NotificationGridComponent {\r\n\r\n @ViewChild(PrintBoxDialogComponent) printBoxDialog: PrintBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private shareEndpoint: ShareEndpoint,\r\n private fileEndpoint: FileEndpoint) {\r\n super(A, 'SharingHistoryGridComponent');\r\n }\r\n\r\n OnGoToSharedFile = (e) => {\r\n const notification: Notification = e.row.data;\r\n\r\n if (!notification.SharedFileUID) return;\r\n\r\n this.Do(this.fileEndpoint.GetView(notification.SharedFileUID, true), false, response => {\r\n if (!response.IsSuccess) return;\r\n this.printBoxDialog.PDFData = Utils.ConvertToBase64(response.Entity.FileData);\r\n this.printBoxDialog.ShowDialogShort(() => { });\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, Log } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLogLevel } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SelectedIDs: number[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-log-grid',\r\n templateUrl: './log-grid.component.html',\r\n styleUrls: ['./log-grid.component.scss']\r\n})\r\nexport class LogGridComponent extends BaseGridComponent {\r\n\r\n @Output() selectItem: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LogGridComponent', Log, State);\r\n }\r\n\r\n public onRowClicked(e) {\r\n this.selectItem.emit(e.data);\r\n if (e.data) {\r\n this.State.SelectedIDs = [e.data.EntryID];\r\n }\r\n }\r\n\r\n public getStatusColor(log: Log) {\r\n switch(log.Level) {\r\n case EnumLogLevel.Error:\r\n return 'cinnabar';\r\n case EnumLogLevel.Warning:\r\n return 'mango';\r\n case EnumLogLevel.Info:\r\n return 'portage';\r\n }\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\";","import { SystemOptionsListComponent } from '../ui/components/general/system-options/Components/system-options-list/system-options-list.component';\r\nimport { AddSystemOptionDialogComponent } from '../ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { SystemOptionComponent } from '../ui/components/general/system-options/Components/system-option/system-option.component';\r\nimport { SystemOptionsComponent } from '@ui/components/general/system-options/system-options.component';\r\nimport { PasswordTooltipComponent } from './../ui/components/password/password-tooltip/password-tooltip.component';\r\nimport { AgmCoreModule } from '@agm/core';\r\nimport { APP_BASE_HREF, CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, ErrorHandler, LOCALE_ID, NgModule, InjectionToken } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserModule, HammerGestureConfig, HammerModule, HAMMER_GESTURE_CONFIG, TransferState } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { SignaturePadModule } from 'angular2-signaturepad';\r\nimport { PdfJsViewerModule } from 'ng2-pdfjs-viewer';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { NullComponent } from '@base/component/NullComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { M4UCardComponent } from '@ui/layouts/componentlayouts/card/card.component';\r\nimport { M4ULinkComponent } from '@ui/layouts/componentlayouts/link/link.component';\r\nimport { CollapsibleGroupComponent } from '@ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component';\r\nimport { GridButtonAddComponent } from '@ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component';\r\nimport { GridButtonRemoveComponent } from '@ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component';\r\nimport { PageButtonsComponent } from '@ui/layouts/componentlayouts/page-buttons/pagebuttons.component';\r\nimport { FileBoxDialogComponent } from '@ui/dialogs/filebox-dialog/fileboxdialog.component';\r\nimport { InputBoxDialogComponent } from '@ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { MessageBoxDialogComponent } from '@ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PhotoBoxDialogComponent } from '@ui/dialogs/photobox-dialog/photoboxdialog.component';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { SelectBoxDialogComponent } from '@ui/dialogs/selectbox-dialog/selectboxdialog.component';\r\nimport { SignBoxDialogComponent } from '@ui/dialogs/signbox-dialog/signboxdialog.component';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\nimport { ImageBoxDialogComponent } from '@ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { BarcodeBoxDialogComponent } from '@ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\nimport { M4UCustomBuildDirective } from '@ui/directives/CustomBuild';\r\nimport { FormatPriceWithCurrencyDirective, M4UConfigBooleanColumnDirective, M4UConfigEntitySourceDirectiveSelectBox, M4UConfigEntitySourceDirectiveTagBox, M4UConfigEntitySourceLookupColumn, M4UConfigMonthYearDirective, M4UConfigTimeDirective, M4UConfigYearDirective, M4UContextMenuDirective, M4UFieldEmptyDirective, M4UFieldLinkDirective, M4UFieldXEmptyDirective, M4UFormatCurrencyDirective, M4UFormatGeneralDirective, M4UFormatPercentDirective, M4UFormatPriceDirective, M4UFormatQuantityDirective, M4UFormatRateDirective, M4UFormatRoundedPriceDirective, M4UFormatSumDirective, M4ULinkColumnDirective, M4UListWithPagination, M4UMultiEmailDirective } from '@ui/directives/Directives';\r\nimport { M4UConfigSearchDirective } from '@ui/directives/FormatSearch.directive';\r\nimport { M4UConfigServerSideCustomFilterDirective } from '@ui/directives/CustomServerSideFilter.directive';\r\nimport { M4URouterLinkEx, M4URouterLinkExWithHref } from '@ui/directives/Link.directive';\r\nimport { M4UViewContainerDirective } from '@ui/directives/ViewContainer.directive';\r\nimport * as pipes from '@ui/directives/Pipes';\r\nimport { FormatDateApproximatePipe, FormatDateAtTimePipe, FormatDateCompactPipe, FormatDatePipe, FormatDateShortPipe, FormatFullDateCompactPipe, FormatNumberGeneralPipe, FormatNumberPercentPipe, FormatNumberPricePipe, FormatNumberQuantityPipe, FormatNumberRatePipe, FormatNumberShortPipe, FormatNumberSumPipe, FormatTimePipe, HighlightPipe, LookupListPipe, LookupPipe, RCPipe, RCXPipe, SafePipe, YesEmptyPipe, YesNoPipe, YesNoPipeYN, StringBrPipe, FileSizePipe, RCMPipe, RCMXPipe, AbsPipe, FormatDayNamePipe, FormatDayNameShortPipe, FormatPriceWithCurrencyPipe } from '@ui/directives/Pipes';\r\nimport { M4URequiredDirectiveCheckBox, M4URequiredDirectiveColumn, M4URequiredDirectiveNumberBox, M4URequiredDirectiveSelectBox, M4URequiredDirectiveTextBox, M4URequiredDirectiveRadioGroup, M4URequiredDirectiveDateBox, M4URequiredDirectiveTextArea, M4URequiredDirectiveTagBox } from '@ui/directives/Required.directive';\r\nimport { ThrottleEventDirective } from '@ui/directives/ThrottleEvent.directive';\r\nimport { ExceptionComponent } from '@core/exceptions/exception.component';\r\nimport { FieldDetailComponent } from '@ui/layouts/fieldlayouts/field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '@ui/layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '@ui/layouts/fieldlayouts/field-formx/fieldformx.component';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { DevExpressService } from '@core/framework/devexpress.service';\r\nimport { FrameworkService, OnInitializeFramework } from '@core/framework/framework.service';\r\nimport { HistoryEndpoint } from '@core/endpoints/history.endpoint';\r\nimport { GenericListEndpoint } from '@core/endpoints/genericlist.endpoint';\r\nimport { NativeNotificationsService } from '@core/framework/nativenotifications.service';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { SystemEndpoint } from '@core/endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '@core/endpoints/system-options.endpoint';\r\nimport { APIGatewayInterceptor } from '@core/gateway/APIGateway.intercept';\r\nimport { APIGatewayService } from '@core/gateway/APIGateway.service';\r\nimport { M4UConfigGridDirective, GridWrapperDirective } from '../base/grid/Grid.directive';\r\nimport { InjectorModule } from '@core/injector/injector.module';\r\nimport { AppComponent } from '@ui/layouts/layout/app.component';\r\nimport { EmptyLayoutComponent } from '@ui/layouts/layout/empty-layout/emptylayout.component';\r\nimport { MainLayoutComponent } from '@ui/layouts/layout/main-layout/mainlayout.component';\r\nimport { NavMenuComponent } from '@ui/layouts/layout/nav-menu/navmenu.component';\r\nimport { MenuButtonListComponent } from '@ui/components/general/menu-button-list/menu-button-list.component';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { ProgressPanelComponent } from '@ui/layouts/layout/progress-panel/progresspanel.component';\r\nimport { ToolbarComponent } from '@ui/layouts/layout/toolbar/toolbar.component';\r\nimport { ComingSoonComponent } from '@ui/components/login/coming-soon/comingsoon.component';\r\nimport { LoginComponent } from '@ui/components/login/login/login.component';\r\nimport { LoginOAuthComponent } from '@ui/components/login/login-oauth/login-oauth.component';\r\nimport { LogoutComponent } from '@ui/components/login/logout/logout.component';\r\nimport { SessionExpireComponent } from '@ui/components/login/session-expire/sessionexpire.component';\r\nimport { CredentialsActivityStatusComponent } from '@ui/components/general/credential-activity-status/credentials-activity-status.component';\r\nimport { NotificationsHistoryComponent } from '@ui/notifications/notifications-history/notificationshistory.component';\r\nimport { NotificationViewComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-view/notificationview.component';\r\nimport { NotificationGridComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-grid/notificationgrid.component';\r\nimport { M4UStopClickPropagation } from '@ui/directives/Directives';\r\nimport { HistoryViewComponent } from '@m4u-angular/ui/components/general/history-view/historyview.component';\r\nimport { ArrayOrderByPipe } from '@ui/directives/Pipes';\r\nimport { M4UDevExpressModule } from './devexpress.module';\r\nimport { PasswordChangeComponent } from '@ui/components/password/password-change/passwordchange.component';\r\nimport { PasswordChangeExpiredComponent } from '@ui/components/password/password-change-expired/passwordchangeexpired.component';\r\nimport { PasswordRecoveryComponent } from '@ui/components/password/password-recovery/passwordrecovery.component';\r\nimport { PasswordWelcomeComponent } from '@ui/components/password/password-welcome/passwordwelcome.component';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { PasswordManageComponent } from '@ui/components/password/password-manage/passwordmanage.component';\r\nimport { RecaptchaModule } from 'ng-recaptcha';\r\nimport { CaptchaComponent } from '@ui/layouts/componentlayouts/captcha/captcha.component';\r\nimport { AttachedFilesComponent } from '@ui/layouts/componentlayouts/attached-files/attached-files.component';\r\nimport { FileCardComponent } from '@ui/layouts/componentlayouts/attached-files/file-card/file-card.component';\r\nimport { M4USearchComponent } from '@ui/layouts/componentlayouts/search/search.component';\r\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\r\nimport { M4ULoadingAnimationComponent } from '@ui/layouts/componentlayouts/loading-animation/loading-animation.component';\r\nimport { InjectedComponentsComponent } from '@ui/layouts/componentlayouts/injected-components/injected-components.component';\r\nimport { InjectedComponentsBaseService } from '@core/framework/injected-components-base.service';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { LoginGuard } from '@core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@core/framework/confirm-cancel.guard';\r\nimport { ServiceWorkerModule } from '@angular/service-worker';\r\nimport { environment } from '../environment/environment';\r\nimport { ExceptionHandler } from '@core/exceptions/exception.handler';\r\nimport { ENVIRONMENT } from '../environment/environment.model';\r\nimport { AppConfig, APP_CONFIG } from '@configuration/app.config.model';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { LoginByOtpComponent } from '@ui/components/login/login-by-otp/login-by-otp.component';\r\nimport { CommonSettingComponent } from '@ui/components/general/commonsettings/commonsetting.component';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { NotificationEndpoint } from '@core/endpoints/notification.endpoint';\r\nimport { ShareEndpoint } from '@core/endpoints/share.endpoint';\r\nimport { FileEndpoint } from '@core/endpoints/file.endpoint';\r\nimport { RecaptchaV3Module, RECAPTCHA_V3_SITE_KEY } from 'ng-recaptcha';\r\n\r\nimport { FooterComponent } from '@ui/layouts/layout/footer/footer.component';\r\n\r\nimport { NestedOptionHost } from 'devextreme-angular';\r\n\r\nimport { TabsComponent } from '@ui/components/tabs/tabs.component';\r\nimport { LoginBaseComponent } from '@ui/components/login/base/login-base.component';\r\n\r\nimport { StatusColumnComponent } from '@ui/components/status-column/status-column.component';\r\nimport { ButtonComponent } from '@ui/components/button/button.component';\r\nimport { CredentialActivityStatusGridComponent } from '@ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component';\r\nimport { TagComponent } from '@ui/components/tag/tag.component';\r\nimport { SessionExpiredComponent } from '@m4u-angular/ui/components/session-expired/session-expired.component';\r\n\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\n\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { CarouselModule } from 'primeng/carousel';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { GridBottomContainerComponent } from '@ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component';\r\nimport { ContextMenuModule } from 'primeng/contextmenu';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { PreviewDialogComponent } from '@ui/dialogs/preview-dialog/previewdialog.component';\r\n//import { IonicModule, IonicRouteStrategy } from '@ionic/angular';\r\n//import { RouteReuseStrategy } from '@angular/router';\r\nimport { SplitterModule } from 'primeng/splitter';\r\nimport { StepsModule } from 'primeng/steps';\r\nimport { M4UConfigTextBoxTooltipDirective, M4UConfigTooltipDirective } from '@ui/directives/Tooltip.directive';\r\nimport { TooltipComponent } from '@ui/components/tooltip/tooltip.component';\r\nimport { M4UConfigViewPasswordDirective } from '@ui/directives/ViewPassword.directive';\r\nimport { PushMessageListComponent } from '@ui/notifications/push-message-list/push-message-list.component';\r\nimport { PushMessageBadgeComponent } from '@ui/notifications/push-message-badge/push-message-badge.component';\r\nimport { NotificationService } from '@core/framework/notification.service';\r\nimport { NotificationServerListComponent } from '@ui/notifications/notification-server/list/notification-server-list.component';\r\nimport { NotificationServerEndpoint } from '@core/endpoints/notification-server.endpoint';\r\nimport { NotificationServerGridComponent } from '@ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component';\r\nimport { NotificationTemplateListComponent } from '@ui/notifications/notification-template/notification-template-list/notification-template-list.component';\r\nimport { NotificationTemplateGridComponent } from '@ui/notifications/notification-template/notification-template-grid/notification-template-grid.component';\r\nimport { NotificationTemplateComponent } from '@ui/notifications/notification-template/notification-template.component';\r\nimport { NotificationTemplateEndpoint } from '@core/endpoints/notification-template.endpoint';\r\nimport { NotificationDispatchEndpoint } from '@core/endpoints/notification-dispatch.endpoint';\r\nimport { NotificationConfigurationBaseService } from '@core/framework/notification-configuration-base.service';\r\nimport { NotificationDispatchComponent } from '@ui/notifications/notification-dispatch/notification-dispatch.component';\r\nimport { NotificationDispatchListComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component';\r\nimport { NotificationDispatchGridComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component';\r\nimport { NotificationDispatchRecipientsComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component';\r\nimport { NotificationDispatchNotificationsComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { PushMessageComponent } from '@ui/notifications/push-message/push-message.component';\r\nimport { PushMessageToastsComponent } from '@ui/notifications/push-message-toasts/push-message-toasts.component';\r\nimport { EmailHistoryItemComponent } from '@ui/notifications/notifications-history/email-history-item/email-history-item.component';\r\nimport { PushMessageHistoryItemComponent } from '@ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component';\r\nimport { SmsHistoryItemComponent } from '@ui/notifications/notifications-history/sms-history-item/sms-history-item.component';\r\nimport { HtmlBoxDialogComponent } from '@ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { EmailHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component';\r\nimport { SmsHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component';\r\nimport { PushMessageHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component';\r\nimport { PushMessageEndpoint } from '@core/endpoints/push-message.endpoint';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { LOADING_BAR_CONFIG } from '@ngx-loading-bar/core';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { MessageService } from 'primeng/api';\r\nimport { NotificationTestDialogComponent } from '@ui/notifications/notification-test-dialog/notification-test-dialog.component';\r\nimport { NotificationPreviewDialogComponent } from '@ui/notifications/notification-preview-dialog/notification-preview-dialog.component';\r\nimport { NavBarComponent } from '@ui/layouts/layout/nav-bar/nav-bar.component';\r\nimport { MidStoreComponent } from '@m4u-angular/core/mid/mid-store.component';\r\nimport { AgmMarkerSpiderModule } from 'agm-spiderfier';\r\nimport { NotificationServerComponent } from '@ui/notifications/notification-server/notification-server.component';\r\nimport { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';\r\nimport { BottomSheetService } from '@core/framework/bottom-sheet.service';\r\nimport { BottomSheetListComponent } from '@ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { PushMessageListPopupComponent } from '@ui/notifications/push-message-list-popup/push-message-list-popup.component';\r\nimport { SideBarComponent } from '@ui/layouts/layout/side-bar/side-bar.component';\r\nimport { PageFilterComponent } from '@ui/layouts/layout/page-filter/page-filter.component';\r\nimport { SidebarService } from '@core/framework/sidebar.service';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { PageToolbarButtonsComponent } from '@ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { LanguageService } from '@core/framework/language.service';\r\nimport { LocalStorageService } from '@core/framework/local-storage.service';\r\nimport { SpinLoaderComponent } from '@ui/components/spin-loader/spin-loader.component';\r\nimport { BottomSheetContextMenuComponent } from '@ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { DemoLayoutComponent } from '@ui/demo/layouts/demo-layout/demo-layout.component';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { DemoNavbarComponent } from '@ui/demo/layouts/demo-navbar/demo-navbar.component';\r\nimport { DemoEditorsComponent } from '@ui/demo/components/editors/demo-editors.component';\r\nimport { DemoLayoutsComponent } from '@ui/demo/components/layouts/demo-layouts.component';\r\nimport { DemoSectionsComponent } from '@ui/demo/components/sections/demo-sections.component';\r\nimport { DemoCardsComponent } from '@ui/demo/components/cards/demo-cards.component';\r\nimport { DemoTabsComponent } from '@ui/demo/components/tabs/demo-tabs.component';\r\nimport { DemoGridsComponent } from '@ui/demo/components/grids/demo-grids.component';\r\nimport { DemoBottomSheetsComponent } from '@ui/demo/components/bottom-sheets/demo-bottom-sheets.component';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { DemoGridComponent } from '@ui/demo/components/grids/grid/demo-grid.component';\r\nimport { DemoPagesComponent } from '@ui/demo/components/pages/demo-pages.component';\r\nimport {\r\n DemoPageToolbarButtonsComponent\r\n} from '@ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component';\r\nimport {\r\n DemoPageHeaderButtonsComponent\r\n} from '@ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component';\r\nimport { DemoSidebarsComponent } from '@ui/demo/components/sidebars/demo-sidebars.component';\r\nimport { DemoDialogsComponent } from '@ui/demo/components/dialogs/demo-dialogs.component';\r\nimport { DemoSimpleDialogComponent } from '@ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component';\r\nimport { DemoPipesComponent } from '@ui/demo/components/pipes/demo-pipes.component';\r\nimport { DemoComponentsComponent } from '@ui/demo/components/components/demo-components.component';\r\nimport { BreadcrumbComponent } from '@ui/components/breadcrumb/breadcrumb.component';\r\nimport { RouteHistoryService } from '@core/framework/route-history.service';\r\nimport { CredentialActivityEndpoint } from '@core/endpoints/credential-activity.endpoint';\r\nimport { CredentialLoginHistoryComponent } from '@ui/components/general/credential-login-history/credential-login-history.component';\r\nimport {\r\n CredentialLoginHistoryGridComponent\r\n} from '@ui/components/general/credential-login-history/grid/credential-login-history-grid.component';\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { PdfViewerComponent } from '@ui/components/pdf-viewer/pdf-viewer.component';\r\nimport { SliderModule } from 'primeng/slider';\r\nimport { RequestHistoryListComponent } from '@ui/components/general/request-history/request-history-list/request-history-list.component';\r\nimport { WebAPICredentialEndpoint } from '@core/endpoints/webapi-credential.endpoint';\r\nimport { RequestHistoryGridComponent } from '@ui/components/general/request-history/request-history-grid/request-history-grid.component';\r\nimport { WebAPIRequestEndpoint } from '@core/endpoints/webapi-request.endpoint';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { WelcomeUserDialogComponent } from '@ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component';\r\nimport { HistoryViewGridComponent } from '@m4u-angular/ui/components/general/history-view/grid/historyview-grid.component';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { EntityService } from '@core/framework/entity.service';\r\nimport { TotalBalanceCardComponent } from '@ui/components/total-balance-card/total-balance-card.component';\r\nimport * as UIComponents from '@ui/components';\r\nimport { EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BottomSheetDialogComponent } from '@ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { SystemCredentialsComponent } from '@ui/components/general/system-credentials/system-credentials.component';\r\nimport { SystemCredentialsGridComponent }\r\n from '@ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component';\r\nimport { SystemCredentialsCreationComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation.component';\r\nimport { SystemCredentialsCreationGridComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component';\r\nimport { WelcomeMessageConfigDialogComponent } from '@ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { DataViewListComponent } from '@ui/components/general/data-views/data-view-list.component';\r\nimport { DataViewGridComponent } from '@ui/components/general/data-views/data-views-grid/data-view-grid.component';\r\nimport { DataEditorEndpoint } from '@core/endpoints/data-editor.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@core/endpoints/system-credentials.endpoint';\r\nimport { ContextMenuService } from '@core/framework/context-menu.service';\r\nimport { GalleriaModule } from 'primeng/galleria';\r\nimport { M4UConfigPivotGridDirective} from '../base/pivotgrid/PivotGrid.directive';\r\nimport { SwitchButton } from '@ui/components/switch-button/switch-button.component';\r\nimport { ClientFingerprintService } from '@core/framework/client-fingerprint.service';\r\nimport { ShareDialogComponent } from '@ui/dialogs/share-dialog/share-dialog.component';\r\nimport { SharingHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component';\r\nimport { ShareService } from '@core/framework/share.service';\r\nimport { LogsComponent } from '@ui/components/logs/logs.component';\r\nimport { LogGridComponent } from '@ui/components/logs/log-grid/log-grid.component';\r\nimport { LogEndpoint } from '@m4u-angular/core/endpoints/log.endpoint';\r\n\r\n//Components to be used by application\r\nexport const ReusableComponents: any =\r\n [\r\n //Field layouts\r\n SectionComponent,\r\n FieldFormComponent,\r\n FieldFormComponentX,\r\n FieldDetailComponent,\r\n FieldDetailComponentX,\r\n\r\n //UI Enahncements\r\n M4UCardComponent,\r\n M4ULinkComponent,\r\n M4USearchComponent,\r\n PageButtonsComponent,\r\n CollapsibleGroupComponent,\r\n GridBottomContainerComponent,\r\n GridButtonAddComponent,\r\n GridButtonRemoveComponent,\r\n CaptchaComponent,\r\n AttachedFilesComponent,\r\n FileCardComponent,\r\n M4ULoadingAnimationComponent,\r\n TabsComponent,\r\n ButtonComponent,\r\n TagComponent,\r\n SessionExpiredComponent,\r\n TooltipComponent,\r\n ...Object.values(UIComponents),\r\n\r\n //Dialogs\r\n SelectBoxDialogComponent,\r\n InputBoxDialogComponent,\r\n MessageBoxDialogComponent,\r\n PrintBoxDialogComponent,\r\n SignBoxDialogComponent,\r\n SignBoxComponent,\r\n ImageBoxDialogComponent,\r\n PhotoBoxDialogComponent,\r\n FileBoxDialogComponent,\r\n PreviewDialogComponent,\r\n BarcodeBoxDialogComponent,\r\n WelcomeUserDialogComponent,\r\n BottomSheetDialogComponent,\r\n WelcomeMessageConfigDialogComponent,\r\n ShareDialogComponent,\r\n\r\n //Main components\r\n AppComponent,\r\n NullComponent,\r\n PageLayoutComponent,\r\n\r\n //Misc directives\r\n M4UCustomBuildDirective,\r\n ThrottleEventDirective,\r\n M4URequiredDirectiveTextBox,\r\n M4URequiredDirectiveNumberBox,\r\n M4URequiredDirectiveSelectBox,\r\n M4URequiredDirectiveCheckBox,\r\n M4URequiredDirectiveRadioGroup,\r\n M4URequiredDirectiveDateBox,\r\n M4URequiredDirectiveColumn,\r\n M4URequiredDirectiveTextArea,\r\n M4URequiredDirectiveTagBox,\r\n M4URouterLinkEx,\r\n M4URouterLinkExWithHref,\r\n M4UStopClickPropagation,\r\n M4UFieldEmptyDirective,\r\n M4UFieldXEmptyDirective,\r\n GridWrapperDirective,\r\n M4UViewContainerDirective,\r\n M4UContextMenuDirective,\r\n\r\n //Format directives\r\n M4UConfigMonthYearDirective,\r\n M4UConfigYearDirective,\r\n M4UConfigTimeDirective,\r\n M4UFormatSumDirective,\r\n M4UFormatPriceDirective,\r\n M4UFormatRoundedPriceDirective,\r\n M4UFormatQuantityDirective,\r\n M4UFormatPercentDirective,\r\n M4UFormatRateDirective,\r\n M4UFormatGeneralDirective,\r\n M4UFormatCurrencyDirective,\r\n M4UMultiEmailDirective,\r\n FormatPriceWithCurrencyDirective,\r\n\r\n //Config directives\r\n M4UConfigSearchDirective,\r\n M4UConfigGridDirective,\r\n M4UConfigEntitySourceDirectiveSelectBox,\r\n M4UConfigEntitySourceDirectiveTagBox,\r\n M4UConfigEntitySourceLookupColumn,\r\n M4UConfigBooleanColumnDirective,\r\n M4UConfigTooltipDirective,\r\n M4UConfigTextBoxTooltipDirective,\r\n M4UConfigViewPasswordDirective,\r\n M4UListWithPagination,\r\n M4UFieldLinkDirective,\r\n M4ULinkColumnDirective,\r\n M4UConfigServerSideCustomFilterDirective,\r\n M4UConfigPivotGridDirective,\r\n\r\n //Pipes\r\n ...Object.values(pipes),\r\n ArrayOrderByPipe,\r\n SafePipe,\r\n StringBrPipe,\r\n FileSizePipe,\r\n AbsPipe,\r\n FormatPriceWithCurrencyPipe,\r\n CommonSettingComponent,\r\n\r\n StatusColumnComponent,\r\n SystemOptionComponent,\r\n AddSystemOptionDialogComponent,\r\n SystemOptionsListComponent,\r\n BottomSheetListComponent,\r\n BottomSheetContextMenuComponent,\r\n PageToolbarButtonsComponent,\r\n SpinLoaderComponent,\r\n BreadcrumbComponent,\r\n PdfViewerComponent,\r\n TotalBalanceCardComponent,\r\n SwitchButton\r\n ];\r\n//System components - no need to re-export\r\nexport const SystemComponents: any =\r\n [\r\n LoginBaseComponent,\r\n LoginComponent,\r\n LoginOAuthComponent,\r\n LogoutComponent,\r\n SessionExpireComponent,\r\n PasswordChangeComponent,\r\n PasswordChangeExpiredComponent,\r\n PasswordRecoveryComponent,\r\n PasswordWelcomeComponent,\r\n ExceptionComponent,\r\n ComingSoonComponent,\r\n MainLayoutComponent,\r\n EmptyLayoutComponent,\r\n ToolbarComponent,\r\n ProgressPanelComponent,\r\n NavMenuComponent,\r\n NavBarComponent,\r\n MenuButtonListComponent,\r\n CredentialsActivityStatusComponent,\r\n CredentialActivityStatusGridComponent,\r\n NotificationsHistoryComponent,\r\n NotificationViewComponent,\r\n NotificationGridComponent,\r\n EmailHistoryGridComponent,\r\n SmsHistoryGridComponent,\r\n SharingHistoryGridComponent,\r\n PushMessageHistoryGridComponent,\r\n PushMessageListComponent,\r\n PushMessageListPopupComponent,\r\n PushMessageBadgeComponent,\r\n PushMessageComponent,\r\n PushMessageToastsComponent,\r\n EmailHistoryItemComponent,\r\n HtmlBoxDialogComponent,\r\n NotificationPreviewDialogComponent,\r\n NotificationTestDialogComponent,\r\n PushMessageHistoryItemComponent,\r\n SmsHistoryItemComponent,\r\n PasswordManageComponent,\r\n LoginByOtpComponent,\r\n InjectedComponentsComponent,\r\n FooterComponent,\r\n NotificationServerComponent,\r\n NotificationServerListComponent,\r\n NotificationServerGridComponent,\r\n NotificationTemplateListComponent,\r\n NotificationTemplateGridComponent,\r\n NotificationTemplateComponent,\r\n NotificationDispatchComponent,\r\n NotificationDispatchListComponent,\r\n NotificationDispatchGridComponent,\r\n NotificationDispatchRecipientsComponent,\r\n NotificationDispatchNotificationsComponent,\r\n PasswordTooltipComponent,\r\n SystemOptionsComponent,\r\n MidStoreComponent,\r\n SideBarComponent,\r\n PageFilterComponent,\r\n GridToolbarComponent,\r\n CredentialLoginHistoryComponent,\r\n CredentialLoginHistoryGridComponent,\r\n RequestHistoryListComponent,\r\n RequestHistoryGridComponent,\r\n RequestHistoryComponent,\r\n HistoryViewComponent,\r\n HistoryViewGridComponent,\r\n SystemCredentialsComponent,\r\n SystemCredentialsGridComponent,\r\n SystemCredentialsCreationComponent,\r\n SystemCredentialsCreationGridComponent,\r\n DataViewListComponent,\r\n DataViewGridComponent,\r\n LogsComponent,\r\n LogGridComponent\r\n ];\r\n\r\nconst SystemEndpoints: any =\r\n [\r\n LoginEndpoint,\r\n GenericListEndpoint,\r\n SystemEndpoint,\r\n NotificationEndpoint,\r\n NotificationServerEndpoint,\r\n NotificationTemplateEndpoint,\r\n NotificationDispatchEndpoint,\r\n PushMessageEndpoint,\r\n CredentialActivityEndpoint,\r\n WebAPICredentialEndpoint,\r\n WebAPIRequestEndpoint,\r\n HistoryEndpoint,\r\n DataEditorEndpoint,\r\n SystemCredentialsEndpoint,\r\n SystemOptionsEndpoint,\r\n ShareEndpoint,\r\n FileEndpoint,\r\n LogEndpoint\r\n ];\r\n\r\n//System services - need to provide only\r\nconst SystemServices: any =\r\n [\r\n LoginGuard,\r\n ConfirmCancelGuard,\r\n LoginService,\r\n SessionService,\r\n APIGatewayService,\r\n DevExpressService,\r\n FrameworkService,\r\n SysEnumsService,\r\n ResourcesService,\r\n ServiceBagService,\r\n NativeNotificationsService,\r\n NavigatorService,\r\n SysEventsService,\r\n ScreenService,\r\n InjectedComponentsBaseService,\r\n AppConfigService,\r\n CustomizationService,\r\n NestedOptionHost,\r\n DeviceDetectorService,\r\n SystemOptionsService,\r\n NotificationService,\r\n NotificationConfigurationBaseService,\r\n UiService,\r\n MessageService,\r\n DialogService,\r\n BottomSheetService,\r\n SidebarService,\r\n LanguageService,\r\n LocalStorageService,\r\n RouteHistoryService,\r\n EntityService,\r\n TransferState,\r\n ContextMenuService,\r\n ClientFingerprintService,\r\n ShareService,\r\n { provide: HTTP_INTERCEPTORS, useClass: APIGatewayInterceptor, multi: true },\r\n { provide: APP_INITIALIZER, useFactory: OnInitializeFramework, multi: true }\r\n ];\r\n\r\n//Angular modules - need to re-export\r\nconst BuiltInModules: any =\r\n [\r\n BrowserModule,\r\n CommonModule,\r\n FormsModule,\r\n InjectorModule,\r\n HttpClientModule,\r\n BrowserAnimationsModule,\r\n M4UDevExpressModule,\r\n PdfJsViewerModule,\r\n SignaturePadModule,\r\n RecaptchaModule,\r\n LoadingBarHttpClientModule,\r\n InfiniteScrollModule,\r\n ScrollingModule,\r\n SidebarModule,\r\n CarouselModule,\r\n ButtonModule,\r\n InputNumberModule,\r\n ContextMenuModule,\r\n ToolbarModule,\r\n SplitterModule,\r\n StepsModule,\r\n SelectButtonModule,\r\n ToastModule,\r\n DynamicDialogModule,\r\n ProgressSpinnerModule,\r\n TimelineModule,\r\n SliderModule,\r\n GalleriaModule\r\n ];\r\n\r\nconst DemoComponents: any =\r\n [\r\n DemoLayoutComponent,\r\n DemoNavbarComponent,\r\n DemoButtonsComponent,\r\n DemoEditorsComponent,\r\n DemoLayoutsComponent,\r\n DemoComponentsComponent,\r\n DemoSectionsComponent,\r\n DemoCardsComponent,\r\n DemoTabsComponent,\r\n DemoGridsComponent,\r\n DemoGridComponent,\r\n DemoBottomSheetsComponent,\r\n DemoPagesComponent,\r\n DemoPageToolbarButtonsComponent,\r\n DemoPageHeaderButtonsComponent,\r\n DemoSidebarsComponent,\r\n DemoDialogsComponent,\r\n DemoSimpleDialogComponent,\r\n DemoPipesComponent\r\n ];\r\n\r\nconst appConfig: AppConfig = AppConfigService.loadConfig();\r\nconst m4uConfig = AppConfigService.loadM4UConfig();\r\n\r\nexport function IsRegisterServiceWorker(): boolean {\r\n if (!environment.production) return false;\r\n if (location.protocol != 'https:') return false;\r\n if (!m4uConfig.isRegisterServiceWorker) return false;\r\n return true;\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n //IonicModule.forRoot(),\r\n BuiltInModules,\r\n AppRoutingModule,\r\n SidebarModule,\r\n PortalModule,\r\n AgmCoreModule.forRoot({ apiKey: m4uConfig.googleMapsApiKey, language: 'iw', region: 'IL' }),\r\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: IsRegisterServiceWorker() }),\r\n AgmMarkerSpiderModule,\r\n RecaptchaV3Module\r\n ],\r\n declarations: [SystemComponents, ReusableComponents, m4uConfig.isDemoEnabled ? DemoComponents : [], ...appConfig.Components],\r\n entryComponents: appConfig.EntryComponents,\r\n exports: [BuiltInModules, AgmCoreModule, ReusableComponents],\r\n providers: [\r\n SystemEndpoints,\r\n SystemServices,\r\n { provide: ErrorHandler, useClass: ExceptionHandler },\r\n { provide: ENVIRONMENT, useValue: environment },\r\n { provide: LOCALE_ID, useValue: m4uConfig.defaultLocale ?? 'he-IL' },\r\n //{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },\r\n { provide: EMPTY_STRING_TOKEN, useValue: '' },\r\n { provide: APP_BASE_HREF, useValue: m4uConfig.deploymentLocation },\r\n { provide: APP_CONFIG, useValue: appConfig },\r\n { provide: LOADING_BAR_CONFIG, useValue: { latencyThreshold: 100 } },\r\n ...appConfig.Endpoints,\r\n ...appConfig.Services,\r\n { provide: RECAPTCHA_V3_SITE_KEY, useValue: m4uConfig.reCAPTCHAv3Key }\r\n ],\r\n bootstrap: [AppComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class M4UAngularModule {\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { environment } from './environment/environment';\r\nimport { M4UAngularModule } from './_modules/m4uangular.module';\r\nimport themes from 'devextreme/ui/themes';\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\n//Dispatch 'applicationStarted' event\r\n//Syntax was adapted to work in the IE browser\r\nvar event = document.createEvent('Event');\r\nevent.initEvent('applicationStarted', true, true);\r\ndocument.dispatchEvent(event);\r\n\r\nthemes.initialized(() => {\r\n platformBrowserDynamic().bootstrapModule(M4UAngularModule)\r\n .then(() => {\r\n //Dispatch 'applicationLoaded' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('applicationLoaded', true, true);\r\n document.dispatchEvent(event);\r\n })\r\n .catch(err => console.error(err));\r\n});","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
{{contextMenu.text || contextMenu.label}}
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-context-menu',\r\n templateUrl: './bottom-sheet-context-menu.component.html',\r\n styleUrls: ['./bottom-sheet-context-menu.component.scss']\r\n})\r\nexport class BottomSheetContextMenuComponent implements IBottomSheetComponent {\r\n MenuItems: ContextMenuElement[];\r\n Context: BottomSheetDialogComponent;\r\n get MenuItemsFiltered() {\r\n return this.MenuItems?.filter(x => !(x as any).separator);\r\n }\r\n\r\n constructor() {}\r\n\r\n OnItemClick(contextMenu) {\r\n contextMenu.onClick && contextMenu.onClick() \r\n || contextMenu.command && contextMenu.command();\r\n this.Context.ClosePage();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{ GetItemText(data) }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BottomSheetListParams, IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-list',\r\n templateUrl: './bottom-sheet-list.component.html',\r\n styleUrls: ['./bottom-sheet-list.component.scss']\r\n})\r\nexport class BottomSheetListComponent implements IBottomSheetComponent {\r\n @Input() ListParams: BottomSheetListParams;\r\n @ViewChild('list') list: DxListComponent;\r\n\r\n Context: BottomSheetDialogComponent;\r\n get IsGrouped(): boolean {\r\n const data = Array.isArray(this.ListParams.DataSource) ? this.ListParams.DataSource : (this.ListParams.DataSource as any).items();\r\n return data.some(x => x.key && x.items);\r\n }\r\n\r\n FilteredDataSource: any[];\r\n\r\n constructor() {\r\n }\r\n\r\n OnItemClick(e) {\r\n if (this.ListParams.IsMultiSelection) return;\r\n\r\n const selectedValue = e.itemData[this.ListParams.ValueExpr];\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n ApplySelection(e) {\r\n const selectedValue = this.list.selectedItemKeys;\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n private CompleteSelection(event, selectedValue) {\r\n if (this.Context)\r\n this.Context.OnClose() && this.Context.CloseDialogWithSuccess({ event: event, value: selectedValue });\r\n else\r\n this.ListParams.OnCompleted({ event: event, value: selectedValue });\r\n }\r\n\r\n GetBankIcon = (iconName: string) => {\r\n return `assets/projects/kraken/${iconName}`;\r\n };\r\n\r\n GetItemText = (data) => {\r\n return data.key\r\n || (typeof (this.ListParams.DisplayExpr) === 'function' ? this.ListParams.DisplayExpr(data) : data[this.ListParams.DisplayExpr]);\r\n };\r\n\r\n OnSearch(e) {\r\n const dataSource = this.ListParams.DataSource as any;\r\n if (!Array.isArray(dataSource)) {\r\n const filter = this.ListParams.SearchExpr\r\n .map(expr => [expr, 'contains', e])\r\n .reduce((acc, curr) => acc.length === 0 ? [curr] : [...acc, 'or', curr], []);\r\n dataSource.filter(filter);\r\n dataSource.load();\r\n return;\r\n }\r\n const originalDataSource = this.ListParams.DataSource as any[];\r\n this.FilteredDataSource = e.length\r\n ? originalDataSource.filter(x => this.ListParams.SearchExpr.some(expr => {\r\n return x[expr] ? x[expr].toLowerCase().includes(e.toLowerCase()) : false\r\n }))\r\n : undefined;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'msgLoadingPDF' | RC }}
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PdfJsViewerComponent } from 'ng2-pdfjs-viewer';\r\nimport { LanguageService } from '../../../core/framework/language.service';\r\n\r\nclass State extends BaseState {\r\n PDFData: Blob;\r\n ShowLoadPanel: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-pdf-viewer',\r\n templateUrl: './pdf-viewer.component.html',\r\n styleUrls: ['./pdf-viewer.component.scss']\r\n})\r\nexport class PdfViewerComponent extends BaseComponent {\r\n\r\n @Input() FileName: string;\r\n @Input() set PDFData(value: string | Blob) { \r\n if(typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf'); \r\n this.State.PDFData = value;\r\n if (this.State.PDFData) {\r\n this.State.ShowLoadPanel = false;\r\n this.SetStyles();\r\n }\r\n }\r\n @Output() OnDocumentLoaded = new EventEmitter();\r\n\r\n @ViewChild(PdfJsViewerComponent) instance: PdfJsViewerComponent;\r\n\r\n constructor(A: ServiceBagService, private languageService: LanguageService) {\r\n super(A, 'PdfViewerComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n setTimeout(() => !this.State.PDFData && (this.State.ShowLoadPanel = false), 3000);\r\n }\r\n\r\n protected OnInitComponentFinished(): void {\r\n this.SetStyles();\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowLoadPanel = !this.State.PDFData;\r\n }\r\n\r\n GetLocale(): string {\r\n return this.languageService.GetLanguage();\r\n }\r\n\r\n DocumentLoaded(event: any) {\r\n this.OnDocumentLoaded.emit(event);\r\n }\r\n\r\n private SetStyles() {\r\n setTimeout(() => {\r\n const iframeDocument = this.instance?.iframe?.nativeElement?.contentDocument;\r\n if (!iframeDocument) return;\r\n\r\n const style = iframeDocument.createElement('style');\r\n\r\n const toolbarStyles = `\r\n #toolbarContainer {\r\n background: #294D92;\r\n }\r\n `;\r\n const backgroundStyles = `\r\n #viewerContainer {\r\n background-color: white;\r\n }\r\n `;\r\n\r\n style.appendChild(iframeDocument.createTextNode(toolbarStyles));\r\n if (this.A.Screen.IsMobile()) style.appendChild(iframeDocument.createTextNode(backgroundStyles));\r\n\r\n iframeDocument.head && iframeDocument.head.appendChild(style);\r\n }, 500);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, Input, TemplateRef, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bottom-sheet-dialog',\r\n templateUrl: './bottom-sheet-dialog.component.html',\r\n styleUrls: ['./bottom-sheet-dialog.component.scss']\r\n})\r\nexport class BottomSheetDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('bottomSheetContent', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n @Input() ContentPortal: Portal;\r\n @Input() ContentParams: any;\r\n @Input() Title: string;\r\n @Input() Height: EnumWindowSizes;\r\n @Input() Class: string;\r\n\r\n @ViewChild('page') pageLayout: PageLayoutComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private deviceDetector: DeviceDetectorService) {\r\n super(A, 'BottomSheetDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.BottomSheet, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n Repaint() {\r\n setTimeout(() => this.pageLayout?.popup?.instance?.repaint(), 200);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n (ref as any).context = {\r\n $implicit: this\r\n };\r\n if (this.ContentParams && ref instanceof ComponentRef) {\r\n Object.entries(this.ContentParams).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n\r\n if (this.deviceDetector.device === 'iPhone') this.Repaint();\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n ImageSource: string | SafeUrl;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-imageboxdialog',\r\n templateUrl: './imageboxdialog.component.html',\r\n styleUrls: ['./imageboxdialog.component.scss']\r\n})\r\nexport class ImageBoxDialogComponent extends BasePageComponent\r\n{\r\n @Input() set ImageSource(value: string | Blob) {\r\n this.State.ImageSource = typeof value === 'string' ? value : this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(value));\r\n }\r\n @Input() Title: string;\r\n @Input() ShowLargeWindow: boolean = false;\r\n \r\n WindowHeight: EnumWindowSizes = EnumWindowSizes.WindowLarge;\r\n WindowWidth: EnumWindowSizes = EnumWindowSizes.WindowMedium;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer)\r\n {\r\n super(A, 'ImageBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // If custom title was set, return it\r\n override OnInitTitle(): string\r\n {\r\n if (this.Title == undefined) return this.GetDefaultTitle();\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.ShowLargeWindow) {\r\n this.WindowHeight = this.WindowWidth = EnumWindowSizes.WindowXLarge;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n {{Prompt}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumMessageBoxTypes, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { MessageBoxCustomButton } from '@base/classes/BaseClasses';\r\nimport { PageButtonsComponent } from '@ui/layouts/componentlayouts/page-buttons/pagebuttons.component';\r\n\r\nclass State {\r\n ExtraButtons: MessageBoxCustomButton[];\r\n OKButtonText: string;\r\n OKButtonTabIndex: number;\r\n CancelButtonText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-messageboxdialog',\r\n templateUrl: './messageboxdialog.component.html',\r\n styleUrls: ['./messageboxdialog.component.scss']\r\n})\r\nexport class MessageBoxDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild('pageButtons') pageButtons: PageButtonsComponent;\r\n\r\n @Input() Title: string;\r\n @Input() Prompt: string;\r\n @Input() Buttons: MessageBoxCustomButton[];\r\n @Input() Width: EnumWindowSizes;\r\n @Input() Height: EnumWindowSizes;\r\n @Input() Type: EnumMessageBoxTypes = EnumMessageBoxTypes.OK;\r\n @Input() IsHideCancel: boolean;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'MessageBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (!this.Width) {\r\n this.Width = !this.A.Screen.IsMobile() \r\n ? ((this.A.Screen.IsWideScreen()) ? EnumWindowSizes.WindowXSmall : EnumWindowSizes.WindowMedium)\r\n : EnumWindowSizes.WindowLarge;\r\n }\r\n if (!this.Height) {\r\n this.Height = EnumWindowSizes.WindowAutoSize;\r\n }\r\n }\r\n\r\n protected override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetDefaultTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n\r\n //Prepare buttons\r\n override OnInitComponentFinished() {\r\n\r\n //Preset the types\r\n switch (this.Type) {\r\n case EnumMessageBoxTypes.OK:\r\n this.State.OKButtonText = this.RC('genOK');\r\n this.State.CancelButtonText = this.RC('genCancel');\r\n this.State.ExtraButtons = undefined;\r\n break;\r\n case EnumMessageBoxTypes.YesNo:\r\n this.State.OKButtonText = this.RC('genYes');\r\n this.State.CancelButtonText = this.RC('genNo');\r\n this.State.ExtraButtons = undefined;\r\n break;\r\n case EnumMessageBoxTypes.Custom:\r\n const [button] = this.Buttons\r\n this.State.OKButtonText = button.Text;\r\n this.State.OKButtonTabIndex = button.TabIndex;\r\n\r\n if (button.TabIndex) {\r\n setTimeout(() => {\r\n this.pageButtons.okBtnRef.btn.instance.focus()\r\n }, 500)\r\n }\r\n\r\n // this.State.CancelButtonText = this.RC('genCancel');\r\n this.pageButtons.CloseButtonHidden = true;\r\n this.State.ExtraButtons = this.Buttons.slice(1);\r\n // this.Width = EnumWindowSizes.WindowAutoSize;\r\n break;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { PdfViewerComponent } from '@m4u-angular/ui/components/pdf-viewer/pdf-viewer.component';\r\n\r\nclass State {\r\n PDFData: any\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-printboxdialog',\r\n templateUrl: './printboxdialog.component.html',\r\n styleUrls: ['./printboxdialog.component.scss']\r\n})\r\nexport class PrintBoxDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild('pdfViewer') pdfViewer: PdfViewerComponent;\r\n\r\n //Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n @Input() set PDFData(value: string | Blob) {\r\n if (typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf');\r\n this.State.PDFData = value;\r\n }\r\n\r\n @Input() FileName: string;\r\n @Input() Title: string;\r\n @Output() OnCustomPrint: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PrintBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return {\r\n IsAllowPrint: true,\r\n OnPrintButtonClick: (e) => this.DoPrint()\r\n } as ToolbarSettings;\r\n }\r\n\r\n DoPrint() {\r\n if (this.OnCustomPrint.observers.length > 0) {\r\n //Emit custom event\r\n this.OnCustomPrint.emit();\r\n return;\r\n }\r\n //Send to print\r\n this.pdfViewer.instance.iframe.nativeElement.contentWindow.print();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodEmail' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodSms' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodWhatsapp' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodPrint' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodDownload' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodShare' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { AttachedFile, BaseEntity, BaseEntityResponse, BaseResponse, FileView, SharingInformation, NotificationTemplateListView, RenderedTemplate } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumNotificationTemplateEditingMode, EnumPageDisplayModes, EnumPageEntitySources, EnumPrintingType } from '@core/framework/sysenums.enum';\r\nimport { BaseEndpointCRUD } from '@base/endpoint/BaseEndpointCRUD';\r\nimport { PrintBoxDialogComponent } from '../printbox-dialog/printboxdialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Observable } from 'rxjs';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { NotificationPreviewDialogComponent } from '../../notifications/notification-preview-dialog/notification-preview-dialog.component';\r\n\r\nclass State {\r\n IsSupportSharing: boolean;\r\n IsSupportEmail: boolean;\r\n IsSupportSMS: boolean;\r\n IsSupportWhatsapp: boolean;\r\n PageTemplates: NotificationTemplateListView[] = [];\r\n SelectedTemplates: NotificationTemplateListView[] = [];\r\n SelectedTemplate: NotificationTemplateListView;\r\n SelectedTemplateID: number;\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n SharingInformation = new SharingInformation;\r\n PreviewBody: any;\r\n IsShareByEntities: boolean;\r\n IsReportAndEntity: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-share-dialog',\r\n templateUrl: './share-dialog.component.html',\r\n styleUrls: ['./share-dialog.component.scss']\r\n})\r\nexport class ShareDialogComponent extends BasePageComponent {\r\n\r\n @Input() ShareEntityType: string;\r\n @Input() PageName: string;\r\n @Input() GetRenderedTemplate: (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable>;\r\n @Input() Share: (sharingInformation: SharingInformation) => Observable>;\r\n\r\n @ViewChild(PrintBoxDialogComponent) printBoxDialog: PrintBoxDialogComponent;\r\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer) {\r\n super(A, 'ShareDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.State.PageTemplates = this.A.ShareService.GetNotificationTemplatesByPageAndEntity(this.PageName, this.ShareEntityType);\r\n this.State.IsReportAndEntity = this.State.PageTemplates.some(x => x.EntityBindingPageType == EnumPrintingType.Report)\r\n && this.State.PageTemplates.some(x => x.EntityBindingPageType == EnumPrintingType.Entity);\r\n\r\n this.State.IsSupportEmail = this.State.PageTemplates.some(x => x.IsSupportEmail);\r\n this.State.IsSupportSharing = this.State.PageTemplates.some(x => x.IsSupportSharing);\r\n this.State.IsSupportSMS = this.State.PageTemplates.some(x => x.IsSupportSMS);\r\n this.State.IsSupportWhatsapp = this.State.PageTemplates.some(x => x.IsSupportWhatsapp);\r\n }\r\n\r\n IsEmail = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email;\r\n IsSms = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.SMS;\r\n IsWhatsApp = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.WhatsApp;\r\n IsPrint = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.Print;\r\n IsExport = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.ExportToPDF;\r\n IsShareMobile = () => !this.State.DeliveryOption && this.State.SelectedTemplates?.length > 0;\r\n\r\n IsEditBodyMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.EditBody;\r\n IsEditPrefixMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.EditPrefix;\r\n IsPreviewMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.Preview;\r\n IsHideBodyMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.None;\r\n\r\n OnShareMethodChosen(deliveryOptions: EnumNotificationDeliveryOptions) {\r\n this.State.DeliveryOption = deliveryOptions;\r\n this.State.SelectedTemplate = null;\r\n this.State.SelectedTemplateID = null;\r\n this.State.SharingInformation = new SharingInformation;\r\n\r\n this.FilterTemplates();\r\n\r\n if (this.State.SelectedTemplates.length == 1) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates[0];\r\n this.State.SelectedTemplateID = this.State.SelectedTemplates[0].EntryID;\r\n this.SetRenderedTemplate();\r\n }\r\n }\r\n\r\n OnNotificationTemplateSelected(e) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates.find(x => x.EntryID == e.value);\r\n if (!this.State.SelectedTemplate) return;\r\n\r\n this.SetRenderedTemplate();\r\n }\r\n\r\n ShareOnMobile() {\r\n this.ShareBase((fileView) => {\r\n const file = new File([Uint8Array.from(fileView.FileData)], fileView.FullName, { type: fileView.ContentType });\r\n\r\n navigator.share({\r\n title: this.RC('lblShareToApplication'),\r\n files: [file],\r\n } as ShareData);\r\n\r\n this.CloseDialogWithSuccess();\r\n }, false);\r\n }\r\n\r\n OnShowPreview() {\r\n this.previewDialog.HTMLBody = this.State.SharingInformation.Body;\r\n this.previewDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n OnShowForEntitiesChanged(e) {\r\n if (!e?.event || !this.State.IsReportAndEntity) return;\r\n this.FilterTemplates();\r\n\r\n if (this.State.SelectedTemplates.length == 1) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates[0];\r\n this.State.SelectedTemplateID = this.State.SelectedTemplates[0].EntryID;\r\n this.SetRenderedTemplate();\r\n }\r\n else {\r\n this.State.SelectedTemplateID = null;\r\n this.State.SelectedTemplate = null;\r\n }\r\n }\r\n\r\n Print() {\r\n this.ShareBase((fileView) => {\r\n this.printBoxDialog.PDFData = Utils.ConvertToBase64(fileView.FileData);\r\n this.printBoxDialog.ShowDialogShort(() => { });\r\n }, false);\r\n }\r\n\r\n Download() {\r\n this.ShareBase((fileView) => {\r\n const file = new AttachedFile;\r\n file.Extension = fileView.Extension;\r\n file.Name = fileView.Name;\r\n Utils.DoFileDownload(file, Utils.ConvertToBase64(fileView.FileData), fileView.ContentType);\r\n this.CloseDialogWithSuccess();\r\n }, true);\r\n }\r\n\r\n GetSubmitButtonName() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n return this.RC('genDownload');\r\n case EnumNotificationDeliveryOptions.Print:\r\n return this.RC('genPrint');\r\n case EnumNotificationDeliveryOptions.SMS:\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.RC('btnSend');\r\n }\r\n\r\n return this.RC('btnShare');\r\n }\r\n\r\n OnSend() {\r\n if (!this.Share) return;\r\n this.State.SharingInformation.DeliveryOption = this.State.DeliveryOption;\r\n this.State.SharingInformation.NotificationTempalteID = this.State.SelectedTemplateID;\r\n this.Do(this.Share(this.State.SharingInformation), true, response => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n\r\n OnSubmit() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n this.Download();\r\n return;\r\n case EnumNotificationDeliveryOptions.Print:\r\n this.Print();\r\n return;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n case EnumNotificationDeliveryOptions.Email:\r\n this.OnSend();\r\n return;\r\n default:\r\n this.ShareOnMobile();\r\n }\r\n }\r\n\r\n private FilterTemplates() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportEmail);\r\n break;\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportWhatsapp);\r\n break;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportSMS);\r\n break;\r\n case EnumNotificationDeliveryOptions.Print:\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n default:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportSharing);\r\n break;\r\n }\r\n\r\n if (this.State.IsReportAndEntity) {\r\n this.State.SelectedTemplates = this.State.SelectedTemplates.filter(x => x.EntityBindingPageType == EnumPrintingType.Report && !this.State.IsShareByEntities ||\r\n x.EntityBindingPageType == EnumPrintingType.Entity && this.State.IsShareByEntities)\r\n }\r\n }\r\n\r\n private ShareBase(callback: (file: FileView) => void, isShowSuccess: boolean) {\r\n if (!this.Share) return;\r\n\r\n const sharingInformation = new SharingInformation;\r\n sharingInformation.DeliveryOption = EnumNotificationDeliveryOptions.Share;\r\n sharingInformation.NotificationTempalteID = this.State.SelectedTemplate.EntryID;\r\n\r\n this.Do(this.Share(sharingInformation), isShowSuccess, response => {\r\n if (!response.IsSuccess) return;\r\n callback(response.Entity);\r\n });\r\n }\r\n\r\n private SetRenderedTemplate() {\r\n if (!this.GetRenderedTemplate ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.Print ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.Share ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.ExportToPDF)\r\n return;\r\n\r\n this.Do(this.GetRenderedTemplate(this.State.SelectedTemplate.EntryID, this.State.DeliveryOption), false, response => {\r\n if (!response.IsSuccess) return;\r\n this.State.SharingInformation.Subject = response.Entity?.Subject;\r\n this.State.SharingInformation.Body = response.Entity?.Body;\r\n this.State.SharingInformation.CcAddress = response.Entity?.CcAddress;\r\n this.State.SharingInformation.BccAddress = response.Entity?.BccAddress;\r\n\r\n if (this.IsEmail() && this.IsPreviewMode()) {\r\n this.State.PreviewBody = this.sanitizer.bypassSecurityTrustHtml(this.State.SharingInformation.Body) as any;\r\n }\r\n });\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { SignaturePad } from 'angular2-signaturepad';\r\n\r\nclass State {\r\n SignatureData: string;\r\n IsDrawing = false;\r\n Options: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-signbox',\r\n templateUrl: './signbox.component.html',\r\n styleUrls: ['./signbox.component.scss']\r\n})\r\nexport class SignBoxComponent extends BaseComponent {\r\n\r\n @ViewChild('pad') pad: SignaturePad;\r\n @Input() SignatureReadOnly: boolean;\r\n @Input() MaxSignatureHeight: number = 0;\r\n @Input() Options: any;\r\n\r\n private _clientHeight: number;\r\n @Input() set ClientHeight(value: number) {\r\n if (!value) return;\r\n this._clientHeight = value;\r\n this.ResizePad();\r\n }\r\n\r\n get ClientHeight() {\r\n return this._clientHeight;\r\n }\r\n\r\n private _clientWidth: number;\r\n @Input() set ClientWidth(value: number) {\r\n if (!value) return;\r\n this._clientWidth = value;\r\n this.ResizePad();\r\n }\r\n\r\n get ClientWidth() {\r\n return this._clientWidth;\r\n }\r\n\r\n public set SignatureData(value: string) {\r\n this.State.SignatureData = value;\r\n setTimeout(() => this.LoadSignature(), 100);\r\n }\r\n public get SignatureData(): string {\r\n return this.State.SignatureData;\r\n }\r\n\r\n private readonly _areaAroundSize = 180;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SignBoxComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n window.addEventListener('touchmove', this.OnTouchMove, { passive: false });\r\n window.addEventListener('touchstart', this.OnTouchMove, { passive: false });\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.State.Options = this.Options ?? {};\r\n if (!this.State.Options.penColor) this.State.Options.penColor = '#0177F9';\r\n if (!this.State.Options.backgroundColor) this.State.Options.backgroundColor = '#ffffff';\r\n if (!this.State.Options.maxWidth) this.State.Options.maxWidth = 2;\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n window.removeEventListener('touchmove', this.OnTouchMove);\r\n window.removeEventListener('touchstart', this.OnTouchMove);\r\n }\r\n\r\n OnTouchMove = (e) => {\r\n if (!this.State.IsDrawing) return;\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n OnBeginDrawing() {\r\n this.State.IsDrawing = true;\r\n }\r\n\r\n OnEndDrawing() {\r\n this.State.IsDrawing = false;\r\n }\r\n\r\n OnResizeWindow() {\r\n this.ResizePad();\r\n }\r\n\r\n OnOrientationChanged() {\r\n this.ResizePad();\r\n }\r\n\r\n ClearSignature() {\r\n if (!this.SignatureReadOnly) this.pad.clear();\r\n }\r\n\r\n IsEmpty = () => this.pad.isEmpty();\r\n\r\n Save() {\r\n this.State.SignatureData = this.pad.toDataURL();\r\n }\r\n\r\n ResizePad() {\r\n const width = this.ClientWidth;\r\n const height = this.ClientHeight;\r\n\r\n if (width) {\r\n this.pad.set('canvasWidth', width - 5);\r\n }\r\n\r\n if (height) {\r\n if (this.MaxSignatureHeight != 0 && height - this._areaAroundSize > this.MaxSignatureHeight) {\r\n this.pad.set('canvasHeight', this.MaxSignatureHeight);\r\n }\r\n else {\r\n this.pad.set('canvasHeight', height - this._areaAroundSize);\r\n }\r\n }\r\n \r\n this.LoadSignature()\r\n }\r\n\r\n private LoadSignature() {\r\n this.pad.clear();\r\n if (this.SignatureData != undefined) this.pad.fromDataURL(this.SignatureData, { ratio: 1 });\r\n if (this.SignatureReadOnly) this.pad.off();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-grid-toolbar',\r\n templateUrl: './grid-toolbar.component.html',\r\n styleUrls: ['./grid-toolbar.component.scss']\r\n})\r\nexport class GridToolbarComponent extends BaseComponent {\r\n @Input() Grid: DxDataGridComponent;\r\n @Input() ShowAddButton: boolean;\r\n @Input() AddButtonText: string;\r\n @Input() AddButtonNavPath: string;\r\n @Input() AddButtonNavParams: any;\r\n @Input() Title: string;\r\n @Input() StartExtraButtonsTemplate: TemplateRef;\r\n @Input() EndExtraButtonsTemplate: TemplateRef;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'GridToolbarComponent', BaseState);\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { DxButtonComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ButtonComponent } from '../../../components/button/button.component';\r\n\r\n@Component({\r\n selector: 'm4u-pagebuttons',\r\n templateUrl: './pagebuttons.component.html',\r\n styleUrls: ['./pagebuttons.component.scss']\r\n})\r\nexport class PageButtonsComponent {\r\n constructor(private resources: ResourcesService) { }\r\n\r\n @Input() Page: BasePageComponent | BasePageCRUDComponent>;\r\n @Input() OKText: string = this.resources.RC('genOK');\r\n @Input() OKTabIndex: number | undefined;\r\n @Input() CancelText: string = this.resources.RC('genCancel');\r\n @Input() ValidationGroup: DxValidationGroupComponent;\r\n @Input() IsAllow = true;\r\n @Input() IsCloseOnly: boolean;\r\n @Input() CustomCloseAction: boolean;\r\n @Input() Disabled: boolean;\r\n @Input() CloseButtonHidden: boolean;\r\n @Input() AutoCloseBottomSheet = true;\r\n @Output() OnOK = new EventEmitter();\r\n @Output() OnCancel = new EventEmitter();\r\n @Output() OnOkValidationFailed = new EventEmitter();\r\n\r\n @ViewChild('okBtn') okBtnRef: ButtonComponent;\r\n\r\n //Handle cancel press\r\n OnCancelButton() {\r\n if (!this.CustomCloseAction) {\r\n this.Page.ClosePage();\r\n return;\r\n }\r\n \r\n this.OnCancel.emit();\r\n this.CloseBottomSheet();\r\n }\r\n\r\n get OkButtonDisabled(): boolean {\r\n if (this.Disabled) {\r\n return true;\r\n }\r\n //disable ok button for crud pages if no changes\r\n if (this.Page instanceof BasePageCRUDComponent && !(this.Page as any).OnIsDirtyDisabled()) {\r\n return !(this.Page as any).IsDirty;\r\n }\r\n return false;\r\n }\r\n\r\n get IsSaving(): boolean {\r\n if (this.Page instanceof BasePageCRUDComponent) {\r\n return this.Page.IsSaving;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //Handle OK press\r\n OnOKButton() {\r\n //Validate, if validation group was specified\r\n if (this.ValidationGroup != undefined) {\r\n this.Page.ValidateValidationGroup(this.ValidationGroup).then(isValid => {\r\n if (!isValid) {\r\n this.OnOkValidationFailed.emit();\r\n return;\r\n }\r\n\r\n this.OnOK.emit();\r\n this.CloseBottomSheet();\r\n });\r\n } else {\r\n //Emit event\r\n this.OnOK.emit();\r\n this.CloseBottomSheet();\r\n }\r\n }\r\n\r\n IsCloseButtonHidden() {\r\n return (this.IsPageShowAsFullScreen() || this.CloseButtonHidden);\r\n }\r\n\r\n IsPageShowAsFullScreen() {\r\n return this.Page && this.Page.IsShowAsFullScreen && this.Page.IsShowAsFullScreen();\r\n }\r\n\r\n CloseBottomSheet() {\r\n if (this.Page.DisplayMode === EnumPageDisplayModes.BottomSheet && this.AutoCloseBottomSheet) this.Page.ClosePage();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n}","export default \"
\\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n@Component({\r\n selector: 'm4u-fielddetail',\r\n templateUrl: './fielddetail.component.html',\r\n styleUrls: ['./fielddetail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FieldDetailComponent extends FieldFormComponent {\r\n @Input() Icon: string;\r\n @Input() IsShowEmpty: boolean = false;\r\n @Input() Position: 'vertical' | 'horizontal' = 'vertical';\r\n @Input() ValueAlignment: 'start' | 'end' = 'start';\r\n @Input() Class: string;\r\n @Input() Value: string;\r\n\r\n get SaveHTML(){\r\n return this.sanitizer.bypassSecurityTrustHtml(this.Value);\r\n }\r\n}","export default \"
\\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n\r\n@Component({\r\n selector: 'm4u-fielddetailx',\r\n templateUrl: './fielddetailx.component.html',\r\n styleUrls: ['./fielddetailx.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FieldDetailComponentX extends FieldFormComponent {\r\n @Input() Icon: string;\r\n @Input() IsShowEmpty: boolean;\r\n @Input() Position: 'vertical' | 'horizontal' = 'vertical';\r\n @Input() ValueAlignment: 'start' | 'end' = 'start';\r\n @Input() Class: string;\r\n // obsolete\r\n @Input() Value: string;\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n {{Label}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, ContentChildren, Input, QueryList } from '@angular/core';\r\nimport { DxCheckBoxComponent, DxDateBoxComponent, DxDropDownBoxComponent, DxNumberBoxComponent, DxRadioGroupComponent, DxSelectBoxComponent, DxTagBoxComponent, DxTextAreaComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { IBaseComponent } from '@base/component/IBaseComponent';\r\nimport { CustomizationService } from '@m4u-angular/core/framework/customization-service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'm4u-field',\r\n templateUrl: './fieldform.component.html',\r\n styleUrls: ['./fieldform.component.scss'] \r\n})\r\nexport class FieldFormComponent implements AfterViewInit {\r\n @Input() Name: string;\r\n @Input() IsHideLabel: boolean;\r\n @Input() IsRemoveLabel: boolean;\r\n @Input() public Component: IBaseComponent;\r\n @Input() SearchText: string = null;\r\n\r\n @ContentChildren(DxSelectBoxComponent) private ctlSelectBoxes: QueryList;\r\n @ContentChildren(DxTextBoxComponent) private ctlTextBoxes: QueryList;\r\n @ContentChildren(DxTextAreaComponent) private ctlTextAreas: QueryList;\r\n @ContentChildren(DxNumberBoxComponent) private ctlNumberBoxes: QueryList;\r\n @ContentChildren(DxDateBoxComponent) private ctlDateBoxes: QueryList;\r\n @ContentChildren(DxCheckBoxComponent) private ctlCheckBoxes: QueryList;\r\n @ContentChildren(DxTagBoxComponent) private ctlTagBoxes: QueryList;\r\n @ContentChildren(DxRadioGroupComponent) private ctlRadioGroup: QueryList;\r\n @ContentChildren(DxDropDownBoxComponent) private ctlDropDownBoxes: QueryList;\r\n\r\n public IsHide: boolean;\r\n public IsFocused: boolean;\r\n\r\n private m_bInitComplete: boolean;\r\n private m_bEventAttached: boolean;\r\n\r\n constructor(private customizationService: CustomizationService, private screen: ScreenService, public sanitizer: DomSanitizer) { }\r\n\r\n //Set template that highlights the typed in item, shows the value, and enables search by value\r\n private _Label: string;\r\n get Label(): string {\r\n return this._Label; \r\n }\r\n @Input() set Label(value: string) {\r\n const sPrev = this._Label;\r\n this._Label = value;\r\n if (this.m_bInitComplete) this.SetPlaceHolder(sPrev);\r\n }\r\n\r\n //Set placeholder\r\n private SetPlaceHolder(sPrev: string) {\r\n //Get relevant editor control\r\n const control = this.GetEditorControl();\r\n if (control == undefined) return;\r\n if (control instanceof DxCheckBoxComponent) {\r\n if (this.screen.IsMobile() && this.IsHideLabel == null) this.IsHideLabel = true;\r\n return;\r\n }\r\n if (control instanceof DxTextAreaComponent && control.stylingMode === 'outlined') {\r\n this.IsHideLabel = false;\r\n return;\r\n }\r\n\r\n //Handle cases when placeholder is set explicitely on the editor itself\r\n const sPlaceHolder = control.instance.option('placeholder');\r\n if (Utils.IsEmpty(sPlaceHolder) || sPlaceHolder == sPrev) control.instance.option('placeholder', this.Label);\r\n\r\n //Hide the label\r\n this.IsHideLabel = Utils.IsEmpty(control.instance.option(\"value\")) && Utils.IsEmpty(control.instance.option(\"mask\"));\r\n\r\n //Attach event\r\n if (!this.m_bEventAttached) {\r\n this.m_bEventAttached = true;\r\n control.instance.on('valueChanged', (e) => this.IsHideLabel = Utils.IsEmpty(e.value) && Utils.IsEmpty(control.instance.option(\"mask\")));\r\n control.instance.on('focusIn', (e) =>\r\n { \r\n this.IsHideLabel = false;\r\n this.IsFocused = true;\r\n });\r\n control.instance.on('focusOut', (e) =>\r\n {\r\n this.IsHideLabel = Utils.IsEmpty(e.component.option(\"value\")) && Utils.IsEmpty(control.instance.option(\"mask\"));\r\n this.IsFocused = false;\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.m_bInitComplete = true;\r\n setTimeout(() => this.SetPlaceHolder(this.Label), 300);\r\n }\r\n\r\n public SetFieldDefaultValue() {\r\n this.customizationService.SetFieldDefaultValue(this);\r\n }\r\n\r\n //Configures the customizations\r\n public SetFieldCustomizations() {\r\n this.customizationService.SetFieldCustomizations(this);\r\n }\r\n\r\n //Return the relevant control that we need to apply to\r\n GetEditorControl(): any {\r\n for (const controls of this.Controls()) {\r\n if (controls != undefined && controls.length == 1) return controls.first;\r\n }\r\n }\r\n\r\n //Return all control types\r\n protected Controls(): QueryList[] {\r\n return [\r\n this.ctlSelectBoxes,\r\n this.ctlTextBoxes,\r\n this.ctlTextAreas,\r\n this.ctlNumberBoxes,\r\n this.ctlDateBoxes,\r\n this.ctlCheckBoxes,\r\n this.ctlTagBoxes,\r\n this.ctlRadioGroup,\r\n this.ctlDropDownBoxes\r\n ];\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n@Component({\r\n selector: 'm4u-fieldx',\r\n templateUrl: './fieldformx.component.html',\r\n styleUrls: ['./fieldformx.component.scss']\r\n})\r\nexport class FieldFormComponentX extends FieldFormComponent {\r\n\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList, ChangeDetectionStrategy, \r\n ChangeDetectorRef, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { DxButtonComponent, DxSwitchComponent, DxCheckBoxComponent, DxDateBoxComponent, DxNumberBoxComponent, DxSelectBoxComponent, \r\n DxSliderComponent, DxTextAreaComponent, DxTextBoxComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { FieldDetailComponent } from '../field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '../field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '../field-formx/fieldformx.component';\r\nimport { GridExtender } from '@base/grid/Grid.extender';\r\nimport { GridWrapperDirective } from '@base/grid/Grid.directive';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'm4u-section',\r\n templateUrl: './section.component.html',\r\n styleUrls: ['./section.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { '[class.section-with-shadow]': 'UseShadow' }\r\n})\r\nexport class SectionComponent implements AfterViewInit, OnInit, OnDestroy {\r\n @Input() Icon: string;\r\n @Input() Label: string;\r\n @Input() HideLabelOnMobile: boolean;\r\n @Input() Name: string;\r\n @Input() IsCollapsable: boolean;\r\n @Input() set IsCollapsed (value: boolean) {\r\n this.IsContentHidden = value;\r\n }\r\n @Input() Type: 'default' | 'outlined' = 'default';\r\n @Input() Style: 'light' | 'dark' = 'light';\r\n @Input() UseShadow: boolean;\r\n @Input() IsHideIcon: boolean;\r\n @Input() IsHeaderLink: boolean;\r\n @Output() OnHeaderClick = new EventEmitter();\r\n @Output() OnSectionToggle = new EventEmitter();\r\n @Output() OnClick = new EventEmitter();\r\n\r\n IsContentHidden: boolean;\r\n\r\n private _visible: boolean;\r\n get visible(): boolean { \r\n return this._visible;\r\n }\r\n set visible(value: boolean) { \r\n this._visible = value; this.cdr.detectChanges();\r\n }\r\n\r\n @ContentChildren(DxSelectBoxComponent, { descendants: true }) private ctlSelectBoxes: QueryList;\r\n @ContentChildren(DxTextBoxComponent, { descendants: true }) private ctlTextBoxes: QueryList;\r\n @ContentChildren(DxTextAreaComponent, { descendants: true }) private ctlTextAreas: QueryList;\r\n @ContentChildren(DxNumberBoxComponent, { descendants: true }) private ctlNumberBoxes: QueryList;\r\n @ContentChildren(DxDateBoxComponent, { descendants: true }) private ctlDateBoxes: QueryList;\r\n @ContentChildren(DxCheckBoxComponent, { descendants: true }) private ctlCheckBoxes: QueryList;\r\n @ContentChildren(DxSliderComponent, { descendants: true }) private ctlSliders: QueryList;\r\n @ContentChildren(DxButtonComponent, { descendants: true }) private ctlButtons: QueryList;\r\n @ContentChildren(DxSwitchComponent, { descendants: true }) private ctlSwitches: QueryList;\r\n\r\n @ContentChildren(DxDataGridComponent, { descendants: true }) private grids: QueryList;\r\n //explicit grids that defined inside custom component\r\n @ContentChildren(GridWrapperDirective, { descendants: true }) private editableGrids: QueryList;\r\n\r\n\r\n //Fields\r\n @ContentChildren(FieldFormComponent, { descendants: true }) private fields1: QueryList;\r\n @ContentChildren(FieldFormComponentX, { descendants: true }) private fields2: QueryList;\r\n @ContentChildren(FieldDetailComponent, { descendants: true }) private fields3: QueryList;\r\n @ContentChildren(FieldDetailComponentX, { descendants: true }) private fields4: QueryList;\r\n\r\n @ViewChild('section') Section: ElementRef;\r\n\r\n private subscriptionOnSetDefaults: Subscription;\r\n constructor(public screen: ScreenService, private sysEvents: SysEventsService, private cdr: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.visible = true;\r\n this.subscriptionOnSetDefaults = this.sysEvents.OnSetDefaults.subscribe(x => {\r\n this.SetDefaultValues();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptionOnSetDefaults && this.subscriptionOnSetDefaults.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.SetCustomizations();\r\n }\r\n \r\n //Lock all controls on form\r\n public LockControls(bLock: boolean) {\r\n this.Controls().forEach(controls => controls.forEach(x => x.readOnly = bLock));\r\n if (bLock) this.Grids().forEach(x => {\r\n (x.grid.instance as any).option(\r\n {\r\n 'editing.allowAdding': false,\r\n 'editing.allowDeleting': false,\r\n 'editing.allowUpdating': false\r\n });\r\n });\r\n }\r\n\r\n //Accept changes - sync the grid with the bound entity\r\n public AcceptGridChanges(): Promise[] {\r\n return this.Grids().map(x => x?.ValidateGrid());\r\n }\r\n\r\n\r\n //Apply customizations\r\n protected SetCustomizations() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldCustomizations()));\r\n }\r\n\r\n //Set default values for the fields\r\n public SetDefaultValues() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldDefaultValue()));\r\n }\r\n\r\n public ResetValidation() {\r\n\r\n this.Controls().forEach(controls => controls.forEach(x => {\r\n x.instance.option(\r\n {\r\n isValid: true,\r\n validationError: undefined,\r\n validationErrors: undefined,\r\n validationStatus: 'valid'\r\n });\r\n }));\r\n }\r\n\r\n protected Grids(): GridExtender[] {\r\n const arr: GridExtender[] = [];\r\n this.grids.forEach(grid => arr.push((grid as any).G));\r\n this.editableGrids.forEach(grid => arr.push((grid as any).G));\r\n return arr;\r\n }\r\n\r\n //Return all control types\r\n protected Controls(): QueryList[] {\r\n const arr =\r\n [\r\n this.ctlSelectBoxes,\r\n this.ctlTextBoxes,\r\n this.ctlTextAreas,\r\n this.ctlNumberBoxes,\r\n this.ctlDateBoxes,\r\n this.ctlCheckBoxes,\r\n this.ctlSliders,\r\n this.ctlButtons,\r\n this.ctlSwitches\r\n ];\r\n return arr;\r\n }\r\n\r\n //Return all fields\r\n protected Fields(): QueryList[] {\r\n const arr =\r\n [\r\n this.fields1,\r\n this.fields2,\r\n this.fields3,\r\n this.fields4\r\n ];\r\n return arr;\r\n }\r\n\r\n ToggleSection() {\r\n if (!this.IsCollapsable) {\r\n return;\r\n }\r\n\r\n this.IsContentHidden = !this.IsContentHidden;\r\n this.OnSectionToggle.emit(!this.IsContentHidden);\r\n if (!this.IsContentHidden) {\r\n setTimeout(() => this.ctlTextAreas.forEach(ta => ta.instance.repaint()));\r\n }\r\n }\r\n\r\n GetSectionClass() {\r\n return `section-${this.Type} section-${this.Style}`;\r\n }\r\n\r\n HeaderClick(event) {\r\n this.IsHeaderLink ? this.OnHeaderClick.emit(event) : this.ToggleSection();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ GetPreviewTitle() || ( 'titlePreview' | RC ) }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{Subtitle}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, ElementRef, HostListener, Input, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumApplicationMode, EnumPageDisplayModes, EnumScreenSizes, EnumWindowSizes, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { DxContextMenuComponent, DxPopupComponent, DxScrollViewComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'm4u-page',\r\n templateUrl: './pagelayout.component.html',\r\n styleUrls: ['./pagelayout.component.scss', '../page-filter/page-filter.component.scss']\r\n})\r\nexport class PageLayoutComponent implements OnInit, OnDestroy {\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n EscPress = (event: KeyboardEvent) => this.EscPressed(event);\r\n\r\n private _isPageButtonsVisible: boolean;\r\n private _pageToolbarSettings: ToolbarSettings;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n IsPageSidePanelVisible: boolean;\r\n ShowPreview: boolean;\r\n PreviewPDFData: string | Blob;\r\n PreviewFileName: string;\r\n\r\n @ViewChild('pageHeader') pageHeader: ElementRef;\r\n @ViewChild('popup') popup: DxPopupComponent;\r\n @ViewChild('scroll') scroll: DxScrollViewComponent;\r\n @ViewChild('mnuViewModes') protected viewModesMenu: DxContextMenuComponent;\r\n\r\n constructor(public screen: ScreenService,\r\n private appConfigService: AppConfigService,\r\n public SysEnums: SysEnumsService,\r\n private sysEvents: SysEventsService,\r\n public screenService: ScreenService,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n @Input() public WindowHeight: EnumWindowSizes;\r\n @Input() public WindowWidth: EnumWindowSizes;\r\n @Input() public IsNoToolbar: boolean;\r\n @Input() public IsNoBodyScroll: boolean;\r\n @Input() public Class: string;\r\n @Input() public ShowScrollbar: string;\r\n @Input() ButtonsPosition: 'toolbar' | 'header' | 'header-title';\r\n @Input() Page: BasePageComponent;\r\n @Input() public ShowDialogAsWindow: boolean;\r\n @Input() public IsFooterHidden: boolean;\r\n @Input() public IsHeaderInBody: boolean;\r\n @Input() public IsHeaderCollapsed: boolean;\r\n\r\n @Input() SidePanelTemplate: TemplateRef;\r\n @Input() ToolbarButtonsBefore: TemplateRef;\r\n @Input() ToolbarButtonsCenter: TemplateRef;\r\n @Input() ToolbarButtonsAfter: TemplateRef;\r\n @Input() QuickFilters: TemplateRef;\r\n @Input() HeaderButtonsBefore: TemplateRef;\r\n @Input() HeaderButtonsAfter: TemplateRef;\r\n @Input() TitleButtons: TemplateRef;\r\n // \r\n @Input() PageBody: TemplateRef;\r\n @Input() SidePanelPosition: 'left' | 'right';\r\n @Input() HideSidePanelToggle: boolean;\r\n @Input() HidePageBreadcrumb: boolean = false;\r\n @Input() HideToolbarBreadcrumbs: boolean = false;\r\n @Input() DisableFilterApply: boolean = false;\r\n\r\n get ShowBreadBrumb() {\r\n return this.appConfigService.AppConfig.ShowBreadcrumb() && !this.HidePageBreadcrumb;\r\n }\r\n\r\n get Title() {\r\n return this._pageToolbarSettings?.Title;\r\n }\r\n\r\n get Subtitle() {\r\n return this._pageToolbarSettings?.Subtitle;\r\n }\r\n\r\n IsShowViewModesButton() {\r\n return this._pageToolbarSettings?.ViewModes && this._pageToolbarSettings?.ViewModes.length;\r\n }\r\n\r\n get ViewModes() {\r\n return this._pageToolbarSettings?.ViewModes;\r\n }\r\n\r\n get ShowBackButton() {\r\n return this._pageToolbarSettings?.ShowBackButton;\r\n }\r\n\r\n ngOnInit() {\r\n this._subscriptions.push(this.sysEvents.Toolbar.subscribe((toolbarSettings: ToolbarSettings) => {\r\n if (!toolbarSettings || this.Page.ComponentName !== toolbarSettings.PageComponentName) return;\r\n\r\n this._pageToolbarSettings = toolbarSettings;\r\n\r\n if (!this.ButtonsPosition) {\r\n this.ButtonsPosition = this.Page.DisplayMode == EnumPageDisplayModes.Window\r\n || this.Page.DisplayMode == EnumPageDisplayModes.Dialog\r\n || this.Page instanceof BasePageCRUDComponent\r\n ? 'toolbar'\r\n : this.screen.IsDesktop() ? 'header' : 'header-title';\r\n }\r\n\r\n const contextMenuItems = toolbarSettings.OnGetContextMenuItems();\r\n this._isPageButtonsVisible = toolbarSettings.IsAllowFilter || toolbarSettings.IsAllowPrint || toolbarSettings.IsAllowExport\r\n || (contextMenuItems && contextMenuItems.length > 0);\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PageSidePanelState.subscribe(({ pageComponentName, state }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.IsPageSidePanelVisible = state;\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PagePreviewState.subscribe(({ pageComponentName, state, data, fileName }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.ShowPreview = state;\r\n this.PreviewPDFData = data;\r\n this.PreviewFileName = fileName;\r\n }));\r\n }\r\n\r\n GetPreviewTitle() {\r\n return this._pageToolbarSettings.OnGetPreviewTitle();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions && this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n IsHeaderEmpty() {\r\n return this.IsQuickFiltersEmpty && !this.HasContent(this.pageHeader) && !(this.IsMobileTitleVisible());\r\n }\r\n\r\n IsMobileTitleVisible() {\r\n return this.IsStandardApplicationMode() && this.screen.IsMobile() && this.Page.DisplayMode === EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n get IsQuickFiltersEmpty() {\r\n return !this.QuickFilters && !this.HeaderButtonsBefore && !this.HeaderButtonsAfter && \r\n (this.ButtonsPosition === 'toolbar' || this.ButtonsPosition === 'header-title' || !this._isPageButtonsVisible);\r\n }\r\n\r\n GetPageLoadingClass() {\r\n return this.Page.IsLoading ? 'page-is-loading' : '';\r\n }\r\n\r\n GetCustomClass() {\r\n return (this.Class || '') + ` ${this.Page.ComponentName}` + ` ${this.GetPageLoadingClass()}`;\r\n }\r\n\r\n GetDialogClass() {\r\n // eslint-disable-next-line max-len\r\n return `m4u-popup ${this.GetPopupWidthClass()} ${this.GetCustomClass()} ${this.Page.ShowDialogAsBottomSheet ? 'm4u-bottom-sheet' : 'm4u-dialog'}`;\r\n }\r\n\r\n GetDialogWidth() {\r\n return this.Page.ShowDialogAsBottomSheet ? '100%' : this.GetPopupSize(this.WindowWidth);\r\n }\r\n\r\n GetDialogHeight() {\r\n const height = this.Page.ShowDialogAsBottomSheet ? this.GetBottomSheetHeight(this.WindowHeight) : this.ShowDialogAsWindow\r\n ? '100%' : this.GetPopupSize(this.WindowHeight);\r\n\r\n const currentHeight = this.popup?.instance?.option('height');\r\n if (currentHeight === height) return currentHeight;\r\n\r\n this.popup?.instance?.option('height', height);\r\n return height;\r\n }\r\n\r\n GetDialogPosition() {\r\n return this.Page.ShowDialogAsBottomSheet ? 'bottom' : this.ShowDialogAsWindow ? this.GetPopupPosition() : 'center';\r\n }\r\n\r\n GetPopupSize(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '30%';\r\n case EnumWindowSizes.WindowSmall: return '40%';\r\n case EnumWindowSizes.WindowMedium: return '50%';\r\n case EnumWindowSizes.WindowLarge: return '75%';\r\n case EnumWindowSizes.WindowXLarge: return '90%';\r\n case EnumWindowSizes.WindowAutoSize: return this.WindowHeight == size ? 'auto' : '100%';\r\n }\r\n }\r\n\r\n GetBottomSheetHeight(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '95dvh';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '50dvh';\r\n case EnumWindowSizes.WindowSmall: return '60dvh';\r\n case EnumWindowSizes.WindowMedium: return '70dvh';\r\n case EnumWindowSizes.WindowLarge: return '80dvh';\r\n case EnumWindowSizes.WindowXLarge: return '95dvh';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetWindowWidth(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n const previewSize = this.ShowPreview ? this.GetPreviewSize(size) : '0px';\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return `calc(${previewSize} + 30vw)`;\r\n case EnumWindowSizes.WindowSmall: return `calc(${previewSize} + 40vw)`;\r\n case EnumWindowSizes.WindowMedium: return `calc(${previewSize} + 50vw)`;\r\n case EnumWindowSizes.WindowLarge: return `calc(${previewSize} + 75vw)`;\r\n case EnumWindowSizes.WindowXLarge: return `calc(${previewSize} + 90vw)`;\r\n case EnumWindowSizes.WindowAutoSize: return '100%';\r\n }\r\n }\r\n\r\n GetPreviewSize(size: EnumWindowSizes) {\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '45vw';\r\n case EnumWindowSizes.WindowSmall: return '45vw';\r\n case EnumWindowSizes.WindowMedium: return '45vw';\r\n case EnumWindowSizes.WindowLarge: return '20vw';\r\n case EnumWindowSizes.WindowXLarge: return '10vw';\r\n case EnumWindowSizes.WindowAutoSize: return 0;\r\n }\r\n }\r\n\r\n GetPopupWidthClass() {\r\n switch (this.WindowWidth) {\r\n case EnumWindowSizes.WindowXSmall:\r\n case EnumWindowSizes.WindowSmall:\r\n return 'm4u-popup-small';\r\n case EnumWindowSizes.WindowMedium:\r\n return 'm4u-popup-medium';\r\n case EnumWindowSizes.WindowLarge:\r\n case EnumWindowSizes.WindowXLarge:\r\n return 'm4u-popup-large';\r\n case EnumWindowSizes.WindowAutoSize:\r\n return 'm4u-popup-auto';\r\n }\r\n }\r\n\r\n GetPopupPosition() {\r\n return this.screen.IsRTL() ? 'left top' : 'right top';\r\n }\r\n\r\n GetBottomSheetPosition() {\r\n return this.screen.IsRTL() ? 'right top' : 'left top';\r\n }\r\n\r\n GetPopupShowAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideIn', direction: direction, duration: 150 };\r\n }\r\n\r\n GetPopupHideAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideOut', direction: direction, duration: 150 };\r\n }\r\n\r\n GetBottomSheetShowAnimation() {\r\n return { type: 'slideIn', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n GetBottomSheetHideAnimation() {\r\n return { type: 'slideOut', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n //Returns whether current page should be shown as full screen\r\n //This is a major hub function that determines visibility of window and dialog (not so relevant to DisplayMode=FullScreen)\r\n //Basically:\r\n //DisplayMode=FullScreen - always rendered on full screen\r\n //DisplayMode=Window - rendered on full screen if screen is XSmall\r\n //DisplayMode=Dialog - rendered on full screen if screen is XSmall and the page itself is not of small dimensions.\r\n public IsShowAsFullScreen(): boolean {\r\n\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.screen.IsMobile();\r\n const bSmallPage: boolean = (this.WindowHeight == EnumWindowSizes.WindowXSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowAutoSize) && (this.WindowWidth == EnumWindowSizes.WindowXSmall);\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view, unless this is a mobile device and the page is large\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? (bSmallPage ? false : true) : false;\r\n }\r\n\r\n public IsBodyWithScroll() {\r\n return !this.IsNoBodyScroll && (this.screen.IsDesktop() || this.screen.IsTablet() || this.Page.DisplayMode === EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n OnPopupHiding(e) {\r\n e.cancel = true;\r\n this.Page.NavigateBack();\r\n }\r\n\r\n //Specify whether to render the toolbar\r\n public IsRenderToolbar(): boolean {\r\n return !this.IsNoToolbar && this.appConfigService.AppConfig.Mode !== EnumApplicationMode.IFrame;\r\n }\r\n\r\n IsStandardApplicationMode() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard;\r\n }\r\n\r\n public IsShowNavbar() {\r\n return (this.Page.DisplayMode !== 'Dialog' && !(this.Page instanceof BasePageCRUDComponent) && this.screen.IsMobile())\r\n || ((this.Page as any).IsAllowNavbar && (this.Page as any).IsAllowNavbar());\r\n }\r\n\r\n OnSidePanelToggle() {\r\n this.IsPageSidePanelVisible = !this.IsPageSidePanelVisible;\r\n this.sysEvents.SetPageSidePanelState(this.Page.ComponentName, this.IsPageSidePanelVisible);\r\n }\r\n\r\n HasContent(content: any) {\r\n return content\r\n && (content.childElementCount !== undefined ? content.childElementCount > 0 : content.nativeElement.childElementCount > 0);\r\n }\r\n\r\n OnNavigateHomeOrSwitchMode() {\r\n if (this.IsShowViewModesButton()) {\r\n //Switch mode\r\n this.OnShowViewModes();\r\n } else {\r\n //Go to home route\r\n if (!this.IsStandardApplicationMode() || !this._pageToolbarSettings?.Page \r\n || this._pageToolbarSettings?.Page.DisplayMode != EnumPageDisplayModes.FullScreen) return;\r\n this.frameworkService.NavigateDefault();\r\n }\r\n }\r\n\r\n OnViewModesMenuClick(e) {\r\n this._pageToolbarSettings.Title = e.itemData.text;\r\n e.itemData.callback();\r\n }\r\n\r\n OnShowViewModes = () => {\r\n this.viewModesMenu.instance.show();\r\n };\r\n\r\n OnBack() {\r\n this._pageToolbarSettings.BackButtonClick();\r\n }\r\n\r\n EscPressed = (event: KeyboardEvent) => {\r\n const popupElement = this.GetPopupElement(event?.target as any);\r\n if (!popupElement?.classList?.contains(this.Page?.ComponentName)) return;\r\n\r\n if (this.Page?.DisplayMode === EnumPageDisplayModes.Window || this.Page?.DisplayMode === EnumPageDisplayModes.Dialog) {\r\n this.Page.ClosePage();\r\n }\r\n };\r\n\r\n private GetPopupElement(el: Element) {\r\n if (!el) return null;\r\n if (el.classList.contains('m4u-popup')) return el;\r\n\r\n return this.GetPopupElement(el.parentElement);\r\n }\r\n\r\n OnDialogShown() {\r\n this.sysEvents.DialogShown(this.Page.ComponentName);\r\n }\r\n\r\n // experimental\r\n // GetPopupSize(size: EnumWindowSizes) {\r\n // if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n // const screenSize = this.screen.GetScreenSize();\r\n // //\r\n // console.log(screenSize);\r\n // //\r\n // if (screenSize === EnumScreenSizes.ScreenXSmall) return '90%';\r\n\r\n // switch (size) {\r\n // case EnumWindowSizes.WindowXSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '60%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '40%';\r\n // case EnumWindowSizes.WindowSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '55%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '5%';\r\n // case EnumWindowSizes.WindowMedium:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '70%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '60%' : '50%';\r\n // case EnumWindowSizes.WindowLarge: return '75%';\r\n // case EnumWindowSizes.WindowXLarge: return '90%';\r\n // case EnumWindowSizes.WindowAutoSize:\r\n\r\n // switch (screenSize) {\r\n // case EnumScreenSizes.ScreenSmall:\r\n // return '70%';\r\n // case EnumScreenSizes.ScreenMedium:\r\n // return '60%';\r\n // case EnumScreenSizes.ScreenLarge:\r\n // return '50%';\r\n // case EnumScreenSizes.ScreenXLarge:\r\n // return '40%';\r\n // }\r\n\r\n // //return this.WindowHeight == size ? 'auto' : '100%';\r\n // }\r\n // }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ Title }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\";","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumSidebarStates, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SidebarOpened: boolean;\r\n}\r\n\r\nexport type SidebarPosition = 'left' | 'right';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-side-bar',\r\n templateUrl: './side-bar.component.html',\r\n styleUrls: ['./side-bar.component.scss']\r\n})\r\nexport class SideBarComponent extends BaseComponent {\r\n\r\n Name: string;\r\n Title: string;\r\n ContentPortal: Portal;\r\n SidebarState: EnumSidebarStates;\r\n SidebarComponentOptions?: any;\r\n SidebarPinned: boolean;\r\n Width: EnumWindowSizes;\r\n Position: SidebarPosition;\r\n Class: string;\r\n\r\n get IsOpened() {\r\n return this.SidebarState === EnumSidebarStates.Opened;\r\n }\r\n\r\n get ShowPinButton() {\r\n return this.Name === 'Filters';\r\n }\r\n\r\n constructor(A: ServiceBagService, private sidebarService: SidebarService) {\r\n super(A, 'SideBarComponent', State);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n if (this.SidebarComponentOptions && ref instanceof ComponentRef) {\r\n Object.entries(this.SidebarComponentOptions).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n }\r\n\r\n GetWidthClass() {\r\n const width = this.Width || EnumWindowSizes.WindowSmall;\r\n switch (width) {\r\n case EnumWindowSizes.WindowXSmall: return 'p-sidebar-xs';\r\n case EnumWindowSizes.WindowSmall: return 'p-sidebar-s';\r\n case EnumWindowSizes.WindowMedium: return 'p-sidebar-m';\r\n case EnumWindowSizes.WindowLarge: return 'p-sidebar-l';\r\n case EnumWindowSizes.WindowXLarge: return 'p-sidebar-xl';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetPositionClass() {\r\n return this.Position || (this.A.Screen.IsRTL() ? 'left' : 'right');\r\n }\r\n\r\n PinSidebar() {\r\n this.SidebarPinned = !this.SidebarPinned;\r\n }\r\n\r\n CloseSidebar() {\r\n this.sidebarService.Close(this.Name);\r\n }\r\n\r\n OnSidebarViewChanged(state: 'show' | 'hide') {\r\n const sidebarState = state === 'show' ? EnumSidebarStates.Opened : EnumSidebarStates.Closed;\r\n this.sidebarService.OnStateChanged(this.Name, sidebarState);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n {{ Entity.CrystalTemplateFileView?.FullName }}\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, ComponentFactoryResolver, Injector, ViewChild } from '@angular/core';\nimport { ContextMenuElement, ShareableEntity } from '@m4u-angular/base/classes/BaseClasses';\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\nimport { AttachedFile, BaseEntitiesResponse, BaseState, FileView, NotificationServer, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\nimport { NotificationServerEndpoint } from '@m4u-angular/core/endpoints/notification-server.endpoint';\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\nimport { EnumMessageBoxTypes, EnumNotificationTemplateEditingMode, EnumPageDisplayModes, EnumPrintingType } from '@m4u-angular/core/framework/sysenums.enum';\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\nimport { DxTextAreaComponent, DxTextBoxComponent } from 'devextreme-angular';\nimport { NotificationPreviewDialogComponent } from '../notification-preview-dialog/notification-preview-dialog.component';\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\nimport { FileEndpoint } from '@m4u-angular/core/endpoints/file.endpoint';\r\n\nexport class State extends BaseState {\n NotificationServers: NotificationServer[] = [];\n\n IsUserCustomTemplateOriginal: boolean;\n Pages = [];\n Entities = [];\n ShareableEntities: ShareableEntity[] = [];\n TypeDictionary = {}; // compiled type - key, actual type - value\n LabelDictionary = {}; // compiled type - key, label - value\n}\n\n@Component({\n providers: ServiceBagServices,\n selector: 'app-notification-template',\n templateUrl: './notification-template.component.html',\n styleUrls: ['./notification-template.component.scss']\n})\nexport class NotificationTemplateComponent extends BasePageCRUDComponent {\n\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\n @ViewChild('htmlBody') htmlBody: DxTextAreaComponent;\n @ViewChild('phone') phone: DxTextBoxComponent;\n\n get SelectedNotificationServer() {\n return this.State.NotificationServers && this.Entity.NotificationServerID && this.Entity.NotificationServerID === -999 \n ? this.State.NotificationServers.find(n => n.EntryID !== -999) \n : this.State.NotificationServers.find(n => n.EntryID === this.Entity.NotificationServerID);\n }\n\n // eslint-disable-next-line max-len\n multipleEmailPattern: any = /^(([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)(\\s*;\\s*|\\s*$))*$/;\n infoUPhonePattern: any = /^[a-zA-Z0-9\\s]*$/;\n\n constructor(\n A: ServiceBagService,\n private endpoint: NotificationTemplateEndpoint,\n private notificationServerEndpoint: NotificationServerEndpoint,\n private injector: Injector,\n private componentFactoryResolver: ComponentFactoryResolver,\n private fileEndpoint: FileEndpoint) {\n super(A, 'NotificationTemplateComponent', NotificationTemplate, State, endpoint, EnumPageDisplayModes.Window);\n }\n\n protected override OnInitComponent(): void {\n this.LoadNotificationServers();\n }\n\n protected override OnInitComponentFinished(): void {\n this.SetShareableEntities();\n this.SetPages();\n }\n\n protected override OnEntityInitObjectName() {\n return this.Entity && this.Entity.Name;\n }\n\n protected override OnEntitySaved() {\n this.NavigateBack();\n }\n\n protected override OnIsAllowDuplicate(): boolean {\n return true;\n }\n\n protected override OnEntityDuplicated() {\n this.Entity.Name = \"\";\n }\n\n protected override OnEntityNew() {\n !this.Entity.EntityBindingPageType && (this.Entity.EntityBindingPageType = EnumPrintingType.None);\n this.Entity.IsUserCustomTemplate = true;\n }\n\n protected override OnInitContextMenus(): ContextMenuElement[] {\n if (this.IsAddMode) return undefined;\n\n return [{\n text: this.RC('titleDelete'),\n visible: true,\n onClick: this.OnDelete.bind(this)\n }];\n }\n\n protected override OnEntityLoaded(): void {\n this.State.IsUserCustomTemplateOriginal = this.Entity.IsUserCustomTemplate;\n !this.Entity.CrystalTemplateFileView && (this.Entity.CrystalTemplateFileView = new FileView);\n !this.Entity.NotificationServerID && (this.Entity.NotificationServerID = -999);\n }\n\n protected override OnEntityValidate(): boolean {\n\n // prevent sabing empty template\n if (!this.IsBodyFilled() && !this.Entity.IsSharePdf) {\n this.UI.StopMessage(this.RC(\"msgNotificationTemplateEmptyError\"));\n return false;\n }\n\n if (this.Entity.EditingMode == EnumNotificationTemplateEditingMode.EditPrefix) {\n const prefixParam = \"$PrefixBody$\";\n\n if (this.Entity.HTMLBody && this.Entity.HTMLBody.indexOf(prefixParam) == -1 ||\n this.Entity.SMSBody && this.Entity.SMSBody.indexOf(prefixParam) == -1 ||\n this.Entity.PushMessageBody && this.Entity.PushMessageBody.indexOf(prefixParam) == -1) {\n this.UI.StopMessage(this.RC(\"msgNotificationTemplatePrefixNotFoundError\"));\n return false;\n }\n }\n\n if (this.Entity.IsSharePdf && (!this.Entity.CrystalTemplateFileID && !this.Entity.CrystalTemplateFileView?.FileData?.length)) {\n this.UI.StopMessage(this.RC(\"msgNotificationTemplateFileMissingError\"));\n return false;\n }\n\n return true;\n }\n\n private LoadNotificationServers() {\n this.Do(this.notificationServerEndpoint.GetList(), false, (response: BaseEntitiesResponse) => {\n if (response.Entities.length === 1) {\n const defaultNotificationServer = {\n EntryID: -999, \n SMTPServer: this.RC('lblUseDefault')\n } as any;\n this.State.NotificationServers = [defaultNotificationServer, ...response.Entities];\n if (!this.Entity.NotificationServerID) this.Entity.NotificationServerID = -999;\n } else this.State.NotificationServers = response.Entities;\n });\n }\n\n private SetShareableEntities() {\n const shareableEntities = this.A.AppConfigService.AppConfig.ShareableEntities;\n\n let moduleName = '';\n\n shareableEntities.forEach(shareableEntity => {\n\n //creating Page component and getting ComponentName\n for (let i = 0; i < shareableEntity.PageComponents.length; i++) {\n const page = shareableEntity.PageComponents[i];\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(page);\n const componentRef = componentFactory.create(this.injector);\n if (!moduleName) moduleName = componentRef.instance.ModuleName;\n\n this.State.TypeDictionary[shareableEntity.PageComponents[i].toString()] = componentRef.instance.ComponentName;\n this.State.LabelDictionary[shareableEntity.PageComponents[i].toString()] = this.A.ResourcesService.RC(`Pages.${componentRef.instance.ComponentName}`, moduleName);\n }\n });\n\n shareableEntities.forEach(shareableEntity => {\n // creating object of entity and getting TypeName of entity\n if (shareableEntity.EntityType) {\n const obj = new shareableEntity.EntityType;\n this.State.TypeDictionary[shareableEntity.EntityType.toString()] = obj.TypeName;\n this.State.LabelDictionary[shareableEntity.EntityType.toString()] = this.A.ResourcesService.RC(obj.TypeName, moduleName);\n }\n });\n\n this.State.ShareableEntities = shareableEntities;\n }\n\n private SetPages() {\n this.State.Pages = this.State.ShareableEntities.filter(x => x.PageType == this.Entity.EntityBindingPageType && (!this.Entity.EntityType\n || this.State.TypeDictionary[x.EntityType?.toString()] == this.Entity.EntityType))\n .map(x => x.PageComponents).flat().map(x => ({ PageComponent: this.State.TypeDictionary[x.toString()], Name: this.State.LabelDictionary[x.toString()] }));\n\n if (this.Entity.EntityType && this.State.Pages.length == 1) {\n this.Entity.PageName = this.State.Pages[0].PageComponent;\n }\n\n let shareableEntities = this.State.ShareableEntities.filter(x => x.PageType == this.Entity.EntityBindingPageType && x.EntityType);\n shareableEntities = shareableEntities.filter((x, i, a) => a.findIndex(s => s.EntityType == x.EntityType) == i);\n\n this.State.Entities = shareableEntities.map(x => ({ Name: this.State.LabelDictionary[x.EntityType?.toString()], Entity: this.State.TypeDictionary[x.EntityType?.toString()] }));\n }\n\n IsShowEditingMode = () => this.IsBodyFilled();\n\n IsBodyFilled = () => !!this.Entity.HTMLBody || !!this.Entity.PushMessageBody || !!this.Entity.SMSBody || !!this.Entity.WhatsAppBody;\n\n OnShowInEditor() {\n this.htmlEditorDialog.Language = this.Entity.Language;\n this.htmlEditorDialog.HTMLBody = this.Entity.HTMLBody;\n this.htmlEditorDialog.ShowDialogShort((state: any) => {\n this.Entity.HTMLBody = state.HTMLBody;\n });\n }\n\n OnShowPreview() {\n this.previewDialog.HTMLBody = this.Entity.HTMLBody;\n this.previewDialog.ShowDialogShort(() => {});\n }\n\n OnEntityBindingPageTypeChanged(e) {\n if (e.event) {\n this.Entity.PageName = null;\n this.Entity.EntityType = null;\n }\n \n this.SetPages();\n }\n\n OnEntityTypeChanged(e) {\n if (e.event) {\n this.Entity.PageName = null;\n }\n\n this.SetPages();\n }\n\n OnPageNameChanged(e) {\n if (!e.event) return;\n this.SetPages();\n }\n\n OnDownloadCrystalTemplateFile() {\n this.Do(this.fileEndpoint.GetViewByID(this.Entity.CrystalTemplateFileView.EntryID, true), true, response => {\n const file = new AttachedFile;\n file.Extension = this.Entity.CrystalTemplateFileView.Extension;\n file.Name = this.Entity.CrystalTemplateFileView.Name;\n Utils.DoFileDownload(file, Utils.ConvertToBase64(response.Entity.FileData), this.Entity.CrystalTemplateFileView.ContentType);\n });\n }\n\n override OnDelete(): void {\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\n this.messageBox.Prompt = this.RC('msgDeleteNotificationTemplateQuestion');\n this.messageBox.ShowDialogShort(() => {\n this.DeleteEntity(); \n });\n }\n\n OnEmailSectionToggle(isOpened: boolean) {\n if (isOpened) setTimeout(() => this.htmlBody && this.htmlBody.instance.repaint());\n }\n\n OnPhoneSectionToggle(isOpened: boolean) {\n if (isOpened) setTimeout(() => this.phone && this.phone.instance.repaint());\n }\n\n OnChangeIsUserCustomTemplate() {\n const template = Utils.CloneObject(this.Entity);\n template.IsUserCustomTemplate = this.Entity.IsUserCustomTemplate ? false : true;\n this.Do(this.Endpoint.UpdateIsUserCustomTemplate(template), true, (response) => {\n this.Entity.IsUserCustomTemplate = response.Data;\n });\n }\n\n OnFileSelected(e) {\n const files = e?.target?.files;\n if (!files || files?.length == 0) return;\n\n const file = files[0];\n const fileReader = new FileReader();\n\n fileReader.addEventListener(\"load\", (event) => {\n const fileBase64 = event.target.result as string;\n const bytes = Utils.ConvertToBytesArray(fileBase64);\n\n if (!this.Entity.CrystalTemplateFileView) this.Entity.CrystalTemplateFileView = new FileView;\n this.Entity.CrystalTemplateFileView.FileData = bytes;\n this.Entity.CrystalTemplateFileView.Name = this.Entity.CrystalTemplateFileView.FullName = file.name;\n this.Entity.CrystalTemplateFileView.Extension = null;\n });\n\n fileReader.readAsDataURL(files[0]);\n }\n}\n","var map = {\n\t\"./dato/_app.config\": 58327,\n\t\"./dino/_app.config\": 57572\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 37836;"],"sourceRoot":"webpack:///","file":"main.9bf09172a83388d995b0.js"}