{"version":3,"mappings":"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AmB,YAAfA,EACA,OAAOL,KAAKgJ,GAAG,cAGnB,IAAI1I,EAAOD,EACX,MAAa,gBAATC,IACAA,EAAOnB,WAGJa,KAAKugB,SAAS,oBAAqBjgB,6CAvCzC0J,OAgBI7J,qUAA4BuyH,KANxCzxH,aAAU,CACPmJ,UAAWJ,IACXK,SAAU,4BACVC,SCdW,itBDiBFnK,IAAqCoK,mwBEwXlDooH,0EAEa,oBAAa,OAEbtyH,aAAa,CAClBuyH,GACAC,GACAC,GACAC,GACA1hE,GACA2hE,GACAC,GACAC,GACA1hE,GACA2hE,GACAC,GACAlkH,GACAgH,GACAm9G,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApoD,GACAqoD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAxsC,GACAysC,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,EACAC,GACAC,EACAC,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,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,GACApkD,GACAqkD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACArsE,GACAssE,GACAC,GACAC,GACAC,GACAH,GACAI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA9pC,GACA+pC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA3mD,GACA2mD,GACAD,GACAH,GACAK,GACAjrC,GACAkrC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAnhC,GACAohC,GACAC,GACAC,GACAC,GACA/4B,GACAiH,GACA+xB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAvnB,GACAwnB,GACAC,GACAC,GACAC,GACA5oB,GACA6oB,GACAxlB,GACAylB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApyD,GACAqyD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IAGKjjI,YAAY,CACjButH,GACA79D,GACA5jD,GACA2rB,GACA26D,GACAC,GACA6wC,GACAC,GACAC,GACAvyG,GACAwyG,GACAzyG,GACApO,GACA8iD,GACAg+D,GACAxyG,GACAvH,GACA3f,EACAwG,GACAC,GACAkzH,GACA7vH,GACAkwG,GACAtpG,GACAwkC,GACA0kF,GACAr7F,GACAa,GACAyf,GACAnX,GACA5G,GACA2G,GACA+C,GACAc,GACAzD,GACAC,GACAP,GACAC,GACAyH,GACArH,GACAD,GACAkL,GACAkC,GACAC,GACAC,GACAvkC,GACA4pC,G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B0I,OAC3C5I,KAAK0yJ,aAAa70I,KAAO3d,EAAgB2d,KACzC7d,KAAK0yJ,aAAaC,MAAQ3yJ,KAAKyyJ,SAGnCryJ,wCAAmBF,EAAgBJ,SAC/B,IAAKE,KAAKwyJ,WAAY,OAAO,IAAIjoJ,EACjC,KAAKrK,IAA0B,QAAjBiB,OAAKuxJ,oBAAY,eAAEC,QAASzyJ,GAAWJ,GAAQE,KAAK0yJ,aAAa70I,MAAQ/d,GAIvF,KAAMwB,EAAM6lI,MAAQnnI,KAAK0yJ,cACzB,YAAKE,aAEEtxJ,IAGHlB,uBAAR,WACIJ,KAAK0yJ,aAAe,KACpB1yJ,KAAKwyJ,YAAa,EAClBxyJ,KAAKyyJ,OAAS,4CArCTryJ,qUAAaa,KAHzB3F,cAAW,CACRkN,WAAY,UAEHpI,iMCbAe,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,6DCzvCKE,EACT,CACIjC,GACI,CACIyzJ,IAAO,eACPniJ,GAAM,eACNoiJ,OAAU,qBACV/rB,MAAS,qBACTgsB,KAAQ,2BACRpoI,QAAW,8BACXqoI,OAAU,qBACVxa,OAAU,qBACVya,KAAQ,2BACRl1I,GAAM,iCAEN,gCAAiC,0DAEjC,sBAAuB,6EACvB,gCAAiC,qEACjC,qBAAsB,4GACtB,+BAAgC,uFAChC,mBAAoB,wHACpB,6BAA8B,mGAC9B,0BAA2B,uEAC3B,oCAAqC,wFACrC,oBAAqB,iEACrB,8BAA+B,4CAC/B,qBAAsB,6EACtB,+BAAgC,s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AxtL,GACAI,GACA41H,GACAlzH,KACApC,GACA+5C,GACA15C,GACAI,GACA8jC,GACAoC,GACAuvK,GACAC,GACA5+J,GACAsB,GACAI,GACAG,GACA2+E,IACG/rH,OAAO07I,OAAO3f,KAAa,CAG9Bx6H,GACAxC,GACAxN,IACAyP,KACAiD,GACAqkH,KACA/jH,GACA/E,GACArC,GACA4lC,GACAq5J,GACA9jJ,GACAY,KACAomJ,GAGAx5K,GACA/yB,GACA80B,KAGAnf,GACA8V,GACAjJ,GACAkC,GACAhC,GACAiC,GACAhM,GACA2hD,GACA11C,GACAC,GACAwyL,GACAC,GACAj9L,GACAS,GACAP,GACAg9L,KACA/7L,GACAg8L,GAGA/+L,GACA7Q,GACAC,GACAwtH,GACAoiF,GACAC,GACA99L,GACAJ,GACAq8G,GACA8hF,GACA99L,GACA+9L,GACAn+L,GAGAwB,GACAs8L,KACAj+L,GACAZ,GACAa,GACAwB,GACAsgC,GACA49E,GACAx9E,GACAo8J,GACAv9L,GACA26G,GACAj6G,KAGG/N,OAAO07I,OAAOxrJ,IAAM,CACvB26M,GACAC,GACAz1L,GACAhC,GACAD,GACAjC,GACAg6G,GAEA61D,GACA9vL,EACAL,EACAP,EACAy6M,KACAC,KACAh1J,GACA+2E,GACAl1E,GACAG,GACAc,KAGK4/E,GACT,CACIuyE,GACApyF,GACAxqF,GACA4yK,GACAxtK,GACAK,GACAotK,GACAC,GACApoL,GACA6U,GACA3H,GACA+6K,GACAxoE,GACA5rG,GACAV,GACAsoB,GACA1rB,GACAikB,GACAs0J,GACAnuK,GACAR,GACAof,GACAK,GACA0B,GACAxmB,GACA69K,GACAp8J,GACAoB,GACAa,GACAG,GACA7K,GACA8N,GACA1B,GACA04J,GACAC,GACAhK,GACAzkK,GACA0uK,GACApgK,GACA2+E,GACArsF,GACA2R,GACAnR,GACAsR,GACA/Q,GACAnsC,GACAR,GACA4sC,GACA+sK,KACAv2J,GACAy4E,KACAvpF,GACA+C,GACA0jF,GACAizE,GACA2D,GACAv2E,GACAy2E,GACA33J,GACA03J,GACA7oJ,GACAwxE,GACA/hF,GACAkB,GACAkQ,GACAqxE,GACAjxE,IAGF4xJ,GACF,CACI5+K,KACAhO,KACAI,KACA45K,KACA3H,GACAn0J,GACAoB,KACAoqF,KACA12F,GACA+U,GACAg3J,GACA9+K,GACAsqB,GACAm2J,GACA91J,GACAzmB,MAIF0oL,GACF,CACIhvK,KACAwuF,KACAl9F,KACAzK,KACA4iK,KACAwlB,KACAjmM,KACA9Q,KACAoyB,MACA/wB,IACAkyH,GACA9zH,MACAq1L,KACA/gL,KACA+gH,GACAn4H,IACAq6M,KACArgK,MACAz4C,MACAg5H,KACAK,KACA46E,GACA3gL,KACAuhL,MACA56E,MACA35H,MACA6yB,KACA2G,GACAhF,KACA0lG,KACA56H,MACAu1H,GACA,CAAE4jF,QAASr5M,MAAmB8mJ,SAAUwyD,GAAuBC,OAAO,GACtE,CAAEF,QAAS91M,kBAAiBi2M,WAAYtmM,KAAuBqmM,OAAO,IAIxE/xJ,GACF,CACItnD,MACAH,MACAE,MACAmT,KACApT,MACAG,KACA0gC,GACAxgC,KACAD,KACAq5M,KACA5vK,KACAkR,KACAF,MACA0+E,KACAmgF,KACAC,MACA3+J,MACA/hC,MACAiiC,KACAs+E,KACAogF,KACA38J,MACAiD,MACAq6E,MACA90E,KACAQ,KACAL,MACAsB,OAGFW,GACF,CACI2mJ,GACA9zE,GACAnuF,GACAe,GACAG,GACAyD,GACApD,GACAI,GACAugK,GACA//J,GACAiW,GACA9V,GACAK,GACAG,GACAO,GACAC,GACAsE,GACA01J,GACA94J,IAGFtlC,GAAuB1M,iBACvBq8H,GAAYr8H,0DA0CL,4UAAgBk8H,KAjC5B13H,YAAS,CACNg8L,QAAS,CAEL/3I,GACAzP,GACAwhF,KACA52E,MACA7iD,cAAsB,CAAE+5M,OAAQz+E,GAAU0+E,iBAAkBC,SAAU,KAAMC,OAAQ,OACpF5pL,eAA6B,iBAAkB,CAAEkhH,WAdhDhlI,cACoB,UAArB4V,SAAS48J,WACR1jD,GAAU6+E,2BAaXj4J,MACAy3J,O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","names":["U","dt","I","E","R","O","T","A","L","G","k","Q","W","ct","vt","st","q","tt","it","K","F","z","J","at","X","lt","V","mt","xt","Ct","It","Ht","yt","gt","Yt","ee","de","Qe","te","Z","rt","At","Wt","Lt","$t","pt","Gt","fe","Ae","Et","Pe","ne","le","jn","vn","ke","pn","ce","Ee","xr","Sr","ot","he","oe","qe","ue","zt","We","to","Ie","xn","br","v","i","this","TypeName","M","e","N","t","n","D","r","api","ExecuteGetAction","ControllerName","ContactPersonID","Name","Email","customerID","ExecutePostAction","m","args","y","x","P","b","no","eo","EnumSystemOptionsZ","EnumSummaryTypes","EnumKitTypes","EnumCasualContactPersonNotificationReceivers","EnumTreeTypes","EnumGiftCardStatuses","EnumStockDisplayOptions","EnumValidationStatus","EnumShoppingCartItemType","EnumPromotionSuggestionType","EnumOrderingItemsOutOfStockAction","EnumAvailableItemsCalculationOptions","EnumAddressEntryModes","EnumContactPersonEntryModes","EnumPriceDisplayOptions","EnumPriceCurrencyDisplayOptions","EnumAttributeDisplayOptions","EnumFilterDisplayOptions","EnumImpersonateTargets","EnumItemSaleMethods","EnumItemBadgeTypes","EnumVariationRelations","EnumRelatedItemRelationTypes","EnumDisplayGroupingOptions","EnumCatalogueViewOptions","EnumEntityTypes","ImageTypeEnums","ImageSizeEnums","ShoppingCartStatusEnums","EnumDocumentStatuses","EnumPaymentMeans","EnumGoCreditCardTypes","EnumGoCreditTransactionModes","EnumDatabaseObjects","EnumDeliveryStatuses","EnumReturnRequestStatuses","EnumDocumentSpecialItemType","EnumDisplaySortingOptions","EnumExternalQueryFieldFormats","EnumItemImagesFallbackTypes","EnumAttributesDisplayTabs","EnumTitlePositions","EnumCredentialTypes","EnumDocumentProcessingSteps","EnumDocumentProcessingStatus","EnumPaymentRequestTypes","EnumInvoiceOneDocumentTypes","EnumPromotionCustomerFilterTypes","EnumPromotionItemFilterTypes","EnumPromotionEffectItemFilterTypes","EnumPromotionDiscountApplicationRule","EnumPromotionAggregationLevelTypes","EnumPromotionRequiredTypes","EnumEffectTargetSelector","EnumPromotionEffectTargetTypes","EnumPromotionResultTypes","EnumUserTypes","EnumShoppingCartTypes","EnumDocumentTypes","EnumFormFieldOptions","EnumShoppingCartItemViewOptions","EnumShoppingCartModeOptions","EnumDocumentFilterBySubjects","EnumItemStockManagementTypes","EnumEUVatStatuses","EnumCreditCardPaymentStatus","EnumInvoiceOneNotificationTypes","EnumShoppingPaymentStatus","EnumQuantityActiveErrorPlace","ie","Fo","Bn","alertDuration","Ne","uiEventSubject","asObservable","qc","includes","next","EventName","Payload","JSON","parse","forEach","d","l","Message","IsAlertBeingShown","trim","Status","Error","UI","StopMessage","options","Warning","WarningMessage","Info","InfoMessage","document","querySelectorAll","Array","from","innerText","preventDefault","stopPropagation","menus","hide","show","push","Cr","Ir","providedIn","dn","S","o","Entity","Phone","Cellular","Xc","RC","EntryID","IsUIEvent","Do","contactPersonEndpoint","CheckContactPersonInfoValid","IsNameValid","IsEmailValid","uiComponentService","ProcessAlerts","OnContactPersonInfoChanged","CustomerID","FromShoppingCart","SaveFromShoppingCart","IsSuccess","CloseDialogWithSuccess","_","w","Vt","_r","providers","selector","template","B","Jc","tu","Be","changedSubject","Or","loaded","customerOption","customerOptionEndpoint","GetCustomerOption","subscribe","clearCustomerOption","ae","Object","getOwnPropertyNames","CatalogueOption","BusinessOption","FilterOption","OrderOption","PaymentOption","ShipmentOption","HomePageOption","CustomerDetailOption","DashboardOption","NotificationOption","FeatureOption","ContactUsOption","TermsOfUseOption","_n","eu","nt","_e","Oe","CustomerOption","nu","ru","Dr","State","ContactPerson","IsUseContactPerson","Framework","SystemOptionFlag","Load","ContactPersonChanged","ProcessCasualContact","DocumentOption","CasualContactInfo","ContactPersonEntryMode","IsAllowSelectingContact","IsAllowEditingContact","IsContactPersonFieldReadonly","IsCasualContactMode","TriggerUiEvent","IgnoreCasualContactChange","ContactPersons","find","CasualContact","OnContactPersonChanged","emit","contactDialog","ShowDialogShort","IsDefault","Nt","GetListByCustomer","DocumentContactPerson","DocumentCustomerID","Entities","Math","max","apply","map","Position","IsCasual","IsContactPersonFieldVisible","IsCasualContactPersonSelected","Ao","ou","_t","na","su","wr","oa","lu","CountryCode","Tr","aa","ra","LoadStates","customerAddressEndpoint","DataSources","States","wt","stateEndpoint","ListByCountry","Country","IsStatesNotEmpty","length","Reload","Fn","No","ia","re","uu","Kn","customerEntityID","customerEntryID","privateRequestID","GetLoadOptions","Pr","customerChangedSubject","Ho","$","previousCustomerID","customerActualCurrency","CurrencyActual","console","log","complete","j","Y","CustomerAlerts","ValidationMessage","customerEndpoint","GetCurrentCustomer","error","IsCurrentUserSalesPerson","salesPersonEndpoint","SetSalesPersonCustomer","setTimeout","sessionService","IsLoggedIn","UserInfoDict","Dino","IsSalesPerson","SalesPersonOption","RegisterInitComponentHandler","customerChanged$","customerOptionService","OnCustomerChanged","RegisterSubscription","GetSalesPersonOption","SalesPersonID","IsAdmin","QuoteOption","IsAllowBaseDocument","InvoiceOption","DeliveryNoteOption","RefundOption","ReturnOption","ReturnRequestOption","me","On","kt","Sn","du","Vn","CustomerAddressChanged","ProcessCasualAddress","CasualAddressInfo","IgnoreCasualAddressChange","CustomerAddresses","CustomerAddressID","CustomerAddress","IsCasualAddressMode","CasualAddress","IsShowFullCasualAddress","FullAddress","OnCustomerAddressChanged","addressDialog","IsAllowSelectingAddress","AddressEntryMode","IsAllowEditingAddress","IsCustomerAddressesFieldReadonly","DocumentAddress","customerService","GetCustomerID","IsCasualAddressStateVisible","UpdateCasualAddressInShoppingCart","InitialFullAddress","IsFullAddressFieldVisible","ZipCode","City","Street","AddressName","IsCustomerAddressesFieldVisible","IsCasualAddressSelected","Dt","Mo","pu","fu","Me","FiltersPanelSliderVisible","screen","IsRTL","jt","jo","ua","yu","da","Qt","Large","BadgeKind","Custom","SafeHTML","sanitizer","bypassSecurityTrustHtml","BadgeData","BadgeSize","Small","Medium","ze","gu","Cu","ma","Disabled","OnClick","bu","Du","GetAPIURL","ModuleName","ImageType","ImageSize","Version","Index","SessionID","wu","Pu","fa","ImageRequest","StopPropagationClick","OnImageClick","ImageUrl","imageService","getImageURL","Er","Tu","Mu","ha","OnValueChanged","Start","End","Nu","Rr","ya","ju","Bu","linkName","Gu","ku","va","Title","UrlSafe","bypassSecurityTrustResourceUrl","Navigator","GetRouteParams","externalLinkEndpoint","GetByCustomerOption","Ar","NotifyReloadTitle","Link","Qn","Uu","Ku","Sa","MailingAddress","Whatsapp","IsMobile","screenService","GetContactUsSubjects","ContactUsSubjects","SubjectID","IsConfirmationMessage","Content","ClosePage","ValidateValidationGroup","validationGroup","then","Subject","SendContactUsRequest","NavigateWhatsApp","H","NavigatePhone","NavigateEmail","$u","Xu","Yu","Zu","Ju","Ia","Ca","IsHomePagePermitted","IsEnableHomePage","IsEnableHomePageBanner","IsEnableHomePageText","LoadHomeInfo","GetHomeInfo","HomeInfo","framework","CompanyInfo","ServerVersion","ClientVersion","event","keyCode","SearchText","Navigate","Text","itemSearchEndpoint","Save","Announcement","messageDialog","Type","MessageBoxTypes","OK","IsHideCancel","Prompt","Screen","bn","Nr","Ge","tp","tn","Mr","Vo","np","wa","data","OpenBalance","rowElement","style","display","IsShowAdditionalNotes","DocNumClick","column","command","PaymentSum","IsPaymentAllowed","cellElement","visibility","QuickFiltersGrid","toolbarOptions","items","location","isCustom","rowType","columnIndex","PdfUrl","TransType","TransTypeString","DocumentID","SBODocumentEntry","DocumentType","ReceiptID","LISTITEM","ep","Rt","Tn","rp","io","ip","itemOptionEndpoint","GetList","itemOptions","readySubject","Grid","GridViewDesktopOption","GridViewMobileOption","List","ListViewDesktopOption","ListViewMobileOption","SingleVariation","SingleVariationDesktopOption","SingleVariationMobileOption","ShoppingCart","ShoppingCartDesktopOption","ShoppingCartMobileOption","FinalizedOrder","FinalizedOrderDesktopOption","FinalizedOrderMobileOption","Popup","PopupDesktopOption","PopupMobileOption","RelatedItem","RelatedItemDesktopOption","RelatedItemMobileOption","Wishlist","WishlistDesktopOption","WishlistMobileOption","ReturnRequest","ReturnRequestDesktopOption","ReturnRequestMobileOption","oo","ap","sp","lp","cp","ExecuteDeleteAction","reorderedUniqueItemIDs","secretText","ItemID","promotionID","up","updatedSubject","Bt","GetDocumentOptionByType","IsAllowEdit","IsAllowView","Document","Un","descriptionSubject","loadingSubject","pickoutSubject","storeAndSendEvents","jr","shoppingCartEndpoint","GetOrCreateForCurrentUser","GetForCurrentUser","ResponseMessage","GetShoppingCartDescriptionForCurrentUser","CreateShoppingCartByDocumentType","ValidationResult","RemoveCurrentShoppingCart","UpdateShipmentMethod","ShipmentMethodID","UpdateCasualAddress","StateCode","pipe","UpdateCasualContactPerson","UpdateTotals","DiscountPercent","DiscountSum","TotalAfterVat","handleSuccessfulShoppingCartResponse","Bo","IsNew","UpdateItem","itemQuantityUpdateQueue","filter","UniqueItemID","RemoveShoppingCartItem","WarehouseID","Quantity","Notes","IsAddItemAsKitMode","IsUpdateAdditionalDataOnly","addToItemQuantityUpdateQueue","AdditionalData","shoppingCart","ShoppingCartItemViews","IsFree","ItemView","ItemCode","ItemType","IsKitItem","reduce","documentService","IsInventory","BatchesView","SerialNumbersView","RemoveAllItemsFromShoppingCart","DisablePromotionForShoppingCart","EnableAllPromotionItems","ReorderShoppingCartItems","VisibilityEntries","UpdateShoppingCartItemsVisibility","BaseDocumentsEntryIDs","TargetDocumentType","UseBaseDocuments","DocumentRemarks","ShipmentNotes","DocDueDate","PostingDate","PaymentDueDate","NumAtCard","PaymentTermID","IsDraft","SignatureBase64","IsUseCasualAddress","IsUseCasualContactPerson","PreSaveCheckoutShoppingCartDetails","ApplyCoupon","Data","load","success","RemoveCoupon","Length","DisableShoppingCartChange","ShoppingPayment","AnyPaymentDone","Currency","quantity","multiply","Result$","cancelled","proccessItemQuantityUpdateQueue","proccessActionHandler","clearTimeout","itemQuantityUpdateInproccess","Updates","UpdateShoppingCartItemQuantity3","handleSuccessfulShoppingCartBatchResponse","message","Pn","Ke","pp","mp","dp","fp","Set","Ta","HandleItemDragEnd","bind","InitEvents","shoppingCartService","changed$","proccessShoppingCart","loading$","Loading","pickout$","PickoutItemID","onUiEventFired$","HandleKitChildrenVisibilityChange","ParentUniqueItemID","IsCollapsed","shoppingCartItemsList","instance","repaint","CheckOpenedState","SysEvents","PageSidePanelState","CompactShoppingCartOpened","option","ut","Pt","indexOf","visible","IsItemHiddenOnUI","ht","IsVisible","updateShoppingCartItemsVisibility","IsKitChild","GetTopLevelKitParent","GetAllDescendantsOfParentItem","IsItemTopKitItem","sort","LineID","IsKitParent","GetKitItemNestingLevel","ReorderedRowUniqueIds","component","splice","fromIndex","toIndex","SaveShoppingCartItemsOrder","reorderShoppingCartItems","removeItem","IsAllowLineEditing","OnItemDuplicate","OnItemEdit","InvalidItems","has","delete","add","OnQuantitiesValidation","size","findIndex","Ft","static","Pa","He","Ue","GetSplittedPrice","en","NumberPrice","split","DecimalSeparator","abs","GetPriceMainPart","GetPriceChangePart","nn","Br","LocalizationType","SysEnums","EnumLocalizationTypes","Europe","ShowVatPercent","OnInitComponent","call","OnEditSummary","gp","xp","ItemEntryID","Sp","bp","RelationType","itemID","number","Ra","_p","Go","je","wishlistItemUpdatedSubject","wishlistLoadedSubject","wishlistCleanedSubject","Op","eventType","WishlistItemUpdated","wishlistEndpoint","RemoveAllItems","WishlistCleaned","notifyWishlistLoaded","WishlistLoaded","GetWishlistCount","itemsEndpoint","GetItems","filterClarificationReloadSubject","Cp","filterEndpoint","GetFilterClarification","Le","Ur","Ye","Dp","Na","kr","wishlistItemUpdated$Subscription","itemsService","wishlistItemUpdated$","LoadWishlistItems","wishlistCleaned$Subscription","wishlistCleaned$","WishlistItems","shoppingCartDescription$Subscription","shoppinCartService","description$","unsubscribe","ft","IsAllowFilter","GetWishlistItems","notifyWishlistRemoveAll","on","wp","NumberSum","Tp","name","Ep","Rp","Ha","ao","La","kn","yn","Skip","Take","Empty","assign","GroupBy","CatalogueView","CategoryID","VendorIDs","BrandIDs","ManufacturerIDs","AssortmentID","Attributes","SortBy","keys","stringify","GetUniqueFilterObject","qt","filterSubject","itemsFilter","DesktopItemListPageSize","DefaultDisplayGroupingOption","DefaultDisplaySortingOption","DefaultCatalogueViewOption","clear","Np","Extend","applyDisplayOptions","so","window","btoa","unescape","encodeURIComponent","decodeURIComponent","escape","atob","Mp","ja","categoriesListSubject","categoriesTreeSubject","featuredCategoriesSubject","categoriesListUnfilteredSubject","loadCategories","itemsFilterService","filter$","processItemsFilter","categoriesTree","loading","$categoriesTree","categoriesList","$categoriesList","featuredCategories","$featuredCategories","categoriesListUnfiltered","$categoriesListUnfiltered","getCategoriesTree","findNodeByCategoryIDFrom","getRootCategoryNode","getCategoriesList","resourcesService","SortOrder","ParentCategoryID","ImageName","IsShowInTopMenu","ImageVersion","$readySubject","IgnoreFilter","categoryEndpoint","GetCategories","Ap","bufferSize","refCount","localeCompare","mn","buildTreeBranch","IsFeatured","serializedFilter","En","Ze","De","Hp","categoriesService","findRawNodeByCategoryID","toString","rn","fn","Fa","Lp","zr","Va","jp","Fp","Vp","Bp","Gp","Ua","kp","ko","Wp","oOptions","zp","$p","Kp","Qp","Wa","Xp","documentType","documentID","PrintingDocCode","Yp","Zp","Qa","In","CanPrinting","CanSharing","ShareDocumentConfig","IsAllowPrinting","PrintingTemplates","IsAllowSharingByEmail","IsAllowSharingBySMS","IsAllowSharingByWhatsapp","InvoiceOneTemplates","SelectedShareType","Print","IsEmailSelected","IsSMSSelected","IsWhatsappSelected","IsAllowTemplateSelection","InvoiceOneTemplateID","SMS","LIST","AvailableShareTypes","Kr","Value","documentEndpoint","GetShareDocumentConfig","IsEnabled","DefaultPrintingDocCode","TemplateCode","TemplateName","DefaultEmail","DefaultCellular","DefaultInvoiceOneTemplateID","SendShareButtonEvents","OnShare","shareFormChange","CanComplete","printDialog","FileName","GetPdfByPrintingDocCode","PDFData","CloseDialogWithCancel","NotificationTypes","GetInvoiceOneNotificationTypesBy","Address","ShareDocument","Re","$r","Wn","Se","Date","Today","setMonth","getMonth","getFullYear","getDate","od","nd","qa","an","id","rd","zo","po","ad","Xa","cd","ld","$o","ud","mo","Cn","Ya","fo","fd","hd","Za","gd","Ko","yd","Rn","vd","ms","Ja","qr","ActionsMenu","PreferableAction","CopyAndGoToCatalogue","PreferableActionText","ShoppingCartItemsExists","DocumentTypes","SelectedDocumentType","CopyTo","SetCustomer","UpdateShoppingCartAndGo","useBaseDocuments","itemData","OnSuccessClick","xd","bd","Properties","Language","GoCreditCardTypes","EnumOrderStatuses","EnumInvoiceStatuses","EnumQuoteStatuses","EnumDeliveryNoteStatuses","EnumReturnStatuses","EnumRefundStatuses","ReturnRequestStatuses","LedgerIsOpenStatuses","ReceiptTabs","index","text","ItemDetailsTabs","CategoriesFilterTabs","ImpersonateTargets","AddressEntryModes","CasualContactPersonNotificationReceivers","ContactPersonEntryModes","YesNo","DocumentDetailsTabs","AdminDashboardItemsTabs","AdminDashboardReportsTabs","ReportDateRanges","DateFrom","DateTo","Order","EnumEffectTargetSelectorForMultipleEffectItems","ItemSalesTabs","ShareDocumentTypes","CopyToDocumentActions","EnumNewDocumentTitles","EnumEditDocumentTitles","ts","Id","ns","getFeaturedCategories","Categories","IsHebrew","IsEnableCatalogue","scrollView","scrollBy","left","IsShowFeaturedCategories","LoadFeaturedCategories","Xr","os","Dd","is","GetFeaturedItems","Items","CurrentItemIndex","IsShowFeaturedItems","LoadFeaturedItems","as","Ed","ls","InitImageRequests","DefaultDocumentType","IsAllowDuplication","IsShowAsMobile","IsTablet","IsDesktop","IsWideScreen","DialogWindowSize","DocumentTypeName","toLowerCase","StartDocumentLabel","LastDocumentLabel","HasShoppingCart","loadShoppingCartDescription","DesktopImageVersions","MobileImageVersions","BannerImageRequests","TitleTextPosition","copyLastDocumentPrompt","DuplicateDocument","Td","Pd","Md","us","ExecUIAnimation","sessionStateChanged$","UserName","Password","loginService","DoLogin","NavigateDefault","setInterval","repeat","qo","Nd","sidebarActionSubject","ds","Vd","fs","IsQuantityIncorrect","CheckIsIncorrect","_quantity","PreviousQuantity","EnableIsShowTotalSwitch","IsShowTotal","OnClickHandler","Step","CheckForShowAdditionalErrorMessage","Min","Max","ValueChanged","AdditionalErrorMessagePointer","AdditionalErrorMessageInstance","IsShowAdditionalErrorMessage","AdditionalErrorMessageFn","AdditionalErrorMessage","Total","Fd","Gd","Ud","$d","Kd","Yd","we","SafeHtml","Xd","gs","tm","ho","ys","LoadDataSource","AttributeGroups","Zt","endpoint","IsSupportHistory","Xo","em","om","xs","im","go","DisplayTabs","rm","am","sm","pm","Jr","DepositGroups","Yo","um","bs","mm","fm","Cs","_s","Is","hm","Fe","Os","ym","Zo","vm","Ds","be","Sm","ni","Ts","bm","Ps","NavigateBack","Tabs","IsAddMode","onClick","OnDelete","Jo","Es","Jt","_m","oi","Im","Dm","Ns","CatalogueOptionsAdmin","Ms","Tm","Hs","CustomerOptionsAdmin","Ls","hn","Vs","Je","Em","ai","ii","si","Bs","tr","Gs","yo","li","ci","Am","ui","Us","pi","ks","er","Nm","nr","Mm","di","Hm","mi","Ws","or","Lm","$s","zs","jm","Bm","Gm","Um","km","Wm","zm","$m","Qs","Km","Qm","qm","qs","Xm","Xs","Ys","Ym","Zs","Zm","Jm","tf","ef","nf","Js","of","af","fi","Mt","ye","Ut","un","Ce","LoadCatalogueOptions","catalogueOptionsEndpoint","PaymentOptionsAdmin","paymentOptionEndpoint","ShipmentOptionsAdmin","shipmentOptionEndpoint","FilterOptionsAdmin","filterOptionEndpoin","BusinessOptionsAdmin","businessOptionEndpoint","NotificationOptionsAdmin","notificationOptionEndpoin","HomePageOptionsAdmin","homepageOptionEndpoint","CustomerDetailOptionsAdmin","customerDetailOptionEndpoint","DashboardOptionsAdmin","dashboardOptionEndpoint","ContactUsOptionsAdmin","contactUsOptionEndpoint","FeatureOptionsAdmin","featureOptionEndpoin","TermsOfUseOptionsAdmin","termsOfUseOptionEndpoin","DocumentOptionsAdmin","documentOptionEndpoint","SeriesOptionsAdmin","seriesOptionEndpoint","ItemOptionsAdmin","vo","xo","rr","An","So","bo","Xn","cr","ir","ar","sr","lr","Co","rf","el","lf","uf","gi","cf","df","rl","il","hf","sl","ff","vf","ll","yf","Sf","bf","If","Si","Warehouses","warehouseEndpoint","DefaultDocumentTypes","Cf","GetPriceListNumbers","PriceListNumbers","IsEnabledCustomCurrencies","IsAutoCreateInvoice","xi","ul","_f","Of","Df","wf","ge","Ef","Ci","_o","Rf","_i","pl","ItemDisplayElementOptionsAdmin","Nf","hl","ml","fl","zn","jf","Vf","Oi","LastSalesDocumentTypes","Io","Ff","Uf","Oo","ItemDisplayPopupOptionsAdmin","Gf","Wf","vl","mv","Qf","wi","Kf","Sl","Yf","bl","LoadOptions","itemDisplayElementOptionEndpoint","itemDisplayPopupOptionEndpoint","Zf","eh","Il","th","ih","ah","sh","lh","uh","Ol","GoCreditPasswordSecure","LoadAccounts","UpdateGoCreditModeEffect","accountEndpoint","Accounts","IsAllowGoCreditPayment","GoCreditTransactionMode","IsAllowCashPayment","IsAllowChequePayment","IsAllowWirePayment","IsAllowSplitPayment","IsGoCreditNotJ4","IsAllowUsingExistingCreditCard","IsAllowCreditCardSaving","Ti","_l","ch","mh","wl","dh","gh","Tl","hh","xh","Sh","Ch","El","LoadShipmentMethods","shipmentMethodEndpoint","GetListShallow","ShipmentMethods","Ei","bh","Oh","Al","ShipmentMethodsAdmin","_h","Dh","Ai","Ml","Eh","Hl","GetItemShipments","ItemShipments","ItemName","Ph","jl","Ah","Hh","Vl","HomepageOptionsAdmin","Mh","Fh","Gl","jh","Uh","Gh","zh","kl","InvoiceOnePasswordSecure","InvoiceOneTemplateIDEng","PrintingDocCodeEng","InitInvoiceOneTemplates","InitPrintDocCodes","LoadNotificationTemplates","ActualInvoiceOneNotificationTypes","HandleInvoiceOneNotificationChanged","Mi","notificationOptionEndpoint","GetInvoiceOneTemplates","InvoiceOneTemplatesDataSourceDictionary","FilterInvoiceOneByTypeAndCastToView","GetPrintingDocCodes","PrintingDocCodesDataSourceDictionary","FilterPrintingByTypeAndCastToView","notificationTemplateEndpoint","NotificationTemplates","StrValue","kh","Wh","Kh","$l","$h","Xh","Ql","qh","Zh","Jh","ng","ql","SystemOptionsAdmin","Hi","eg","Li","rg","ag","Yl","ig","lg","cg","ug","pg","dg","mg","fg","hg","vg","Jl","DimensionConfigurationsAdmin","DimensionsAdmin","dimensionEndpoint","DimensionScalesAdmin","dimensionScaleEndpoint","DimensionValuesAdmin","dimensionValueEndpoint","dimensionChangeSubject","dimensionScaleSubject","ShowMessageBox","GetDimensionValidities","InvalidDimensions","HasNoChild","RelativeItemsWithoutDimensionConfig","NonDefinedParentItems","NonDefinedChildItems","Height","Fi","pr","dr","ji","yg","nc","Sg","oc","LoadSelectOptions","bg","_g","rc","Ig","Bi","wg","ac","Tg","Rg","Ag","sc","Ng","Mg","specificationAttributeID","Hg","jg","ki","Hn","LoadDataSources","AttributeGroupsAdmin","attributeGroupEndpoint","SpecificationAttributeValues","specificationAttributeValueEndpoint","requireTotalCount","ListEx","EntityEntryID","FilterAttributeDisplayOptionSet","lc","FilterAttributeDisplayOptions","AttributeDisplayOption","FilterDisplayOption","Gi","Ui","Lg","Vg","uc","Fg","Ug","Gg","Wg","Wi","DimensionChange","OnDimensionScaleScaleChange","kg","Qg","dc","grid","deleteRow","row","rowIndex","Kg","fc","mc","Zg","Yg","ty","hc","DimensionScaleChange","Jg","yc","oy","vc","ry","sy","xc","ay","py","Sc","ExternalLinkConfigsAdmin","uy","dy","my","$i","Cc","yy","gy","xy","Ic","Nn","vy","Cy","_c","by","Oy","Dc","ExternalQueriesAdmin","_y","Mn","Tc","Qi","SpecificationAttributesAdmin","GetAttributeValidities","InvalidAttributes","EmptyAttributes","Py","Ec","Pc","Ry","c","a","g","f","SetData","SpecificationAttributeID","p","Tt","Xt","Ay","ln","GuestContactPersonsAdmin","GuestCustomersAdmin","SalePersonOptions","salesPersonOptionEndpoint","sn","Rc","yI","xv","GetUpdatedTermsOfUse","ref","close","GetTermsOfUseContent","TermsOfUseContent","domSanitizer","My","hI","gI","bI","bv","LoadData","GetCredentials","Credentials","GetSalesPersonsCredentials","SalesPersons","validate","isValid","ImpersonateTarget","ImpersonateByCustomer","ImpersonateBySalesPerson","ImpersonateLogin","OnImpersonateCancel","SI","Cv","OI","TI","_v","wI","AI","Ov","contactUsSubjectEndpoint","ei","RI","wv","HI","FI","Pv","jI","Ev","GI","zI","WI","KI","Av","contactSubjectEndpoint","GetActivityTypesList","ActivityTypes","GetSubjectTypesList","SubjectTypes","GetSBOUsersList","SBOUsers","$I","Orientation","ShoppingCartMode","DefaultShoppingCartModeOption","YI","Hy","Mv","HasCustomer","IsShowCategoryNavigationPane","IsCatalogueEnabled","IsEnableShoppingCart","InitializeCatalog","ShoppingCartDescription","CreateShoppingCartOnInitIfneed","IsAllowUseBaseDocument","GetIsAllowedBaseDocument","ReloadToolbar","shoppingCartFirstChanged","SetPageSidePanelState","ComponentName","ShoppingCartItems","SidePanelPageComponentName","pageComponentName","SetPageClass","IsShowTopPanel","IsShowTopMenuCategories","IsShowTopMenuBrands","IsShowTopMenuManufacturers","IsShowTopMenuVendors","HideScrollLoading","AdditionalClass","GetDocumentTitle","ready","catalogueInitialized","entries","QueryParams","Filter","b64_to_utf8","ClearFilter","IsShowFilterPane","ShowButtonsText","ShowBackButton","SubtitleTemplate","startOver","GetScreenSize","FilterPanelWidth","removeCurrentShoppingCart","t_","a_","Lv","SetCategoryTree","SelectedNode","SetNode","treeView","selectItem","findNodeByCategoryID$Subscription","closed","Mode","node","expanded","collapseItem","key","expandItem","sidebarService","Close","IsHideTreeAfterSelecting","findNodeByCategoryID","i_","GetQueryParams","Yn","o_","r_","u_","jv","CatalogueViewOption","ShowCompactView","IsEnableListView","ContextMenuItems","label","icon","HandleChangeView","MenuItemsLength","IsEnableGridView","IsEnableCompactView","ApplyView","Context","c_","f_","Vv","LoadAssortment","assortmentEndpoint","GetCustomerAssortment","Assortments","Wr","m_","Mc","eventSubject","h_","EventType","Ready","addonName","storageKey","SendToAddon","entryID","SendFromAddon","ItemUpdateFromAddon","initialized","AddonName","sendToAddon","SerializedData","g_","C_","Bv","OnDestroyComponent","Show","jy","Ac","IsShowSearchPanel","Fv","bottomSheetService","HandleToggleCategories","PageClass","Xi","b_","Te","Ly","T_","Gv","GetFieldNameByType","isArray","SelectedID","LoadCategories","LoadBrands","LoadVendors","LoadManufacturers","categoriesList$Subscription","getCategoriesListUnfiltered","InitializeImages","DS","GetItemsAsync","Brands","Vendors","Manufacturers","ddbutton","MobileItemListPageSize","D_","w_","N_","Uv","SelectedAssortmentID","GetDefaultAssortment","ApplyAssortment","concat","IsAssortmentSelected","OnAssortmentChanged","IsMoreThanOneAssortment","A_","F_","kv","OnSearch","OnBarcodeValueChanged","j_","k_","Wv","ProcessNumber","FillBreadCrumbItems","ShowClassification","findRawNodeByCategoryID$Subscription","ClassificationInfo","join","U_","q_","zv","hasChildCategories$Subscription","hasChildCategories","IsShowSubCatagoriesInGrid","IsShowSubCatagoriesInList","IsDisplayCategories","Q_","K_","tO","$v","ElementOption","itemOptionService","GetItemOption","Item","ItemOptionID","DisplayType","ItemKitChildrenQuantity","GetItemKitChildrenQuantity","IsKitCollapsed","GetItemKitVisibility","processShoppingCart","addonEvent$Subscription","addonService","event$","Addons","parseAdditionalDataAndSendToAddons","IsVirtualPromotionItem","IsPromotionPrice","IsShowSalesKitParentLabel","KitType","PriceDetails","FinalPrice","IsShowAppItemQuantityComponent","IsRenderAddToCart","VariationRelation","Enums","Parent","ItemActionPermissions","EnableDelete","IsAllowItemDeleting","DefineShoppingCartDisplayMode","EnableNavigate","DocumentLineData","ShoppingCartDisplayMode","IsShowRemoveItemConfirmation","EnableEdit","OnDuplicate","OnEdit","disablePromotionInShoppingCart","EffectPromotionID","OnQuantityValidation","pickoutItem","OnMultipleClick","addKit","IsShowQuantityDirectlyFromItem","IsKitSeparate","IsBlockedKitSeparate","IsMultipleQuantity","IgnoreItemUpdate","$e","J_","eO","ScreenSize$","ForceScreenSize","screenSize","nO","Nc","aO","sO","dO","Kv","item","InitImageRequest","imageSize","ImageBackgroundColor","ImageVersions","AlternativeEntryID","AlternativeImageType","pO","yO","Qv","SaleMethod","StockUnitName","SalePackageName","StockUnitsInPackage","IsRenderPricePer100G","PricePer100G","gO","CO","qv","RefreshState","elementOption","IsRenderBadges","badges","getBadges","IsAnyBadges","getBadge","None","Variations","bO","Xv","wO","DisplayAlternativePriceAsDefault","GetTotalPerItemPrice","Price","GetFinalPriceMainPart","GetFinalPriceChangePart","GetPricePer100MainPart","GetPricePer100ChangePart","InvertedPromotionPrice","GetInvertedPromotionPriceMainPart","GetInvertedPromotionPriceChangePart","IsShowDiscount","Discount","PriceDisplayOption","BeforeDiscountAndDiscountPercent","BeforeDiscountDiscountPercentAndFinal","IsShowOldPrice","BeforeDiscountAndAfterDiscount","IsShowFinalPrice","AfterDiscount","IsShowPer100Gr","IsShowPriceComments","IsRenderPriceComments","PriceComments","HidePriceComments","IsRenderPriceDescriptionBlock","ControlRenderEvent","WithCommentBlock","GetItemElementID","random","substring","AlternativePriceTitle","GetAlternativePriceTitle","IsAlternativePriceActive","AlternativePriceTitleOff","AlternativePriceTitleOn","CurrencySymbol","AlternativePriceDetails","replace","IsUseAlternativePriceAsDefault","DO","AO","Yv","IsShowInStock","IsShowOutStock","StockCustomStatus","IsInStock","QuantityInStockValue","IsRenderQuantityInStock","IsRenderQuantityOutOfStock","RO","LO","IsShowAddToWishlist","IsInWishlist","UpdateItemInWishlist","notifyWishlistItemUpdated","jO","GO","UO","KO","Zv","$O","ZO","Jv","QuantityBefore","MaxQuantity","MaxOrderQuantity","MinOrderQuantity","MinQuantity","IsAllowNegativeQuantity","IsReturnRequest","IsRenderTotalPerItem","TotalPerItem","toFixed","TotalPerItemMain","TotalPerItemChange","QuantityIncrement","SaleMultipleOf","trunc","IsAllowOrder","IsReadOnly","IsAllowQuantityEditing","Format","Units","Packages","ElementID","HandleQuantityChanged","IgnoreMultipleQuantity","IsQuantityCorrect","DisableDecrease","DisableIncrease","changeItemQuantity3","restoreQuantity","IsShowQuantityError","CurrentPageForQuiantityError","IsShowValidationMessage","GetCurrentRoute","getTotalItemQuantity","Invalid","getIsNeedToCheckBatchesSerials","IsNumberSelectionEnabledByBaseDocType","ItemStockManagementType","getItemBatchesQuantity","getItemSerialNumbersQuantity","OnAddKitClick","YO","oD","tx","nx","aD","ox","sD","cD","lD","dD","pD","fD","ix","GetDefaultTitle","RouteCustomerID","OnInitComponentInternal","InitEntity","SetEntity","EntityType","GetItem","IsLoading","ReflectEntityLoaded","Tab","GotoTabName","AddTab","PopupOption","IsRenderKitItems","IsRenderDimensions","LoadItemAttributes","LoadItemRelatedItems","IsPromotionAvailable","IsRenderPromotions","IsEnablePromotions","IsRenderLastSales","IsRenderAvailability","IsRenderPlannedPurchases","changeItemAddonData3","IsRenderTextAttributes","IsRenderSpecificationAttributes","IsRenderDimensionValues","IsLoadSpecificationAttributes","IsLoadTextAttributes","IsLoadDimensionValues","TextAttributes","ColorAttributes","TagAttributes","LinkAttributes","itemAttributeEndpoint","GetItemAttributes","AttributeGroupsMainTab","DisplayTab","AttributeGroupsAttrTab","IsRenderRelatedItems","rx","GetItemAdditionalItems","AdditionalItemsData","AdditionalItems","Alternatives","AlsoBought","CurrentTabName","CurrentTabIndex","VirtualTabs","SetTabByName","co","mD","hD","gD","ax","SD","bD","DD","sx","ItemPriceHasCommentBlock","OD","RD","lx","InitializeMediaItems","popupOption","IsAllowImageEnlargement","InitImagePopupSize","ImagePopupWidth","ImagePopupHeight","InternalImageHeight","InternalImageWidth","ToggleImagePopup","IsImagePopupVisible","MediaItems","cx","type","smallImageRequest","GetImageRequest","imageRequest","videoSafeUrl","VideoLink","ItemVideos","IsRenderImages","IsRenderVideos","IsShowThumbnailsArea","IsRenderThumbnails","itemsGallery","ChangeThumbnailsAreaItem","selectedIndex","IsShowVideoLoading","thumbnailsScrollView","scrollToElement","getElementById","GetItemId","ED","LD","ux","processAttributeGroups","CombinedTextAttributes","DateFormatLong","NumberQuantity","IsCombineByName","IsShowDescription","Description","toUpperCase","AttrsTooltipVisibility","HD","BD","GetItemFile","createElement","href","download","click","pop","GD","$D","px","InitVariations","ReloadDimensionValues","VariationsVisible","DimensionValue1ID","DimensionValues1","DimensionValue2ID","DimensionValues2","DimensionValue3ID","DimensionValues3","ReloadVariations","some","PreviousEntryID","zD","YD","dx","SelectedRelationType","InitializeFilter","XD","nw","mx","wishlistLoaded$Subscription","wishlistLoaded$","IsWishlistLoadedFirstHandled","UpdateWishlistQuantity","getWishlistQuantity","IsShoppingCartLoadedFirstHandled","ew","sw","fx","state","ForceNavigation","contactUsDialog","ba","aw","hx","pw","Zn","Coupon","Coupons","SecretText","applyCoupon","removeCoupon","TotalPrice","removedItems","yw","gx","_isDuplicateAction","SelectedDocumentID","addedItems","_documentType","_customerID","InitData","OriginalDocuments","GetListByParams","gw","xw","yx","Hc","IsAllowPayment","IsAllowLaterPayment","InitContextMenu","ToggleEnableAllPromotionItemsContextMenu","IsAllowSummaryEditing","cn","separator","HandleNewLine","IsSuggestedPromotionsLinkVisible","SuggestedPromotions","TotalsExpanded","HandleDuplicateDocument","IsAllowRepeat","HandleRepeatDocument","localStorage","getItem","ItemDisplayType","DefaultShoppingCartItemViewOption","IsEnableShoppingCartListView","HandleChangeViewMode","IsEnableShoppingCartCompactView","IsEnableShoppingCartLineView","ToggleDragAndDropMode","DisabledPromotionsExist","enableAllPromotionItems","slice","duplicateRepeatDialogComponent","SetupData","notEmptyShoppingCartPrompt","RepeatDocument","IsDragAndDropModeEnabled","Refresh","IsEnableGiftCards","IsEditMode","EditShoppingCartItem","ShoppingCartItemUpdate","CouponIds","setItem","IsEnableCheckout","RouteHistoryService","ClearHistory","cleanShoppingCart","ShoppingCartItemEditComponent","SendEvent","IsValid","PlaceAfterUniqueID","updateItem","Fy","vw","xx","Cw","vx","IsDesktopExpanded","ProcessQueryParams","IsEnableAllPromotionItemsButtonVisible","Ve","HandleRemoveAll","NavigateToSuggestedPromotionsComponent","GotoShoppingCartOnClose","DragAndDropButtonLabel","ShowCloseButton","IsDuplicate","bw","Dw","Ow","bx","wo","ww","Cx","Tw","Pw","Ix","Ew","To","Aw","Rw","Lw","_x","Hw","Bw","Dx","GetFieldOption","TotalBeforeVat","TotalVat","CalculateDiscountSumValue","CalculateTotalBeforeVatValue","CalculateVatSumValue","CalculateTotalAfterVatValue","CalculateDiscountPercentValue","GetLineVatSumBeforeDiscount","TotalBeforeDiscount","Number","RoundPrice","GetDiscountMultiplier","TotalVatBeforeDiscount","IsRoundTotals","round","HandleTotalAfterVatChanged","updateTotals","Vw","kw","Tx","SignatureOption","ProcessShoppingCartAfterChange","ValidateItems","ProcessValidationResult","ItemValidationResult","SelectedPageIndex","IsExtendedSectionVisible","MenuPositon","SetVisibilities","updateShoppingCartCasualAddress","updateShoppingCartCasualContactPerson","preSaveShoppingCartQueue","preSaveCheckoutShoppingCartDetails","ProcessShoppingCartForCheckout","DefineMinPlannedDeliveryDate","DefinePostingDate","DefineCasualAddress","DefineCasualContact","SetCheckoutButtons","HandleShoppingCartChanged","CalculatePaymentTermsDate","DocumentTypeText","DocumentNotesLabel","IsInvoiceOrRefund","IsFinancial","RefreshEntityOriginal","SetShipmentOptionMethods","OnValidateError","SetPageIndex","updateShipmentMethod","LastStepIndex","IsSignatureEnabled","CompleteCheckout","IsPaymentEnabled","Label","CheckoutButtons","IsEnableTOnCheckout","IsTermsOfUseAgreed","IsItemQuantityInvalid","DisableCheckoutMultipleClick","SaveDocument","OnCompleteSubscribe","IsPaymentDone","IsShowExtraConfirmation","UITotalAfterVat","UICurrency","termsOfUseDialogComponent","DocumentDate","PaymentTermsID","GetCalculatedPaymentTermsDate","HandleCheckoutFieldUpdate","value","previousValue","setHours","getTime","IsDisablePreSave","invisibleTotalMessageHandler","IsCheckoutTotalVisible","PaymentDone","ShoppingPaymentID","PaidAmount","PaidAmountWithLater","HandlePaymentDoneChanged","HasCreationError","OnlyLaterPayment","CompletedDocument","IsDocumentCompleted","AvailableShipmentMethods","CasualAddressCountryCode","CasualAddressStateCode","CasualAddressCity","CasualAddressStreet","CasualAddressZipCode","CasualAddressFullAddress","CasualContactPersonEmail","CasualContactPersonPhone","CasualContactPersonCellular","CasualContactPersonPosition","MinPlannedDeliveryDate","editSummaryDialog","Ox","wx","Uw","Ww","InitDisplayMenuItems","DisplayMenuItems","ItemDisplayMode","HandleEnableAllPromotionItems","Lc","IsAddressExpanded","IsShipmentOptionExpanded","IsContactExpanded","IsPaymentOptionsExpanded","IsDocumentDetailsExpanded","zw","Px","Qw","InitContextMenuItems","jc","pagesScroll","scrollTo","qw","Jw","Ax","OnPageIndexChanged","Zw","rT","Nx","_entity","ObjectType","CanCompleteSharing","ShareButtonText","oT","cT","Mx","AlternativeItemID","AlternativeEntryType","AlternativeItemType","IsShowItemPopup","lT","fT","Hx","mT","vT","xT","_T","IT","DT","Lx","canLoadNext","CanLoadNextChanged","Page","scroll","PageSize","CollapsedGroups","SetViewModeCssName","PageScroll","LogDeviceInfo","getItems$Subscription","collapsed","CanLoadNext","GroupID","release","ItemGroups","InitializePaging","onReachBottom","getItems","ProcessItemsResult","ShowNoDataMessage","Groups","AttachFakeData","OT","wT","mobileCatalogueScroll","OnInitComponentFinished","ViewModeCssName","Compact","scrollActionHandler","scrollOffset","top","scrollTopOffsetDelta","scrollTopOffset","IsHeaderCollapsed","TT","jx","NT","Fx","HandleClearFilter","ItemsFilterPatch","FilterPanel","HandleApplyFilter","SidebarState","SidebarName","ItemsFilter","IsNewFilter","GetState","getFilterClarification","Ln","LoadMainEntities","IsShowFilterBrands","IsShowFilterVendors","IsShowFilterManufactures","SpecificationAttributeIDs","DimensionIDs","LoadAttributeGroups","hasOwnProperty","disabled","FilterAttributeGroups","AT","FT","Vx","jT","kT","Bx","FieldName","SelectedItems","selectedByFilter","OnFilterChanged","UT","QT","Gx","GroupingOption","GroupingItems","GetGroupingItems","OnGroupingChanged","HandleGroupingOptionChanged","IsShowGroupSortByBrand","IsShowGroupSortByVendor","IsShowGroupSortByManufacturer","IsShowGroupSortByCategory","KT","JT","Ux","SortingOption","SortingItems","GetSortingItems","OnSortingChanged","HandleSortingOptionChanged","ZT","rP","kx","oP","cP","Wx","lP","fP","zx","Expanded","OnToggle","mP","vP","Yi","SP","$x","xP","OP","Kx","_P","OnPreSaveDetails","wP","RP","EP","NP","Qx","ChangeCreditCardRequest","CustomerEntryID","Url","Sanitizer","PaymentURL","OnSuccessfulPayment","OnSuccessfulPaymentHandler","OnBackPayment","OnBackPaymentHandler","layout","popup","ConfirmChangeCreditCardRequest","detectChanges","AP","jP","qx","LP","Yx","htmlEditorDialog","HTMLBody","BP","kP","Jx","UP","KP","QP","JP","eS","gridAny","IsAllowExport","GridExtender","VisibleName","externalQueryEndpoint","GetExternalQueryData","ExternalQueryResult","prepareData","Rows","getDataRow","ExternalQuery","Fields","ErrorText","AsNumber","AsString","AsDate","AsMoney","AsBool","By","ZP","eE","qP","nS","pointName","SystemCustomersCount","Count","FilterFrom","FilterTo","GetTopItems","ItemsTabs","ReportsTabs","externalQueryPopup","validateFilterDate","adminDashboard","GetTopQuantityItems","TopQuantityItems","GetTopFrequentItems","TopFrequentItems","GetUniqueCustomerLogins","CustomerLogins","GetCustomersInPortalCount","LoadReportByTabIndex","CurrentReportsTabIndex","itemIndex","GetAllOrderedItemsCount","AllOrderedItems","GetAllOrdersByCustomersCount","AllOrdersByCustomers","GetItemSearchesCount","ItemSearches","tS","Gy","tE","iE","rS","rE","cE","lE","pE","iS","uE","hE","fE","yE","aS","gE","bE","SE","IE","sS","CE","TE","lS","format","position","ProcessFilterAttributeGroups","AttributesFilter","NumberMinValue","NumberMaxValue","CheckAreEqual","CleanupFilterAttributePathValue","DateMinValue","DateMaxValue","Values","wE","RE","OnNavigateClick","AE","FE","uS","ReportItemsState","FindListItemElement","srcElement","classList","remove","parentElement","contains","LE","jE","calculateCellValue","dataField","isShowZero","BE","GE","WE","zE","KE","pS","PromotionsAdmin","mr","$E","Uy","Po","YE","mS","ValidFrom","ValidUntil","EffectType","Boolean","EffectQuantity","ResultType","EffectDiscount","EffectFixedPrice","EffectItemID","EffectItemFilterType","RequiredType","RequiredQuantity","RequiredSum","ItemFilterType","itemFilterItemsIds","itemFilterCategoryIds","CustomerFilterType","customerFilterGroupIds","customerFilterCustomerIds","originalSecretText","Promise","resolve","CheckUniqueSecretTextAvailable","CardCode","CardName","FlushDataAfterDuplicate","LoadItems","Customers","GetCustomersLite","Get","GetCustomerGroups","CustomerGroups","LoadValuesOfCustomFields","CustomerGroupID","effectCategoryIds","EffectiveCategories","effectItemsIds","EffectiveItems","loadSelectedItems","ActivationCode","availableForSearchItems","GetShallow","EffectItems","SetDirty","IsManualName","AutomaticName","getAutomaticName","CommercialName","getTextForEffectTargetEffectType","OnSave","XE","t0","hS","getVisibleRows","Priority","SaveBatch","NotifyEntitySaved","JE","n0","o0","gS","a0","l0","yS","promotionEndpoint","GiftCardStatus","IsUsed","IsReactivateGiftCardButtonVisible","HiddenItems","GetHiddenItems","giftCardEndpoint","ReactivateGiftCardByID","Fc","s0","p0","xS","GiftCardsAdmin","u0","f0","bS","m0","x0","CS","PromotionID","promotionTextTemplate","v0","_0","IS","GetPromotionsForItem","Promotions","I0","P0","T0","E0","R0","A0","N0","L0","LoadCustomerGroups","LoadPaymentTerms","H0","customerGroupEndpoint","PaymentTerms","paymentTermsEndpoint","_S","OS","M0","V0","TS","F0","k0","PS","SalesPersonOptions","U0","K0","RS","ExistingCoupons","OnCouponsChanged","couponText","$0","Z0","AS","GetAvailableForSalesPerson","Y0","Zi","Eo","rR","NS","PaintBalanceCells","ForSelect","OnCustomerSelect","OnNavigate","oR","aR","HS","SelectAfterCreation","searchByText","MS","iR","uR","jS","selectCustomerPopup","LS","cR","hR","FS","CreateDocumentButtons","IsDocumentTypeAvailable","IsAllowReceiptAdd","createShoppingCartByDocumentType","fR","xR","SR","_R","OR","ER","VS","barcodeBoxDialog","CloseDialog","PR","MR","GS","IsAllowSelectingAddressVisible","IsAllowSelectingContactVisible","OnlyVisibleOptions","WithoutViewOptions","NR","jR","kS","LR","BR","zS","VR","kR","WR","$R","KS","Batch","BatchesQuantity","Serial","SerialNumbers","Default","_shoppingCartItemView","_uniqueItemID","InitItem","Batches","ShoppingCartItem","IsNumberSelectionEnabled","AllNumbers","LoadNumbers","DisableFormFields","IsItemCodeFieldDisabled","IsFieldDisabled","BaseEntryID","Permissions","IsAllowItemCodeEditing","IsQuantityFieldDisabled","IsVatLiable","GetCurrentCustomerWithDetails","vatGroupEndpoint","GetVatGroups","CustomerVatGroup","VatGroupCode","VatGroups","ShowVatGroupSelection","SalesPersonItems","GetItemsLite","GetSerialNumbers","Warehouse","GetBatches","IsPriceRelatedFieldDisabled","IsAllowPriceEditing","GetSingleItemWithTotals","CalculateTotals","CalculatePriceAfterVat","CalculatePriceAfterDiscountValue","CalculatePriceAfterDiscountAndVatValue","PriceAfterVat","GetVatMultiplier","PriceAfterDiscount","PriceAfterDiscountAndVat","CalculateDiscountPercent","CalculateTotalAfterVAT","DefaultVatGroupCode","VatPercent","Code","Percent","shoppingCartItemNumbersDialog","AllowManualInput","IsNegative","NumberItems","QS","CalculateTotal","Vc","SerialNumber","OnChanged","Ji","zR","XR","XS","GetItemPurchaseOrders","PurchaseOrders","qR","tA","JR","nA","YS","eA","sA","ZS","GetItemAvailabilities","ItemAvailabilities","aA","dA","JS","EnablePromotionDisable","HandlePromotionDisable","HandleEdit","HandleDelete","OnPromotionDisable","ShowItemActionContextMenu","pA","gA","hA","vA","tb","yA","CA","itemId","currentCustomerOnly","IA","OA","nb","CurrentCustomerItemSales","itemSaleEndpoint","GetItemSales","ItemSaleDocumentType","ItemSales","eb","_A","EA","ob","PA","jA","ib","LA","UA","kA","sb","SetDefaultDateFilterValues","ReportDateRangesSortedList","SortDateRangesList","DocumentFilterAction","HandleFilterChanged","DoInitialize","OnFilterValuesChanged","cloneFilter","GA","SalesPersonIDs","Subjects","ky","BA","$A","lb","InitFilter","updated$","Documents","GetDataSource","GetPaymentTerms","fr","DocumentListParameters","ab","zA","KA","QA","YA","ZA","n4","Style","o4","l4","cb","s4","m4","ub","Menu","OnView","d4","_4","pb","db","InitViewModes","CanCancel","HandleCancelDocument","CanClose","HandleCloseDocument","CanDuplicate","CanRepeat","CanCopyTo","HandleCopyTo","HandleShowRelatedDocuments","Customer","HandleExportDocumentItems","IsShowShare","IsAllowShare","HandleShare","GetDescriptionByCustomerID","IsPaymentExists","DocumentNumber","GetDocument","DefineCustomerAddress","DefineContactPerson","AvailableTargetDocumentTypes","GetAvailableTargetDocumentTypes","Methods","ShipmentMethod","ExportDocumentItems","DocumentItemViews","DocumentCurrencySymbol","TotalDiscount","PrintMenuItems","HasDocumentPDF","HandleGetPDF","DocumentBatches","DocumentSerialNumbers","CheckDuplicationAccessByCurrencies","IsPaymentExistsForDocumentCustomer","ShipToCountry","ShipToState","ShipToCity","ShipToStreet","ShipToZipCode","ShipToFullAddress","IsUseCustomAddress","ContactPersonPosition","ContactPersonEmail","ContactPersonPhone","ContactPersonCellular","IsHideItems","IsAllowCancelation","IsAllowClose","IsCustomerCurrencyAllowedForDuplication","Confirmed","Opened","IsActive","cancelPrompt","CancelDocument","Action","NotifyDocumentUpdated","closePrompt","CloseDocument","duplicatePrompt","repeatPrompt","dialogPrint","GetPdfByCurrentUrl","v4","addWorksheet","Gc","gridDocumentItems","worksheet","export","customizeCell","gridCell","excelCell","font","bold","xlsx","writeBuffer","S4","Blob","copyToDialog","SetupComponent","GetRelatedDocuments","relatedDocumentsToDialog","RelatedDocuments","noRelatedPrompt","shareDocumentDialog","IsAllowPrint","OnPrintButtonClick","pcm","OnGetContextMenuItems","GetContextMenu","IsEnableLineView","b4","T4","fb","OnCalculatePaymentTermsDate","OnDocumentDetailsValueChanged","w4","j4","H4","signBox","SignatureData","OkButtonText","OkText","CancelText","ClearSignature","SignatureReadOnly","IsEmpty","Required","M4","L4","V4","gb","Signature","signatureDialog","OnSignatureChanged","hb","F4","vb","yb","W4","xb","Bc","k4","Q4","bb","documentProcessingEndpoint","UpdateAsResolved","K4","J4","Cb","DocumentProcessings","ListByParams","Z4","oN","_b","BaseDocuments","ListAvailableDocTypes","ListDocTypes","OnlyOneTypeAvailable","SelectedDocType","FilterBaseDocuments","ShoppingCartItemsExisted","BaseDocumentsByType","SelectedDocuments","dataGrid","deselectAll","selectedRowsData","nN","sN","Db","aN","wb","cN","uN","mN","Pb","IsEnableLedger","LedgerRoute","Open","IsEnableDashboard","DashboardRoute","IsAllowReceiptView","IsShowGeneralDetails","IsShowContactInformation","IsShowPaymentTerms","IsShowContactPersons","IsAllowEditingContacts","IsShowAddresses","IsAllowEditingAddresses","IsNewCustomerRelatedToCurrentSalesPerson","IsFullScreen","IsShowSubtitle","TaxStatuses","reverse","GetCurrentSalesPersonId","GetCustomerAttributes","CustomerAttributes","AllVatGroups","FilterVatGroups","SetTabs","SetDefaultFormValues","LoadEntity","EUVatStatus","CurrencyLocal","GroupCode","DefaultCustomerGroupID","DefaultPaymentTermsID","PriceListNumber","DefaultPriceListNumber","ShowDetails","ShowAddresses","MaxAddressEntryID","CurrentAddressEntryID","ShowContactPersons","ContactPersonsTabsIndex","MaxContactEntryID","CurrentContactEntryID","GetCurrentCreditCard","CreditCard","LoadPropertyAttributes","customerPropertyAttributeIDs","IsAllowChangeCardDetails","changeCreditCardDialogComponent","IsEU","NavigateExternal","ContactPersonsToUpdate","CustomerAddressesToUpdate","fill","ConvertPropertyAttributesToString","IsSaving","CustomerContacts","Endpoint","SaveFull","ReflectEntitySaved","dN","pN","fN","hN","Eb","gN","ShowToolbar","yN","SN","Ab","HandleBaseDocument","GetAvailableBaseDocuments","baseDocumentDialog","messageDialogBaseDocument","Ob","xN","ON","Nb","OnItemClick","_N","EN","Mb","refreshState","PN","HN","Hb","CustomersAdmin","AllowAddCustomer","IsAllowCustomerAdding","MN","VN","jb","IsLandscape","FN","kN","onScroll","OnSetAdditionalClass","ngAfterViewInit","WN","QN","IsMediumScreen","RefreshMenuSidePanelVisibility","sidePanelState","menuPositon","SetMenuPositon","qN","JN","Fb","ZN","oM","Bb","DeliveryNoteSeriesID","QuoteSeriesID","InvoiceSeriesID","OrderSeriesID","RefundSeriesID","ReturnRequestSeriesID","ReturnSeriesID","PaymentDocumentSeriesID","DefaultCustomerSeriesID","seriesEndpoint","GetSeries","AllSeries","SetSeriesByDocument","AllQuoteSeries","AddDefaultOption","AllOrderSeries","AllInvoiceSeries","AllDeliveryNoteSeries","AllReturnSeries","AllReturnRequestSeries","AllRefundSeries","AllPaymentDocumentSeries","AllCustomerSeries","AddDefaultCustomerOption","Gb","IsCustomerSeries","nM","aM","kb","iM","uM","shoppingPaymentID","useShoppingCart","pM","mM","dM","yM","Wb","AllowSaveCard","AllowUseExistingCard","ShoppingPaymentView","UseShoppingCart","FixedPrice","LeftPaymentAmount","Amount","LoadCreditCard","GetNewPaymentUrl","CheckAmount","BackupUrlSafe","GoCreditCardType","HasError","CreditCardItem","shoppingPaymentEndpoint","MakeNewCreditCardPaymentStage1","OnCreateShoppingPayment","InitInProcess","IsExpired","UpdatePaymentCreditCardItem","IsSaveCreditCard","ExceededAmount","OnExceedAmountChange","hr","gM","xM","$b","_tabIndex","CheckNavigateOnlyOneMethod","SetTab","_shoppingCart","TotalAmount","GetByID","SetDonePayments","RecalculateIsPaymentDone","_totalAfterVat","SetAvailablePaymentMethods","ShoppingPaymentCreditCardItemViews","DonePayments","every","PaymentType","SelectedTabIndex","AllowedPaymentTypes","IsAllPaymentDone","SelectPaymentType","PaymentDate","PaymentObject","CashItem","SaveCashPayments","ShoppingPaymentCashItem","SetPaymentSaveResponse","ChequeItem","SaveChequePayments","Identifier","BankCode","BankBranch","BankAccountNumber","ChequeNumber","ShoppingPaymentChequeItem","WireItem","SaveWirePayments","WireRefference","ShoppingPaymentWireItem","CreditCardNum","LaterItem","SaveLaterPayments","ShoppingPaymentLaterItem","OpenCreditCardDialog","OnPaymentDone","paymentSelectDialog","AvailablePaymentTypes","creditCardPaymentDialog","OnPayWithExistingCard","MakePaymentWithExistingCreditCard","ShoppingPaymentCreditCardItem","DeleteDisabled","PaymentLineID","DeletePayment","CheckWireAndCashAndLaterOnlyOne","OnPaymentChangeIsPaymentComplete","changeDetectorRef","PrivateRequestID","MakeNewCreditCardPaymentStage2","ShoppingPaymentCashItemViews","ShoppingPaymentChequeItemViews","ShoppingPaymentWireItemViews","ShoppingPaymentLaterItemViews","zb","vM","CM","IM","TM","Kb","SetPaymentButtons","PaymentButtons","ImageClass","EnumValue","OnSelectType","wM","RM","Qb","EM","NM","MM","ta","jM","FM","GM","UM","zM","$M","QM","qM","ZM","JM","nH","zy","Xb","oH","iH","Yb","IsCash","PaymentTypes","IsCheque","IsWire","IsCreditCard","rH","tC","uH","Jb","ReceiptFilterAction","cH","$y","lH","mH","eC","AllowAdd","Receipts","receiptEndpoint","gr","Zb","dH","yH","oC","LocalCurrency","TotalLocal","TotalForeign","AccountPayment","ClosingSumLocal","ClosingSumForeign","CustomerTitleCode","GetFullReceipt","PaidDocuments","ReceiptPaidDocuments","SBODocumentType","CashPayments","ReceiptPaymentMeans","WirePayments","CreditCardPayments","ChequePayments","gH","CH","iC","IsShortScreen","PaymentToAccountAmount","ReceiptSaved","ShoppingPaymentViewEntity","GetLedgersForPayment","Balance","OpenSum","AllLedgers","GetDraft","PaymentOnAccount","EnablePayment","ShoppingPaymentDocumentItemViews","DocEntry","SumApplied","SelectedLedgers","UpdateStateForPayments","AllowSelectorCallback","TimerId","UpdateShoppingPayment","Delay","kc","Ledgers","UpdateDraftShoppingPayment","PaymentDifference","SaveReceipt","dxCheckBox","off","bH","IH","_H","aC","TH","sC","wH","NH","lC","AH","VH","jH","FilterSuggestedPromotions","FeaturedPromotions","SuggestionType","RelevantPromotions","FH","UH","kH","KH","Promotion","IsUseFeaturedPromotionsHints","EffectCategories","QH","JH","ZH","eL","tL","oL","uC","GetSummary","ColumnsToSummarize","FillColumnsToSummarize","DocumentListParams","GetColumnSummaryByParams","Summaries","ColumnName","SummaryType","nL","sL","lL","mL","pC","SelectedLedgersIDs","setValue","OnTotalCellChange","OnSelectedRowsChange","dL","dC","gL","hL","vL","fC","CustomerDetailsRoute","pageDisplayMode","InitTotalBalance","IsOpen","LedgerFilterAction","FromDate","UntilDate","ShowTitleInToolbar","CustomerTitle","DialogPrint","ledgerEndpoint","GetPdf","GetBalance","BalanceView","RefDateFrom","RefDateUntil","HasComplexFilter","ComplexFilter","uo","yL","xL","SL","hC","bL","CL","DL","vC","AllowEditCustomer","IsAllowCustomerEditing","OnAdd","OnUpdate","OL","RL","xC","OnEditAddress","EL","LL","SC","OnEditContact","HL","GL","bC","BL","zL","CC","WL","qL","IC","QL","OC","ZL","wC","ej","rj","PC","oj","sj","aj","AC","uj","MC","GetData","TopFrequestItems","RecentOrders","ExternalQueries","IsShowTopQuantityItems","IsShowTopFrequentItems","GetTopFrequestItems","IsShowRecentDocuments","GetRecentDocuments","GetExternalQueries","DataSource","IsMultiSelection","OnCompleted","HandleShowExternalQuery","ShowList","cj","pj","dj","HC","mj","fj","vj","FC","customersList","searchValue","yj","Ij","VC","isNaN","SaveBankDetails","Cj","wj","GC","_document","NumbersType","DocumentItems","FilteredNumbers","SelectItemCode","Dj","Nj","UC","IsSortDescending","Sort","SortIndex","list","selectedItems","SelectedNumbers","SerialNum","InitSortContextMenu","sortByContextMenu","SearchNumber","Aj","Barcode","SortByItems","Rj","Fj","jj","Bj","Vj","kj","kC","ResetValidationGroup","InitMaxQuantity","selectItemNumberDialog","Uj","AddItemToList","ShowNumberAlreadyAddedMessage","AddToList","reset","IsNumberInList","ShowNumberIsNotIncludedMessage","messageBoxDialog","Width","Gj","Qj","Kj","Xj","WC","InStock","PendingSalesOrders","PendingPurchaseOrders","qj","e1","zC","FormatQuantity","t1","a1","$C","IsRequired","ValueFieldName","i1","p1","KC","InitDefaultValues","GetItemKitItems","KitItems","SelectedKitTypeText","u1","h1","DefineInitialButtonState","ToggleButtonCaption","ToggleButtonText","g1","S1","OnDocumentSelection","b1","I1","_1","Wc","D1","w1","Admins","Qy","T1","E1","R1","M1","OnManageCredentials","GetLinkParams","CredentialID","ReturnUrl","H1","V1","XC","IsCurrentUserAdmin","impersonateSelectorContainer","nativeElement","toggle","ImpersonateSelectionDropdownVisible","F1","k1","YC","U1","allowedCredentialTypes","isRouteAllowedForCurrentUser","appConfigService","AppConfig","OnGetDefaultRouteParams","uiService","url","navigator","Route","JC","tI","W1","Q1","eI","K1","J1","nI","Z1","rF","oI","GetDocumentTypeString","JournalEntryID","oF","cF","rI","lF","mF","AmountsExpanded","OnComplete","$c","fF","Qo","zc","canActivate","hF","xF","aI","vF","IF","_F","PF","sI","OnTotalChange","Ledger","IsSelected","TF","MF","lI","paymentAmountDialog","OnEditableTotalChange","OnSelectionChange","NF","VF","FF","GF","cI","GetDocumentTypeTranslation","BF","uI","qC","QC","A1","M_","P_","W_","V_","pa","Eu","hp","yp","Ma","vu","Uo","ea","mu","gC","yC","_a","xa","Iu","Fu","ga","op","Pp","_d","wd","rL","Rd","ps","Bd","ZC","hs","r4","Zr","vs","Ss","ti","gm","QI","gf","cl","bi","Rs","ri","As","js","Fm","tl","nl","yi","mf","Ii","dl","Hf","Di","yl","zf","Cl","xl","nh","DC","_C","$L","TC","lj","EC","Dl","Pi","Pl","Rl","Ri","wh","Ni","Fl","Bl","Vh","Wl","Kl","Yh","qi","Xl","sg","Vi","tc","ic","qg","pc","zg","ey","zi","ly","bc","Ki","Oc","wc","cc","u","$n","C","Sv","CI","Iv","PI","Dv","Tv","VI","Rv","Ib","q4","Sb","Nv","I_","X_","XN","zN","oO","lO","mO","vO","IO","TO","NO","FO","kO","QO","tD","ex","yD","CD","cC","qH","wD","AD","jD","UD","KD","ZD","ow","lw","Sx","Rx","Ex","tT","iT","UL","wL","jC","LC","uT","bP","JA","hT","y1","ST","PT","MT","WT","VT","qT","tP","iP","uP","hP","AL","jL","DP","MP","Zx","Xx","WP","oS","aE","dE","vE","_E","cS","NE","VE","UE","fS","dS","e0","vS","SS","h0","S0","O0","wS","ES","B0","J0","Q0","s1","pR","gR","BN","Sw","bR","DR","WH","B1","BS","US","WS","$S","qS","lN","Rb","Wy","Lb","mA","xA","DA","YR","d1","oA","lA","Yj","n1","rb","Jn","c4","f4","mb","P4","WA","B4","bN","Sd","DN","RN","Wj","Mj","Ub","Vb","sM","SM","_M","PM","KM","kM","VM","HM","Ky","rC","nC","PH","pH","Jp","MH","Tj","cL","fL","xj","BC","C1","q1","tF","iF","uF","iI","SF","OF","EF","HF","UF","lo","za","ka","Ga","Up","Ba","kd","Dy","qb","Ot","Vy","Hd","path","outlet","canDeactivate","IsExternal","se","ve","pe","IsEnableMyDetails","Ro","yr","vr","pI","Qc","IsEnableTermsOfUseMenu","dI","IsEnableExternalLinks","Kc","Xy","GetListByCustomerOption","mI","Icon","GetDefaultRouteParams","DimensionValues","Countries","Banks","Currencies","qy","showRefreshMessage","orientation","RA","Initialize","UnsubscribeAll","ReloadMenuItems","OnGetGlobalDataSources","SetDataSources","TermsAccepted","open","header","width","styleClass","contentStyle","overflow","baseZIndex","onClose","Clear","kF","Gn","WF","et","AppConfigService","getModuleNameByInstance","StateType","FocusOnMe_V","FocusOnMe_C","Sections_V","Sections_C","OnGetCustomComponentStateName","LoadState","OnInitState","DoValidatorReset","validationGroups","ChangeDetector","destroyed","Session","ResourcesService","LISTITEMX","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","focus","Sections","LockControls","ResetValidation","AcceptGridChanges","SystemOption","EntityService","SetLastSavedEntity","status","brokenRules","validator","UserInfo","registeredSubscriptions","registeredInitComponentHandlers","GetRowCount","_disposed","GetGridHeightRelativeToPage","element","getBoundingClientRect","innerHeight","DisplayMode","offsetParent","offsetHeight","offsetTop","querySelector","bottom","getElementsByClassName","defaultView","getComputedStyle","getPropertyValue","match","totalCount","GetGridRowContextMenu","appendChild","elementAttr","class","CreateContextMenuComponent","target","_dataSource","InitDataSource","_showAddButton","_gridToolbarComponent","ShowAddButton","_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","OnGetEndpoint","OnEntityValidate","EntityValidations","toPromise","all","NotifyEntityLoaded","OnEntityDeleted","OnEntityPrepareForSave","ValidateEntity","OnEntityConfirmSave","OnDoSave","DeleteEntity","Delete","ReflectEntityDeleted","OnEntityNew","SubscribeOnEntityChanges","OnEntityDuplicated","OnSetDefaults","GetEntityObjectName","OnEntityInitObjectName","GetDefaultEntityObjectName","TargetDocEntry","IsValidEntity","GetCurrentRouteWithoutParams","GetHistory","_fieldsCount","_fieldsNames","GetEditorControl","ShowAsWindowOnMobile","BindHandler","_showAsWindowOnMobile","OnShowAsWindowOnMobile","OnIsDirtyDisabled","_isDirtyEntity","_isDirtyCustom","IsRunCycle","pageHistory$Subscription","PageHistory$","Component","GetTitle","UpdateHistoryItem","onFilterPanel$Subscription","OnApplyFilter","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","OnGetToolbarSettings","Subtitle","GetSubtitle","SetHistoryItemTitle","ShowMenuButton","ShowBreadcrumb","IsShowAsFullScreen","HistoryLength","HasHistoryForWindow","IsAllowNotifications","_showDialogAsBottomSheet","m_DialogCompletedHandler","m_DialogCanceledHandler","InitDialog","ShowDialog","HideDialog","OnClose","CloseWindow","GetLastPageBodyElement","height","SetPagePreviewState","OnGetHistoryCustom","OnGetHistoryInternal","decorators","IsRaw","m_store","loadMode","ImplementLoad","onLoaded","byKey","ImplementByKey","customLoadAction","ShapeResponse","ActionName","customGetAction","ImplementTotalCount","m_DataSource","store","Store","pageSize","isLoaded","m_DataStore","IsLoaded","paginate","reload","GetByValue","update","ImplementUpdate","ImplementRemove","insert","ImplementInsert","__rawData","Search","SearchFields","searchExpr","desc","DistinctField","skip","take","DLOSearch","DLOSearchFields","DLOSort","DLOIsSortDescending","DLOSkip","DLOTake","DLOComplexFilter","DLODistinctField","EntryIDs","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","onExporting","selectedRowsOnly","dataType","numFmt","alignment","endUpdate","texts","exportTo","IsRowDeletable","IsNewRowCreatable","addRow","catch","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","endsWith","columnCount","formItem","InitGridGeneral","InitGridEditable","InitGridReport","InitGridLines","allowColumnReordering","allowColumnResizing","stateStoring","subscribtions","onInitialized","onRowClick","observed","focusedRowEnabled","SetColumnCaption","CurrentEntityTypeName","caption","_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","_Component","InitExtender","_Mode","_AllowCustomization","_AllowAdvancedFilters","_Name","InitGrid","OnGridClick","DestroyGrid","vcRef","_data","componentView","UserInfos","Components","Endpoints","Services","useClass","useValue","_m4uConfig","projects","moduleName","build","builds","major","minor","loadM4UConfig","Resources","_resources","CustomResources","_customResources","_appConfig","h","appConfig","ProjectName","loadResources","mergeConfigs","OnGetHomePagePath","RoutesWithEmptyLayout","RoutesAnonymous","RoutesProtected","IsHomePage","EntryComponents","getRoutes","SupportLegacyDisplaySizes","OnInitApplicationAsync","OnLogoutApplicationAsync","OnGetAppLoginExtensionLinks","setMenuModuleName","OnGetMenu","OnGetNavbarItems","GetLists","GetInjectableComponentOptions","OnLoginPage","menu","values","cordova","SourceCurrency","DestCurrency","DataSourceName","MFAMethod","DeliveryOptions","credentialID","_notificationReadSubject","ignoreLoadingBar","set","notificationID","MID","CreateBottomSheetInstance","ContentPortal","ResolveContent","Class","ContentParams","ShowBottomSheet","OnCanceled","ListParams","MenuItems","componentFactoryResolver","ViewContainerRef","IsDirty","resourceService","OpenMessageBox","sysEvents","CloseMessageBoxSubject","GetComponentCustomizations","GetSeparatedGridCustomizations","HideGridColumns","IsNeedToHideElement","ComponentsCustomizations","FilterCustomizations","Columns","GetRelevantCustomizations","Logic","DefaultValue","HideValues","IsHide","ReadOnly","ValidationFunction","validationCallback","OnFieldValidation","rule","FieldsCustomizations","User","CurrentUserID","Hide","HideOnDesktop","HideOnMobile","columnResizingMode","columnAutoWidth","dateSerializationFormat","showBorders","showRowLines","renderAsync","savingTimeout","customSave","selectionFilter","selectedRowKeys","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","offset","isExpanded","onRowExpanded","expandRow","collapsedItems","getDataSource","customizeColumns","allowSorting","allowFiltering","valueExpr","displayExpr","dataSource","minWidth","allowGrouping","title","onContextMenuPreparing","allowHiding","onItemClick","groupCellTemplate","showColumnChooser","clearFilter","getController","showHeaderFilterMenu","SetFloatingButtonsDefault","valueChangeEvent","inputAttr","autocomplete","onFocusIn","OnFocusIn","onKeyDown","OnChangeInputDirection","validationMessageMode","stylingMode","addEventListener","autoResizeEnabled","step","code","stopImmediatePropagation","pickerType","displayFormat","useMaskBehavior","min","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","getHours","getMinutes","isDesktop","showAsBottomSheet","ValueExpr","DisplayExpr","IsSearchEnabled","SearchExpr","_saveValueChangeEvent","_isEnabled","_field","_savedEntity","Field","Deactivate","Yes","Cancel","Done","Select","Back","systemOptionsService","getSystemOption","getSystemOptionAsBoolean","m_CompanyInfoDict","m_bIsFrameworkInitialized","resources","ResponseCode","createEvent","initEvent","dispatchEvent","systemEndpoint","GetCompanyInfo","GetSystemOptions","GetFirstModuleName","ThousandsSeparator","InitCompanyInfoDictinary","setOptions","InitLanguage","InitializeDevExpress","InitializeInjectableComponentsOptions","devExpress","defaultLanguage","rtlEnabled","forceIsoDateParsing","InitDictionaries","NumberGeneral","Params","sysEventsService","InitializeFramework","getParams","GetSessionID","SecureKey","SecureKeyType","NavigateByUrl","goToLoginPage","RegExp","LoginEndpoint","Login","CheckResult","OnLoginSuccess","CheckResultMessage","OnLoginBySessionFailed","IsFrameworkInitialized","SessionService","SaveSessionCredentials","ClearSessionCredentials","SetSession","routeHistoryService","StartSaveHistory","Logout","GetUrl","pathname","activatedRoute","snapshot","queryParams","getParamValue","GetQueryParamsInternal","GetQueryParamsWithoutPrefixes","GetQueryParamsPrefix","startsWith","params","deploymentApplicationFolder","RefreshExpiredSessionTimeout","GetUrlTree","router","navigateByUrl","GetCleanRoutes","config","ShowAsWindow","getParam","shift","GetPagesPrefix","routerState","root","firstChild","createUrlTree","outlets","primary","children","serializeUrl","toISOString","test","parseInt","_notificationUnreadSubject","_notificationsSubject","LoadPushMessagesUnread","_notificationReadSubscription","pushMessageEndpoint","NotificationRead$","_notificationUnReadSubscription","GetPushMessagesUnread","Item1","Item2","_timerId","clearInterval","Pages","login","logout","credentials_activity_status","notificationshistory","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","NotificationServerComponent","NotificationServerListComponent","NotificationTemplateListComponent","NotificationTemplateComponent","HtmlBoxDialogComponent","NotificationTestDialogComponent","NotificationPreviewDialogComponent","SystemOptionsComponent","AddSystemOptionDialogComponent","BarcodeBoxDialogComponent","CredentialLoginHistoryComponent","RequestHistoryListComponent","RequestHistoryComponent","RemoteRequestHistoryListComponent","RemoteRequestHistoryComponent","WelcomeUserDialogComponent","HistoryViewComponent","SystemCredentialsComponent","SystemCredentialsCreationComponent","WelcomeMessageConfigDialogComponent","DataViewListComponent","Lists","Languages","NotificationDeliveryOptions","ID","UserCreationOptions","WelcomeDeliveryOptions","NotificationStatuses","NotificationPredefinedSmtpServers","SMTPServer","SMTPPort","SMTPUseSSL","NotificationPredefinedSmsServers","SMSEndpoint","SMSToken","SMSEndPointIsInforU","MFAMethods","ExportMenuItems","PopupShowStatuses","InfoUTypes","SystemOptions","DataType","SectionName","UserLoginStatuses","IsSuccessStatuses","HistoryEventTypesEnum","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","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","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","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","msgRouteNotFound","btnReload","lblHideColumn","lblShowHiddenColumns","lblName","lblDescription","msgLoading","lblSentDate","lblSentBy","lblEntryID","lblFromAddress","lblFromDisplayAddress","lblAddress","lblSubject","lblMailBody","lblDeliveryOption","lblSendNotificationBy","lblUsernameCreationOption","lblStatus","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","titleNotificationServerList","titleNotificationTemplateList","lblPoweredBy","titleChooseOption","titleWebAPIAllowedIPs","lblIpAddress","lblLoginDate","lblPrint","lblDateFrom","lblDateTo","lblDate","msgCouldNotStartVideoError","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","lblNotAssigned","m_Dictionaries","m_CustomDictionaries","m_Lists","OverrideModuleName","LoadFieldCustomizations","LoadComponentCustomizations","GetEntitiesResources","EnsureInitialized","getResourceValue","StringMap","Old","New","tryGetValueFromDictionaries","GetValueFromPath","sortListfunc","_pageHistorySubject","_historyItemsSubject","navigationId","_history","OnNavigateDefault","onPopState","OnBrowserButtonClick","events","GetCurrentRouteWithUrl","getCurrentNavigation","IsWindow","SaveHistoryItem","ShareHistory","frameworkService","GoBackFromWindow","NavigateItem","navigatorService","ClearPagesState","ClearPageState","route","onScreenSizeChanged","showMessageHandler","_currentOrientation","breakpointObserver","observe","processRefreshMessage","_currentScreenSize","isMatched","deviceType","matchMedia","matches","sessionStateChangedSubject","m_Session","DisplayUserName","DisplayUserDescription","m_UserInfoDict","m_DataSources","initAppSubscription","notificationService","Started","Ended","logoutAppSubscription","Stop","sessionExpiredTimeoutHandler","sessionAlmostExpiredTimeoutHandler","AlmostExpired","AutoEndSession","Expired","_sidebarSubject","_sidebars","CreateSidebarInstance","SidebarComponentOptions","SidebarPinned","Success","_onEntitySavedSubject","_toolbarReloadSubject","_selectedRouteChangedSubject","_reloadMenuItemsSubject","_menuPositonSubject","_filterPanelSubject","_pageSidePanelStateSubject","_pagePreviewStateSubject","_openMessageBoxSubject","_closeMessageBoxSubject","_breadcrumbSubject","_defaultNavigationSubject","_loadPanelSubject","_loadingSubject","fileName","systemOptions","Key","IsSupportedPasswordChange","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","port","protocol","hostname","prototype","ToDate","IsToday","valueOf","Time","GetDateApproximateInternal","IsSameDate","IsHasTime","TimeFormatShort","DateFormatShort","floor","setDate","MapObject","GetNewInstance","CloneObject","charCodeAt","imul","padStart","Uint16Array","Uint8Array","byteLength","String","fromCharCode","buffer","TextEncoder","encode","fromCodePoint","ConvertToBase64","exec","FileReader","onloadend","result","Buffer","File","readAsArrayBuffer","ConvertToBlob","URL","createObjectURL","Extension","DownloadFile","revokeObjectURL","IsObject","StringifyObject","readAsDataURL","XMLHttpRequest","overrideMimeType","send","responseText","deep","dateParser","Proxy","IsArray","DeepProxy","deleteProperty","SearchTree","getResponseHeader","readyState","_reISO","_reMsAjax","FilterTree","declarations","exports","production","version","s","CreateSections","OptionName","CurrentOption","InOut","GetElementID","scrollIntoView","behavior","block","getElementsByTagName","attributes","DeleteOption","SectionInfo","SectionIndex","IsGeneral","St","bt","animations","ModulesDataSource","IsServer","IsClient","DefaultIsClient","InitTabs","InitModulesDataSource","InitSystemOptions","addGeneralOptionDialog","AddGeneralOption","AddCustomOption","systemOptionsList","ShowOption","GeneralOptions","ValueBoolean","ValueNumber","CustomOptions","systemOptionsEndpoint","SaveOptions","IsDeleted","GetOptions","GeneralOptionSettings","CustomSections","IsShowPasswordTooltip","PasswordComplexityLen","PasswordComplexityMinChars","PasswordComplexityMinDigits","TextBox","OnShowPasswordTooltip","expandedCard","IsOpened","childElementCount","ShowAsUsualOnMobile","ShowContextMenu","opacity","Group","IsGridEditable","WindowPath","WindowParams","handler","fileLoader","files","ReturnDataType","ResetInput","readAsText","_mediaItems","SetPreview","StartVideo","IsCameraStarted","StopVideo","VideoStream","PreviewMediaItem","IsPreview","video","pause","srcObject","getVideoTracks","stop","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","AddPhoto","GetNewMediaItemEntryID","GetVideoCover","Ny","ImageBytes","canvas","getContext","drawImage","toDataURL","_imageMimeType","ImageQuality","ondataavailable","start","onstop","onerror","bypassSecurityTrustUrl","setAttribute","currentTime","videoWidth","videoHeight","toBlob","GetClientBodyElementRect","Zc","iu","SetClientSizes","ClientWidth","GetCanvasWidth","ClientHeight","au","ImageSource","ShowLargeWindow","WindowHeight","WindowWidth","cu","fps","qrbox","OnTextDecoded","OnResultDecoded","IsInititialized","DeviceIDs","CurrentDeviceIndex","StartHtmlQrCode","StopHtml5QrCode","html5QrCode","isScanning","deviceId","Config","QrCodeSuccessCallback","ReaderElement","Reverse","hasView","viewContainer","createEmbeddedView","templateRef","elRef","onShow","_contextMenus","onHide","xe","maxZoomLevel","minZoomLevel","subscribtion","inputmode","lastIndexOf","ignoreEmptyValue","Lo","_Currency","IsHideLabel","hu","ca","ReverseValue","la","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","Au","calculateFilterExpression","getCalculateFilterExpression","CustomFilterType","RelatedToAtLeastOneFilterExpressionBuilder","commands","LinkQueryParams","Kt","pure","warn","DateFormatCompact","DateFormatFull","getDay","bypassSecurityTrustStyle","bypassSecurityTrustScript","Enabled","_Enabled","m_bInitComplete","Init","IsColumn","InitColumnRules","InitNormalRules","DoNotShowRequiredMsg","RequiredMessage","_getOption","_setOption","Dn","wn","eventsQueue","eventUnsubscribeFunction","renderer","listen","elementRef","IgnoreNavigationKeys","ignoreKeyCodes","OnEvent","subscription","DebounceTime","ThrottledEvent","MessageCode","applicationPath","gn","Xe","ro","IsSupported","swPush","notificationClicks","OnNotificationClicked","notification","action","NavigateCallback","Notification","permission","requestPermission","serviceWorker","getRegistration","showNotification","deviceDetector","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","bottomSheetContainerRef","getSelectedMenuItem","menuItems","ChangeSelectedRoute","shouldGetInitialURL","initialURL","GetCurrentUrl","Gr","handleNavigationEnd","Fr","OpenMessageBoxSubject","OpenMessageBoxDialog","MenuOpened","_languageSubject","qn","SwitchLanguage","OnOpenContactUs","OnChangePassword","OnLogout","_menuOpened","MenuInstance","ExpandParentItems","collapseAll","_contentReadyAction","_initContentReadyAction","InitMenuItems","InitializeItems","ModulesVersion","getModulesVersion","UserMenuItems","GetUserMenuItems","SelectedRoute","_selectedItem","TargetComponentType","IsVisibleButton","ComponentType","BaseAction","containerViewChild","InitializeItem","GetMenuTranslation","InitMenuItem","permissionFunction","isVisibleOnMobile","selected","GetParentMenus","parent","pathParams","MenuTooltip","Target","Visible","GetMenuIconElement","messageBox","languageService","SetLanguage","loginEndpoint","ChangeLanguage","nv","LoadPushMessages","_sidebarStateSubscription","IsLoadAllNotifications","PushMessages","GetPushMessages","Repaint","OnAllNotificationsLoad","viewModesMenu","Breadcrumb","IsBreadcrumbVisible","InitInjectedComponents","TargetModuleName","TargetComponentName","TargetAppName","OnInitInjectableComponent","ShowInToolbarOnMobile","ButtonIcon","ButtonText","Hint","Click","ToolbarButtons","ButtonSettings","IsStandardApplicationMode","OnTitleClick","IsShowViewModesButton","OnShowViewModes","callback","OnSubmit","Stage","Language$","ReloadApplication","ShowPasswordRecoveryLink","IsSupportedLoginByOTP","LoadExtension","IsSaveCredentials","OnAfterInit","MFACodeSent","LoginExtensionLinks","DeliveryOption","DoLogout","ClearSidebars","Wo","qp","CredentialType","rv","credentialActivityGrid","credentialActivityEndpoint","ListCredentialTypes","CredentialsInfo","ListActivity","ed","Templates","CurrentDeliveryOption","emailGrid","smsGrid","pushMessageGrid","whatsAppGrid","notificationEndpoint","GetNotificationsTemplates","GetRelevantDeliveryOptions","RelevantNotificationTypes","IsDeliveryOptionAvailable","IsTabsVisible","IsNoData","SearchAddress","SearchUntilDate","SearchFromDate","Template","SearchTemplate","Notifications","GetNotificationsReport","GetGridExtender","Qr","lv","pd","av","scrollHeight","CreatedDate","HistoryChanges","getChangeLabel","GetEntityChangeLabel","HistoryLineChanges","GetLineChangeLabel","EntityLineID","sv","imports","md","OldPassword","NewPassword","NewPassword1","ChangePassword","NewPassword2","VerifyPasswordComplexity","AdditionalTitle","MFACode","ChangePasswordExpired","GoToLogin","Cd","RecoverPassword","CheckUserName","UserNameCheckResponse","IsExists","HasEmail","HasPhone","Token","VerifyRecoveryToken","ChangePasswordByToken","LoadCredentials","LoadCredentialsInfo","CredentialInfo","Credential","IsPendingWelcome","IsRestrictByIP","IsExcludeFromMFA","IsLockedOut","IsSupportedUserWelcome","WebAPIAllowedIPs","OnGenerateRandomPassword","GetExternalInfo","OnInitMFAMethodsList","GenerateRandomPassword","SaveCredentials","ReturnUrlParams","onValueChanged","IPRangeEnd","IPRangeStart","UnlockCredentials","welcomeUserDialog","MFAMethodList","captchaKey","OnResolved","cs","Files","ExtendFileInfo","AllowDownload","DownloadItem","NewFile","FilesChanged","fileBoxDialog","OnChangeUpload","AllowOnlyImages","IsImage","MaxFileSize","Size","IconStyle","IsDisplayedAsImage","NotImageErrorErrorMessage","MaxFileSizeErrorMessage","fileSizePipe","transform","PreventDefault","DragOverCount","dataTransfer","photoBoxDialog","ConvertBase64ToImageJpeg","GetIconStyle","GetStringDateNow","FormatDatePart","imageDialog","DeleteItem","MinSymbols","Wd","loadComponents","service","GetComponents","Destination","inputs","Qd","Jd","IsSupportedLoginByPassword","IsRequireTaxNumberForOTP","OnSendOtp","OnLogin","SendOtp","LoginExtensionLinks$","Zd","NotificationServers","notificationServerEndpoint","nm","dialog","NotificationServerID","FromAddress","TestNotificationServer","lm","cm","LoadNotificationServers","IsUserCustomTemplateOriginal","IsUserCustomTemplate","previewDialog","htmlBody","phone","UpdateIsUserCustomTemplate","dm","inputBoxDialog","StoreMID","Vr","xm","SelectOptions","GetSelectOptions","RadioGroupItems","GetRadioGroupItems","ButtonGroupOptions","GetButtonGroupOptions","SelectGroupedOptions","GetSelectGroupOptions","SelectedDataItems","group","Cm","Types","Styles","WithTitleAndIcon","WithCustomIcon","SelectedType","SelectedStyle","IsCollapsable","WithShadow","Om","wm","Fs","GetPageTabs","IsShowOnlyTabs","IsShowOnlyAccordion","IsShowStepNumbers","IsShowCustomButtonText","IsShowCustomButtonIcon","cv","BrandID","ModelID","Models","Colors","GetColors","AttachColumnEditHandler","unshift","TotalSum","Phones","IsAvailable","CalculateTotalSum","ListItems","GetListItems","ContextMenu","bottomListSubscription","Rm","back","Vm","GetSelectBoxDialogOptions","simpleDialog","htmlBoxDialog","imageBoxDialog","FieldLabel","selectBoxDialog","signBoxDialog","Ks","sa","UserLogins","CurrentCredentialID","ListLogins","ReadQuery","webAPICredentialEndpoint","sf","pv","InitControllers","InitActions","InitModules","Module","Controller","Requests","webAPIRequestEndpoint","GetPossibleControllers","Controllers","GetPossibleActions","Actions","GetPossibleModules","Modules","OnCredentialChanged","hi","ol","InitBody","InitResponse","InitQueryString","clipboard","writeText","Body","Response","QueryString","xf","ShowUserCreationOption","NotificationDeliveryOption","LastUseDate","OnSelectionChanged","getSelectedRowsData","GetParamsFromQuery","CredentialTypes","systemCredentialEndpoint","GetAdditionalInfoMetadata","AdditionalInfoMetadata","SystemCredentials","ListSystemCredentials","SelectedRows","LanguageID","CredentialsForCreation","SendWelcomeUserMessage","vi","ur","ListCredentialsForCreations","UserCreationOptionID","UserCreationOption","CreateCredentials","Pf","dv","dataEditorEndpoint","ListViews","Views","CheckPerformance","CheckValidity","Mf","Lf","InitMethods","InitStatuses","Statuses","remoteRequestEndpoint","ControllerList","ActionsList","GetPossibleMethods","MethodsList","GetPossibleStatuses","StatusesList","ws","Pm","Aa","Ka","es","rs","ss","sd","al","dd","gl","redirectTo","pathMatch","Bf","onSameUrlNavigation","relativeLinkResolution","StackTrace","errorMessage","Device","DeviceType","Browser","BrowserVersion","browser_version","OSVersion","os_version","history","replaceState","kf","GetCustomRouteData","_selectedIndex","SelectedIndexChange","_visible","SetVisibility","tabs","accordion","IsInitialized","updateDimensions","Instance","_currentItemIndex","SelectedIndex","OnCustomButtonClicked","Jf","IsMultiLanguage","isMultiLanguage","ScreenMode","IsScreenModeVisible","_id","IsRound","IsHideTextOnMobile","btn","content","OnGoToLoginHistory","OnGoToRequestsHistory","SetElementStyles","setProperty","ph","sessionState$Subscription","ShowExpiredDialog","Buttons","ButtonID","KeepAlive","isMessageDialogInDOM","fh","LabelLines","InitTooltipContainer","addClass","tooltipEl","IconClass","IconColor","setStyle","_viewContainerRef","_componentFactoryResolver","SetVisible","currentValue","_tooltipComponent","hostView","detach","Nl","textBox","Th","Ll","_subscription","NotificationUnread$","UnreadCount","Rh","Nh","Lh","Bh","_notification","NotificationButtons","notificationConfigurationService","GetButtons","IsRead","ReadPushNotification","OnNotificationRead","Ul","notificationsSubscription","Notifications$","ConvertToMessage","ShowToasts","life","closable","messageService","addAll","toast","messages","onMessageClose","zl","Zl","ec","HtmlBody","_navbarItems$","NavbarItems","GetItemTranslation","GetItemVisible","Cg","VisibleChange","FilterPanelAction","FilterTemplateRef","GetGridExternder","ExportExcel","print","ShowContextMenuAsUsualOnMobile","insertBefore","historyViewDialog","GetPages","HistoryItems$","History","SetBreadCrumbVisible","NavigateHistoryItem","gc","ShowLoadPanel","SetStyles","OnDocumentLoaded","iframe","contentDocument","createTextNode","head","ny","WelcomeUser","iy","cy","fy","_onClickObserved","hy","Sy","Iy","Jy","Ld","zd","Hu","Lu","Ea","Ru","xu","Su","_u","Ou","Zy","Oa","Da","Og","Bg","oh","Pg","tg","og","qd","Eg","wy","Ty","tv","qf","provide","vp","multi","useFactory","Yr","yh","vh","Ih","apiKey","googleMapsApiKey","language","region","isRegisterServiceWorker","isDemoEnabled","entryComponents","defaultLocale","latencyThreshold","reCAPTCHAv3Key","bootstrap","schemas","bootstrapModule","CompleteSelection","selectedItemKeys","FilteredDataSource","pageLayout","$implicit","OKButtonText","CancelButtonText","ExtraButtons","OKButtonTabIndex","TabIndex","pageButtons","okBtnRef","CloseButtonHidden","DoPrint","OnCustomPrint","observers","pdfViewer","contentWindow","IsDrawing","pad","isEmpty","_clientHeight","ResizePad","_clientWidth","LoadSignature","OnTouchMove","passive","Options","penColor","maxWidth","MaxSignatureHeight","_areaAroundSize","fromDataURL","ratio","CustomCloseAction","OnCancel","CloseBottomSheet","ValidationGroup","OnOK","OnOkValidationFailed","IsPageShowAsFullScreen","AutoCloseBottomSheet","changeDetection","_Label","SetPlaceHolder","m_bEventAttached","IsFocused","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","OnStateChanged"],"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./projects/dino/components/contact-person/contact-dialog/contact-dialog.component.html","./projects/dino/_proxy/enums.ts","./projects/dino/_proxy/entities/contactperson.entity.ts","./projects/dino/_proxy/endpoints/contactperson.endpoint.ts","./projects/dino/services/ui-component.service.ts","./projects/dino/components/image-badge/image-badge.component.ts","./projects/dino/components/contact-person/contact-dialog/contact-dialog.component.ts","./projects/dino/_proxy/endpoints/customeroption.endpoint.ts","./projects/dino/services/customer-option.service.ts","./projects/dino/classes/base-option-state.ts","./projects/dino/components/contact-person/contact-person.component.ts","./projects/dino/components/contact-person/contact-person.component.html","./projects/dino/_proxy/endpoints/customeraddress.endpoint.ts","./projects/dino/_proxy/entities/customeraddress.entity.ts","./projects/dino/_proxy/endpoints/state.endpoint.ts","./projects/dino/components/customer-address/address-dialog/address-dialog.component.ts","./projects/dino/components/customer-address/address-dialog/address-dialog.component.html","./projects/dino/_proxy/endpoints/salesperson.endpoint.ts","./projects/dino/_proxy/endpoints/customer.endpoint.ts","./projects/dino/services/customer.service.ts","./projects/dino/components/customer-address/customer-address.component.ts","./projects/dino/components/customer-address/customer-address.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/item-option.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/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/_proxy/endpoints/externallink.endpoint.ts","./projects/dino/pages/external-link/external-link.component.ts","./projects/dino/pages/external-link/external-link.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/classes/base-customer-page-component.ts","./projects/dino/pages/home/home.component.ts","./projects/dino/pages/home/home.component.html","./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/_proxy/endpoints/itemoption.endpoint.ts","./projects/dino/services/items.service.ts","./projects/dino/classes/base-customer-component.ts","./projects/dino/_proxy/endpoints/shoppingcart.endpoint.ts","./projects/dino/services/document.service.ts","./projects/dino/services/shopping-cart.service.ts","./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/classes/helper.ts","./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/_proxy/endpoints/wishlist.endpoint.ts","./projects/dino/_proxy/endpoints/items.endpoint.ts","./projects/dino/_proxy/endpoints/filter.endpoint.ts","./projects/dino/services/items-filter.service.ts","./projects/dino/pages/wishlist/wishlist.component.ts","./projects/dino/pages/wishlist/wishlist.component.html","./projects/dino/pipes/format-price-with-currency.pipe.ts","./projects/dino/_proxy/endpoints/category.endpoint.ts","./projects/dino/_proxy/entities/category.entity.ts","./projects/dino/_proxy/views/category.view.ts","./projects/dino/classes/items-filter.ts","./projects/dino/components/share-document/share-document.component.ts","./projects/dino/services/categories.service.ts","./projects/dino/pipes/lookup-category.pipe.ts","./projects/dino/_proxy/endpoints/assortment.endpoint.ts","./projects/dino/_proxy/endpoints/brand.endpoint.ts","./projects/dino/_proxy/endpoints/country.endpoint.ts","./projects/dino/_proxy/endpoints/filterattribute.endpoint.ts","./projects/dino/_proxy/endpoints/image.endpoint.ts","./projects/dino/_proxy/endpoints/itemattributes.endpoint.ts","./projects/dino/_proxy/endpoints/ledger.endpoint.ts","./projects/dino/_proxy/endpoints/manufacturer.endpoint.ts","./projects/dino/_proxy/endpoints/vendor.endpoint.ts","./projects/dino/_proxy/endpoints/document.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/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/services/sidebars.service.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/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/components/home-banner/home-banner.component.ts","./projects/dino/pages/home/components/home-banner/home-banner.component.html","./projects/dino/pages/guest-access/guest-access.component.ts","./projects/dino/pages/guest-access/guest-access.component.html","./projects/dino/components/number-iterator/number-iterator.component.ts","./projects/dino/components/number-iterator/number-iterator.component.html","./projects/dino/_proxy/endpoints/addon.endpoint.ts","./projects/dino/components/accordion/accordion.component.ts","./projects/dino/components/accordion/accordion.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/_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/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/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/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/contactussubject.endpoint.ts","./projects/dino/_proxy/endpoints/businessoption.endpoint.ts","./projects/dino/_proxy/endpoints/catalogueoption.endpoint.ts","./projects/dino/_proxy/entities/baseoption.entity.ts","./projects/dino/_proxy/entities/catalogueoption.entity.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option.component.ts","./projects/dino/pages/settings/options/catalogue-options/catalogue-option.component.html","./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/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/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/entities/documentoption.entity.ts","./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/businessoption.entity.ts","./projects/dino/_proxy/entities/notificationoption.entity.ts","./projects/dino/_proxy/entities/homepageoption.entity.ts","./projects/dino/_proxy/entities/customerdetailoption.entity.ts","./projects/dino/_proxy/entities/dashboardoption.entity.ts","./projects/dino/_proxy/entities/contactusoption.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/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/_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/contactusoption.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/customerdetailoption.endpoint.ts","./projects/dino/_proxy/endpoints/dashboardoption.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/pages/settings/options/filter-options/filter-option.component.ts","./projects/dino/pages/settings/options/filter-options/filter-option.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-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/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/endpoints/itemdisplaypopupoption.endpoint.ts","./projects/dino/_proxy/endpoints/itemdisplayelementoption.endpoint.ts","./projects/dino/_proxy/entities/itemdisplayelementoption.entity.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-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/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/entities/itemdisplaypopupoption.entity.ts","./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-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-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/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/_proxy/entities/itemoption.entity.ts","./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/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/_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/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/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/_proxy/endpoints/shipmentmethod.endpoint.ts","./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/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-grid/shipment-option-grid.component.ts","./projects/dino/pages/settings/options/shipment-options/shipment-option-grid/shipment-option-grid.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/homepage-options/homepage-option.component.ts","./projects/dino/pages/settings/options/homepage-options/homepage-option.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-grid/homepage-option-grid.component.ts","./projects/dino/pages/settings/options/homepage-options/homepage-option-grid/homepage-option-grid.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/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/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/_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/_proxy/entities/systemoption.entity.ts","./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/dimensionvalue.endpoint.ts","./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/_proxy/entities/dimensionconfiguration.entity.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration.component.ts","./projects/dino/pages/settings/options/dimension-configurations/dimension-configuration.component.html","./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/entities/filterattribute.entity.ts","./projects/dino/_proxy/entities/dimension.entity.ts","./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/addon.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/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/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/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/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-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-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/_proxy/endpoints/externalquery.endpoint.ts","./projects/dino/_proxy/entities/externalquery.entity.ts","./projects/dino/_proxy/views/externalquery.view.ts","./projects/dino/pages/settings/external-queries/external-query.component.ts","./projects/dino/pages/settings/external-queries/external-query.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/_proxy/endpoints/externalqueryfield.endpoint.ts","./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/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/_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/_proxy/endpoints/salespersonoption.endpoint.ts","./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/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/pages/credential-selector/component/credential-selector.component.ts","./projects/dino/pages/credential-selector/component/credential-selector.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/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/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/feature-options/feature-option.component.ts","./projects/dino/pages/settings/options/feature-options/feature-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/_proxy/entities/contactussubject.entity.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-subjects-grid/contact-us-subjects-grid.component.ts","./projects/dino/pages/settings/options/contact-us-options/contact-us-subjects-grid/contact-us-subjects-grid.component.html","./projects/dino/pages/product-catalogue2/product-catalogue2.component.ts","./projects/dino/pages/product-catalogue2/product-catalogue2.component.html","./projects/dino/pages/product-catalogue2/base/base-product-catalogue.ts","./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/display-options/display-options.component.ts","./projects/dino/pages/product-catalogue2/components/display-options/display-options.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/item-list/components/item-price2/item-price2.component.ts","./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/components/classification/classification.component.ts","./projects/dino/pages/product-catalogue2/components/classification/classification.component.html","./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/search-bar/search-bar.component.ts","./projects/dino/pages/product-catalogue2/components/search-bar/search-bar.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/category-selector/category-selector.component.ts","./projects/dino/pages/product-catalogue2/components/category-selector/category-selector.component.html","./projects/dino/pages/product-catalogue2/item-list/base/base-list-item.component.ts","./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/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/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/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-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-price2/item-price2.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-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/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-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-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-popup/item-popup.component.ts","./projects/dino/pages/product-catalogue2/item-popup/item-popup.component.html","./projects/dino/_proxy/views/itempricedetails.view.ts","./projects/dino/_proxy/entities/itemactionpermissions.entity.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/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/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-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-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-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/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/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/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/base/base-shopping-cart-state.ts","./projects/dino/pages/shopping-cart/base/coupon.helper.ts","./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/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/shopping-cart2.component.ts","./projects/dino/pages/shopping-cart/shopping-cart2.component.html","./projects/dino/_proxy/entities/signature.entity.ts","./projects/dino/_proxy/entities/shoppingpayment.entity.ts","./projects/dino/_proxy/entities/shoppingcart.entity.ts","./projects/dino/_proxy/views/shoppingcart.view.ts","./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/edit-summary/edit-summary.component.ts","./projects/dino/pages/checkout2/components/edit-summary/edit-summary.component.html","./projects/dino/pages/checkout2/base/base-checkout.ts","./projects/dino/pages/checkout2/mobile/mobile-checkout.component.ts","./projects/dino/pages/checkout2/mobile/mobile-checkout.component.html","./projects/dino/pages/checkout2/desktop/desktop-checkout.component.ts","./projects/dino/pages/checkout2/desktop/desktop-checkout.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/checkout-completed/checkout-completed.component.ts","./projects/dino/pages/checkout2/components/checkout-completed/checkout-completed.component.html","./projects/dino/pages/dashboard/components/dashboard-item/dashboard-item.component.ts","./projects/dino/pages/dashboard/components/dashboard-item/dashboard-item.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/compact-item/compact-item.component.ts","./projects/dino/pages/product-catalogue2/item-list/compact-item/compact-item.component.html","./projects/dino/_proxy/entities/itemgroup.entity.ts","./projects/dino/pages/product-catalogue2/base/base-list.ts","./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/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/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/group-options/group-options.component.ts","./projects/dino/pages/product-catalogue2/components/group-options/group-options.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/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/checkout2/components/complete-button/complete-button.component.ts","./projects/dino/pages/checkout2/components/complete-button/complete-button.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/_proxy/entities/order.entity.ts","./projects/dino/pages/dashboard/components/dashboard-orders-grid/dashboard-orders-grid.component.ts","./projects/dino/pages/dashboard/components/dashboard-orders-grid/dashboard-orders-grid.component.html","./projects/dino/pages/dashboard/components/dashboard-orders-list/dashboard-orders-list.component.ts","./projects/dino/pages/dashboard/components/dashboard-orders-list/dashboard-orders-list.component.html","./projects/dino/pages/checkout2/services/can-deactivate-checkout2.ts","./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/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/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/_proxy/endpoints/admindashboard.endpoint.ts","./projects/dino/pages/customers/components/external-query/external-query-popup.component.ts","./projects/dino/pages/customers/components/external-query/external-query-popup.component.html","./projects/dino/pages/admin-dashboard/admin-dashboard.component.ts","./projects/dino/pages/admin-dashboard/admin-dashboard.component.html","./projects/dino/pages/admin-dashboard/components/admin-dashboard-item/admin-dashboard-item.component.ts","./projects/dino/pages/admin-dashboard/components/admin-dashboard-item/admin-dashboard-item.component.html","./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/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/ledgers/total-balance/total-balance.component.ts","./projects/dino/pages/ledgers/total-balance/total-balance.component.html","./projects/dino/pages/ledgers/ledger-list/ledger-list.component.ts","./projects/dino/pages/ledgers/ledger-list/ledger-list.component.html","./projects/dino/directives/format-price-with-currency.directive.ts","./projects/dino/_proxy/endpoints/promotion.endpoint.ts","./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/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/_proxy/endpoints/giftcard.endpoint.ts","./projects/dino/_proxy/entities/giftcard.entity.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-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/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/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-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/_proxy/entities/salespersonoption.entity.ts","./projects/dino/_proxy/endpoints/customergroup.endpoint.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/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/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/components/coupons/coupons.component.ts","./projects/dino/components/coupons/coupons.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/_proxy/entities/customer.entity.ts","./projects/dino/pages/customers/customers-grid/customers-grid.component.ts","./projects/dino/pages/customers/customers-grid/customers-grid.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-document-type/select-document-type.component.ts","./projects/dino/pages/sales/components/select-document-type/select-document-type.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-list/components/item-edit/item-edit.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-edit/item-edit.component.html","./projects/dino/components/barcode/barcode.component.ts","./projects/dino/components/barcode/barcode.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/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-grid/document-option-grid.component.ts","./projects/dino/pages/settings/options/document-options/document-option-grid/document-option-grid.component.html","./projects/dino/_proxy/endpoints/vatgroup.endpoint.ts","./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/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/_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/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-list/components/item-actions/item-actions.component.ts","./projects/dino/pages/product-catalogue2/item-list/components/item-actions/item-actions.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/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/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-filter/document-filter.component.ts","./projects/dino/pages/documents/components/document-filter/document-filter.component.html","./projects/dino/pages/documents/documents.component.ts","./projects/dino/pages/documents/documents.component.html","./projects/dino/_proxy/endpoints/documentprocessing.endpoint.ts","./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/additional-status/additional-status.component.ts","./projects/dino/pages/documents/components/additional-status/additional-status.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-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/document/document.component.ts","./projects/dino/pages/documents/document/document.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/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/_proxy/entities/documentprocessing.entity.ts","./projects/dino/pages/document-processing/document-processing.component.ts","./projects/dino/pages/document-processing/document-processing.component.html","./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/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/customers/customers-list/customers-list.component.ts","./projects/dino/pages/customers/customers-list/customers-list.component.html","./projects/dino/pages/customers/customer-details/customer-details.component.html","./projects/dino/classes/base-customer-crud-page-component.ts","./projects/dino/pages/customers/base/base-customer-details.component.ts","./projects/dino/pages/customers/customer-details/customer-details-window.component.ts","./projects/dino/pages/customers/customer-details/customer-details-fullscreen.component.ts","./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/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/components/number-iterator3/number-iterator3.component.ts","./projects/dino/components/number-iterator3/number-iterator3.component.html","./projects/dino/pages/customers/customers.component.ts","./projects/dino/pages/customers/customers.component.html","./projects/dino/pages/product-catalogue2/fixed-catalogue/fixed-catalogue.component.ts","./projects/dino/pages/product-catalogue2/fixed-catalogue/fixed-catalogue.component.html","./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/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/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/_proxy/endpoints/shoppingpayment.endpoint.ts","./projects/dino/_proxy/views/shoppingpayment.view.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/payment.component.ts","./projects/dino/pages/payment/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/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/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/wire-payment/wire-payment.component.ts","./projects/dino/pages/payment/components/wire-payment/wire-payment.component.html","./projects/dino/_proxy/endpoints/bank.endpoint.ts","./projects/dino/_proxy/endpoints/receipt.endpoint.ts","./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-filter/receipt-filter.component.ts","./projects/dino/pages/receipts/components/receipt-filter/receipt-filter.component.html","./projects/dino/pages/receipts/receipts.component.ts","./projects/dino/pages/receipts/receipts.component.html","./projects/dino/pages/receipts/receipt/receipt.component.ts","./projects/dino/pages/receipts/receipt/receipt.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/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/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/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/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/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/_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/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/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/ledgers/ledgers.component.html","./projects/dino/_proxy/params/transdocumentlist.param.ts","./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/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-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-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/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/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/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/pages/settings/options/dashboard-options/dashboard-option.component.ts","./projects/dino/pages/settings/options/dashboard-options/dashboard-option.component.html","./projects/dino/pages/settings/options/dashboard-options/dashboard-option-list/dashboard-option-list.component.ts","./projects/dino/pages/settings/options/dashboard-options/dashboard-option-list/dashboard-option-list.component.html","./projects/dino/pages/settings/options/dashboard-options/dashboard-option-grid/dashboard-option-grid.component.ts","./projects/dino/pages/settings/options/dashboard-options/dashboard-option-grid/dashboard-option-grid.component.html","./projects/dino/pages/dashboard/dashboard.component.html","./projects/dino/pages/dashboard/base/base-dashboard.component.ts","./projects/dino/pages/dashboard/dashboard-fullscreen.component.ts","./projects/dino/pages/dashboard/dashboard-window.component.ts","./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/customers/bank-details/bank-details.component.ts","./projects/dino/pages/customers/bank-details/bank-details.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/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/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.comonent.ts","./projects/dino/pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-list/item-availability-list.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/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/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/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/_proxy/endpoints/admin.endpoint.ts","./projects/dino/_proxy/entities/admin.entity.ts","./projects/dino/pages/settings/admins/list/admin-list.component.ts","./projects/dino/pages/settings/admins/list/admin-list.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/admin.component.ts","./projects/dino/pages/settings/admins/admin.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/pages/credential-selector/impersonate-page.component.ts","./projects/dino/pages/credential-selector/impersonate-page.component.html","./projects/dino/guards/credential-type.guard.ts","./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/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/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-payments/receipt-payments.component.ts","./projects/dino/pages/receipts/receipt/receipt-payments/receipt-payments.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/guards/auth.guard.ts","./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/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/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/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/_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/_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/configuration/app.config.model.ts","./src/configuration/app.config.service.ts","./src/core/endpoints/general.endpoint.ts","./src/core/endpoints/genericlist.endpoint.ts","./src/core/endpoints/login.endpoint.ts","./src/core/endpoints/notification-template.endpoint.ts","./src/core/endpoints/push-message.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/confirm-cancel.guard.ts","./src/core/framework/customization-service.ts","./src/core/framework/devexpress.service.ts","./src/base/grid/Grid.defaults.ts","./src/core/framework/entity.service.ts","./src/common/Cities.ts","./src/_resources/DEVX.he.ts","./src/core/framework/framework.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/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/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/systemoptions.enum.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/imagebox-dialog/imageboxdialog.component.ts","./src/ui/dialogs/imagebox-dialog/imageboxdialog.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/core/framework/language.service.ts","./src/ui/layouts/layout/nav-menu/navmenu.component.ts","./src/ui/layouts/layout/nav-menu/navmenu.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/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/core/endpoints/notification-server.endpoint.ts","./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/ui/notifications/notification-template/notification-template.component.ts","./src/ui/notifications/notification-template/notification-template.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.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/remote-request.endpoint.ts","./src/ui/components/general/remote-request-history/grid/remote-request-history-grid.component.ts","./src/ui/components/general/remote-request-history/grid/remote-request-history-grid.component.html","./src/ui/components/general/remote-request-history/remote-request-history-list.component.ts","./src/ui/components/general/remote-request-history/remote-request-history-list.component.html","./src/ui/components/general/remote-request-history/remote-request-history.component.ts","./src/ui/components/general/remote-request-history/remote-request-history.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/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/pdf-viewer/pdf-viewer.component.ts","./src/ui/components/pdf-viewer/pdf-viewer.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/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/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/_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/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.html","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.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/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","./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;","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\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\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\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\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\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 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 EnumUserTypes\r\n{ \r\n\tB2B = \"B2B\",\r\n\tMobileSales = \"MobileSales\"\r\n\r\n\r\n}\r\nexport enum EnumShoppingCartTypes\r\n{ \r\n\tB2B = \"B2B\",\r\n\tSales = \"Sales\"\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 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\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\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\n \r\n\r\nexport const Enums = {\r\n \tEnumSystemOptionsZ: EnumSystemOptionsZ,\r\n\tEnumSummaryTypes: EnumSummaryTypes,\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\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\tEnumUserTypes: EnumUserTypes,\r\n\tEnumShoppingCartTypes: EnumShoppingCartTypes,\r\n\tEnumDocumentTypes: EnumDocumentTypes,\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\tEnumShoppingPaymentStatus: EnumShoppingPaymentStatus,\r\n\tEnumQuantityActiveErrorPlace: EnumQuantityActiveErrorPlace\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 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\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 {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveFromShoppingCart', Entity, undefined );\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 RECEIPT_FILTER_ACTION: 'receipt_filter_action',\r\n CASUAL_ADDRESS_CHANGED: 'casual_address_changed',\r\n CASUAL_CONTACT_CHANGED: 'casual_contact_changed'\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_checkoutdesktop') || currentRoute.includes('dino_checkoutmobile')) {\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 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, alertDuration || this.options.alertDuration, true);\r\n break;\r\n }\r\n case AlertMessageStatuses.Warning: {\r\n this.UI.WarningMessage(alertMessage, undefined, alertDuration || this.options.alertDuration, true);\r\n break;\r\n }\r\n case AlertMessageStatuses.Info: {\r\n this.UI.InfoMessage(alertMessage, undefined, alertDuration || this.options.alertDuration, true);\r\n }\r\n }\r\n });\r\n } catch {\r\n this.UI.StopMessage(messagePayload, undefined, 15000, 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}","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","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 CustomerID: number;\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.Entity.CustomerID || this.Entity.CustomerID <= 0) {\r\n this.Entity.CustomerID = this.CustomerID;\r\n }\r\n\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","\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.DashboardOption = 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 { 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}","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 maxEntryID = Math.max(...this.State.ContactPersons.map(contact => contact.EntryID)); \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\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\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 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\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","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 { 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\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{\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 public CustomerID: number;\r\n public FromShoppingCart: boolean = false;\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.Entity.EntryID && this.Entity.EntryID > 0 ? 'titleEditAddress' : 'titleNewAddress');\r\n }\r\n\r\n CloseBySave() {\r\n if ((!this.Entity.CustomerID || this.Entity.CustomerID <= 0) || !!this.CustomerID) {\r\n this.Entity.CustomerID = this.CustomerID;\r\n }\r\n\r\n if (this.FromShoppingCart) {\r\n this.Do(this.customerAddressEndpoint.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 OnCountryChanged(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.Entity.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.Entity.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
{{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\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 { 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 { ContactUsSubject } from './../entities/contactussubject.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 { 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 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 GetContactUsSubjects() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetContactUsSubjects', 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\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 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 //\r\n console.log(customer);\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 const currentCustomer = response.Entity;\r\n resolve(currentCustomer);\r\n },\r\n error: () => { }\r\n });\r\n };\r\n\r\n const processCustomerActions = (result?: SetSalesPersonCustomerResult) => {\r\n this.uiComponentService.ProcessAlerts(result?.CustomerAlerts?.ValidationMessage);\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 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\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}","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 } 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\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 IgnoreCasualAddressChange: boolean = false;\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.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 }, null, false,\r\n mode === 'new'\r\n ? ({ Country: 'IL', IsDefault: false, CustomerID: this.CustomerID } as CustomerAddress)\r\n : Utils.CloneObject(this.State.CustomerAddress));\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).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 maxEntryID = Math.max(...this.State.CustomerAddresses.map(address => address.EntryID)); \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 || '',\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
{{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
\";","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 { 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,\r\n List,\r\n SingleVariation,\r\n ShoppingCart,\r\n FinalizedOrder,\r\n Popup,\r\n RelatedItem,\r\n Wishlist,\r\n ReturnRequest,\r\n Compact\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.List:\r\n return isDesktop ? itemOption.ListViewDesktopOption : itemOption.ListViewMobileOption;\r\n case DisplayType.SingleVariation:\r\n return isDesktop ? itemOption.SingleVariationDesktopOption : itemOption.SingleVariationMobileOption;\r\n case DisplayType.ShoppingCart:\r\n return isDesktop ? itemOption.ShoppingCartDesktopOption : itemOption.ShoppingCartMobileOption;\r\n case DisplayType.FinalizedOrder:\r\n return isDesktop ? itemOption.FinalizedOrderDesktopOption : itemOption.FinalizedOrderMobileOption;\r\n case DisplayType.Popup:\r\n return isDesktop ? itemOption.PopupDesktopOption : itemOption.PopupMobileOption;\r\n case DisplayType.RelatedItem:\r\n return isDesktop ? itemOption.RelatedItemDesktopOption : itemOption.RelatedItemMobileOption;\r\n case DisplayType.Wishlist:\r\n return isDesktop ? itemOption.WishlistDesktopOption : itemOption.WishlistMobileOption;\r\n case DisplayType.ReturnRequest:\r\n return isDesktop ? itemOption.ReturnRequestDesktopOption : itemOption.ReturnRequestMobileOption;\r\n }\r\n }\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 = \"100%\";\r\n @Input() ImageWidth = \"100%\";\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, 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 // {\r\n // if (value || value.length === 0) {\r\n // this.State.Start = this.State.End = null;\r\n // return;\r\n // }\r\n\r\n // this.State.Start = value[0];\r\n // this.State.End = value[1];\r\n // };\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
\";","\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 public GetListByCustomerOption() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetListByCustomerOption', undefined );\r\n }\r\n\r\n public GetByCustomerOption(linkName: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByCustomerOption', {linkName: linkName} );\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 linkName = this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n this.Do(this.externalLinkEndpoint.GetByCustomerOption(linkName), 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\";","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 { 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\n\r\nclass State extends BaseOptionState {\r\n Content: string;\r\n SubjectID: number;\r\n ContactUsSubjects: ContactUsSubject[];\r\n IsConfirmationMessage: boolean;\r\n IsMobile: 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 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.customerEndpoint.GetContactUsSubjects()\r\n .subscribe(response => {\r\n this.State.ContactUsSubjects = response.Entities;\r\n if (this.State.ContactUsSubjects?.length === 1) {\r\n this.State.SubjectID = this.State.ContactUsSubjects[0].EntryID;\r\n };\r\n });\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 Subject: (this.State.SubjectID && this.State.ContactUsSubjects) ? this.State.ContactUsSubjects.find(x => x.EntryID === this.State.SubjectID).Name : '',\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.State.CustomerOption?.ContactUsOption?.Message) {\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 \\r\\n \\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?.Message}}\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\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 { 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}","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\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 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.Navigate(['pages/catalogueN'], { SearchText: this.State.SearchText });\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.Navigate(['pages/catalogueN'], { SearchText: this.State.SearchText });\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>\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Ledger extends BaseEntity {\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 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 public NumAtCard: string; \r\n public PaymentSum: number; \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 TransTypeString: 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, 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\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(['/pages/document'], { DocumentID: data.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate(['/pages/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
\";","\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 { 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}","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}","\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 { ValidationResult } from './../entities/validationresult.entity';\r\nimport { ShoppingCartItemView } from './../views/shoppingcartitem.view';\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\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() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetOrCreateForCurrentUser', undefined );\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 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 ValidateItems() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ValidateItems', 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\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 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 };\r\n\r\n return { 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 const documentOption = customerOption[documentType + 'Option'] as DocumentOption\r\n return documentOption;\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}","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 } 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\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}\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\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 customerService: CustomerService,\r\n private uiComponentService: UiComponentService,\r\n private documentService: DocumentService) {\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) {\r\n const obs$ = create\r\n ? this.shoppingCartEndpoint.GetOrCreateForCurrentUser()\r\n : this.shoppingCartEndpoint.GetForCurrentUser();\r\n\r\n this.loadingSubject.next(true);\r\n\r\n obs$.subscribe({\r\n next: data => {\r\n this.loadingSubject.next(false);\r\n\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 //console.log('Reload:', newShoppingCart);\r\n //\r\n },\r\n error: () => {\r\n this.loadingSubject.next(false);\r\n }\r\n });\r\n }\r\n\r\n public loadShoppingCartDescription() {\r\n this.shoppingCartEndpoint.GetShoppingCartDescriptionForCurrentUser()\r\n .subscribe(data => {\r\n\r\n this.descriptionSubject.next(data.Entity);\r\n //\r\n //console.log('CheckExisting:', data.Entity);\r\n //\r\n });\r\n }\r\n\r\n public createShoppingCartByDocumentType(documentType: EnumDocumentTypes) {\r\n this.shoppingCartEndpoint.CreateShoppingCartByDocumentType({ DocumentType: documentType } 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 public removeCurrentShoppingCart() {\r\n this.shoppingCartEndpoint.RemoveCurrentShoppingCart()\r\n .subscribe(() => {\r\n this.storeAndSendEvents(null);\r\n });\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 } 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$);\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$);\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\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: 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 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\r\n this.shoppingCartEndpoint.RemoveAllItemsFromShoppingCart()\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 disablePromotionInShoppingCart(promotionID: number) {\r\n this.shoppingCartEndpoint.DisablePromotionForShoppingCart(promotionID)\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 enableAllPromotionItems() {\r\n this.shoppingCartEndpoint.EnableAllPromotionItems()\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 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, callBack: () => void = null) {\r\n const params = {\r\n BaseDocumentsEntryIDs: documentIDs,\r\n DocumentType: documentType,\r\n TargetDocumentType: targetDocumentType\r\n } as UseBaseDocumentsParams;\r\n\r\n this.shoppingCartEndpoint.UseBaseDocuments(params)\r\n .subscribe({\r\n next: result => {\r\n const shoppingCart = result.Entity;\r\n this.storeAndSendEvents(shoppingCart);\r\n callBack && callBack();\r\n },\r\n error: () => { }\r\n });\r\n }\r\n\r\n public preSaveCheckoutShoppingCartDetails(shoppingCartView: ShoppingCartView, shouldSendEvents: boolean = true): 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 } 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 private storeAndSendEvents(shoppingCart: ShoppingCartView) {\r\n this.shoppingCart = 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 } as ShoppingCartDescriptionResult\r\n : null);\r\n }\r\n\r\n protected handleSuccessfulShoppingCartResponse(response: BaseEntityResponse,\r\n subject: Subject,\r\n func?: (shoppingCart: ShoppingCartView) => void) {\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 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 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 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","\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, ElementRef, 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 { ShoppingCartItemsVisibilityParams } from '@dino-proxy/params/shoppingcartitemsvisibility.param';\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 { ItemView } from '@dino-proxy/views/item.view';\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 \r\n @Input() DisplayType = DisplayType.ShoppingCart;\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 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 { 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, 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\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-shoppingcarttotals',\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() TotalBeforeDiscount: number;\r\n @Input() SelectedPageIndex: number;\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}}\\r\\n
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(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}}
\\r\\n
\\r\\n
{{Currency}}
\\r\\n
-{{GetPriceMainPart(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
\";","\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 { 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 { HiddenItem } from './../entities/hiddenitem.entity';\r\nimport { ItemViewShort } from './../entities/itemviewshort.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 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 { 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 { 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\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 super();\r\n\r\n customerOptionService.changed$\r\n .subscribe(options => {\r\n if (options) {\r\n const catalogueOption = options.CatalogueOption;\r\n\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.itemsFilter.CatalogueView = catalogueOption.DefaultCatalogueViewOption;\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 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('apply filter', this.itemsFilter);\r\n //\r\n this.filterSubject.next({ ...this.itemsFilter });\r\n }\r\n\r\n clear() {\r\n //\r\n console.log('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}","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 } 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\n\r\nclass State extends BaseState {\r\n WishlistItems: ItemView[] = [];\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 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.LoadWishlistItems();\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 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 {{'lblEmptyWishlist' | RC:THIS}}\\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\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\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","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 { 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 { ShareDocumentConfig } from '@dino-proxy/entities/sharedocumentconfig.entity';\r\nimport { EnumDocumentTypes, 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}\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}\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() IsShareButtonVisible: boolean = true;\r\n @Output() shareFormChange = new EventEmitter();\r\n EnumShareDocumentTypes = EnumShareDocumentTypes;\r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint,\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.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 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 this.Do(this.documentEndpoint.GetShareDocumentConfig(this.DocumentID, this.DocumentType), false, config => {\r\n this.State.ShareDocumentConfig = config.Entity;\r\n\r\n if (!this.IsEnabled) return;\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) {\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 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 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.Do(this.documentEndpoint.ShareDocument(params), false, r => {\r\n this.UI.InfoMessage(this.RC('lblSharingSuccessfulSent'));\r\n });\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","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 protected 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","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}","\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","\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\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 { 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 { 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","\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\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\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\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\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 { 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 { ShoppingCartView } from './../views/shoppingcart.view';\r\nimport { CancelDocumentParams } from './../params/canceldocument.param';\r\nimport { CloseDocumentParams } from './../params/closedocument.param';\r\nimport { RepeatDocumentParams } from './../params/repeatdocument.param';\r\nimport { DuplicateDocumentParams } from './../params/duplicatedocument.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 PreSaveDocumentDetails(documentView: DocumentView) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'PreSaveDocumentDetails', documentView, undefined );\r\n }\r\n\r\n public SaveDocument(shoppingCartView: ShoppingCartView) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveDocument', shoppingCartView, 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 DuplicateDocument(Params: DuplicateDocumentParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'DuplicateDocument', 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\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\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 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.State.ActionsMenu = this.LIST('CopyToDocumentActions');\r\n //.map(i => new ActionsMenu(+i.Value, i.Text));\r\n\r\n this.State.PreferableAction = CopyToDocumentActions.CopyAndGoToCatalogue;\r\n this.State.PreferableActionText = this.State.ActionsMenu\r\n .find(a => a.Value === (CopyToDocumentActions.CopyAndGoToCatalogue as any))\r\n .Text;\r\n\r\n let allTypes = this.LIST('EnumDocumentTypes');\r\n this.State.ShoppingCartItemsExists = shoppingCartItemsExists;\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 = '/pages/catalogueN';\r\n if (!toCatalogue) {\r\n path = this.A.Screen.IsMobile() ? '/pages/checkoutmobile' : '/pages/checkoutdesktop';\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, () => 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","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\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 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, EnumKitTypes } from './../enums';\r\nimport { EnumVariationRelations } from './../enums';\r\nimport { EnumItemSaleMethods } from './../enums';\r\nimport { EnumItemStockManagementTypes } from './../enums';\r\nimport { EnumRelatedItemRelationTypes } from './../enums';\r\n\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 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 ItemTextAttributes: ItemTextAttribute[] = []; \r\n public ItemKitItems: ItemKitItem[] = [];\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 MaxQuantity: number; \r\n public KitType: EnumKitTypes;\r\n public IsKitCustomizable: boolean;\r\n public IsKitSeparate: boolean;\r\n public IsKitCollapsable: boolean;\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 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\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}\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 { EnumDocumentTypes } from './../enums';\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 { 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 { 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 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 SignatureBase64: string; \r\n public DocumentType: EnumDocumentTypes; \r\n public IsUseCasualAddress: boolean; \r\n public IsUseCasualContactPerson: boolean; \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\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 Batches: ShoppingCartItemBatch[] = []; \r\n public SerialNumbers: ShoppingCartItemSerialNumber[] = []; \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\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\t\r\n}\r\n\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 \";","import { EnumShareDocumentTypes } from '@dino-components/share-document/share-document.component';\r\nimport { 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 } 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 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 ],\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: 'Compact',\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: \"Batches\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Serial Numbers',\r\n Name: \"Serial Numbers\"\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 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: 'Compact',\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 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};\r\n","import { EnumShareDocumentTypes } from \"@dino-components/share-document/share-document.component\";\r\nimport { 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 } 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 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 ],\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: \"Batches\"\r\n },\r\n {\r\n index: 3,\r\n text: 'מספרים סידוריים',\r\n Name: \"Serial Numbers\"\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 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 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};","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\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 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 if (!this.State.CustomerOption?.FeatureOption?.IsEnableCatalogue) return;\r\n this.Navigate(['pages/catalogueN'], { CategoryID: category.EntryID });\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, 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 { DuplicateDocumentParams } 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\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 && this.State.CustomerOption[`${this.State.CustomerOption.BusinessOption.DefaultDocumentType}Option`]?.IsAllowDuplication;\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 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.CustomerOption.FeatureOption.IsEnableCatalogue) return;\r\n if (this.State.HasShoppingCart) {\r\n this.UI.InfoMessage(this.RC('msgDocumentNotFinilised'));\r\n } \r\n this.Navigate(['pages/catalogueN']);\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.State.CustomerOption[`${this.State.CustomerOption.BusinessOption.DefaultDocumentType}Option`]?.IsAllowDuplication) return;\r\n\r\n if (this.State.HasShoppingCart) {\r\n this.UI.InfoMessage(this.RC('msgDocumentNotFinilised'));\r\n this.Navigate(['pages/catalogueN']);\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 DuplicateDocumentParams;\r\n\r\n this.documentEndpoint.DuplicateDocument(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 const path = this.A.Screen.IsMobile() ? '/pages/checkoutmobile' : '/pages/checkoutdesktop';\r\n this.Navigate([path]);\r\n this.uiComponentService.ProcessAlerts(validationResult?.ValidationMessage);\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 { 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 = {\r\n UserName: '$$$$$$$',\r\n Password: '$$$$$$$',\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
\";","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
\";","\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","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 { 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
\";","\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\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 { 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 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 { ContactUsSubject } from './../entities/contactussubject.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\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","\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","\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 { EnumCatalogueViewOptions } from './../enums';\r\nimport { EnumDisplayGroupingOptions } from './../enums';\r\nimport { EnumDisplaySortingOptions } from './../enums';\r\nimport { EnumShoppingCartItemViewOptions } from './../enums';\r\nimport { EnumShoppingCartModeOptions } 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 IsShowAssortment: boolean; \r\n public IsEnableGridView: boolean; \r\n public IsEnableListView: boolean; \r\n public IsEnableCompactView: boolean; \r\n public DefaultCatalogueViewOption: EnumCatalogueViewOptions; \r\n public DefaultDisplayGroupingOption: EnumDisplayGroupingOptions; \r\n public DefaultDisplaySortingOption: EnumDisplaySortingOptions; \r\n public IsShowFilterPane: boolean; \r\n public IsShowCategoryNavigationPane: boolean; \r\n public IsShowSearchBar: boolean; \r\n public IsShowBarcodeScanner: boolean; \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 IsEnableShoppingCartListView: boolean; \r\n public IsEnableShoppingCartCompactView: boolean; \r\n public IsEnableShoppingCartLineView: boolean; \r\n public IsAllowImageEnlargement: boolean; \r\n public IsShowAddToWishlist: boolean; \r\n public ImageBackgroundColor: string; \r\n public DefaultShoppingCartItemViewOption: EnumShoppingCartItemViewOptions; \r\n public DefaultShoppingCartModeOption: EnumShoppingCartModeOptions; \r\n public IsHideTreeAfterSelecting: boolean; \r\n public IsShowTotalOnTop: 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 { 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 { CatalogueOptionEndpoint } from '@dino-proxy/endpoints/catalogueoption.endpoint';\r\nimport { CatalogueOption } from '@dino-proxy/entities/catalogueoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n CurrentTabIndex = 0;\r\n Tabs: any[] = [];\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.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 index: 2,\r\n text: this.RC('lblShoppingCartSection'),\r\n Name: \"ShoppingCartSection\"\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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\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 { 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\";","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 { 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\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 { EnumFormFieldOptions } from './../enums';\r\nimport { EnumCasualContactPersonNotificationReceivers } from './../enums';\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 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 IsAllowDraft: boolean; \r\n public IsUseDraftAsDefault: 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 IsShowShare: 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 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 IsEnableListView: boolean; \r\n public IsEnableCompactView: boolean; \r\n public IsEnableLineView: boolean; \r\n public CasualContactPersonNotificationReceiver: EnumCasualContactPersonNotificationReceivers; \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\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 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\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 Methods: ShipmentOptionMethod[] = []; \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\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 { 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 Warehouse: Warehouse = new Warehouse; \r\n public IsShowPriceWithVat: boolean; \r\n public IsShowAlternativePriceWithVat: 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 ContactUsEmailAddress: string; \r\n public SenderEmailAddress: string; \r\n public SenderDisplayName: string; \r\n public InvoiceOneUserName: string; \r\n public InvoiceOnePassword: string; \r\n public ErrorNotificationEmailAddress: string; \r\n public ErrorNotificationTemplate: string; \r\n public IsAllowPrinting: boolean; \r\n public IsAllowSharingByEmail: boolean; \r\n public IsAllowSharingBySMS: boolean; \r\n public IsAllowSharingByWhatsapp: boolean; \r\n public InvoiceOnePasswordSecure: string; //WRITE ONLY (IgnoreDataMemberRead)\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\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\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 DashboardOption extends BaseOption {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DashboardOption';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IsShowTopQuantityItems: boolean; \r\n public IsShowTopFrequentItems: boolean; \r\n public IsShowRecentDocuments: boolean; \r\n public IsShowDataOfOtherContacts: boolean; \r\n public TopItemsLastDays: number; \r\n public TopItemsCount: number; \r\n public RecentDocumentsCount: 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\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 Message: 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\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 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 IsEnableExternalLinks: boolean; \r\n public IsEnableDashboard: 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\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 { 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 { DashboardOption } from './../entities/dashboardoption.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\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 DashboardOptionID: 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 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 DashboardOption: DashboardOption = new DashboardOption; \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\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\";","\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 { 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","\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 { 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","\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 { DashboardOption } from './../entities/dashboardoption.entity';\r\n@Injectable()\r\nexport class DashboardOptionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DashboardOption\", 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 { DashboardOptionEndpoint } from '@dino-proxy/endpoints/dashboardoption.endpoint';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.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',\r\n templateUrl: './customer-option.component.html',\r\n styleUrls: ['./customer-option.component.scss']\r\n})\r\nexport class CustomerOptionComponent extends BasePageCRUDComponent {\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 dashboardOptionEndpoint: DashboardOptionEndpoint,\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 itemOptionEndpoint: ItemOptionEndpoint) {\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['DashboardOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.dashboardOptionEndpoint.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 }\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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 { 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 { 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 providers: ServiceBagServices,\r\n selector: 'app-filter-option',\r\n templateUrl: './filter-option.component.html',\r\n styleUrls: ['./filter-option.component.scss']\r\n})\r\nexport class FilterOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: FilterOptionEndpoint) {\r\n super(A, 'FilterOptionComponent', FilterOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 { 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 { 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}\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.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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\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","\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","\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 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 IsRenderPrice: boolean; \r\n public IsRenderPricePer100G: boolean; \r\n public IsRenderCurrencySymbol: boolean; \r\n public IsRenderQuantityInStock: 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 IsRenderAddToCart: boolean; \r\n public IsRenderMinQuantity: boolean; \r\n public IsRenderBadges: boolean; \r\n public IsRenderDimensionValues: boolean; \r\n public IsRenderName: boolean; \r\n public IsRenderPriceChangeWhenZero: boolean; \r\n public IsRenderTotalPerItem: boolean; \r\n public IsRenderPriceComments: boolean; \r\n public IsRenderSuppCatNum: boolean; \r\n public IsRenderPromotions: boolean; \r\n public IsShowRemoveItemConfirmation: boolean; \r\n public IsRenderQuantityOutOfStock: boolean; \r\n public IsRenderPriceDescriptionBlock: boolean; \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 { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\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',\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 super(A, 'ItemDisplayElementOptionComponent', ItemDisplayElementOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\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 { 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 \";","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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseOption } from './../entities/baseoption.entity';\r\nimport { EnumDocumentTypes } from './../enums';\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 IsRenderPrice: boolean; \r\n public IsRenderPricePer100G: boolean; \r\n public IsRenderCurrencySymbol: boolean; \r\n public IsRenderQuantityInStock: 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 IsRenderAddToCart: boolean; \r\n public IsRenderMinQuantity: 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 IsRenderPriceChangeWhenZero: boolean; \r\n public IsRenderTotalPerItem: boolean; \r\n public IsRenderPriceComments: boolean; \r\n public IsRenderSuppCatNum: boolean; \r\n public IsRenderPromotions: boolean; \r\n public IsRenderLastSales: boolean; \r\n public IsRenderAvailability: boolean; \r\n public IsRenderPlannedPurchases: boolean; \r\n public IsRenderQuantityOutOfStock: boolean; \r\n public IsRenderKitItems: boolean; \r\n public IsRenderPriceDescriptionBlock: boolean; \r\n public LastSalesDocumentType: EnumDocumentTypes; \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 { ItemDisplayPopupOptionEndpoint } from '@dino-proxy/endpoints/itemdisplaypopupoption.endpoint';\r\nimport { ItemDisplayPopupOption } from '@dino-proxy/entities/itemdisplaypopupoption.entity';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseOptionState {\r\n\tLastSalesDocumentTypes: GenericListEntity[];\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\tsuper(A, 'ItemDisplayPopupOptionComponent', ItemDisplayPopupOption, State, endpoint, EnumPageDisplayModes.Window);\r\n\t}\r\n\r\n\tprotected OnInitComponent() {\r\n\t\tthis.State.LastSalesDocumentTypes = this.LIST('EnumDocumentTypes').filter(type =>\r\n\t\t\t(type.Value === EnumDocumentTypes.Quote) \r\n\t\t\t|| (type.Value === EnumDocumentTypes.Order)\r\n\t\t\t|| (type.Value === EnumDocumentTypes.DeliveryNote)\r\n\t\t\t|| (type.Value === EnumDocumentTypes.Invoice)\r\n );\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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\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 { 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 { 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\";","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\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 \";","\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 { 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 ListViewMobileOptionID: number; \r\n public ListViewDesktopOptionID: number; \r\n public SingleVariationMobileOptionID: number; \r\n public SingleVariationDesktopOptionID: number; \r\n public ShoppingCartMobileOptionID: number; \r\n public ShoppingCartDesktopOptionID: number; \r\n public FinalizedOrderMobileOptionID: number; \r\n public FinalizedOrderDesktopOptionID: number; \r\n public PopupMobileOptionID: number; \r\n public PopupDesktopOptionID: number; \r\n public RelatedItemMobileOptionID: number; \r\n public RelatedItemDesktopOptionID: number; \r\n public WishlistMobileOptionID: number; \r\n public WishlistDesktopOptionID: number; \r\n public ReturnRequestMobileOptionID: number; \r\n public ReturnRequestDesktopOptionID: number; \r\n public GridViewMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public GridViewDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ListViewMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ListViewDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public SingleVariationDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ShoppingCartDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedOrderMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public FinalizedOrderDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public PopupMobileOption: ItemDisplayPopupOption = new ItemDisplayPopupOption; \r\n public PopupDesktopOption: ItemDisplayPopupOption = new ItemDisplayPopupOption; \r\n public RelatedItemMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public RelatedItemDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public WishlistDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ReturnRequestMobileOption: ItemDisplayElementOption = new ItemDisplayElementOption; \r\n public ReturnRequestDesktopOption: ItemDisplayElementOption = new ItemDisplayElementOption; \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 { 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\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 constructor(A: ServiceBagService,\r\n endpoint: ItemOptionEndpoint,\r\n private itemDisplayElementOptionEndpoint: ItemDisplayElementOptionEndpoint,\r\n private itemDisplayPopupOptionEndpoint: ItemDisplayPopupOptionEndpoint) {\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 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['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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\";","\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 \";","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\";","\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 { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntitiesResponse, 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 { ShipmentOption, ShipmentOptionMethod } 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\n\r\nclass State extends BaseOptionState {\r\n ShipmentMethods: ShipmentMethod[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-shipment-option',\r\n templateUrl: './shipment-option.component.html',\r\n styleUrls: ['./shipment-option.component.scss']\r\n})\r\nexport class ShipmentOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: ShipmentOptionEndpoint,\r\n private shipmentMethodEndpoint: ShipmentMethodEndpoint) {\r\n super(A, 'ShipmentOptionComponent', ShipmentOption, 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.LoadShipmentMethods();\r\n }\r\n\r\n LoadShipmentMethods() {\r\n this.Do(this.shipmentMethodEndpoint.GetListShallow(), false, (response: BaseEntitiesResponse) => {\r\n this.State.ShipmentMethods = response.Entities;\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 { 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\";","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\tItemShipments: ItemShipment[] = [];\r\n}\r\n\r\n@Component({\r\n\tproviders: ServiceBagServices,\r\n\tselector: 'app-shipment-method-grid',\r\n\ttemplateUrl: './shipment-method-grid.component.html'\r\n})\r\nexport class ShipmentMethodsGridComponent extends BaseGridComponent {\r\n\r\n\tconstructor(A: ServiceBagService, private itemsEndpoint: ItemsEndpoint) {\r\n\t\tsuper(A, 'ShipmentMethodsGridComponent', ShipmentMethod, State);\r\n\t}\r\n\r\n\toverride OnInitComponent() {\r\n\t\tthis.itemsEndpoint.GetItemShipments().subscribe(response => {\r\n\t\t\tthis.State.ItemShipments = response.Entities\r\n\t\t});\r\n\t}\r\n\r\n\titemCodeDisplayExpr(item) {\r\n\t\treturn item && `${item.ItemCode} - ${item.ItemName}`;\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\";","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 { 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 providers: ServiceBagServices,\r\n selector: 'app-homepage-option',\r\n templateUrl: './homepage-option.component.html',\r\n styleUrls: ['./homepage-option.component.scss']\r\n})\r\nexport class HomepageOptionComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n endpoint: HomepageOptionEndpoint) {\r\n super(A, 'HomepageOptionComponent', HomePageOption, 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 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}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 { 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\";","\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 ContactUsEmailAddressEx: string; \r\n public SenderEmailAddressEx: string; \r\n public SenderDisplayNameEx: string; \r\n public InvoiceOneUserNameEx: string; \r\n public InvoiceOnePasswordEx: string; \r\n public ErrorNotificationEmailAddressEx: 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\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 {{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
\";","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 \";","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\";","\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 \";","\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\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 AdminCardCode: string; \r\n public AutoResolveFallbackTypeForItemImages: EnumItemImagesFallbackTypes; \r\n public IsSearchKeywordsOnly: boolean; \r\n public IsSearchKeywordsCache: boolean; \r\n public SearchKeywordsRefreshInterval: number; \r\n public DefaultSalesPersonOptionID: 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 { 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 { 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 { 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 \";","\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 { 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 providers: ServiceBagServices,\r\n selector: 'app-dimension-configuration',\r\n templateUrl: './dimension-configuration.component.html',\r\n styleUrls: ['./dimension-configuration.component.scss']\r\n})\r\nexport class DimensionConfigurationComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: DimensionConfigurationEndpoint,\r\n private dimensionScaleEndpoint: DimensionScaleEndpoint) {\r\n super(A, 'DimensionConfigurationComponent', DimensionConfiguration, 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 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['DimensionScalesAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.dimensionScaleEndpoint.GetList(options));\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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 { 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\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","\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 FilterAttributeDisplayOptions: GenericListEntity[] = [];\r\n FilterAttributeDisplayOptionSet = {};\r\n}\r\n\r\nexport function GetValidDisplayToFilterOptionSet()\r\n{\r\n const displayToFilterOptionSet = {};\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.ColorCircles] = [EnumFilterDisplayOptions.ColorCircles, EnumFilterDisplayOptions.Text];\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.Date] = [EnumFilterDisplayOptions.DateRange, EnumFilterDisplayOptions.Text];\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.Link] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.Number] = [ EnumFilterDisplayOptions.NumberRange, EnumFilterDisplayOptions.Text];\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.Tag] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n displayToFilterOptionSet[EnumAttributeDisplayOptions.Text] = [EnumFilterDisplayOptions.List, EnumFilterDisplayOptions.Text];\r\n return displayToFilterOptionSet;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-specification-attribute',\r\n templateUrl: './specification-attribute.component.html',\r\n styleUrls: ['./specification-attribute.component.scss']\r\n})\r\nexport class SpecificationAttributeComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: SpecificationAttributeEndpoint,\r\n private attributeGroupEndpoint: AttributeGroupEndpoint,\r\n private specificationAttributeValueEndpoint: SpecificationAttributeValueEndpoint) {\r\n super(A, 'SpecificationAttributeComponent', SpecificationAttribute, 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.LoadDataSources();\r\n }\r\n\r\n LoadDataSources() {\r\n this.DataSources['AttributeGroupsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.attributeGroupEndpoint.GetList(options));\r\n\r\n this.DataSources['SpecificationAttributeValues'] =\r\n new ServerSideDataSourceEndpointCRUD(this.specificationAttributeValueEndpoint,\r\n { requireTotalCount: false },\r\n (options: DataLoadOptions) => this.specificationAttributeValueEndpoint.ListEx(this.EntityEntryID, options)); \r\n\r\n this.State.FilterAttributeDisplayOptionSet = GetValidDisplayToFilterOptionSet();\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 protected override OnInitContextMenus() {\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 override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\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}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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\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\";","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\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\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 public CustomerOptionID: 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 { 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\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\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-link-config',\r\n templateUrl: './external-link-config.component.html',\r\n styleUrls: ['./external-link-config.component.scss']\r\n})\r\nexport class ExternalLinkConfigComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: ExternalLinkEndpoint,\r\n private customerOptionEndpoint: CustomerOptionEndpoint) {\r\n super(A, 'ExternalLinkConfigComponent', ExternalLink, 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 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['CustomerOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerOptionEndpoint.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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 \";","\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 { ExternalQueryView } from './../views/externalquery.view';\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 GetByCustomerOption(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByCustomerOption', {EntryID: EntryID} );\r\n }\r\n\r\n public GetExternalQueries(customerID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetExternalQueries', {customerID: customerID} );\r\n }\r\n\r\n public GetExternalQueryData(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetExternalQueryData', {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 { 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 VisibleName: string; \r\n public ViewName: string; \r\n public IsActive: boolean; \r\n public TopRows: number; \r\n public CustomerOptionID: number; \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","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ExternalQuery } from './../entities/externalquery.entity';\r\nexport class ExternalQueryView extends ExternalQuery {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalQueryView';\r\n }\r\n \r\n public ViewNameEx: 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 { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ExternalQueryView } from '@dino-proxy/views/externalquery.view';\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\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-query',\r\n templateUrl: './external-query.component.html',\r\n styleUrls: ['./external-query.component.scss']\r\n})\r\nexport class ExternalQueryComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: ExternalQueryEndpoint,\r\n private customerOptionEndpoint: CustomerOptionEndpoint) {\r\n super(A, 'ExternalQueryComponent', ExternalQueryView, 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['CustomerOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerOptionEndpoint.GetList(options));\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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 \";","\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","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 \";","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\";","\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\";","\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 { 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 { 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\n\r\nclass State extends BaseOptionState {\r\n IsUseContactPerson: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'dino-system-option',\r\n templateUrl: './system-option.component.html',\r\n styleUrls: ['./system-option.component.scss']\r\n})\r\nexport class DinoSystemOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: SystemOptionEndpoint,\r\n private customerOptionEndpoint: CustomerOptionEndpoint,\r\n private customerEndpoint: CustomerEndpoint,\r\n private contactPersonEndpoint: ContactPersonEndpoint,\r\n private salesPersonOptionEndpoint: SalesPersonOptionEndpoint) {\r\n super(A, 'DinoSystemOptionComponent', SystemOption, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected OnInitComponent(){\r\n this.State.IsUseContactPerson = this.A.Framework.SystemOptionFlag(\"IsUseContactPerson\");\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['CustomerOptionsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerOptionEndpoint.GetList(options));\r\n this.DataSources['GuestContactPersonsAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.contactPersonEndpoint.GetList(options));\r\n this.DataSources['GuestCustomersAdmin'] = new DataSourceCustomAction((options: DataLoadOptions) => this.customerEndpoint.GetList(options));\r\n this.DataSources['SalePersonOptions'] = new DataSourceCustomAction((options: DataLoadOptions) => this.salesPersonOptionEndpoint.GetList(options));\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\";","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\";","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-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 @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 { 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 { 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}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-option',\r\n templateUrl: './contact-us-option.component.html',\r\n styleUrls: ['./contact-us-option.component.scss']\r\n})\r\nexport class ContactUsOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: ContactUsOptionEndpoint) {\r\n super(A, 'ContactUsOptionComponent', ContactUsOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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\";","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 this.DataSources['ContactUsSubjects'] = new BaseDataStoreCRUDServer(this.contactUsSubjectEndpoint);\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 { 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 { FeatureOptionEndpoint } from '@dino-proxy/endpoints/featureoption.endpoint';\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',\r\n templateUrl: './feature-option.component.html',\r\n styleUrls: ['./feature-option.component.scss']\r\n})\r\nexport class FeatureOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: FeatureOptionEndpoint) {\r\n super(A, 'FeatureOptionComponent', FeatureOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 \";","\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 Name: 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 { SubjectType } from '@dino-proxy/entities/subjecttype.entity';\r\nimport { ActivityType } from '@dino-proxy/entities/activitytype.entity';\r\nimport { SBOUser } from '@dino-proxy/entities/sbouser.entity';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\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\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}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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 { EnumDocumentTypes } 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@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\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?.IsShowCategoryNavigationPane && 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\r\n override OnInitComponent() {\r\n if (!this.State.CustomerOption.FeatureOption.IsEnableCatalogue) return;\r\n this.InitializeCatalog();\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);\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.LISTITEM('EnumNewDocumentTitles', this.State.ShoppingCartDescription?.DocumentType);\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 }\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.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 this.itemsFilterService.apply({ SearchText: value }, ItemsFilterApplyTypes.Overwrite);\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 { EnumShoppingCartItemViewOptions, EnumShoppingCartModeOptions } from \"@dino-proxy/enums\";\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 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.IsHideTreeAfterSelecting && catalogueOption.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Floating) {\r\n this.A.SysEvents.SetPageSidePanelState('ProductCatalogue2Component', false);\r\n } else if (catalogueOption.IsHideTreeAfterSelecting && catalogueOption.DefaultShoppingCartModeOption === EnumShoppingCartModeOptions.Fixed) {\r\n this.sidebarService.Close('CategoriesPanelComponent');\r\n }\r\n } else {\r\n this.Navigate(['pages/catalogueN'], { CategoryID: e.itemData.EntryID });\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, 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\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 super(A, 'DisplayOptionsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.CatalogueViewOption = this.State.CustomerOption?.CatalogueOption?.DefaultCatalogueViewOption;\r\n //this.State.ShowCompactView = this.State.CustomerOption?.CatalogueOption.DefaultShoppingCartModeOption !== Enums.EnumShoppingCartModeOptions.Floating;\r\n this.State.ShowCompactView = true;\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n if (this.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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 \r\n\r\n HandleChangeView(view: EnumCatalogueViewOptions) {\r\n this.State.CatalogueViewOption = 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 } 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\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 }\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, 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 } 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 IsPricePer100GrVisible: boolean;\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.IsRenderPricePer100G && this.State.PriceDetails.PricePer100G !== 0;\r\n\r\n this.State.IsShowPriceComments = this.ElementOption.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.ElementOption?.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 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}\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\";","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, EventEmitter, Output } 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 { AssortmentEndpoint } from '@dino-proxy/endpoints/assortment.endpoint';\r\nimport { Assortment } from '@dino-proxy/entities/assortment.entity';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\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\n\r\nclass State extends BaseState {\r\n Assortments: Assortment[] = [];\r\n SelectedAssortmentID: number;\r\n}\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(() => { (!this.State.SelectedAssortmentID) && (this.State.SelectedAssortmentID = this.GetDefaultAssortment()[0].EntryID); });\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 = this.GetDefaultAssortment()[0].EntryID;\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 this.RegisterSubscription(filter$Subscription);\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: -1, 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 === -1) ? 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 !== -1;\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, 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 @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 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 { 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 } 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, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\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 { 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 super(A, componentName, BaseListItemState2);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.ElementOption = 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 && (this.Item.IsKitItem || this.Item.PriceDetails.FinalPrice === 0);\r\n this.IsShowAppItemQuantityComponent = this.State.ElementOption?.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 this.EnableNavigate && this.Navigate(['/pages/itemN', item.EntryID], \r\n {\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 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 protected processShoppingCart(shoppingCart: ShoppingCartView) {\r\n if (!shoppingCart || !this.Item || this.Item.EntryID <= 0 || this.IsShowQuantityDirectlyFromItem) return;\r\n if (this.DisplayType === DisplayType.FinalizedOrder || 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 = 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) {\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 return;\r\n }\r\n\r\n if (items.length > 1) {\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 { 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\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.List;\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 super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'ListItemComponent2');\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n\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\";","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\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 super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'GridItemComponent2');\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, 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 { 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 { 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\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ItemDescriptionComponent', State);\r\n }\r\n\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.IsRenderPricePer100G && 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
\\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
\";","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
\";","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
\\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 } 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.List;\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 \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.DisplayType !== DisplayType.FinalizedOrder\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?.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?.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 { 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().CatalogueOption.IsShowAddToWishlist \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, 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 { 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, 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}\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\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.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) 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 this.IsQuantityCorrect();\r\n }\r\n\r\n HandleQuantityChanged(checkValidation: boolean = false) {\r\n if (this.State.IsMultipleQuantity && !this.IgnoreMultipleQuantity) 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) {\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 {{'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, OnInit } from '@angular/core';\r\nimport { AddonService } from '@dino-services/addon.service';\r\nimport { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Component({\r\n providers: [...ServiceBagServices, AddonService],\r\n selector: 'app-item-popup',\r\n templateUrl: './item-popup.component.html',\r\n styleUrls: ['./item-popup.component.scss']\r\n})\r\nexport class ItemPopupComponent implements OnInit {\r\n IsMobile: boolean;\r\n\r\n constructor(public screenService: ScreenService) {}\r\n\r\n ngOnInit() {\r\n this.IsMobile = this.screenService.IsMobile();\r\n }\r\n}\r\n","export default \"\\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 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\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 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 { 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\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\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, 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\n\r\nclass State extends BaseState {\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 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\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\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 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,\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, 'ItemPopupComponent', 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,\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, 'ItemPopupComponent', 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 } 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\";","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 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\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 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 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 (!this.screenService.IsDesktop()) && (this.ImagePopupWidth = \"100%\");\r\n\r\n if (this.screenService.IsMobile()) {\r\n this.ImagePopupHeight = \"60dvh\";\r\n this.InternalImageHeight = \"43dvh\";\r\n this.InternalImageWidth = \"81vw\";\r\n } else if (this.screenService.IsTablet()) {\r\n this.ImagePopupHeight = \"65%\";\r\n this.InternalImageHeight = \"660px\";\r\n this.InternalImageWidth = \"790px\";\r\n } else if (this.screenService.IsDesktop()) {\r\n this.ImagePopupHeight = \"800px\";\r\n this.ImagePopupWidth = \"800px\";\r\n this.InternalImageWidth = this.ImagePopupWidth;\r\n this.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.IsImagePopupVisible = !this.IsImagePopupVisible;\r\n }\r\n\r\n InitializeMediaItems() {\r\n if (this.Item && this.PopupOption) {\r\n\r\n this.State.MediaItems = [];\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 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
\\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 { 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 } 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\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}\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 super(A, 'VariationsByDimensionComponent', State);\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() { return false; }\r\n\r\n override OnInitComponent() {\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 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.Navigate([\"/pages/itemN\", e.EntryID], { PreviousEntryID: this.Item.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
\";","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 } 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\n\r\nclass State extends BaseState {\r\n Items: ItemView[];\r\n SelectedRelationType: EnumRelatedItemRelationTypes;\r\n RelationTypesOptions: RelationTypesOption[] = [];\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 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 }\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 }\r\n\r\n OnNavigate(e: ItemView) {\r\n this.Navigate(['/pages/itemN', e.EntryID], { CustomerID: this.RouteCustomerID });\r\n }\r\n}\r\n","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 { 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 { 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 { ContactUsDialogComponent } from '@dino-pages/home/contact-us-dialog/contact-us-dialog.component';\r\nimport { ShoppingCartDescriptionResult } from '@dino-proxy/entities/shoppingcartdescriptionresult.entity';\r\nimport { EnumShoppingCartModeOptions } 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(['pages/shoppingcartN']);\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(['pages/shoppingcartN']);\r\n }\r\n }\r\n\r\n HandleToggleWishlist() {\r\n this.Navigate(['pages/wishlist']);\r\n }\r\n\r\n HandleShowContactUs() {\r\n this.contactUsDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n HandleCustomerInfoClick() {\r\n this.Navigate([\"/pages/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","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
{{'lblTotalAfterVatOnTopTitle' | RC:THIS}}
\\r\\n
\\r\\n
{{State.ShoppingCartDescription.Currency}}
\\r\\n
{{GetPriceMainPart(State.ShoppingCartDescription.TotalAfterVat)}}
\\r\\n
.{{GetPriceChangePart(State.ShoppingCartDescription.TotalAfterVat)}}
\\r\\n
\\r\\n
\\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 { 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 { 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, 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 } 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 { DuplicateDocumentParams } from '@dino-proxy/params/duplicatedocument.param';\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\nexport const ShoppingCartItemDisplayTypeStorageKey = 'ShoppingCartItemDisplayType';\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\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 public documentEndpoint: DocumentEndpoint) {\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 && paymentOption && (paymentOption.IsAllowCashPayment || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowGoCreditPayment || paymentOption.IsAllowWirePayment || paymentOption.IsAllowLaterPayment);\r\n }\r\n\r\n override OnInitComponent() {\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?.IsAllowSummaryEditing\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 = localStorage.getItem(ShoppingCartItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.State.ItemDisplayType = this.State.CustomerOption?.CatalogueOption?.DefaultShoppingCartItemViewOption\r\n }\r\n }\r\n\r\n this.ContextMenuItems = [];\r\n\r\n (this.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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 } as DuplicateDocumentParams;\r\n\r\n this.documentEndpoint.DuplicateDocument(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(true);\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 localStorage && localStorage.setItem(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 || !this.State.CustomerOption?.FeatureOption?.IsEnableCheckout) return;\r\n this.A.RouteHistoryService.ClearHistory();\r\n this.Navigate([this.A.Screen.IsMobile() ? '/pages/checkoutmobile' : '/pages/checkoutdesktop']);\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([\"/pages/suggestedpromotions\"]);\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, 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 } from '@dino-proxy/enums';\r\nimport { ShoppingCartItemDisplayTypeStorageKey } from './components/shopping-cart-compact/shopping-cart-compact.component';\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 { DuplicateDocumentParams } 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\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 DragAndDropButtonLabel: string = this.RC('lblShoppingCartReorderItemsButton');\r\n ContextMenuItems: any[] = [];\r\n MessageBoxTypes = EnumMessageBoxTypes;\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 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 && paymentOption && (paymentOption.IsAllowCashPayment || paymentOption.IsAllowChequePayment\r\n || paymentOption.IsAllowGoCreditPayment || paymentOption.IsAllowWirePayment || paymentOption.IsAllowLaterPayment);\r\n }\r\n\r\n IsEnableAllPromotionItemsButtonVisible: boolean = false;\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n if (localStorage) {\r\n const totalsExpandedDesktop = localStorage.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.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?.IsAllowSummaryEditing\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(['/pages/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 = localStorage.getItem(ShoppingCartItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.State.ItemDisplayType = this.State.CustomerOption?.CatalogueOption?.DefaultShoppingCartItemViewOption\r\n }\r\n }\r\n\r\n this.ContextMenuItems = [];\r\n\r\n (this.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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.State.CustomerOption?.CatalogueOption?.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 localStorage && localStorage.setItem(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.CustomerOption.FeatureOption.IsEnableCheckout) return;\r\n this.A.RouteHistoryService.ClearHistory();\r\n this.Navigate([this.A.Screen.IsMobile() ? '/pages/checkoutmobile' : '/pages/checkoutdesktop']);\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(['/pages/catalogueN']);\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 } as DuplicateDocumentParams;\r\n\r\n this.documentEndpoint.DuplicateDocument(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\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(['pages/shoppingcartN'], { 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(['/pages/suggestedpromotions']);\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([\"/pages/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 localStorage && localStorage.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\";","\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 { CreditTypesEnum } from './reference.entity';\r\n\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: CreditTypesEnum; \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\nimport { ShoppingCartStatusEnums } from './../enums';\r\nimport { ValidationResult } from './../entities/validationresult.entity';\r\nimport { EnumShoppingCartTypes } from './../enums';\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 { 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 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 Type: EnumShoppingCartTypes; \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 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 UITotalItems: number; \r\n public UITotalShipments: number; \r\n public UITotalCoupons: number; \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 Signature: Signature = new Signature; \r\n public ShoppingPayment: ShoppingPayment = new ShoppingPayment; \r\n public Coupons: ShoppingCartCoupon[] = []; \r\n public DisabledPromotionsExist: boolean; \r\n public CurrentDocumentOption: DocumentOption = new DocumentOption; \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 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\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 { 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 AvailableShipmentMethods: ShipmentMethod[] = []; \r\n public DocumentOption: DocumentOption = new DocumentOption; \r\n\t\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 { 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\";","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 } 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\n\r\nclass State extends BaseOptionState {\r\n SelectedPageIndex: number = 0;\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 ItemDisplayMode: EnumShoppingCartItemViewOptions = EnumShoppingCartItemViewOptions.List;\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 LastStepIndex: number = 0;\r\n HasCreationError: boolean = false;\r\n AnyPaymentDone: boolean = false;\r\n\r\n ItemValidationResult: ValidationResult = null;\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 AddressEntryModes = EnumAddressEntryModes;\r\n ContactPersonEntryModes = EnumContactPersonEntryModes;\r\n CasualAddressInfo: any;\r\n CasualContactInfo: any;\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 IsPaymentEnabled() {\r\n const paymentOption = this.State.CustomerOption?.PaymentOption;\r\n return this.Entity?.DocumentOption && this.Entity?.DocumentOption?.IsAllowPayment && this.Entity?.TotalAfterVat > 0\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 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 super(A, componentName, ShoppingCartView, State, customerService, EnumPageDisplayModes.FullScreen);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.SalesPersonOption = this.customerService.GetSalesPersonOption();\r\n this.State.CustomerID = this.customerService.GetCustomerID();\r\n this.InitEvents();\r\n this.shoppingCartService.load(false);\r\n }\r\n \r\n private InitEvents() {\r\n const changed$Subscription = this.shoppingCartService.changed$\r\n .subscribe(r => {\r\n this.Entity = r.shoppingCart;\r\n this.ProcessShoppingCartAfterChange(r.shoppingCart);\r\n this.shoppingCartEndpoint.ValidateItems().subscribe(r => {\r\n this.ProcessValidationResult(r);\r\n if (this.State.ItemValidationResult?.Status !== EnumValidationStatus.Error) {\r\n (this.State.SelectedPageIndex === 0) &&\r\n this.uiComponentService.ProcessAlerts(this.State.ItemValidationResult?.ValidationMessage, 15000);\r\n }\r\n });\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\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))\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 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.SelectedPageIndex === 0) {\r\n this.Navigate(['pages/catalogueN']);\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(this.Entity);\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(this.Entity);\r\n }\r\n\r\n HandlePageIndexChanged(index: number) {\r\n if (!this.Entity?.ShoppingCartItemViews?.length) return;\r\n\r\n const action = () => {\r\n if (index === 3 || (index === 2)) {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) {\r\n this.OnValidateError();\r\n this.SetPageIndex(1, false);\r\n //this.State.SelectedPageIndex = 1;\r\n return;\r\n } else if (index === 3 && \r\n this.Entity?.DocumentOption?.SignatureOption === EnumFormFieldOptions.Mandatory \r\n && !this.Entity?.SignatureBase64) {\r\n this.OnValidateError();\r\n this.SetPageIndex(2, true);\r\n //this.State.SelectedPageIndex = 2;\r\n }\r\n else {\r\n this.SetPageIndex(index, true);\r\n //this.State.SelectedPageIndex = index;\r\n return;\r\n }\r\n });\r\n }\r\n\r\n this.SetPageIndex(index, true);\r\n //this.State.SelectedPageIndex = index;\r\n }\r\n\r\n this.shoppingCartEndpoint.ValidateItems()\r\n .subscribe(r => {\r\n this.ProcessValidationResult(r);\r\n if (this.State.ItemValidationResult?.Status !== EnumValidationStatus.Error) {\r\n action();\r\n (this.State.SelectedPageIndex === 0) &&\r\n this.uiComponentService.ProcessAlerts(this.State.ItemValidationResult.ValidationMessage, 15000);\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 if (this.State.SelectedPageIndex === this.State.LastStepIndex) {\r\n this.CompleteCheckout();\r\n return;\r\n }\r\n\r\n if (this.State.SelectedPageIndex === 1) {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) {\r\n this.OnValidateError();\r\n return;\r\n } else {\r\n this.State.SelectedPageIndex = this.IsSignatureEnabled ? 2 : 3;\r\n return;\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (this.State.SelectedPageIndex === 2 \r\n && this.Entity?.DocumentOption.SignatureOption === EnumFormFieldOptions.Mandatory \r\n && !this.Entity?.SignatureBase64) {\r\n return;\r\n }\r\n\r\n this.State.SelectedPageIndex += 1;\r\n };\r\n\r\n this.shoppingCartEndpoint.ValidateItems().subscribe(r => {\r\n this.ProcessValidationResult(r);\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 this.State.LastStepIndex = this.IsPaymentEnabled ? 3 : this.IsSignatureEnabled ? 2 : 1;\r\n const buttons = [];\r\n buttons.push({\r\n Index: 0,\r\n Label: 'lblCheckoutGotoDetails'\r\n });\r\n buttons.push({\r\n Index: 1,\r\n Label: this.IsSignatureEnabled \r\n ? 'lblCheckoutGotoSignature' : this.IsPaymentEnabled ? 'lblCheckoutGotoPayment' : 'btnCompleteCheckout',\r\n DocumentType: (!this.IsSignatureEnabled && !this.IsPaymentEnabled) ? this.State.DocumentTypeText : null\r\n });\r\n\r\n if (this.IsSignatureEnabled) {\r\n buttons.push({\r\n Index: 2,\r\n Label: this.IsPaymentEnabled ? 'lblCheckoutGotoPayment' : 'btnCompleteCheckout',\r\n DocumentType: !this.IsPaymentEnabled ? this.State.DocumentTypeText : null\r\n });\r\n }\r\n if (this.IsPaymentEnabled) {\r\n buttons.push({\r\n Index: 3,\r\n Label: 'btnCompleteCheckout',\r\n DocumentType: this.State.DocumentTypeText\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.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\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).subscribe(result => {\r\n if (result) {\r\n this.documentEndpoint.SaveDocument(this.Entity).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.SetPageIndex(1, false);\r\n //this.State.SelectedPageIndex = 1;\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.SetPageIndex(2, true);\r\n //this.State.SelectedPageIndex = 2;\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.SetPageIndex(3, true);\r\n //this.State.SelectedPageIndex = 3;\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(this.Entity);\r\n }\r\n\r\n OnPreSaveDetails() {\r\n if (this.State.IsDisablePreSave) return;\r\n\r\n this.preSaveShoppingCartQueue.next(this.Entity);\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.SelectedPageIndex === 3 && !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 CompletedDocument: DocumentView;\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.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\r\n }\r\n this.shoppingCartService.load(true);\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(true);\r\n this.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\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) {\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.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\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.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\r\n }\r\n }\r\n }\r\n\r\n TryShowItemsValidation(): boolean {\r\n if (!!this.State.ItemValidationResult) {\r\n this.SetPageIndex(0, false);\r\n //this.State.SelectedPageIndex = 0;\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(['/pages/edit-shopping-cart-item'], { UniqueItemID: shoppingCartItem.UniqueItemID, IsDuplicate: isDuplicate });\r\n }\r\n\r\n override OnCustomerChanged() { }\r\n\r\n abstract HandlePaymentDoneChanged(anyPaymentDone: boolean);\r\n abstract SetPageIndex(index: number, toTop: boolean);\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\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 DisplayMenuItems: any[] = [];\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 super(A, 'DesktopCheckoutComponent', documentEndpoint, itemsService,\r\n shoppingCartService, customerService, documentService, sidebarService, addonService, shoppingCartEndpoint, uiComponentService);\r\n }\r\n\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n\r\n override OnInitComponent() {\r\n if (!this.A.Screen.IsMobile()) {\r\n this.Navigate(['/pages/checkoutdesktop']);\r\n return;\r\n }\r\n\r\n this.InitDisplayMenuItems();\r\n\r\n super.OnInitComponent();\r\n }\r\n\r\n private InitDisplayMenuItems() {\r\n this.DisplayMenuItems = [{\r\n label: this.RC('lblViewList2'), icon: 'mdi mdi-view-list', command: () => { this.State.ItemDisplayMode = EnumShoppingCartItemViewOptions.List; },\r\n }, {\r\n label: this.RC('lblViewCompact'), icon: 'mdi mdi-subtitles-outline', command: () => { this.State.ItemDisplayMode = EnumShoppingCartItemViewOptions.Compact; },\r\n }];\r\n\r\n this.DisplayMenuItems.push({\r\n separator: true\r\n });\r\n this.DisplayMenuItems.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.DisplayMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.DisplayMenuItems.push({\r\n separator: true\r\n });\r\n this.DisplayMenuItems.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.DisplayMenuItems.some(mi => mi.key === 'RemoveAll')) {\r\n this.DisplayMenuItems = this.DisplayMenuItems.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.DisplayMenuItems.some(item => item.label === promotionItem.label)) {\r\n this.DisplayMenuItems = [...this.DisplayMenuItems, { separator: true }, promotionItem];\r\n } else if (!disabledPromotionsExist && this.DisplayMenuItems.some(item => item.label === promotionItem.label)) {\r\n const itemIndex = this.DisplayMenuItems.findIndex(item => item.label === promotionItem.label);\r\n if (itemIndex > -1) {\r\n this.DisplayMenuItems = [\r\n ...this.DisplayMenuItems.slice(0, itemIndex - 1),\r\n ...this.DisplayMenuItems.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 SetPageIndex(index: number, toTop: boolean) {\r\n this.State.SelectedPageIndex = index;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\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\";","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\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\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 super(A, 'DesktopCheckoutComponent', documentEndpoint, itemsService,\r\n shoppingCartService, customerService, documentService, sidebarService, addonService, shoppingCartEndpoint, uiComponentService);\r\n }\r\n\r\n @ViewChild('shoppingCartItems') shoppingCartItems: ShoppingCartItemsComponent;\r\n @ViewChild('pagesScroll') pagesScroll: DxScrollViewComponent;\r\n \r\n ContextMenuItems: any[] = [];\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 if (this.A.Screen.IsMobile()) {\r\n this.Navigate(['/pages/checkoutmobile']);\r\n return;\r\n }\r\n\r\n this.InitContextMenuItems();\r\n\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.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 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 SetPageIndex(index: number, toTop: boolean) {\r\n this.State.SelectedPageIndex = index;\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 \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\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
\";","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-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() SelectedPageIndex: number = 0;\r\n @Input() EnableSignature: boolean = false;\r\n @Input() EnablePayment: boolean = false;\r\n @Input() DocumentTypeText: string;\r\n @Input() HideDescription: boolean;\r\n @Output() OnPageIndexChanged = new EventEmitter()\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CheckoutNavigatorComponent', State);\r\n }\r\n\r\n // get SummaryLabel(): string {\r\n // return this.RC('lblCheckoutMainTabDesc', this.DocumentTypeText);\r\n // }\r\n\r\n // get PaymentLabel(): string {\r\n // return this.RC('lblCheckoutPaymentTabDesc', this.DocumentTypeText?.toLowerCase());\r\n // }\r\n\r\n override OnInitComponent() {\r\n }\r\n\r\n override OnDestroyComponent() {\r\n }\r\n\r\n SetTab(index: number) {\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 {{'lblCheckoutMainTabTitle' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
=1}\\\" (click)=\\\"SetTab(1)\\\">\\r\\n
\\r\\n
\\r\\n {{'lblCheckoutDetailsTabTitle' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
=2}\\\" (click)=\\\"SetTab(2)\\\">\\r\\n
\\r\\n
\\r\\n {{'titleSignature' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n \\r\\n
=3}\\\" (click)=\\\"SetTab(3)\\\">\\r\\n
\\r\\n
\\r\\n {{'lblCheckoutPaymentTabTitle' | RC:THIS}}\\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 { 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\n\r\nclass State extends BaseOptionState {\r\n DocumentOption: DocumentOption;\r\n CanCompleteSharing: boolean = null;\r\n ShareButtonText: string = null;\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 get Entity() {\r\n return this._entity;\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 super(A, 'CheckoutCompletedComponent', State);\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 if (!this.State.CustomerOption?.FeatureOption?.IsEnableCatalogue) return;\r\n this.Navigate(['pages/catalogueN']);\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(['/pages/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 : this.RC('lblShareSend');\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
{{RC('lblCheckoutSuccessful1', GetDocumentTypeText())}}
\\r\\n
{{Entity?.DocumentNumber}}
\\r\\n \\r\\n {{Entity?.DocumentNumber}}\\r\\n \\r\\n
{{'lblCheckoutSuccessful2' | 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
\";","import { Component, Input } from '@angular/core';\r\nimport { ItemDisplayElementOption } from '@dino-proxy/entities/itemdisplayelementoption.entity';\r\nimport { 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 { DisplayType, ItemOptionService } 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\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n ElementOption = new ItemDisplayElementOption;\r\n Item: ItemView;\r\n}\r\n\r\n@Component({\r\n selector: 'app-dashboard-item',\r\n templateUrl: './dashboard-item.component.html',\r\n styleUrls: ['./dashboard-item.component.scss']\r\n})\r\nexport class DashboardItemComponent extends BaseComponent {\r\n @Input() ItemID: number;\r\n @Input() ItemOptionID: number;\r\n @Input() ImageVersion: number;\r\n @Input() AlternativeItemID: number;\r\n @Input() AlternativeItemType: ImageTypeEnums;\r\n @Input() ItemCode: string;\r\n @Input() ItemName: string;\r\n @Input() Quantity: number;\r\n @Input() IsShowItemPopup: boolean;\r\n @Input() RouteCustomerID: number;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemOptionService: ItemOptionService) {\r\n super(A, 'DashboardItemComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.ElementOption = this.itemOptionService.GetItemOption(this.ItemOptionID, DisplayType.List) || new ItemDisplayElementOption;\r\n this.State.Item = {\r\n EntryID: this.ItemID,\r\n ImageVersions: [{\r\n ImageVersion: this.ImageVersion,\r\n EntryID: this.ItemID,\r\n AlternativeEntryID: this.AlternativeItemID,\r\n AlternativeEntryType: this.AlternativeItemType\r\n } as unknown as ImageVersionView]\r\n } as ItemView;\r\n }\r\n\r\n \r\n\r\n HandleNavigate() {\r\n this.IsShowItemPopup && this.Navigate([\"/pages/itemN\", this.ItemID], this.RouteCustomerID ? { CustomerID: this.RouteCustomerID}: null);\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{ItemName}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsItemCode' | RC:THIS}}: {{ItemCode}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMyDetailsItemTotal' | RC:THIS}}: {{Quantity | formatNumberSum}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\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-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 super(A, 'ItemVariationButtonComponent', State);\r\n }\r\n\r\n \r\n\r\n HandleShowVariations() {\r\n this.Navigate([\"/pages/itemN\", this.Item.EntryID], { Tab: 'VariationsTab' });\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 { 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\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.List;\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 super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'CompactItemComponent');\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 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 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\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 { EnumDisplayGroupingOptions, EnumItemBadgeTypes } 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 { baseZIndex } from 'devextreme/ui/overlay';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ItemView } from '@dino-proxy/views/item.view';\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\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\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 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 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 });\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\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 if (this.getItems$Subscription && !this.getItems$Subscription.closed) this.getItems$Subscription.unsubscribe();\r\n\r\n this.getItems$Subscription = this.itemsService\r\n .getItems(ItemsFilter.GetItemListParams(filter, this.State.PageSize))\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 // 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, 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\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 super(A, 'MobileListComponent', screenService, itemsService, itemsFilterService, customerService, shoppingCartService);\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 //console.log(e);\r\n //\r\n const minActionDelta = 0; // 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 (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}\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, 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 } 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, 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 { 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\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 \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 = this.LIST('EnumDisplaySortingOptions');\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 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 } 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
\";","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\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-complete-button',\r\n templateUrl: './complete-button.component.html',\r\n styleUrls: ['./complete-button.component.scss']\r\n})\r\nexport class CompleteButtonComponent extends BaseComponent {\r\n @Input() SelectedPageIndex: number;\r\n @Input() ShoppingCartLength: number;\r\n @Input() IsTermsOfUseAgreed: number;\r\n @Input() CheckoutButtons: any[] = [];\r\n @Input() Disabled: boolean;\r\n @Input() LastStepIndex: number;\r\n @Output() OnClick = new EventEmitter();\r\n\r\n private get GetButtonLabel(): string {\r\n let currentButton = this.CheckoutButtons?.find(button => \r\n button.Index === this.SelectedPageIndex\r\n );\r\n return !!currentButton ? this.RC(currentButton.Label, currentButton.DocumentType) : '';\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CompleteButtonComponent\", State);\r\n }\r\n\r\n \r\n\r\n HandleClick() {\r\n this.OnClick.emit();\r\n }\r\n}","export default \"\\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
\";","\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 { DocumentLine } from './../entities/document.entity';\r\nimport { DocumentSpecialItem } from './../entities/document.entity';\r\nimport { DocumentBatchLine } from './../entities/document.entity';\r\nimport { DocumentSerialNumberLine } from './../entities/document.entity';\r\nexport class Order extends Document {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Order';\r\n }\r\n \r\n\t\r\n}\r\n\r\nexport class OrderLine extends DocumentLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'OrderLine';\r\n }\r\n \r\n public LineID: number;\r\n}\r\nexport class OrderSpecialItem extends DocumentSpecialItem {\r\n constructor() {\r\n super();\r\n this.TypeName = 'OrderSpecialItem';\r\n }\r\n \r\n public LineID: number;\r\n}\r\nexport class OrderBatchLine extends DocumentBatchLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'OrderBatchLine';\r\n }\r\n \r\n public LineID: number;\r\n}\r\nexport class OrderSerialNumberLine extends DocumentSerialNumberLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'OrderSerialNumberLine';\r\n }\r\n \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { Order } from '@dino-proxy/entities/order.entity';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\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-dashboard-orders-grid',\r\n templateUrl: './dashboard-orders-grid.component.html',\r\n styleUrls: ['./dashboard-orders-grid.component.scss']\r\n})\r\nexport class DashboardOrdersGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DashboardOrdersGridComponent', Order, State);\r\n } \r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/document'], { DocumentID: e.data.EntryID, DocumentType: EnumDocumentTypes.Order });\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n {{cell.data.DocumentNumber}}\\r\\n \\r\\n \\r\\n {{cell.data.DocumentNumber}}\\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 \\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseOptionState } from '@dino-classes/base-option-state';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\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-dashboard-orders-list',\r\n templateUrl: './dashboard-orders-list.component.html',\r\n styleUrls: ['./dashboard-orders-list.component.scss']\r\n})\r\nexport class DashboardOrdersListComponent extends BaseComponent {\r\n @Input() DataSource: OrderView[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DashboardOrdersListComponent', State);\r\n }\r\n\r\n OnNavigate(order) {\r\n this.Navigate(['/pages/document'], { DocumentID: order.EntryID, DocumentType: EnumDocumentTypes.Order });\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 {{'lblViewMore' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\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}","\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 { 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 providers: ServiceBagServices,\r\n selector: 'app-terms-of-use-option',\r\n templateUrl: './terms-of-use-option.component.html',\r\n styleUrls: ['./terms-of-use-option.component.scss']\r\n})\r\nexport class TermsOfUseOptionComponent extends BasePageCRUDComponent {\r\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n constructor(A: ServiceBagService,\r\n endpoint: TermsOfUseOptionEndpoint) {\r\n super(A, 'TermsOfUseOptionComponent', TermsOfUseOption, 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 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 OnShowInEditor() {\r\n this.htmlEditorDialog.ShowDialogShort((state: any) => {\r\n this.Entity.Content = state.HTMLBody;\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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\";","\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 { AllCustomersTopQuantityItem } from './../entities/allcustomerstopquantityitem.entity';\r\nimport { AllCustomersTopFrequentItem } from './../entities/allcustomerstopfrequentitem.entity';\r\nimport { CustomerLoginsResult } from './../entities/customerloginsresult.entity';\r\nimport { ItemSearchCountResult } from './../entities/itemsearchcountresult.entity';\r\nimport { AllOrderedItemsCountResult } from './../entities/allordereditemscountresult.entity';\r\nimport { AllOrdersByCustomerCountResult } from './../entities/allordersbycustomercountresult.entity';\r\nimport { SystemCustomersCountResult } from './../entities/systemcustomerscountresult.entity';\r\nimport { AdminDashboardParams } from './../params/admindashboard.param';\r\n@Injectable()\r\nexport class AdminDashboardEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AdminDashboard\", api);}\r\n\t\r\n\r\n public GetTopQuantityItems(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTopQuantityItems', Params, undefined );\r\n }\r\n\r\n public GetTopFrequentItems(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTopFrequentItems', Params, undefined );\r\n }\r\n\r\n public GetUniqueCustomerLogins(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetUniqueCustomerLogins', Params, undefined );\r\n }\r\n\r\n public GetItemSearchesCount(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetItemSearchesCount', Params, undefined );\r\n }\r\n\r\n public GetAllOrderedItemsCount(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetAllOrderedItemsCount', Params, undefined );\r\n }\r\n\r\n public GetAllOrdersByCustomersCount(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetAllOrdersByCustomersCount', Params, undefined );\r\n }\r\n\r\n public GetCustomersInPortalCount(Params: AdminDashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetCustomersInPortalCount', Params, undefined );\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 { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { GridExtender } from \"@m4u-angular/base/grid/Grid.extender\";\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from \"@m4u-angular/core/framework/sysenums.enum\";\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 { CustomerEndpoint } from \"@dino-proxy/endpoints/customer.endpoint\";\r\n\r\nclass State extends BaseState {\r\n ExternalQueryResult: ExternalQueryResult;\r\n Data: {}[];\r\n IsLoading = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-external-query-popup',\r\n templateUrl: './external-query-popup.component.html',\r\n styleUrls: ['./external-query-popup.component.scss']\r\n})\r\nexport class ExternalQueryPopupComponent extends BasePageComponent implements IGridComponent {\r\n @ViewChild(DxDataGridComponent) grid: DxDataGridComponent;\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 customerEndpoint: CustomerEndpoint,\r\n private externalQueryEndpoint: ExternalQueryEndpoint) {\r\n super(A, \"ExternalQueryPopupComponent\", ExternalQuery, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\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 if (!!this.Entity?.Description) {\r\n return `${this.Entity.VisibleName} (${this.Entity.Description})`;\r\n }\r\n return `${this.Entity.VisibleName}`;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.Entity || !this.Entity.EntryID) { return; }\r\n\r\n this.State.Data = [];\r\n this.State.IsLoading = true;\r\n this.externalQueryEndpoint.GetExternalQueryData(this.Entity.EntryID)\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 },\r\n error: () => { this.State.IsLoading = false; }\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, 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 { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { AdminDashboardEndpoint } from '@dino-proxy/endpoints/admindashboard.endpoint';\r\nimport { AllCustomersTopQuantityItem } from '@dino-proxy/entities/allcustomerstopquantityitem.entity';\r\nimport { AllCustomersTopFrequentItem } from '@dino-proxy/entities/allcustomerstopfrequentitem.entity';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { AdminDashboardParams } from '@dino-proxy/params/admindashboard.param';\r\nimport { ItemSearchCountResult } from '@dino-proxy/entities/itemsearchcountresult.entity';\r\nimport { AllOrderedItemsCountResult } from '@dino-proxy/entities/allordereditemscountresult.entity';\r\nimport { AllOrdersByCustomerCountResult } from '@dino-proxy/entities/allordersbycustomercountresult.entity';\r\nimport { CustomerLoginsResult } from '@dino-proxy/entities/customerloginsresult.entity';\r\nimport { SystemCustomersCountResult } from '@dino-proxy/entities/systemcustomerscountresult.entity';\r\nimport { ExternalQueryPopupComponent } from '@dino-pages/customers/components/external-query/external-query-popup.component';\r\n\r\nclass State extends BaseOptionState {\r\n TopQuantityItems: AllCustomersTopQuantityItem[];\r\n TopFrequentItems: AllCustomersTopFrequentItem[];\r\n CustomerLogins: CustomerLoginsResult[];\r\n ItemSearches: ItemSearchCountResult[];\r\n AllOrderedItems: AllOrderedItemsCountResult[];\r\n AllOrdersByCustomers: AllOrdersByCustomerCountResult[];\r\n SystemCustomersCount: SystemCustomersCountResult[];\r\n CurrentItemsTabIndex: number = 0;\r\n CurrentReportsTabIndex: number = 0;\r\n ItemsTabs: any[] = [];\r\n ReportsTabs: any[] = [];\r\n IsMobile: boolean;\r\n FilterFrom: Date = DateHelpers.AddMonth(new Date, -12);\r\n FilterTo: Date = new Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-dashboard',\r\n templateUrl: './admin-dashboard.component.html',\r\n styleUrls: ['./admin-dashboard.component.scss']\r\n})\r\nexport class AdminDashboardComponent extends BasePageComponent {\r\n @ViewChild(ExternalQueryPopupComponent) externalQueryPopup: ExternalQueryPopupComponent;\r\n \r\n constructor(A: ServiceBagService,\r\n private screenService: ScreenService,\r\n private adminDashboard: AdminDashboardEndpoint) {\r\n super(A, 'AdminDashboardComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n this.GetTopItems();\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ItemsTabs = this.LIST(\"AdminDashboardItemsTabs\");\r\n this.State.ReportsTabs = this.LIST(\"AdminDashboardReportsTabs\");\r\n }\r\n\r\n HandleShowExternalQuery(query: ExternalQuery) {\r\n this.externalQueryPopup.ShowDialogShort(() => { }, null, false, query);\r\n // this.externalQueryPopup.InitDialog(query);\r\n // this.externalQueryPopup.ShowDialog(() => { });\r\n }\r\n \r\n onFilterChanged() {\r\n this.GetTopItems();\r\n }\r\n\r\n private GetTopItems() {\r\n const params = {\r\n FilterFrom: this.State.FilterFrom,\r\n FilterTo: this.State.FilterTo\r\n } as AdminDashboardParams;\r\n\r\n if (!params.FilterFrom || !params.FilterTo || !this.validateFilterDate()) return;\r\n \r\n this.adminDashboard.GetTopQuantityItems(params).subscribe(response => this.State.TopQuantityItems = response.Entities);\r\n this.adminDashboard.GetTopFrequentItems(params).subscribe(response => this.State.TopFrequentItems = response.Entities);\r\n this.adminDashboard.GetUniqueCustomerLogins(params).subscribe(response => this.State.CustomerLogins = response.Entities);\r\n this.adminDashboard.GetCustomersInPortalCount(params).subscribe(response => this.State.SystemCustomersCount = response.Entities);\r\n this.LoadReportByTabIndex(this.State.CurrentReportsTabIndex);\r\n }\r\n\r\n LoadReportByTabIndex(e) {\r\n let tabIndex = (typeof e === 'number') ? e : e.itemIndex;\r\n\r\n const params = {\r\n FilterFrom: this.State.FilterFrom,\r\n FilterTo: this.State.FilterTo\r\n } as AdminDashboardParams;\r\n\r\n (tabIndex === 0) && (this.adminDashboard.GetAllOrderedItemsCount(params).subscribe(response => this.State.AllOrderedItems = response.Entities));\r\n (tabIndex === 1) && (this.adminDashboard.GetAllOrdersByCustomersCount(params).subscribe(response => this.State.AllOrdersByCustomers = response.Entities));\r\n (tabIndex === 2) && (this.adminDashboard.GetItemSearchesCount(params).subscribe(response => this.State.ItemSearches = response.Entities));\r\n }\r\n\r\n getSystemCustomerCountName = (seriesInfo: any): string => {\r\n return '
' + '' + this.RC('lbl' + seriesInfo.pointName) + '' + '\\n' +\r\n '' + this.State.SystemCustomersCount.find(val => val.Name === seriesInfo.pointName).Count + '
';\r\n }\r\n\r\n calculateTotal = (): number => {\r\n if (!this.State.SystemCustomersCount) return 0;\r\n \r\n const totalValue = this.State.SystemCustomersCount.reduce((sum, current) => sum + current.Count, 0);\r\n return totalValue;\r\n }\r\n\r\n validateFilterDate = (): boolean => {\r\n return !(this.State.FilterFrom > this.State.FilterTo);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{info.point.data.Date | formatDate }}\\r\\n
\\r\\n {{'lblCustomers' | RC:THIS}}\\r\\n {{info.point.data.LoginsCount}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{'lblCustomersPortalUsageChart' | RC:THIS}}\\r\\n \\r\\n {{\\r\\n calculateTotal(pieChart)\\r\\n }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\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 { Item } from '@dino-proxy/entities/item.entity';\r\nimport { 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 { DisplayType, ItemOptionService } 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\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-admin-dashboard-item',\r\n templateUrl: './admin-dashboard-item.component.html',\r\n styleUrls: ['./admin-dashboard-item.component.scss']\r\n})\r\nexport class AdminDashboardItemComponent extends BaseComponent {\r\n @Input() ItemID: number;\r\n @Input() ItemCode: string;\r\n @Input() ItemName: string;\r\n @Input() Quantity: number;\r\n @Input() ItemRatioPercent: number;\r\n @Input() IsShowItemPopup: boolean;\r\n\r\n constructor(A: ServiceBagService,\r\n private itemOptionService: ItemOptionService) {\r\n super(A, 'AdminDashboardItemComponent', State);\r\n }\r\n\r\n \r\n\r\n HandleNavigate() {\r\n this.IsShowItemPopup && this.Navigate([\"/pages/itemN\", this.ItemID]);\r\n }\r\n}\r\n\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{ItemName}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ItemCode}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{Quantity | formatNumberSum}} \\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 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\";","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 SpecificationAttribute;\r\n } else {\r\n attr = a 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, 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 TotalBalanceComponent extends BaseComponent {\r\n\r\n @Input() ShowAmount: boolean;\r\n @Input() ShowMaxAmount: boolean;\r\n @Input() ShowNavigateLink: boolean;\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() Amount: number;\r\n @Input() MaxAmount: number;\r\n @Input() IsMobile: boolean;\r\n\r\n @Output() OnNavigateClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceComponent', BaseState);\r\n }\r\n\r\n NavigateTo() {\r\n this.OnNavigateClick.emit();\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
{{'lblTotal' | RC:THIS}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblMax' | RC:THIS}}
\\r\\n
\\r\\n {{ MaxAmount | formatPriceWithCurrency: Currency: true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, TemplateRef, Input, Output, EventEmitter, ViewChild } from '@angular/core';\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-list',\r\n templateUrl: './ledger-list.component.html',\r\n styleUrls: ['./ledger-list.component.scss']\r\n})\r\nexport class LedgerListComponent 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, 'LedgerListComponent', 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(['/pages/document'], { DocumentID: item.SBODocumentEntry, DocumentType: type });\r\n }\r\n else if (docType === 24 ) { // receipt\r\n this.Navigate(['/pages/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\";","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 @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) { 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\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 } 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\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 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\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\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([\"/pages/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\";","\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\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 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, 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}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\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 { 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\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 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 { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { GiftCard } from '@dino-proxy/entities/giftcard.entity';\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(['/pages/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 { 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\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 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.Navigate([\"/pages/itemN\", this.Item?.EntryID], { Tab: 'PromotionsTab' });\r\n }\r\n }\r\n}\r\n","export default \"\\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
\";","\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 IsAllowAllItems: boolean; \r\n public DefaultCustomerGroupID: number; \r\n public DefaultPaymentTermsID: number; \r\n public DefaultPriceListNumber: 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 { 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","\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\n\r\nclass State extends BaseOptionState {\r\n PriceListNumbers: GenericListEntity[] = [];\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 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 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\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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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-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\";","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 \";","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(this.RC(\"msgCouponNotApplied\"));\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 } 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\n\r\nclass State extends BaseOptionState {\r\n CustomerID: number;\r\n SidePanelPageComponentName: string;\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\r\n constructor(A: ServiceBagService,\r\n private customerEndpoint: CustomerEndpoint,\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\r\n override OnCustomerChanged() { \r\n this.State.CustomerID = this.CustomerID;\r\n }\r\n\r\n OnCurrentCustomerChanged() {\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\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 CurrencyActual: 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 ItemOptionID: 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\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 { 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\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 super(A, 'CustomersGridComponent', 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 OnRowClick(e) {\r\n if (!this.ForSelect) {\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.Navigate(['/pages/customer-details-window', id]);\r\n }\r\n}\r\n","export default \"\\r\\n \\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\";","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\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 this.Navigate(['/pages/customer-details-window/new'], { 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}\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 }\r\n}","export default \"
\\r\\n \\r\\n
{{'lblCustomerNotSelected' | 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 { 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\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 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).IsAllowEdit);\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 const url = this.State.IsMobile ? '/pages/create-receipt-mobile' : '/pages/create-receipt-desktop';\r\n this.Navigate([url]);\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
\";","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\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.List;\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 super(A, shoppingCartService, addonService, itemOptionService, customerOptionService, uiComponentService, 'UltraCompactItemComponent');\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 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, 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, 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 { BarcodeBoxDialogComponent } from '@m4u-angular/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\n\r\nclass State extends BaseOptionState {\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 @ViewChild('barcode') barcodeBoxDialog: BarcodeBoxDialogComponent;\r\n @Output() OnBarcodeValueChanged: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PriceComponent', State);\r\n }\r\n\r\n OnOpenBarcodeDialog() {\r\n this.barcodeBoxDialog.ShowDialogShort((result) => { });\r\n }\r\n\r\n OnTextDecoded(value) {\r\n this.barcodeBoxDialog.CloseDialog(true);\r\n this.OnBarcodeValueChanged.emit(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\";","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, EnumFormFieldOptions } from '@dino-proxy/enums';\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 CurrentTabIndex = 0;\r\n Tabs: any[] = [];\r\n OnlyVisibleOptions: GenericListEntity[] = [];\r\n WithoutViewOptions: GenericListEntity[] = [];\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 super(A, 'DocumentOptionComponent', DocumentOption, 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 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 protected override OnEntitySaved() {\r\n this.NavigateBack();\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 index: 5,\r\n text: this.RC('lblDocumentViewSection'),\r\n Name: \"ViewSection\"\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 }\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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\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\\t\\t\\t\\r\\n\\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\\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\\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\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\t\\t\\t\\t\\r\\n\\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\\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\\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\\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\\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\\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\\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
\\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 { 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 { 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\";","\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","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\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}\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 @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 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.State.EditShoppingCartItem = Utils.CloneObject(shoppingCartItem);\r\n this.State.EditShoppingCartItem.UniqueItemID = this._uniqueItemID;\r\n if (this.Item?.ItemOptionID) {\r\n this.State.ElementOption = this.itemOptionService.GetItemOption(this.Item.ItemOptionID, DisplayType.List) || new ItemDisplayElementOption;\r\n this.State.PopupOption = 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 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[name + 'Option'] as EnumFormFieldOptions;\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.Navigate(['/pages/itemN', this.Item?.EntryID], { Tab: 'AvailabilityTab' });\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 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 }\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\";","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 \"\";","\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 { 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, 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
\";","\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 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\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 this.Navigate(['/pages/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\nimport { EnumDocumentTypes } from './../enums';\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, documentType: EnumDocumentTypes, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetItemSales', {itemId: itemId, currentCustomerOnly: currentCustomerOnly, documentType: documentType, options:options?.GetLoadOptions()} );\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 @Input() ItemSaleDocumentType: EnumDocumentTypes;\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, this.ItemSaleDocumentType, 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, this.ItemSaleDocumentType, 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\";","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\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}\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 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.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.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 }\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(['pages/shoppingcartN']);\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(['pages/shoppingcartN']);\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 { 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\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 this.Navigate(['/pages/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 { 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
\";","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\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();\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(['pages/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();\r\n }\r\n });\r\n this.RegisterSubscription(updatedSubscription);\r\n\r\n this.LoadDataSource();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['Documents'] = null;\r\n if (!this.State.DocumentType) 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();\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\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","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 { 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 { 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\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\";","\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 { DuplicateDocumentParams } 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\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\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(['/pages/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
\";","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, 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 } 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 { DuplicateDocumentParams } 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\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}\r\n\r\nconst DocumentItemDisplayTypeStorageKey = 'DocumentItemDisplayType';\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('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\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 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 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) this.Navigate(['/pages/catalogueN']);\r\n\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n const documentTypePerm = this.documentService.IsDocumentTypeAvailable(this.State.DocumentType);\r\n if (!documentTypePerm.IsAllowView) this.Navigate(['/pages/catalogueN']);\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 label: this.RC('lblPrintOrder'), command: () => {\r\n this.Entity?.HasDocumentPDF && this.HandleGetPDF();\r\n }\r\n });\r\n\r\n let tabs: any[];\r\n const allTabs = this.LIST('DocumentDetailsTabs') as any[];\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 }\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 } as DuplicateDocumentParams;\r\n\r\n this.documentEndpoint.DuplicateDocument(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 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(['pages/shoppingcartN'], { 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.Navigate([path]);\r\n }, () => { }, false, this.Entity);\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(['/pages/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) {\r\n (this.pcm as any).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.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) {\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(['/pages/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?.IsShowShare && 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.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Order);\r\n if (customerOptions.DeliveryNoteOption.IsAllowBaseDocument && customerOptions.DeliveryNoteOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n if (customerOptions.InvoiceOption.IsAllowBaseDocument && customerOptions.InvoiceOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n break;\r\n case EnumDocumentTypes.Order:\r\n if (customerOptions.DeliveryNoteOption.IsAllowBaseDocument && customerOptions.DeliveryNoteOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n if (customerOptions.InvoiceOption.IsAllowBaseDocument && customerOptions.InvoiceOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n break;\r\n case EnumDocumentTypes.Invoice:\r\n if (customerOptions.RefundOption.IsAllowBaseDocument && customerOptions.RefundOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Refund);\r\n if (customerOptions.ReturnRequestOption.IsAllowBaseDocument && customerOptions.ReturnRequestOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.ReturnRequest);\r\n break;\r\n case EnumDocumentTypes.DeliveryNote:\r\n if (customerOptions.InvoiceOption.IsAllowBaseDocument && customerOptions.InvoiceOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Invoice);\r\n if (customerOptions.ReturnRequestOption.IsAllowBaseDocument && customerOptions.ReturnRequestOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.ReturnRequest);\r\n if (customerOptions.ReturnOption.IsAllowBaseDocument && customerOptions.ReturnOption.IsAllowEdit) 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.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Refund);\r\n if (customerOptions.DeliveryNoteOption.IsAllowBaseDocument && customerOptions.DeliveryNoteOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.DeliveryNote);\r\n break;\r\n case EnumDocumentTypes.ReturnRequest:\r\n if (customerOptions.ReturnOption.IsAllowBaseDocument && customerOptions.ReturnOption.IsAllowEdit) availableDocumentTypes.push(EnumDocumentTypes.Return);\r\n if (customerOptions.RefundOption.IsAllowBaseDocument && customerOptions.RefundOption.IsAllowEdit) 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 if (localStorage) {\r\n const itemDisplayType = localStorage.getItem(DocumentItemDisplayTypeStorageKey);\r\n if (itemDisplayType) {\r\n this.State.ItemDisplayType = itemDisplayType as EnumShoppingCartItemViewOptions;\r\n } else {\r\n this.State.ItemDisplayType = EnumShoppingCartItemViewOptions.List;\r\n }\r\n }\r\n\r\n const documentOption = this.State.DocumentOption;\r\n (documentOption?.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 (documentOption?.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 (documentOption?.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 localStorage && localStorage.setItem(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","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\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) || (State.CurrentTabIndex !== 2 && Entity.DocumentBatches.length === 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 {{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\";","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}\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 }\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 { 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\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDocumentProcessingStatus } from './../enums';\r\nimport { EnumDocumentTypes } 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 InvoiceID: number; \r\n public Status: EnumDocumentProcessingStatus; \r\n public DocumentType: EnumDocumentTypes; \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 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 { 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 } 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\n\r\nclass State extends BaseOptionState {\r\n\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([\"/pages/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 \\r\\n \\r\\n
\\r\\n {{cell.data.CustomerCardName}}\\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 { 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 { 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\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\tsuper(A, 'CustomersListComponent', State);\r\n\t}\r\n\r\n\tOnNavigate(entryID: number) {\r\n\t\tthis.Navigate([\"/pages/customer-details-window\", entryID]);\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\\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
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\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
{{'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
\";","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}","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\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}\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 = 'ledgers';\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 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.Navigate(['pages/catalogueN']);\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().subscribe(r => this.State.PriceListNumbers = r.Entities);\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([`/pages/${this.LedgerRoute}`], {Open: true, CustomerID: this.EntityEntryID})\r\n } else {\r\n this.Navigate([`/pages/${this.LedgerRoute}`], {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([`/pages/${this.DashboardRoute}`], {CustomerID: this.EntityEntryID})\r\n } else {\r\n this.Navigate([`/pages/${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(['/pages/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(['/pages/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(['/pages/deliverynotes'], { 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(['/pages/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(['/pages/returnrequests'], { 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(['/pages/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(['/pages/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(['/pages/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 }\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 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: 0,\r\n text: this.RC('lblCustomerDetailGeneral'),\r\n Name: \"General\"\r\n });\r\n }\r\n\r\n if (this.ShowAddresses) {\r\n let nextIndex = ++tabIdx;\r\n this.State.Tabs.push({\r\n index: nextIndex,\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.ContactPersonsTabsIndex = ++tabIdx;\r\n this.State.Tabs.push({\r\n index: this.ContactPersonsTabsIndex,\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 }\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([`pages/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 this.State.ContactPersonsToUpdate = this.State.ContactPersonsToUpdate.map(cp => cp.EntryID === contact.EntryID ? contact : cp);\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 this.State.CustomerAddressesToUpdate = this.State.CustomerAddressesToUpdate.map(ad => ad.EntryID === address.EntryID ? address : ad);\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 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.MaxAddressEntryID) {\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","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\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 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 }\r\n\r\n override LedgerRoute = 'ledgers-window';\r\n override DashboardRoute = \"dashboard-window\";\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\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 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 }\r\n\r\n override LedgerRoute = 'ledgers-full';\r\n override DashboardRoute = \"dashboard-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.Navigate([\"pages/catalogueN\"]);\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).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, 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, 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 Step: number = 1;\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 @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 this._quantity--;\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 this._quantity++;\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 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();\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 { 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\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}\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 super(A, 'CustomersComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsMobile = this.A.Screen.IsMobile();\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['CustomersAdmin'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.GetListShallow(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\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([\"/pages/customer-details-window/new\"]);\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\";","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
{{'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\";","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\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 super(A, 'DesktopListComponent', screenService, itemsService, itemsFilterService, customerService, shoppingCartService);\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
{{'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\";","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 }\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\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\";","\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","\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 { 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 { 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\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}\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 _tabIndex: number = 0;\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 TabIndex(value: number) {\r\n this._tabIndex = value;\r\n if (this.UseShoppingCart && this._tabIndex === 3) {\r\n this.CheckNavigateOnlyOneMethod();\r\n }\r\n if (this.UseShoppingCart && this._tabIndex != 3) {\r\n this.SetTab(1);\r\n }\r\n }\r\n get TabIndex(): number {\r\n return this._tabIndex;\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 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.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.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.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.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 }\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.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.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.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\";","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 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 ImageClass: 'later',\r\n EnumValue: EnumPaymentMeans.Later,\r\n Title: enumList.find(l => l.Value === EnumPaymentMeans.Later).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, 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
\";","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 } 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\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","\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 { ReceiptListParams } from './../params/receiptlist.param';\r\nimport { CreateReceiptParams } from './../params/createreceipt.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\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\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 DocumentRemarks: string; \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\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\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 this.Navigate(['/pages/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
\";","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\n\r\nexport class ReceiptFilterValues {\r\n DateFrom: Date;\r\n DateTo: Date;\r\n CustomerID: number;\r\n DoInitialize?: boolean = false;\r\n}\r\n\r\nclass State extends BaseState {\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 customerService: CustomerService) {\r\n super(A, 'DocumentFilterComponent', State, customerService);\r\n }\r\n\r\n override OnInitComponent() {\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 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 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
\";","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\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 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 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 const url = this.State.IsMobile ? '/pages/create-receipt-mobile' : '/pages/create-receipt-desktop';\r\n this.Navigate([url]);\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\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 { 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\n\r\nclass State extends BaseState {\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}\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\r\n constructor(A: ServiceBagService,\r\n private receiptEndpoint: ReceiptEndpoint,\r\n private screenService: ScreenService,\r\n private customerOptionService: CustomerOptionService,\r\n private customerService: CustomerService,\r\n private framework: FrameworkService) {\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 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(['/pages/receipts']);\r\n\r\n this.State.IsMobile = this.screenService.IsMobile();\r\n\r\n const allowView = this.customerOptionService.GetCustomerOption().PaymentOption.IsAllowReceiptView;\r\n if (!allowView) this.Navigate(['/pages/catalogueN']);\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.OnGetContextMenuItems = this.GetContextMenu;\r\n return settings;\r\n }\r\n\r\n private GetContextMenu = (): ContextMenuElement[] => {\r\n if (!this.Entity || this.Entity.EntryID === -1) {\r\n return;\r\n }\r\n\r\n const menu = [];\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(['/pages/customer-details-window', this.Entity.CustomerID])\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}","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\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
\";","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\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}\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 }\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(['/pages/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 (result.ShoppingPaymentID) {\r\n this.State.ShoppingPaymentID = result.ShoppingPaymentID;\r\n }\r\n\r\n if (result.ExceededAmount > 0) {\r\n this.State.PaymentToAccountAmount += result.ExceededAmount;\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\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(['pages/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(['/pages/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 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, 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
\";","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 { DocumentView } from \"@dino-proxy/views/document.view\";\r\nimport { BaseDocumentView } from \"@dino-proxy/views/basedocument.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\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ShareDocumentDialogComponent', DocumentView, 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\";","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, 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, 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 { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { EnumPromotionEffectItemFilterTypes, EnumPromotionEffectTargetTypes, EnumPromotionItemFilterTypes, EnumPromotionSuggestionType } from \"@dino-proxy/enums\";\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 constructor(A: ServiceBagService, public shoppingCartService: ShoppingCartService) {\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.Navigate([\"/pages/itemN\", EntryID]);\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\";","\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\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 { 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\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(['/pages/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, 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\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(['/pages/document'], { DocumentID: e.data.SBODocumentEntry, DocumentType: e.data.TransTypeString });\r\n } else if (e.data.TransType === 24) {\r\n this.Navigate(['/pages/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.OpenSumOrigin | formatNumberSum }}\\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
{{'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\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, 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\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(BaseGridComponent) grid: BaseGridComponent;\r\n\r\n CustomerDetailsRoute: string = '/pages/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.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) {\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(['/pages/deliverynotes'], {\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(['/pages/deliverynotes'], {\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\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 = '/pages/customer-details-window';\r\n}","import { Component, EventEmitter, 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 @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 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.State.AllowEditCustomer || !this.State.CustomerOption.CustomerDetailOption.IsAllowEditingContacts) 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 { 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\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\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 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.State.AllowEditCustomer || !this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingAddresses) return;\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 }, null, false,\r\n mode === 'new'\r\n ? ({\r\n Country: \"IL\",\r\n IsDefault: false,\r\n } as CustomerAddress)\r\n : Utils.CloneObject(address));\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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 @Input() DataSource: ContactPerson[];\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 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.State.AllowEditCustomer || !this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingContacts) 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
\";","import { Component, EventEmitter, 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\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 @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 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 OnEditAddress(event, mode: 'new' | 'edit') {\r\n if (!this.State.AllowEditCustomer || !this.State.CustomerOption?.CustomerDetailOption?.IsAllowEditingAddresses) return;\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 }, null, false,\r\n mode === 'new'\r\n ? ({\r\n Country: \"IL\",\r\n IsDefault: false,\r\n } as CustomerAddress)\r\n : Utils.CloneObject(event.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\";","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\";","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 \";","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 providers: ServiceBagServices,\r\n selector: 'app-customer-detail-option',\r\n templateUrl: './customer-detail-option.component.html',\r\n styleUrls: ['./customer-detail-option.component.scss']\r\n})\r\nexport class CustomerDetailOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: CustomerDetailOptionEndpoint) {\r\n super(A, 'CustomerDetailOptionComponent', CustomerDetailOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { DashboardOptionEndpoint } from '@dino-proxy/endpoints/dashboardoption.endpoint';\r\nimport { DashboardOption } from '@dino-proxy/entities/dashboardoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-option',\r\n templateUrl: './dashboard-option.component.html',\r\n styleUrls: ['./dashboard-option.component.scss']\r\n})\r\nexport class DashboardOptionComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n endpoint: DashboardOptionEndpoint) {\r\n super(A, 'DashboardOptionComponent', DashboardOption, 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 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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 { DashboardOptionEndpoint } from '@dino-proxy/endpoints/dashboardoption.endpoint';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-option-list',\r\n templateUrl: './dashboard-option-list.component.html'\r\n})\r\nexport class DashboardOptionsListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DashboardOptionEndpoint) {\r\n super(A, 'DashboardOptionsListComponent', 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['DashboardOptionsAdmin'] = 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 \";","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 { DashboardOption } from '@dino-proxy/entities/dashboardoption.entity';\r\n\r\nclass State extends BaseOptionState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-dashboard-option-grid',\r\n templateUrl: './dashboard-option-grid.component.html'\r\n})\r\nexport class DashboardOptionsGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DashboardOptionsGridComponent', DashboardOption, State);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/dashboard-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\";","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\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
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{query.VisibleName}}\\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 { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { TopFrequestItem } from '@dino-proxy/entities/topfrequestitem.entity';\r\nimport { TopQuantityItem } from '@dino-proxy/entities/topquantityitem.entity';\r\nimport { ExternalQuery } from '@dino-proxy/entities/externalquery.entity';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { OrderView } from '@dino-proxy/views/order.view';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BottomSheetListParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { EnumDocumentTypes } from '@dino-proxy/enums';\r\nimport { ExternalQueryPopupComponent } from '@dino-pages/customers/components/external-query/external-query-popup.component';\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\n\r\nclass State extends BaseOptionState {\r\n TopQuantityItems: TopQuantityItem[];\r\n TopFrequestItems: TopFrequestItem[];\r\n ExternalQueries: ExternalQuery[];\r\n RecentOrders: OrderView[];\r\n IsMobile: boolean;\r\n RouteCustomerID: number;\r\n CustomerTitle: 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(ExternalQueryPopupComponent) externalQueryPopup: ExternalQueryPopupComponent;\r\n\r\n CustomerDetailsRoute: string = '/pages/customer-details-full';\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private screenService: ScreenService,\r\n private bottomSheetService: BottomSheetService,\r\n private customerEndpoint: CustomerEndpoint,\r\n private externalQueryEndpoint: ExternalQueryEndpoint,\r\n private documentEndpoint: DocumentEndpoint,\r\n customerService: CustomerService,\r\n pageDisplayMode: EnumPageDisplayModes) {\r\n super(A, componentName, BaseEntity, State, customerService, pageDisplayMode);\r\n }\r\n\r\n override OnInitComponent() { \r\n this.State.IsMobile = this.screenService.IsMobile();\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 this.GetData(this.CustomerID);\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.RouteCustomerID || this.CustomerID) {\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.State.CustomerTitle;\r\n }\r\n\r\n GetData(customerID: number) {\r\n if (!customerID) {\r\n this.State.TopQuantityItems = [];\r\n this.State.TopFrequestItems = [];\r\n this.State.RecentOrders = [];\r\n this.State.ExternalQueries = [];\r\n this.State.CustomerTitle = null;\r\n this.ReloadToolbar();\r\n return;\r\n }\r\n const dashboardOption = this.State.CustomerOption.DashboardOption;\r\n if (dashboardOption.IsShowTopQuantityItems) {\r\n this.customerEndpoint.GetTopQuantityItems(customerID).subscribe(response => this.State.TopQuantityItems = response.Entities);\r\n }\r\n\r\n if (dashboardOption.IsShowTopFrequentItems) {\r\n this.customerEndpoint.GetTopFrequestItems(customerID).subscribe(response => this.State.TopFrequestItems = response.Entities);\r\n }\r\n\r\n if (this.State.CustomerOption.DashboardOption.IsShowRecentDocuments) {\r\n this.documentEndpoint.GetRecentDocuments(EnumDocumentTypes.Order, customerID)\r\n .subscribe(response => this.State.RecentOrders = response.Entities);\r\n }\r\n\r\n this.externalQueryEndpoint.GetExternalQueries(customerID).subscribe(response => this.State.ExternalQueries = response.Entities);\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 override OnCustomerChanged() {\r\n this.GetData(this.CustomerID);\r\n }\r\n\r\n HandleShowExternalQuery(query: ExternalQuery) {\r\n this.externalQueryPopup.ShowDialogShort(() => { }, null, false, query);\r\n }\r\n\r\n HandleShowExternalQueryList() {\r\n const params = {\r\n Title: this.RC('lblExternalQueries'),\r\n DataSource: this.State.ExternalQueries,\r\n IsMultiSelection: false,\r\n OnCompleted: (result) => {\r\n if (result) {\r\n this.HandleShowExternalQuery(this.State.ExternalQueries.find(x => x.EntryID === result));\r\n }\r\n }\r\n } as BottomSheetListParams;\r\n this.bottomSheetService.ShowList(params);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { BaseDashboardComponent } from './base/base-dashboard.component';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\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 bottomSheetService: BottomSheetService,\r\n customerEndpoint: CustomerEndpoint,\r\n externalQueryEndpoint: ExternalQueryEndpoint,\r\n documentEndpoint: DocumentEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardFullscreenComponent', screenService, bottomSheetService, customerEndpoint, externalQueryEndpoint, documentEndpoint, customerService, EnumPageDisplayModes.FullScreen);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { CustomerEndpoint } from '@dino-proxy/endpoints/customer.endpoint';\r\nimport { BaseDashboardComponent } from './base/base-dashboard.component';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\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 bottomSheetService: BottomSheetService,\r\n customerEndpoint: CustomerEndpoint,\r\n externalQueryEndpoint: ExternalQueryEndpoint,\r\n documentEndpoint: DocumentEndpoint,\r\n customerService: CustomerService) {\r\n super(A, 'DashboardWindowComponent', screenService, bottomSheetService, customerEndpoint, externalQueryEndpoint, documentEndpoint, customerService, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override CustomerDetailsRoute = '/pages/customer-details-window';\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\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\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\t\tthis.Navigate([\"/pages/customer-details-window\", entryID]);\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.PhoneNumber1}}\\r\\n\\t\\t\\t
\\r\\n\\t\\t
\\r\\n\\t
\\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-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.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
\";","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\";","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\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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n \\r\\n\\t\\t\\t\\t\\r\\n \\r\\n\\t\\t\\t\\t\\r\\n \\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, 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, 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 } from '@dino-proxy/enums';\r\n\r\nclass State extends BaseState { \r\n KitItems: Item[];\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 super(A, 'KitItemsTabComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\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 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 {{'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
\";","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 { 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
\";","\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","\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","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\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 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\";","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\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 {\r\n this.Navigate([\"/pages/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 { 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\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: `/pages/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 {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 { 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 { 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\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 ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n const allowedRoles: EnumCredentialTypes[] = route.data['allowedCredentialTypes'] || [];\r\n if (this.isRouteAllowedForCurrentUser(allowedRoles)) {\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[]): boolean {\r\n if (allowedRoles.includes(EnumCredentialTypes.Admin) && this.customerService.IsCurrentUserAdmin()) return true;\r\n if (allowedRoles.includes(EnumCredentialTypes.SalePerson) && this.customerService.IsCurrentUserSalesPerson()) return true;\r\n if (allowedRoles.includes(EnumCredentialTypes.User) && !this.customerService.IsCurrentUserAdmin() \r\n && !this.customerService.IsCurrentUserSalesPerson()) return true;\r\n return false;\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
\";","\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\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(['/pages/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 { 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\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(['/pages/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 { 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 { 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 { Injectable } from \"@angular/core\";\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from \"@angular/router\";\r\nimport { CustomerService } from \"@dino-services/customer.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 ) { }\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\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 { 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
\";","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, 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
\";","\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\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(['/pages/document'], { DocumentID: this.Entity.SBODocumentEntry, DocumentType: this.Entity.TransTypeString });\r\n } else if (this.Entity.TransType === 24) {\r\n this.Navigate(['/pages/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.OpenSumOrigin | 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\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Ledger } from './../entities/ledger.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 { ContactDialogComponent } from '@dino-components/contact-person/contact-dialog/contact-dialog.component';\r\nimport { ContactPersonComponent } from '@dino-components/contact-person/contact-person.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 { 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 { NumberRangeComponent } from '@dino-components/number-range/number-range.component';\r\nimport { PriceComponent } from '@dino-components/price/price.component';\r\nimport { 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 { ExternalLinkComponent } from '@dino-pages/external-link/external-link.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 { LedgersGridComponent } from '@dino-pages/ledgers/ledgers-grid/ledgers-grid.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 { WishlistComponent } from '@dino-pages/wishlist/wishlist.component';\r\nimport { FormatPriceWithCurrencyPipe } from '@dino-pipes/format-price-with-currency.pipe';\r\nimport { LookupCategoryPipe } from '@dino-pipes/lookup-category.pipe';\r\nimport { AssortmentEndpoint } from '@dino-proxy/endpoints/assortment.endpoint';\r\nimport { BrandEndpoint } from '@dino-proxy/endpoints/brand.endpoint';\r\nimport { CategoryEndpoint } from '@dino-proxy/endpoints/category.endpoint';\r\nimport { ContactPersonEndpoint } from '@dino-proxy/endpoints/contactperson.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 { CustomerOptionEndpoint } from '@dino-proxy/endpoints/customeroption.endpoint';\r\nimport { ExternalLinkEndpoint } from '@dino-proxy/endpoints/externallink.endpoint';\r\nimport { FilterEndpoint } from '@dino-proxy/endpoints/filter.endpoint';\r\nimport { FilterAttributeEndpoint } from '@dino-proxy/endpoints/filterattribute.endpoint';\r\nimport { ImageEndpoint } from '@dino-proxy/endpoints/image.endpoint';\r\nimport { ItemAttributesEndpoint } from '@dino-proxy/endpoints/itemattributes.endpoint';\r\nimport { ItemsEndpoint } from '@dino-proxy/endpoints/items.endpoint';\r\nimport { LedgerEndpoint } from '@dino-proxy/endpoints/ledger.endpoint';\r\nimport { ManufacturerEndpoint } from '@dino-proxy/endpoints/manufacturer.endpoint';\r\nimport { ShoppingCartEndpoint } from '@dino-proxy/endpoints/shoppingcart.endpoint';\r\nimport { StateEndpoint } from '@dino-proxy/endpoints/state.endpoint';\r\nimport { VendorEndpoint } from '@dino-proxy/endpoints/vendor.endpoint';\r\nimport { WishlistEndpoint } from '@dino-proxy/endpoints/wishlist.endpoint';\r\nimport { EnumCredentialTypes, EnumDocumentTypes, 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 { 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 { 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 { LoginGuard } from '@m4u-angular/core/framework/login.guard';\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 { HomeBannerComponent } from '@dino-pages/home/components/home-banner/home-banner.component';\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 { SidebarsService } from '@dino-services/sidebars.service';\r\nimport { NumberIteratorComponent } from '@dino-components/number-iterator/number-iterator.component';\r\nimport { AddonEndpoint } from '@dino-proxy/endpoints/addon.endpoint';\r\nimport { AccordionComponent } from '@dino-components/accordion/accordion.component';\r\nimport { TermsOfUseComponent } from '@dino-pages/terms-of-use/terms-of-use.component';\r\nimport { AttributeGroupsComponent } from '@dino-pages/settings/attribute-groups/attribute-groups.component';\r\nimport { AttributeGroupEndpoint } from '@dino-proxy/endpoints/attributegroup.endpoint';\r\nimport { AttributeGroupsGridComponent } from '@dino-pages/settings/attribute-groups/attribute-groups-grid/attribute-groups-grid.component';\r\nimport { DepositGroupEndpoint } from '@dino-proxy/endpoints/depositgroup.endpoint';\r\nimport { DepositGroupsComponent } from '@dino-pages/settings/deposit-groups/deposit-groups.component';\r\nimport { DepositGroupsGridComponent } from '@dino-pages/settings/deposit-groups/deposit-groups-grid/deposit-groups-grid.component';\r\nimport { ContactUsSubjectEndpoint } from '@dino-proxy/endpoints/contactussubject.endpoint';\r\nimport { BusinessOptionEndpoint } from '@dino-proxy/endpoints/businessoption.endpoint';\r\nimport { CatalogueOptionEndpoint } from '@dino-proxy/endpoints/catalogueoption.endpoint';\r\nimport { CatalogueOptionComponent } from '@dino-pages/settings/options/catalogue-options/catalogue-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 { CustomerOptionsListComponent } from '@dino-pages/settings/options/customer-options/customer-option-list/customer-option-list.component';\r\nimport { CustomerOptionsGridComponent } from '@dino-pages/settings/options/customer-options/customer-option-grid/customer-option-grid.component';\r\nimport { CustomerOptionComponent } from '@dino-pages/settings/options/customer-options/customer-option.component';\r\nimport { FilterOptionEndpoint } from '@dino-proxy/endpoints/filteroption.endpoint';\r\nimport { FilterOptionComponent } from '@dino-pages/settings/options/filter-options/filter-option.component';\r\nimport { FilterOptionsListComponent } from '@dino-pages/settings/options/filter-options/filter-option-list/filter-option-list.component';\r\nimport { FilterOptionsGridComponent } from '@dino-pages/settings/options/filter-options/filter-option-grid/filter-option-grid.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 { ItemDisplayPopupOptionEndpoint } from '@dino-proxy/endpoints/itemdisplaypopupoption.endpoint';\r\nimport { ItemDisplayElementOptionEndpoint } from '@dino-proxy/endpoints/itemdisplayelementoption.endpoint';\r\nimport { ItemDisplayElementOptionComponent } from '@dino-pages/settings/options/item-display-element-options/item-display-element-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 { ItemDisplayElementOptionsGridComponent } from '@dino-pages/settings/options/item-display-element-options/item-display-element-option-grid/item-display-element-option-grid.component';\r\nimport { ItemDisplayPopupOptionComponent } from '@dino-pages/settings/options/item-display-popup-options/item-display-popup-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 { ItemDisplayPopupOptionsGridComponent } from '@dino-pages/settings/options/item-display-popup-options/item-display-popup-option-grid/item-display-popup-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 { ItemOptionsGridComponent } from '@dino-pages/settings/options/item-options/item-option-grid/item-option-grid.component';\r\nimport { ItemOptionEndpoint } from '@dino-proxy/endpoints/itemoption.endpoint';\r\nimport { PaymentOptionEndpoint } from '@dino-proxy/endpoints/paymentoption.endpoint';\r\nimport { PaymentOptionComponent } from '@dino-pages/settings/options/payment-options/payment-option.component';\r\nimport { PaymentOptionsListComponent } from '@dino-pages/settings/options/payment-options/payment-option-list/payment-option-list.component';\r\nimport { PaymentOptionsGridComponent } from '@dino-pages/settings/options/payment-options/payment-option-grid/payment-option-grid.component';\r\nimport { ShipmentOptionEndpoint } from '@dino-proxy/endpoints/shipmentoption.endpoint';\r\nimport { ShipmentOptionComponent } from '@dino-pages/settings/options/shipment-options/shipment-option.component';\r\nimport { ShipmentOptionsListComponent } from '@dino-pages/settings/options/shipment-options/shipment-option-list/shipment-option-list.component';\r\nimport { ShipmentOptionsGridComponent } from '@dino-pages/settings/options/shipment-options/shipment-option-grid/shipment-option-grid.component';\r\nimport { ShipmentMethodEndpoint } from '@dino-proxy/endpoints/shipmentmethod.endpoint';\r\nimport { ShipmentMethodsGridComponent } from '@dino-pages/settings/options/shipment-options/shipment-methods/shipment-method-grid/shipment-method-grid.component';\r\nimport { HomepageOptionEndpoint } from '@dino-proxy/endpoints/homepageoption.endpoint';\r\nimport { HomepageOptionComponent } from '@dino-pages/settings/options/homepage-options/homepage-option.component';\r\nimport { HomepageOptionsListComponent } from '@dino-pages/settings/options/homepage-options/homepage-option-list/homepage-option-list.component';\r\nimport { HomepageOptionsGridComponent } from '@dino-pages/settings/options/homepage-options/homepage-option-grid/homepage-option-grid.component';\r\nimport { NotificationOptionEndpoint } from '@dino-proxy/endpoints/notificationoption.endpoint';\r\nimport { NotificationOptionComponent } from '@dino-pages/settings/options/notification-options/notification-option.component';\r\nimport { NotificationOptionsListComponent } from '@dino-pages/settings/options/notification-options/notification-option-list/notification-option-list.component';\r\nimport { NotificationOptionsGridComponent } from '@dino-pages/settings/options/notification-options/notification-option-grid/notification-option-grid.component';\r\nimport { SystemOptionEndpoint } from '@dino-proxy/endpoints/systemoption.endpoint';\r\nimport { SystemOptionsListComponent } from '@dino-pages/settings/options/system-options/system-option-list/system-option-list.component';\r\nimport { SystemOptionsGridComponent } from '@dino-pages/settings/options/system-options/system-option-grid/system-option-grid.component';\r\nimport { DimensionValueEndpoint } from '@dino-proxy/endpoints/dimensionvalue.endpoint';\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 { 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 { DimensionConfigurationsGridComponent } from '@dino-pages/settings/options/dimension-configurations/dimension-configuration-grid/dimension-configuration-grid.component';\r\nimport { DimensionComponent } from '@dino-pages/settings/options/dimension-configurations/dimensions/dimension.component';\r\nimport { DimensionScalesGridComponent } from '@dino-pages/settings/options/dimension-configurations/dimension-scales/dimension-scale-grid/dimension-scale-grid.component';\r\nimport { DimensionGridComponent } from '@dino-pages/settings/options/dimension-configurations/dimensions/dimension-grid/dimension-grid.component';\r\nimport { DimensionValuesGridComponent } from '@dino-pages/settings/options/dimension-configurations/dimension-values/dimension-value-grid/dimension-value-grid.component';\r\nimport { ExternalLinkConfigComponent } from '@dino-pages/settings/external-links-config/external-link-config.component';\r\nimport { ExternalLinkConfigsGridComponent } from '@dino-pages/settings/external-links-config/external-link-grid-config/external-link-config-grid.component';\r\nimport { ExternalLinkConfigsListComponent } from '@dino-pages/settings/external-links-config/external-link-config/external-link-config-list.component';\r\nimport { ExternalQueryEndpoint } from '@dino-proxy/endpoints/externalquery.endpoint';\r\nimport { ExternalQueryComponent } from '@dino-pages/settings/external-queries/external-query.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 { ExternalQueryFieldEndpoint } from '@dino-proxy/endpoints/externalqueryfield.endpoint';\r\nimport { SpecificationAttributeEndpoint } from '@dino-proxy/endpoints/specificationattribute.endpoint';\r\nimport { SpecificationAttributeValueEndpoint } from '@dino-proxy/endpoints/specificationattributevalue.endpoint';\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 { SpecificationAttributesGridComponent } from '@dino-pages/settings/specification-attributes/specification-attribute-grid/specification-attribute-grid.component';\r\nimport { SpecificationAttributeValuesGridComponent } from '@dino-pages/settings/specification-attributes/specification-attribute-value-grid/specification-attribute-value-grid.component';\r\nimport { Routes } from '@angular/router';\r\nimport { DinoSystemOptionComponent } from '@dino-pages/settings/options/system-options/system-option.component';\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 { CredentialSelectorComponent } from '@dino-pages/credential-selector/component/credential-selector.component';\r\nimport { ContactUsOptionEndpoint } from '@dino-proxy/endpoints/contactusoption.endpoint';\r\nimport { ContactUsOptionComponent } from '@dino-pages/settings/options/contact-us-options/contact-us-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 { FeatureOptionEndpoint } from '@dino-proxy/endpoints/featureoption.endpoint';\r\nimport { FeatureOptionComponent } from '@dino-pages/settings/options/feature-options/feature-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 { ContactUsSubjectsGridComponent } from '@dino-pages/settings/options/contact-us-options/contact-us-subjects-grid/contact-us-subjects-grid.component';\r\nimport { ProductCatalogue2Component } from '@dino-pages/product-catalogue2/product-catalogue2.component';\r\nimport { MobileCatalogueComponent } from '@dino-pages/product-catalogue2/mobile/mobile-catalogue.component';\r\nimport { ClassificationComponent } from '@dino-pages/product-catalogue2/components/classification/classification.component';\r\nimport { AssortmentComponent } from '@dino-pages/product-catalogue2/components/assortment/assortment.component';\r\nimport { DisplayOptionsComponent } from '@dino-pages/product-catalogue2/components/display-options/display-options.component';\r\nimport { SearchBarComponent } from '@dino-pages/product-catalogue2/components/search-bar/search-bar.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 { ListItemComponent2 } from '@dino-pages/product-catalogue2/item-list/list-item2/list-item2.component';\r\nimport { GridItemComponent2 } from '@dino-pages/product-catalogue2/item-list/grid-item2/grid-item2.component';\r\nimport { ListItemImageComponent2 } from '@dino-pages/product-catalogue2/item-list/components/list-item-image/list-item-image2.component';\r\nimport { ItemDescriptionComponent } from '@dino-pages/product-catalogue2/item-list/components/item-description/item-description.component';\r\nimport { ItemBadgesComponent } from '@dino-pages/product-catalogue2/item-list/components/item-badges/item-badges.component';\r\nimport { ItemPrice2Component } from '@dino-pages/product-catalogue2/item-list/components/item-price2/item-price2.component';\r\nimport { ItemStockComponent } from '@dino-pages/product-catalogue2/item-list/components/item-stock/item-stock.component';\r\nimport { ItemWishlistComponent } from '@dino-pages/product-catalogue2/item-list/components/item-wishlist/item-wishlist.component';\r\nimport { ItemDeleteComponent } from '@dino-pages/product-catalogue2/item-list/components/item-delete/item-delete.component';\r\nimport { ItemDimensionsComponent } from '@dino-pages/product-catalogue2/item-list/components/item-dimensions/item-dimensions.component';\r\nimport { ItemQuantityComponent } from '@dino-pages/product-catalogue2/item-list/components/item-quantity/item-quantity.component';\r\nimport { ItemPopupComponent } from '@dino-pages/product-catalogue2/item-popup/item-popup.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 { GeneralTabComponent } from '@dino-pages/product-catalogue2/item-popup/components/general-tab/general-tab.component';\r\nimport { ItemMediaComponent } from '@dino-pages/product-catalogue2/item-list/components/item-media/item-media.component';\r\nimport { ItemAttributes2Component } from '@dino-pages/product-catalogue2/item-list/components/item-attributes2/item-attributes2.component';\r\nimport { ItemFiles2Component } from '@dino-pages/product-catalogue2/item-list/components/item-files2/item-files2.component';\r\nimport { VariationsByDimensionComponent } from '@dino-pages/product-catalogue2/item-popup/components/variations-by-dimension/variations-by-dimension.component';\r\nimport { SimilarItemsComponent } from '@dino-pages/product-catalogue2/item-popup/components/similar-items/similar-items.component';\r\nimport { QuantityBadgeComponent } from '@dino-pages/shopping-cart/components/quantity-badge/quantity-badge.component';\r\nimport { ShoppingWishlistButtonsComponent } from '@dino-pages/shopping-cart/components/shopping-wishlist-buttons/shopping-wishlist-buttons.component';\r\nimport { ShoppingCart2Component } from '@dino-pages/shopping-cart/shopping-cart2.component';\r\nimport { MobileCheckoutComponent } from '@dino-pages/checkout2/mobile/mobile-checkout.component';\r\nimport { DesktopCheckoutComponent } from '@dino-pages/checkout2/desktop/desktop-checkout.component';\r\nimport { CheckoutNavigatorComponent } from '@dino-pages/checkout2/components/checkout-navigator/checkout-navigator.component';\r\nimport { CheckoutCompletedComponent } from '@dino-pages/checkout2/components/checkout-completed/checkout-completed.component';\r\nimport { DashboardItemComponent } from '@dino-pages/dashboard/components/dashboard-item/dashboard-item.component';\r\nimport { ItemVariationButtonComponent } from '@dino-pages/product-catalogue2/item-list/components/item-variation-button/item-variation-button.component';\r\nimport { CompactItemComponent } from '@dino-pages/product-catalogue2/item-list/compact-item/compact-item.component';\r\nimport { MobileListComponent } from '@dino-pages/product-catalogue2/mobile/components/mobile-list/mobile-list.component';\r\nimport { FiltersPanel2Component } from '@dino-pages/product-catalogue2/components/filter-panel2/filter-panel2.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 { GroupOptionsComponent } from '@dino-pages/product-catalogue2/components/group-options/group-options.component';\r\nimport { SortOptionsComponent } from '@dino-pages/product-catalogue2/components/sort-options/sort-options.component';\r\nimport { GeneralTabMobileComponent } from '@dino-pages/product-catalogue2/item-popup/components/general-tab-mobile/general-tab-mobile.component';\r\nimport { CompleteButtonComponent } from '@dino-pages/checkout2/components/complete-button/complete-button.component';\r\nimport { TotalAfterButtonComponent } from '@dino-pages/shopping-cart/components/total-after-button/total-after-button.component';\r\nimport { DashboardOrdersGridComponent } from '@dino-pages/dashboard/components/dashboard-orders-grid/dashboard-orders-grid.component';\r\nimport { DashboardOrdersListComponent } from '@dino-pages/dashboard/components/dashboard-orders-list/dashboard-orders-list.component';\r\nimport { CanDeactivateCheckout2 } from '@dino-pages/checkout2/services/can-deactivate-checkout2';\r\nimport { CheckoutTermsOfUseDialogComponent } from '@dino-pages/checkout2/components/checkout-terms-of-use-dialog/checkout-terms-of-use-dialog.component';\r\nimport { ChangeCreditCardDialogComponent } from '@dino-pages/customers/components/change-credit-card-dialog/change-credit-card.component';\r\nimport { TermsOfUseOptionEndpoint } from '@dino-proxy/endpoints/termsofuseoption.endpoint';\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 { TermsOfUseOptionsGridComponent } from '@dino-pages/settings/options/terms-of-use-options/terms-of-use-option-grid/terms-of-use-option-grid.component';\r\nimport { AdminDashboardComponent } from '@dino-pages/admin-dashboard/admin-dashboard.component';\r\nimport { AdminDashboardEndpoint } from '@dino-proxy/endpoints/admindashboard.endpoint';\r\nimport { AdminDashboardItemComponent } from '@dino-pages/admin-dashboard/components/admin-dashboard-item/admin-dashboard-item.component';\r\nimport { ItemSearchEndpoint } from '@dino-proxy/endpoints/itemsearch.endpoint';\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 { SortGroupAssortmentPanelComponent } from '@dino-pages/product-catalogue2/components/sort-group-assortment-panel/sort-group-assortment-panel.component';\r\nimport { FilterAttributes2Component } from '@dino-pages/product-catalogue2/components/filter-panel2/components/filter-attributes2/filter-attributes2.component';\r\nimport { TotalBalanceComponent } from '@dino-pages/ledgers/total-balance/total-balance.component';\r\nimport { LedgerListComponent } from '@dino-pages/ledgers/ledger-list/ledger-list.component';\r\nimport { FormatPriceWithCurrencyDirective } from '@dino-directives/format-price-with-currency.directive';\r\nimport { PromotionsListComponent } from '@dino-pages/settings/options/promotions/promotions-list/promotions-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 { PromotionEndpoint } from '@dino-proxy/endpoints/promotion.endpoint';\r\nimport { GiftCardEndpoint } from '@dino-proxy/endpoints/giftcard.endpoint';\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 { GiftCardsGridComponent } from '@dino-pages/settings/options/gift-cards/gift-cards-grid/gift-cards-grid.component';\r\nimport { ItemPromotionsComponent } from '@dino-pages/product-catalogue2/item-list/components/item-promotions/item-promotions.component';\r\nimport { ItemsPromotionsTabComponent } from '@dino-pages/product-catalogue2/item-popup/components/item-promotions-tab/item-promotions-tab.component';\r\nimport { SalesPersonEndpoint } from '@dino-proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPersonOptionEndpoint } from '@dino-proxy/endpoints/salespersonoption.endpoint';\r\nimport { SalesPersonOptionComponent } from '@dino-pages/settings/options/sales-person-options/sales-person-option.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 { CouponsComponent } from '@dino-components/coupons/coupons.component';\r\nimport { CustomerService } from '@dino-services/customer.service';\r\nimport { SelectCustomerDropdownComponent } from '@dino-pages/sales/components/select-customer-dropdown/select-customer-dropdown.component';\r\nimport { SelectCustomerPopupComponent } from '@dino-pages/sales/components/select-customer-popup/select-customer-popup.component';\r\nimport { SelectCustomerInfoComponent } from '@dino-pages/sales/components/select-customer-info/select-customer-info.component';\r\nimport { SelectDocumentTypeComponent } from '@dino-pages/sales/components/select-document-type/select-document-type.component';\r\nimport { ShoppingCartService } from '@dino-services/shopping-cart.service';\r\nimport { ShoppingCartCompactComponent } from '@dino-pages/shopping-cart/components/shopping-cart-compact/shopping-cart-compact.component';\r\nimport { UltraCompactItemComponent } from '@dino-pages/product-catalogue2/item-list/ultra-compact-item/ultra-compact-item.component';\r\nimport { ItemEditComponent } from '@dino-pages/product-catalogue2/item-list/components/item-edit/item-edit.component';\r\nimport { BarcodeComponent } from '@dino-components/barcode/barcode.component';\r\nimport { DocumentOptionEndpoint } from '@dino-proxy/endpoints/documentoption.endpoint';\r\nimport { DocumentOptionComponent } from '@dino-pages/settings/options/document-options/document-option.component';\r\nimport { DocumentOptionsListComponent } from '@dino-pages/settings/options/document-options/document-option-list/document-option-list.component';\r\nimport { DocumentOptionsGridComponent } from '@dino-pages/settings/options/document-options/document-option-grid/document-option-grid.component';\r\nimport { ShoppingCartItemEditComponent } from '@dino-pages/shopping-cart/components/shopping-cart-item-edit/shopping-cart-item-edit.component';\r\nimport { EditSummaryComponent } from '@dino-pages/checkout2/components/edit-summary/edit-summary.component';\r\nimport { PurchaseOrdersTabComponent } from '@dino-pages/product-catalogue2/item-popup/components/purchase-orders-tab/purchase-orders-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 { ItemAvailabilityTabComponent } from '@dino-pages/product-catalogue2/item-popup/components/item-availability-tab/item-availability-tab.component';\r\nimport { ItemActionsComponent } from '@dino-pages/product-catalogue2/item-list/components/item-actions/item-actions.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 { EditShoppingCartItemComponent } from '@dino-pages/checkout2/pages/edit-shopping-cart-item/edit-shopping-cart-item.component';\r\nimport { WarehouseEndpoint } from '@dino-proxy/endpoints/warehouse.endpoint';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { DocumentsComponent } from '@dino-pages/documents/documents.component';\r\nimport { DocumentProcessingEndpoint } from '@dino-proxy/endpoints/documentprocessing.endpoint';\r\nimport { DocumentService } from '@dino-services/document.service';\r\nimport { DocumentStatusComponent } from '@dino-pages/documents/components/document-status/document-status.component';\r\nimport { AdditionalStatusComponent } from '@dino-pages/documents/components/additional-status/additional-status.component';\r\nimport { DocumentGridComponent } from '@dino-pages/documents/components/document-grid/document-grid.component';\r\nimport { DocumentListComponent } from '@dino-pages/documents/components/document-list/document-list.component';\r\nimport { DocumentListItemComponent } from '@dino-pages/documents/components/document-list/document-list-item/document-list-item.component';\r\nimport { DocumentComponent } from '@dino-pages/documents/document/document.component';\r\nimport { DocumentEndpoint } from '@dino-proxy/endpoints/document.endpoint';\r\nimport { DocumentDetailsComponent } from '@dino-pages/checkout2/components/document-details/document-details.component';\r\nimport { DocumentFilterComponent } from '@dino-pages/documents/components/document-filter/document-filter.component';\r\nimport { CheckoutSignatureComponent } from '@dino-pages/checkout2/components/checkout-signature/checkout-signature.component';\r\nimport { DocumentProcessingComponent } from '@dino-pages/document-processing/document-processing.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 { CheckoutSignatureDialogComponent } from '@dino-pages/checkout2/components/signature-dialog/checkout-signature-dialog.component';\r\nimport { BaseDocumentDialogComponent } from '@dino-pages/product-catalogue2/components/base-document/base-document-dialog/base-document-dialog.component';\r\nimport { CustomersListComponent } from '@dino-pages/customers/customers-list/customers-list.component';\r\nimport { CustomersGridComponent } from '@dino-pages/customers/customers-grid/customers-grid.component';\r\nimport { CustomerDetailsWindowComponent } from '@dino-pages/customers/customer-details/customer-details-window.component';\r\nimport { CustomerDetailsFullscreenComponent } from '@dino-pages/customers/customer-details/customer-details-fullscreen.component';\r\nimport { UseBaseDocumentButtonComponent } from '@dino-pages/product-catalogue2/components/base-document/use-base-document-button/use-base-document-button.component';\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 { NumberIterator3Component } from '@dino-components/number-iterator3/number-iterator3.component';\r\nimport { CustomersComponent } from '@dino-pages/customers/customers.component';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { VatGroupEndpoint } from '@dino-proxy/endpoints/vatgroup.endpoint';\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 { SeriesEndpoint } from '@dino-proxy/endpoints/series.endpoint';\r\nimport { SeriesOptionEndpoint } from '@dino-proxy/endpoints/seriesoption.endpoint';\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 { SeriesOptionsGridComponent } from '@dino-pages/settings/options/series-options/series-option-grid/series-option-grid.component';\r\nimport { PaymentComponent } from '@dino-pages/payment/payment.component';\r\nimport { ShoppingPaymentEndpoint } from '@dino-proxy/endpoints/shoppingpayment.endpoint';\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 { 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 { LaterPaymentComponent } from '@dino-pages/payment/components/later-payment/later-payment.component';\r\nimport { WirePaymentComponent } from '@dino-pages/payment/components/wire-payment/wire-payment.component';\r\nimport { BankEndpoint } from '@dino-proxy/endpoints/bank.endpoint';\r\nimport { AccountEndpoint } from '@dino-proxy/endpoints/account.endpoint';\r\nimport { ReceiptsComponent } from '@dino-pages/receipts/receipts.component';\r\nimport { ReceiptComponent } from '@dino-pages/receipts/receipt/receipt.component';\r\nimport { ReceiptGridComponent } from '@dino-pages/receipts/components/receipt-grid/receipt-grid.component';\r\nimport { CreateReceiptDesktopComponent } from '@dino-pages/receipts/create-receipt/desktop/create-receipt-desktop.component';\r\nimport { ReceiptEndpoint } from '@dino-proxy/endpoints/receipt.endpoint';\r\nimport { CreateReceiptNavigatorComponent } from '@dino-pages/receipts/create-receipt/components/create-receipt-navigator/create-receipt-navigator.component';\r\nimport { CreditCardPaymentDialogComponent } from '@dino-pages/payment/components/credit-card-payment-dialog/credit-card-payment-dialog.component';\r\nimport { ReceiptFilterComponent } from '@dino-pages/receipts/components/receipt-filter/receipt-filter.component';\r\nimport { ShareDocumentComponent } from '@dino-components/share-document/share-document.component';\r\nimport { ShareDocumentDialogComponent } from '@dino-pages/documents/components/share-document-dialog/share-document-dialog.component';\r\nimport { SuggestedPromotionsComponent } from '@dino-pages/shopping-cart/components/suggested-promotions/suggested-promotions.component';\r\nimport { ItemDisableFromPromotion } from '@dino-pages/product-catalogue2/item-list/components/item-disable-promotion/item-disable-promotion';\r\nimport { SuggestedPromotionsAccordionComponent } from '@dino-pages/shopping-cart/components/suggested-promotions/suggested-promotions-accordion/suggested-promotions-accordion.component';\r\nimport { UiComponentService } from '@dino-services/ui-component.service';\r\nimport { DocumentGridSummaryComponent } from '@dino-pages/documents/components/document-grid-summary/document-grid-summary.component';\r\nimport { SelectedReceiptDocumentsGridComponent } from '@dino-pages/receipts/create-receipt/components/selected-receipt-document-grid/selected-receipt-documents-grid.component';\r\nimport { ReceiptDocumentToSelectGridComponent } from '@dino-pages/receipts/create-receipt/components/receipt-documents-to-select-grid/receipt-documents-to-select-grid.component';\r\nimport { ItemSaleEndpoint } from '@dino-proxy/endpoints/itemsale.endpoint';\r\nimport { CustomerGroupEndpoint } from '@dino-proxy/endpoints/customergroup.endpoint';\r\nimport { PaymentTermEndpoint } from '@dino-proxy/endpoints/paymentterm.endpoint';\r\nimport { LedgersFullscreenComponent } from '@dino-pages/ledgers/ledgers-fullscreen.component';\r\nimport { LedgersWindowComponent } from '@dino-pages/ledgers/ledgers-window.component';\r\nimport { ExternalQueryPopupComponent } from '@dino-pages/customers/components/external-query/external-query-popup.component';\r\nimport { CustomerContactPersonsGridComponent } from '@dino-pages/customers/components/customer-contact-persons-grid/customer-contact-persons-grid.component';\r\nimport { CustomerAddressesListComponent } from '@dino-pages/customers/components/customer-addresses-list/customer-addresses-list.component';\r\nimport { CustomerContactPersonsListComponent } from '@dino-pages/customers/components/customer-contact-persons-list/customer-contact-persons-list.component';\r\nimport { CustomerAddressesGridComponent } from '@dino-pages/customers/components/customer-addresses-grid/customer-addresses-grid.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 { DashboardOptionComponent } from '@dino-pages/settings/options/dashboard-options/dashboard-option.component';\r\nimport { DashboardOptionsListComponent } from '@dino-pages/settings/options/dashboard-options/dashboard-option-list/dashboard-option-list.component';\r\nimport { DashboardOptionEndpoint } from '@dino-proxy/endpoints/dashboardoption.endpoint';\r\nimport { CustomerDetailOptionEndpoint } from '@dino-proxy/endpoints/customerdetailoption.endpoint';\r\nimport { DashboardOptionsGridComponent } from '@dino-pages/settings/options/dashboard-options/dashboard-option-grid/dashboard-option-grid.component';\r\nimport { DashboardFullscreenComponent } from '@dino-pages/dashboard/dashboard-fullscreen.component';\r\nimport { DashboardWindowComponent } from '@dino-pages/dashboard/dashboard-window.component';\r\nimport { SelectCustomerMobileListComponent } from '@dino-pages/sales/components/select-customer-mobile-list/select-customer-mobile-list.component';\r\nimport { BankDetailsComponent } from '@dino-pages/customers/bank-details/bank-details.component';\r\nimport { DocumentItemNumbersComponent } from '@dino-pages/documents/components/document-item-numbers/document-item-numbers.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 { 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.comonent';\r\nimport { CodeNameDisplayComponent } from '@dino-components/code-name-display/code-name-display.component';\r\nimport { KitItemsTabComponent } from '@dino-pages/product-catalogue2/item-popup/components/kit-items-tab/kit-items-tab.component';\r\nimport { ItemChildrenVisibilityToggleComponent } from '@dino-pages/product-catalogue2/item-list/components/item-children-visibility-toggle/item-children-visibility-toggle.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 { CustomerOption } from '@dino-proxy/entities/customeroption.entity';\r\nimport { AdminEndpoint } from '@dino-proxy/endpoints/admin.endpoint';\r\nimport { AdminListComponent } from '@dino-pages/settings/admins/list/admin-list.component';\r\nimport { AdminGridComponent } from '@dino-pages/settings/admins/list/admin-grid.component';\r\nimport { AdminComponent } from '@dino-pages/settings/admins/admin.component';\r\nimport { FeatureOption } from '@dino-proxy/entities/featureoption.entity';\r\nimport { ImpersonateDropdownComponent } from '@dino-components/app-impersonate-selector/app-impersonate-dropdown.component';\r\nimport { ImpersonatePageComponent } from '@dino-pages/credential-selector/impersonate-page.component';\r\nimport { CredentialTypeGuard } from './guards/credential-type.guard';\r\nimport { ReceiptListComponent } from '@dino-pages/receipts/components/receipt-list/receipt-list.component';\r\nimport { ReceiptListItemComponent } from '@dino-pages/receipts/components/receipt-list/receipt-list-item/receipt-list-item.component';\r\nimport { ReceiptRelatedDocumentsComponent } from '@dino-pages/receipts/receipt/receipt-related-documents/receipt-related-documents.component';\r\nimport { ReceiptPaymentsComponent } from '@dino-pages/receipts/receipt/receipt-payments/receipt-payments.component';\r\nimport { CreateReceiptMobileComponent } from '@dino-pages/receipts/create-receipt/mobile/create-receipt-mobile.component';\r\nimport { AuthGuard } from './guards/auth.guard';\r\nimport { CreateReceiptAmountsButtonComponent } from '@dino-pages/receipts/create-receipt/components/create-receipt-amounts-button/create-receipt-amounts-button.component';\r\nimport { SelectedReceiptDocumentsListComponent } from '@dino-pages/receipts/create-receipt/components/selected-receipt-document-list/selected-receipt-documents-list.component';\r\nimport { ReceiptDocumentToSelectListComponent } from '@dino-pages/receipts/create-receipt/components/receipt-documents-to-select-list/receipt-documents-to-select-list.component';\r\nimport { CreateReceiptLedgerListItemComponent } from '@dino-pages/receipts/create-receipt/components/create-receipt-ledger-list-item/create-receipt-ledger-list-item.component';\r\nimport { PaymentAmountDialogComponent } from '@dino-pages/receipts/create-receipt/components/payment-amount-dialog/payment-amount-dialog.component';\r\n\r\nexport class DinoAppConfig extends AppConfig {\r\n private customerChanged$: Subscription;\r\n override ModuleName = 'Dino';\r\n\r\n override 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 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 FormatPriceWithCurrencyPipe,\r\n HomeCategoriesComponent,\r\n HomeItemsComponent,\r\n DocumentGridSummaryComponent,\r\n HomeBannerComponent,\r\n GuestAccessComponent,\r\n ExternalQueryPopupComponent,\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 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 DashboardOptionComponent,\r\n DashboardOptionsGridComponent,\r\n DashboardOptionsListComponent,\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 CredentialSelectorComponent,\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 ItemPopupComponent,\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 DashboardWindowComponent,\r\n DashboardFullscreenComponent,\r\n DashboardItemComponent,\r\n DashboardOrdersGridComponent,\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 CompleteButtonComponent,\r\n TotalAfterButtonComponent,\r\n CustomerAddressesListComponent,\r\n CustomerContactPersonsListComponent,\r\n DashboardOrdersListComponent,\r\n CheckoutTermsOfUseDialogComponent,\r\n ChangeCreditCardDialogComponent,\r\n TermsOfUseOptionComponent,\r\n TermsOfUseOptionsListComponent,\r\n TermsOfUseOptionsGridComponent,\r\n AdminDashboardComponent,\r\n AdminDashboardItemComponent,\r\n AllOrderedItemsGridComponent,\r\n AllOrdersGridComponent,\r\n ItemSearchesGridComponent,\r\n SortGroupAssortmentPanelComponent,\r\n FilterAttributes2Component,\r\n TotalBalanceComponent,\r\n LedgerListComponent,\r\n FormatPriceWithCurrencyDirective,\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 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 BankDetailsComponent,\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 ];\r\n\r\n override 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 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 DashboardOptionEndpoint,\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 AdminDashboardEndpoint,\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 ];\r\n\r\n override Services = [\r\n AuthGuard,\r\n CredentialTypeGuard,\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 ];\r\n\r\n override RoutesProtected: Routes = [\r\n {\r\n path: 'catalogueN',\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: 'admins',\r\n component: AdminListComponent,\r\n data: { Menu: 'admins', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'admin/:EntryID',\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: 'shoppingcartN',\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: '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: 'itemN/:EntryID',\r\n component: ItemPopupComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n outlet: 'window'\r\n },\r\n {\r\n path: 'suggestedpromotions',\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: 'checkoutdesktop',\r\n component: DesktopCheckoutComponent,\r\n data: { Menu: 'checkoutdesktop', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n canDeactivate: [CanDeactivateCheckout2]\r\n },\r\n {\r\n path: 'checkoutmobile',\r\n component: MobileCheckoutComponent,\r\n data: { Menu: 'checkoutmobile', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard],\r\n canDeactivate: [CanDeactivateCheckout2]\r\n },\r\n {\r\n path: 'mydetailsN',\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: '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: 'dashboard-full',\r\n component: DashboardFullscreenComponent,\r\n data: { Menu: 'dashboard', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n // { path: 'orders', component: OrdersComponent, data: { Menu: 'orders' }, canActivate: [LoginGuard] },\r\n // { path: 'order/:EntryID', component: OrderComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n // { path: 'deliveries', component: DeliveriesComponent, data: { Menu: 'deliveries' }, canActivate: [LoginGuard] },\r\n // { path: 'delivery/:EntryID', component: DeliveryComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n {\r\n path: '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: '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: 'home',\r\n component: HomeComponent,\r\n data: { Menu: 'home', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n // { path: 'returnrequests', component: ReturnRequestsComponent, data: { Menu: 'returnrequests' }, canActivate: [LoginGuard] },\r\n // { path: 'returnrequest/:EntryID', component: ReturnRequestComponent, canActivate: [LoginGuard], outlet: 'window' },\r\n {\r\n path: 'termsofuse',\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: '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: 'dashboard-options',\r\n component: DashboardOptionsListComponent,\r\n data: { Menu: 'dashboard-options', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'dashboard-option/:EntryID',\r\n component: DashboardOptionComponent,\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: '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: 'document-processing/:EntryID',\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: { IsExternal: true, allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\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: 'admin-dashboard',\r\n component: AdminDashboardComponent,\r\n data: { Menu: 'admin-dashboard', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'promotions',\r\n component: PromotionsListComponent,\r\n data: { Menu: 'promotions', allowedCredentialTypes: [EnumCredentialTypes.Admin] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'promotion/:EntryID',\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: '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: 'gift-card/:EntryID',\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: '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: 'customer-details-window/:EntryID',\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: 'customer-details-full/:EntryID',\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: 'bank-details/:EntryID',\r\n component: BankDetailsComponent,\r\n data: { allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n outlet: 'window',\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: '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: '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: '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: 'deliverynotes',\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: '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: '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: 'returnrequests',\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: '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: '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: '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: '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: 'create-receipt-desktop',\r\n component: CreateReceiptDesktopComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [LoginGuard, CredentialTypeGuard]\r\n },\r\n {\r\n path: 'create-receipt-desktop',\r\n component: CreateReceiptDesktopComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [LoginGuard, CredentialTypeGuard]\r\n },\r\n {\r\n path: 'create-receipt-mobile',\r\n component: CreateReceiptMobileComponent,\r\n data: { Menu: 'receipts', allowedCredentialTypes: [EnumCredentialTypes.SalePerson, EnumCredentialTypes.User] },\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: '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 ];\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\r\n const isFeatureAllowedAsAdmin = (u: UserInfo) => {\r\n return u.IsAdmin;\r\n };\r\n\r\n const isExternalLinksFeatureAllowed = (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 isSalesPerson = (checkCustomer: boolean) => {\r\n return (u: UserInfo) => {\r\n return u.IsSalesPerson && (!checkCustomer || customerService?.HasCustomer);\r\n };\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 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 };\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 screenService = AppInjector.get(ScreenService) as ScreenService;\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n\r\n var productCatalogueMenuItem = new MainMenuElement('catalogueN', '/pages/catalogueN', '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 const staticItems = [\r\n new MainMenuElement('home', '/pages/home', 'mdi mdi-home', null, isFeatureAllowedForUser('IsEnableHomePage', true)),\r\n productCatalogueMenuItem,\r\n new MainMenuElement('checkoutdesktop', '/pages/checkoutdesktop', 'mdi mdi-cart', null, isFeatureAllowedForNonAdmin('IsEnableCheckout', true), null, false),\r\n new MainMenuElement('checkoutmobile', '/pages/checkoutmobile', '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 new MainMenuElement('customers', '/pages/customers', 'mdi mdi-account-multiple', null, isAllowedForSalesPerson),\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', '/pages/customer-details-full', 'mdi mdi-card-account-details-star-outline', null, isSalesPerson(true), () => ['current'], null, null),\r\n new MainMenuElement('ledgers', '/pages/ledgers-full', 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableLedger', true)),\r\n new MainMenuElement('dashboard', '/pages/dashboard-full', 'mdi mdi-speedometer', null, isFeatureAllowedForNonAdmin('IsEnableDashboard', true)),\r\n ]),\r\n\r\n new MainMenuElement('my_information', undefined, 'mdi mdi-card-account-details-star-outline', undefined, isShowCustomerInfo(false), undefined, true, [\r\n new MainMenuElement('mydetailsN', '/pages/mydetailsN', 'mdi mdi-card-account-details-star-outline', null, isFeatureAllowedForUser('IsEnableMyDetails', true), null, null, null),\r\n new MainMenuElement('my_ledgers', '/pages/ledgers-full', 'mdi mdi-wallet', null, isFeatureAllowedForNonAdmin('IsEnableLedger', true)),\r\n new MainMenuElement('my_dashboard', '/pages/dashboard-full', 'mdi mdi-speedometer', null, isFeatureAllowedForNonAdmin('IsEnableDashboard', 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', '/pages/quotes', 'mdi mdi-text-box-plus-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Quote), null, null, null, { ObjectType: EnumDocumentTypes.Quote }),\r\n new MainMenuElement('orders', '/pages/orders', 'mdi mdi-file-document-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Order), null, null, null, { ObjectType: EnumDocumentTypes.Order }),\r\n new MainMenuElement('deliverynotes', '/pages/deliverynotes', 'mdi mdi-truck-delivery-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.DeliveryNote), null, null, null, { ObjectType: EnumDocumentTypes.DeliveryNote }),\r\n new MainMenuElement('invoices', '/pages/invoices', 'mdi mdi-file-check-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Invoice), null, null, null, { ObjectType: EnumDocumentTypes.Invoice }),\r\n new MainMenuElement('returnrequests', '/pages/returnrequests', 'mdi mdi-keyboard-return', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.ReturnRequest), null, null, null, { ObjectType: EnumDocumentTypes.ReturnRequest }),\r\n new MainMenuElement('returns', '/pages/returns', 'mdi mdi-clipboard-arrow-left', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Return), null, null, null, { ObjectType: EnumDocumentTypes.Return }),\r\n new MainMenuElement('refunds', '/pages/refunds', 'mdi mdi-cash-refund', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Refund), null, null, null, { ObjectType: EnumDocumentTypes.Refund }),\r\n new MainMenuElement('receipts', '/pages/receipts', 'mdi mdi-receipt-outline', null, isReceiptsAllowedForNonAdmin())\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', '/pages/quotes', 'mdi mdi-text-box-plus-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Quote), null, null, null, { ObjectType: EnumDocumentTypes.Quote }),\r\n new MainMenuElement('my_orders', '/pages/orders', 'mdi mdi-file-document-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Order), null, null, null, { ObjectType: EnumDocumentTypes.Order }),\r\n new MainMenuElement('my_deliverynotes', '/pages/deliverynotes', 'mdi mdi-truck-delivery-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.DeliveryNote), null, null, null, { ObjectType: EnumDocumentTypes.DeliveryNote }),\r\n new MainMenuElement('my_invoices', '/pages/invoices', 'mdi mdi-file-check-outline', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Invoice), null, null, null, { ObjectType: EnumDocumentTypes.Invoice }),\r\n new MainMenuElement('my_returnrequests', '/pages/returnrequests', 'mdi mdi-keyboard-return', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.ReturnRequest), null, null, null, { ObjectType: EnumDocumentTypes.ReturnRequest }),\r\n new MainMenuElement('my_returns', '/pages/returns', 'mdi mdi-clipboard-arrow-left', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Return), null, null, null, { ObjectType: EnumDocumentTypes.Return }),\r\n new MainMenuElement('my_refunds', '/pages/refunds', 'mdi mdi-cash-refund', null, isDocumentAllowedForNonAdmin(EnumDocumentTypes.Refund), null, null, null, { ObjectType: EnumDocumentTypes.Refund }),\r\n new MainMenuElement('my_receipts', '/pages/receipts', 'mdi mdi-receipt-outline', null, isReceiptsAllowedForNonAdmin())\r\n ]),\r\n\r\n new MainMenuElement('admindashboard', '/pages/admin-dashboard', 'mdi mdi-monitor-dashboard', null, isFeatureAllowedAsAdmin, undefined, false),\r\n\r\n new MainMenuElement('termsofuse', '/pages/termsofuse', 'mdi mdi-information', undefined, isTermsOfUseMenuAllowedForNonAdmin),\r\n\r\n\r\n new MainMenuElement('user_management', undefined, 'mdi mdi-account-key', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('admins_list', '/pages/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 new MainMenuElement('promotions_management', undefined, 'mdi mdi-sigma', undefined, isFeatureAllowedAsAdmin, undefined, true, [\r\n new MainMenuElement('promotions', '/pages/promotions', 'mdi mdi-cog'),\r\n new MainMenuElement('giftcards', '/pages/gift-cards', 'mdi mdi-cog')\r\n ]),\r\n\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', '/pages/document-processings', 'mdi mdi-credit-card-settings-outline')\r\n ]),\r\n\r\n ];\r\n\r\n const settingsMenuElement = new MainMenuElement('settings', undefined, 'mdi mdi-cog', undefined, isFeatureAllowedAsAdmin, undefined, true,\r\n [\r\n\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('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('dashboardoptions', '/pages/dashboard-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 ]),\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('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('salespersonoptions', '/pages/sales-person-options', 'mdi mdi-cog'),\r\n new MainMenuElement('depositgroups', '/pages/deposit-groups', 'mdi mdi-cog'),\r\n ])\r\n\r\n ]);\r\n\r\n if (userInfos && !(userInfos[this.ModuleName] as UserInfo)?.FeatureOption?.IsEnableExternalLinks) {\r\n return of([...staticItems, ...[settingsMenuElement]]);\r\n }\r\n\r\n //!!!! TEMP FIX. CHECK InitMenuItems()\r\n if (!userInfos) return of([...staticItems, ...[settingsMenuElement]]);\r\n //\r\n\r\n const allLinks$ = new Subject();\r\n\r\n const externalLinkEndpoint = AppInjector.get(ExternalLinkEndpoint);\r\n externalLinkEndpoint.GetListByCustomerOption()\r\n .subscribe(value => {\r\n if (value.Entities?.length) {\r\n value.Entities.forEach(x => {\r\n const menuItem = new MainMenuElement(x.Name, `/pages/externallink/${x.Name}`, x.Icon, undefined, isExternalLinksFeatureAllowed);\r\n menuItem.text = x['MenuName' + SysGlobals.Language];\r\n staticItems.push(menuItem);\r\n });\r\n }\r\n\r\n allLinks$.next(staticItems);\r\n allLinks$.complete();\r\n });\r\n\r\n return allLinks$.asObservable();\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', '/pages/home', 'mdi mdi-home', null, isFeatureAllowedForNonAdmin('IsEnableHomePage', true, false)),\r\n new MainMenuElement('catalogueN', '/pages/catalogueN', 'mdi mdi-book-open-outline', null, isFeatureAllowedForNonAdmin('IsEnableCatalogue', true, true)),\r\n new MainMenuElement('checkout', '/pages/checkoutmobile', 'mdi mdi-speedometer', null, isFeatureAllowedForNonAdmin('IsEnableCheckout', false, true)),\r\n new MainMenuElement('customers', '/pages/customers', 'mdi mdi-account-multiple', null, isFeatureAllowedForNonAdmin(null, false, true)),\r\n new MainMenuElement('dashboard', '/pages/dashboard', 'mdi mdi-speedometer', null, isFeatureAllowedForNonAdmin('IsEnableDashboard', true, false)),\r\n new MainMenuElement('mydetailsN', '/pages/mydetailsN', 'mdi mdi-cog-outline', null, isFeatureAllowedForNonAdmin('IsEnableMyDetails', true, false)),\r\n new MainMenuElement('admindashboard', '/pages/admin-dashboard', 'mdi mdi-monitor-dashboard', null, isFeatureAllowedAsAdmin(), undefined, false),\r\n new MainMenuElement('impersonate', '/pages/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 '/pages/admin-dashboard';\r\n\r\n if (!isUserSalesPerson && featureOption.IsEnableHomePage)\r\n return '/pages/home';\r\n\r\n if (featureOption.IsEnableCatalogue) return '/pages/catalogueN';\r\n return '/pages/mydetailsN';\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\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\r\n if (dinoUserInfo && !(dinoUserInfo).TermsAccepted) {\r\n const termsAcceptedSubject = new Subject();\r\n const termsAccepted$ = termsAcceptedSubject.asObservable();\r\n\r\n const dialogService = AppInjector.get(DialogService);\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n const screenService = AppInjector.get(ScreenService);\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() ? 'termsofuse-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 //console.log('OnLogoutApplicationAsync');\r\n //\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 } 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\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 ) { }\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 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 OnTitleClick: () => void;\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}","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/systemoptions.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, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseState, HistoryChangesSet, BaseEntitiesResponse } 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, ContentChildren, QueryList, SimpleChanges, 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 //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([`/pages/${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, Input, ViewChild } 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, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseEntityResponse, BaseState, HistoryChangesSet } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\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\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 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 { GeneralEndpoint } from \"@core/endpoints/general.endpoint\";\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\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 GeneralEndpoint: GeneralEndpoint,\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 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}/${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 } from \"../entities/BaseEntities\";\r\nimport { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DataLoadOptions } from \"../datalayer/DataLoadOptions\";\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\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\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\nexport class SessionEntity extends BaseEntity {\r\n CheckResult: EnumCheckCredentialsResult\r\n CheckResultMessage: string\r\n SessionID: string\r\n CredentialID: number\r\n DisplayUserName: string\r\n DisplayUserDescription: string\r\n UserInfo: any;\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 Password: string;\r\n public NewPassword: string;\r\n public TaxNumber: 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}\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 Notification extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\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 FailureDescription: string;\r\n public RelatedObjectType: string;\r\n public RelatedObjectID: number;\r\n public ReadDate: Date;\r\n public IsRead: boolean;\r\n public TargetCredentialID: number;\r\n public IsAutomatic: boolean;\r\n public PopupShowStatus: EnumPopupShowStatuses;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public NotificationTemplateName: string;\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}\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 PushMessageBody: string;\r\n public NotificationServerID: number;\r\n public IsUserCustomTemplate: boolean;\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 CredentialAdditionalInfoMetadata 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}\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","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\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 // 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 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","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}","import { Observable, of } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DefaultRouteParams, InjectableComponentOptions, LoginExtensionLink, MainMenuElement } 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}","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\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 deploymentApplicationFolder: 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 }];\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._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 if (!AppConfigService._m4uConfig) AppConfigService._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\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) this._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\r\n\r\n return this._m4uConfig;\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 } 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}","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, ItemPriceInfo } 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 GeneralEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"General\", api);\r\n }\r\n\r\n public CalculateConversionRate(SourceCurrency: string, DestCurrency: string, Date: Date): Observable>\r\n {\r\n //Shortcut\r\n if (SourceCurrency == DestCurrency)\r\n {\r\n var x = new BaseDataResponse();\r\n x.IsSuccess = true;\r\n x.Data = 1;\r\n return of(x);\r\n }\r\n\r\n //Execute\r\n return this.api.ExecuteGetAction(this.ControllerName, 'CalculateConversionRate', { SourceCurrency: SourceCurrency, DestCurrency: DestCurrency, Date: Date });\r\n }\r\n\r\n GetItemPrice(ItemCode: string, CardCode: string, Date: Date, Quantity: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetItemPrice', { ItemCode: ItemCode, CardCode: CardCode, Date: Date, Quantity: Quantity });\r\n }\r\n\r\n GetItemPriceEx(ItemID: number, CustomerID: number, Date: Date, Quantity: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetItemPriceEx', { ItemID: ItemID, CustomerID: CustomerID, Date: Date, Quantity: Quantity });\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, SessionEntity, 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 GetCredentials(CredentialID: number, Type: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetCredentials', { CredentialID: CredentialID, Type: Type });\r\n }\r\n\r\n public GetExternalInfo(CredentialID: number, Type: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetExternalInfo', { CredentialID: CredentialID, Type: Type });\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 SaveSessionCredentials(CredentialID: number, UserName: string, Password: string, Type: number, MFAMethod: EnumMFAMethods): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'SaveCredentials', { CredentialID: CredentialID, UserName: UserName, Password: Password, Type: Type, MFAMethod: MFAMethod });\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 { BaseDataResponse, NotificationTemplate } 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}","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 { 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(\"System\", \"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(\"System\", \"SystemOptions\", { ModuleName: ModuleName });\r\n }\r\n public StoreMID(mid: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(\"System\", \"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(\"System\", \"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 { 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\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 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 = 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\n\r\nexport function SetGridDefaults() {\r\n const Detector = AppInjector.get(DeviceDetectorService);\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 localStorage.setItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorage.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\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 = 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 localStorage.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 { 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 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 ];","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","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 './systemoptions.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 { 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\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 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 = localStorage.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 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 }\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 { 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 url = url.replace(new RegExp('(\\\\?(._)?' + key + '=[^&]+&?)|(&(._)?' + key + '=[^&]+)', 'g'), '');\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, SessionEntity } 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\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 ) { }\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 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 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);\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 return this.activatedRoute.snapshot.url[0]?.path;\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 let sLocation: string = `${window.location.pathname}${window.location.search}`;\r\n const baseUrl = this.appConfigService.M4UConfig.deploymentApplicationFolder;\r\n if (baseUrl) sLocation = sLocation.toLowerCase().replace(baseUrl.toLowerCase(), '');\r\n return 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\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) {\r\n window.open(sURL, '_blank');\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 EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\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_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 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 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 },\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\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 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 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 ],\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 },\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 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 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 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\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 lblCCAddress: \"Copy to\",\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 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 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 lblNotAssigned: \"- Unassigned -\"\r\n }\r\n};\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\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_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 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 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 },\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\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 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 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 ],\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 },\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 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 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 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\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 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 titleNotificationServerList: \"שרת התראות\",\r\n titleNotificationTemplateList: \"תבנית התראות\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"בחר אפשרות\",\r\n titleWebAPIAllowedIPs: \"$$$Allowed IPs\",\r\n lblIpAddress: \"כתובת IP\",\r\n lblLoginDate: \"תאריך חיבור\",\r\n lblPrint: \"הדפסה\",\r\n lblDateFrom: 'מתאריך',\r\n lblDateTo: 'עד תאריך',\r\n msgCouldNotStartVideoError: 'מצלמה אינה זמינה',\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 }\r\n};\r\n\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 { 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\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 }\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 const { Properties, ...entities } = entitiesResources[0];\r\n const modifiedEntityResources: any = { ...entitiesResources[0] };\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\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\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 { SessionEntity } 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 './systemoptions.enum';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { NotificationService } from './notification.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: SessionEntity;\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 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: SessionEntity,\r\n afterInitFn?: () => void,\r\n afterLogoutFn?: () => void) {\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 this.ClearSessionCredentials();\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) {\r\n this.SetSession(undefined, null, afterFn);\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) {\r\n localStorage.setItem(\"SessionID\", sessionID);\r\n }\r\n\r\n // obsolete ??\r\n ClearSessionCredentials() {\r\n localStorage.removeItem(\"SessionID\");\r\n }\r\n \r\n GetSessionID() {\r\n return localStorage.getItem(\"SessionID\");\r\n }\r\n\r\n //Mark session as logged out \r\n // obsolete\r\n // LogoutException() {\r\n // //this.ClearSessionData();\r\n // this.SetSession(null);\r\n // }\r\n\r\n //Mark session as logged out, and reset the saved session\r\n // obsolete\r\n // LogoutAndResetSession() {\r\n // this.ClearSessionCredentials();\r\n // this.ClearSessionData();\r\n // }\r\n\r\n //Clear all session data\r\n // obsolete\r\n // ClearSessionData() {\r\n // this.SetSession(undefined);\r\n // this.SetDataSources(undefined);\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 //\r\n // TODO: END SESSION\r\n // IT should be full cleanup of session states (pre/post action, api calls, etc.)\r\n this.ClearSessionCredentials();\r\n //\r\n this.sessionStateChangedSubject.next(SessionStates.Expired);\r\n }\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}\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 Print = \"Print\",\r\n ExportToPDF = \"ExportToPDF\",\r\n WhatsApp = \"WhatsApp\",\r\n DontSend = \"DontSend\"\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}\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}\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 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\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 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\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","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 './systemoptions.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}","\r\nexport enum EnumSystemOptions \r\n{\r\n IsSupportedPasswordChange = \"IsSupportedPasswordChange\",\r\n IsSupportedPasswordRecovery = \"IsSupportedPasswordRecovery\",\r\n IsSupportedLoginByOTP = \"IsSupportedLoginByOTP\",\r\n IsSupportedLoginByPassword = 'IsSupportedLoginByPassword',\r\n IsRequireTaxNumberForOTP = 'IsRequireTaxNumberForOTP',\r\n ShowExpiredTimeoutAlert = 'ShowExpiredTimeoutAlert',\r\n ShowAlmostExpiredTimeoutAlert = 'ShowAlmostExpiredTimeoutAlert',\r\n SessionTimeout = 'SessionTimeout',\r\n PasswordComplexityLen = \"PasswordComplexityLen\",\r\n PasswordComplexityMinChars = \"PasswordComplexityMinChars\",\r\n PasswordComplexityMinDigits = \"PasswordComplexityMinDigits\",\r\n VatValue = \"VatValue\",\r\n IsSupportNotificationMethodEmail = 'IsSupportNotificationMethodEmail',\r\n IsSupportNotificationMethodSMS = 'IsSupportNotificationMethodSMS',\r\n IsSupportNotificationMethodWhatsApp = 'IsSupportNotificationMethodWhatsApp'\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 let 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 var 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 var value = params[key];\r\n if (value instanceof Object && !(value instanceof Array)) {\r\n Object.keys(value).forEach(childKey => {\r\n var 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 var 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 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\r\n //Return the base URL for the API\r\n public GetAPIURL(): string {\r\n if (this.appConfigService.M4UConfig.standaloneApplicationApiUrl) {\r\n return this.appConfigService.M4UConfig.standaloneApplicationApiUrl;\r\n }\r\n\r\n //Debug overrides\r\n //Use port 4444 for development for HTTP, 44333 for HTTPS\r\n const port: string = location.port == \"4200\" || location.port == \"4201\"\r\n ? (location.protocol == \"http:\" ? \"4444\" : \"44333\")\r\n : location.port;\r\n\r\n const formattedPort = port && `:${port}` || '';\r\n const baseUrl = this.appConfigService.M4UConfig.deploymentApplicationFolder;\r\n const formattedBaseUrl = baseUrl && `${baseUrl.replace('/', '')}/` || '';\r\n\r\n //Combine\r\n return `${location.protocol}//${location.hostname}${formattedPort}/${formattedBaseUrl}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 if (SysGlobals.Language == EnumLanguages.English) 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 { Subject } 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 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, 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 = 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 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-jpg-box';\r\n case '.gif':\r\n return 'mdi mdi-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","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: false },\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/systemoptions.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}\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 //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.UI.StopMessage(this.RC('msgCouldNotStartVideoError'));\r\n });\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 const photo = this.AddPhoto(event.target.result);\r\n this.MediaItems.push(photo);\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
{{'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 \\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\\r\\n \\r\\n
\\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 } from \"html5-qrcode/esm/core\";\r\nimport { DxPopupComponent } from 'devextreme-angular';\r\nimport { TemplateRef } from '@angular/core';\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 @Input() Config: Html5QrcodeCameraScanConfig = { fps: 10, qrbox: { width: 250, height: 250 } };\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 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.State.CurrentDeviceIndex = this.State.DeviceIDs.length - 1;\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.State.DeviceIDs[this.State.CurrentDeviceIndex] },\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.State.DeviceIDs[this.State.CurrentDeviceIndex] },\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.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}","export default \"\\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 = \"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 var sReturn: string = result[propName];\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 date = formatDate(value, this.framework.CompanyInfo.DateFormatLong);\r\n const time = formatDate(value, 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): 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, this.framework.CompanyInfo.NumberSum);\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 } 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","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\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 Navigator: NavigatorService) {\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 = localStorage.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 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']); })\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 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, 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 { BottomSheetProvider } from 'swipe-bottom-sheet/angular';\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 return Object.keys(this.screen.Sizes).filter(cl => this.screen.Sizes[cl]).join(' ');\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: boolean = false;\r\n isLoading: boolean = 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 activatedRoute: ActivatedRoute,\r\n private bottomSheetService: BottomSheetService) {\r\n //bottomSheet: BottomSheetProvider,\r\n // vcRef: ViewContainerRef) {\r\n //bottomSheet.rootVcRef = vcRef;\r\n \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.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 { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysGlobals } from './sysglobals';\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\r\n SetLanguage(language: string) {\r\n if (language == undefined) return;\r\n\r\n if (SysGlobals.Language !== language) {\r\n SysGlobals.Language = language; // TODO: REMOVE THAT\r\n localStorage.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}","import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement, MainMenuElement } from '@base/classes/BaseClasses';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.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 { 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\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 super(A, 'NavMenuComponent', State);\r\n }\r\n\r\n OnOpenContactUs;\r\n\r\n override OnInitComponent() {\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 const langs = this.resourcesService.LIST('Languages').filter(item => item.Value !== SysGlobals.Language).map(item => ({\r\n label: item.Text,\r\n visible: true,\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 {{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 } 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}\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\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;\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 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 // 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 }\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 { EnumLanguages, EnumLoginExtensionLinkType, EnumLoginSecureKeyTypes, \r\n EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.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\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}\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 private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\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 //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) \r\n && this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP)) {\r\n this.Navigate(['/system/login-otp'], { Language: SysGlobals.Language });\r\n return;\r\n }\r\n\r\n this.State.Stage = 1;\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.Password;\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.QueryParams.ReturnUrl\r\n && (this.QueryParams.ReturnUrl as string).replace(this.A.AppConfigService.M4UConfig.deploymentApplicationFolder, '');\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 == EnumLanguages.English ? EnumLanguages.English : EnumLanguages.Hebrew);\r\n } else {\r\n const language = localStorage.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.Entity.UserName = this.QueryParams.UserName;\r\n this.LoadExtension();\r\n }\r\n\r\n //Perform the login\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.loginService.DoLogin(this.Entity, false, this.State.IsSaveCredentials, () => {\r\n this.OnAfterInit(); \r\n }, null, (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.Entity.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.Entity.SecureKey = null;\r\n this.Entity.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 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 {{'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\";","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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 } 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, Input } 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\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","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 } 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\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(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 }\r\n\r\n OnNavigateCard(e) {\r\n this.Navigate(['/pages/general/notificationview', e.EntryID]);\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 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 default:\r\n return false;\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
{{'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
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } 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 } 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\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, BaseState, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\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/systemoptions.enum';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { EnumCheckCredentialsResult, EnumLoginSecureKeyTypes } from '@m4u-angular/core/framework/sysenums.enum';\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, 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 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\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.Password = this.State.OldPassword;\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 { 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, () => this.State.Stage = 3);\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/systemoptions.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.GetCredentials(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 }\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 @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\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 if (file.NewFile) {\r\n const idx = this.State.Files.findIndex(f => f.Name === file.Name && !!f.NewFile);\r\n if (idx !== -1) {\r\n this.State.Files.splice(idx, 1);\r\n this.FilesChanged.emit(this.State.Files);\r\n }\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 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 = 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\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 + (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 } 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/systemoptions.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 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.QueryParams.ReturnUrl\r\n && (this.QueryParams.ReturnUrl as string).replace(this.A.AppConfigService.M4UConfig.deploymentApplicationFolder, '');\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 == EnumLanguages.English ? EnumLanguages.English : EnumLanguages.Hebrew);\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: BaseResponse) => {\r\n if (response.IsSuccess) {\r\n this.UI.InfoMessage(this.RC('msgNotificationSent'));\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 { 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 { 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.GetList(options));\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 { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntitiesResponse, BaseState, NotificationServer, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationServerEndpoint } from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DxTextAreaComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { NotificationPreviewDialogComponent } from '../notification-preview-dialog/notification-preview-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nexport class State extends BaseState {\r\n NotificationServers: NotificationServer[] = [];\r\n\r\n IsUserCustomTemplateOriginal: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template',\r\n templateUrl: './notification-template.component.html',\r\n styleUrls: ['./notification-template.component.scss']\r\n})\r\nexport class NotificationTemplateComponent extends BasePageCRUDComponent {\r\n\r\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n @ViewChild('htmlBody') htmlBody: DxTextAreaComponent;\r\n @ViewChild('phone') phone: DxTextBoxComponent;\r\n\r\n get SelectedNotificationServer() {\r\n return this.State.NotificationServers && this.Entity.NotificationServerID && this.Entity.NotificationServerID === -999 \r\n ? this.State.NotificationServers.find(n => n.EntryID !== -999) \r\n : this.State.NotificationServers.find(n => n.EntryID === this.Entity.NotificationServerID);\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\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*$))*$/;\r\n infoUPhonePattern: any = /^[a-zA-Z0-9\\s]*$/;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: NotificationTemplateEndpoint,\r\n private notificationServerEndpoint: NotificationServerEndpoint) {\r\n super(A, 'NotificationTemplateComponent', NotificationTemplate, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.LoadNotificationServers();\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\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 protected override OnEntityLoaded(): void {\r\n this.State.IsUserCustomTemplateOriginal = this.Entity.IsUserCustomTemplate;\r\n }\r\n\r\n private LoadNotificationServers() {\r\n this.Do(this.notificationServerEndpoint.GetList(), false, (response: BaseEntitiesResponse) => {\r\n if (response.Entities.length === 1) {\r\n const defaultNotificationServer = {\r\n EntryID: -999, \r\n SMTPServer: this.RC('lblUseDefault')\r\n } as any;\r\n this.State.NotificationServers = [defaultNotificationServer, ...response.Entities];\r\n if (!this.Entity.NotificationServerID) this.Entity.NotificationServerID = -999;\r\n } else this.State.NotificationServers = response.Entities;\r\n });\r\n }\r\n\r\n OnShowInEditor() {\r\n this.htmlEditorDialog.Language = this.Entity.Language;\r\n this.htmlEditorDialog.HTMLBody = this.Entity.HTMLBody;\r\n this.htmlEditorDialog.ShowDialogShort((state: any) => {\r\n this.Entity.HTMLBody = state.HTMLBody;\r\n });\r\n }\r\n\r\n OnShowPreview() {\r\n this.previewDialog.HTMLBody = this.Entity.HTMLBody;\r\n this.previewDialog.ShowDialogShort(() => {});\r\n }\r\n\r\n override OnDelete(): void {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgDeleteNotificationTemplateQuestion');\r\n this.messageBox.ShowDialogShort(() => {\r\n this.DeleteEntity(); \r\n });\r\n }\r\n\r\n OnEmailSectionToggle(isOpened: boolean) {\r\n if (isOpened) setTimeout(() => this.htmlBody && this.htmlBody.instance.repaint());\r\n }\r\n\r\n OnPhoneSectionToggle(isOpened: boolean) {\r\n if (isOpened) setTimeout(() => this.phone && this.phone.instance.repaint());\r\n }\r\n\r\n OnChangeIsUserCustomTemplate() {\r\n const template = Utils.CloneObject(this.Entity);\r\n template.IsUserCustomTemplate = this.Entity.IsUserCustomTemplate ? false : true;\r\n this.Do(this.Endpoint.UpdateIsUserCustomTemplate(template), true, (response) => {\r\n this.Entity.IsUserCustomTemplate = response.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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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.Language === EnumLanguages.Hebrew ? 'html-editor-he' : 'html-editor-en';\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, Input } 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\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","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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 } 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\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","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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, CredentialAdditionalInfoMetadata,\r\n BaseDataResponse, CredentialExternalInfo, CreateCredentialsParams, SystemCredentialParams\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}","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, CredentialAdditionalInfoMetadata, 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\r\n @Input() CredentialTypes: CredentialType[];\r\n @Input() AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\r\n @Output() OnSelectionChanged = 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 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 (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","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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, CredentialAdditionalInfoMetadata,\r\n CredentialExternalInfo, CredentialType, SystemCredentialParams, SystemCredentialInfo\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 { 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: CredentialAdditionalInfoMetadata;\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}\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 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\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = 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() {\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.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 return this.systemCredentialEndpoint.ListSystemCredentials(request, options);\r\n }, undefined, undefined, false);\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}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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, CredentialAdditionalInfoMetadata,\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\n\r\nexport class State extends BaseState {\r\n AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\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\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 };\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 { Observable } from 'rxjs';\r\nimport {\r\n BaseDataResponse,\r\n BaseEntityResponse, RemoteRequest,\r\n RemoteRequestListParams\r\n} 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 RemoteRequestEndpoint extends BaseEndpointCRUD{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('RemoteRequest', api);\r\n }\r\n\r\n public ListEx(Params: RemoteRequestListParams, 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 GetPossibleMethods(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleMethods');\r\n }\r\n\r\n public GetPossibleStatuses(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleStatuses');\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, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-remote-request-history-grid',\r\n templateUrl: './remote-request-history-grid.component.html'\r\n})\r\nexport class RemoteRequestHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'RemoteRequestHistoryGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnRowClick(e) {\r\n if (e.data.EntryID) {\r\n this.Navigate(['/pages/general/remote-request', e.data.EntryID]);\r\n }\r\n }\r\n\r\n GetStatusColor(isSuccess: boolean) {\r\n return isSuccess ? 'green-cyan' : 'cinnabar';\r\n }\r\n}","export default \"\\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 { BaseEntity, BaseState, RemoteRequestListParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { RemoteRequestEndpoint } from '@m4u-angular/core/endpoints/remote-request.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RemoteRequestHistoryGridComponent } from './grid/remote-request-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n Controllers: string[] | null;\r\n Actions: string[] | null;\r\n Methods: string[] | null;\r\n Statuses: number[] | null;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n ControllerList: string[];\r\n ActionsList: string[];\r\n MethodsList: string[];\r\n StatusesList: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-remote-request-history-list',\r\n templateUrl: './remote-request-history-list.component.html'\r\n})\r\n\r\nexport class RemoteRequestHistoryListComponent extends BasePageComponent{\r\n constructor(A: ServiceBagService, private remoteRequestEndpoint: RemoteRequestEndpoint) {\r\n super(A, 'RemoteRequestHistoryListComponent', BaseEntity, State);\r\n }\r\n @ViewChild(RemoteRequestHistoryGridComponent) grid: RemoteRequestHistoryGridComponent;\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n this.InitControllers();\r\n this.InitActions();\r\n this.InitMethods();\r\n this.InitStatuses();\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new RemoteRequestListParams();\r\n params.Controllers = this.State.Controllers;\r\n params.Actions = this.State.Actions;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.Methods = this.State.Methods;\r\n params.Statuses = this.State.Statuses;\r\n\r\n this.DataSources['Requests'] = new DataSourceCustomAction(\r\n (options) => this.remoteRequestEndpoint.ListEx(params, options)\r\n , undefined, undefined, false);\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.Controllers = null;\r\n this.State.Actions = null;\r\n this.State.DateFrom = null;\r\n this.State.DateTo = null;\r\n this.State.Statuses = null;\r\n this.State.Methods = null;\r\n this.LoadDataSource();\r\n }\r\n\r\n private InitControllers() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleControllers(), false, (response) => {\r\n this.State.ControllerList = response.Data;\r\n });\r\n }\r\n\r\n private InitActions() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleActions(), false, (response) => {\r\n this.State.ActionsList = response.Data;\r\n });\r\n }\r\n\r\n private InitMethods() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleMethods(), false, (response) => {\r\n this.State.MethodsList = response.Data;\r\n });\r\n }\r\n\r\n private InitStatuses() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleStatuses(), false, (response) => {\r\n this.State.StatusesList = response.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 \\r\\n \\r\\n \\r\\n \\r\\n \\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, RemoteRequest } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { RemoteRequestEndpoint } from '@m4u-angular/core/endpoints/remote-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-remote-request-history',\r\n templateUrl: './remote-request-history.component.html',\r\n styleUrls: ['./remote-request-history.component.scss']\r\n})\r\nexport class RemoteRequestHistoryComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, remoteRequestEndpoint: RemoteRequestEndpoint) {\r\n super(A, 'RemoteRequestHistoryComponent', RemoteRequest, State, remoteRequestEndpoint, 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 try {\r\n const json = JSON.parse(this.Entity.Body);\r\n this.State.Body = JSON.stringify(json, undefined, 4);\r\n } catch (error) {\r\n this.State.Body = this.Entity.Body;\r\n }\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('?')) {\r\n this.State.QueryString = this.State.QueryString.substring(1);\r\n }\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
\";","import { 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 { 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 }\r\n 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 }\r\n 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 { RemoteRequestHistoryListComponent } from '@ui/components/general/remote-request-history/remote-request-history-list.component';\r\nimport { RemoteRequestHistoryComponent } from '@ui/components/general/remote-request-history/remote-request-history.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-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([{ path: 'passwordmanage', component: PasswordManageComponent, canActivate: [LoginGuard], outlet: 'window' }]),\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: '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 {\r\n path: 'remote-requests-history', component: RemoteRequestHistoryListComponent,\r\n data: { Menu: 'remote_request_history' }, canActivate: [LoginGuard]\r\n },\r\n { \r\n path: 'remote-request/:EntryID', component: RemoteRequestHistoryComponent, \r\n canActivate: [LoginGuard], outlet: 'window' \r\n }\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","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 { AfterViewInit, 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, AfterViewInit, 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(this.languageService.Language$.subscribe(language => !this.Language && (this.Language = language)));\r\n this.ModulesVersion = this.appConfigService.getModulesVersion();\r\n\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 if (e && e.stopPropagation) e.stopPropagation();\r\n this.IsScreenModeVisible = !this.IsScreenModeVisible;\r\n }\r\n\r\n ngAfterViewInit() {\r\n // this is for correct elements direction change on language switch\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 === EnumLanguages.English ? 'en.svg' : 'he.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
\\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 @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}`;\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, Input } 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\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\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.event);\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/systemoptions.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/logout']);\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\";","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, 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 } 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\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-email-history-item',\r\n templateUrl: './email-history-item.component.html',\r\n styleUrls: ['./email-history-item.component.scss']\r\n})\r\nexport class EmailHistoryItemComponent extends BaseComponent {\r\n\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'EmailHistoryItemComponent', 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 \\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';\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-email-history-grid',\r\n templateUrl: './email-history-grid.component.html',\r\n styleUrls: ['./email-history-grid.component.scss']\r\n})\r\nexport class EmailHistoryGridComponent extends NotificationGridComponent {\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'EmailHistoryGridComponent');\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\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\";","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\";","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 }\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\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 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 this.sidebarService.Show('Filters', this.RC('lblFilters'), this.FilterTemplateRef,\r\n this.State.ToolbarSettings.FilterPanelWidth, null, null, 'filters-sidebar');\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 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\";","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, 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\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) {\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 SysGlobals.Language == EnumLanguages.Hebrew ? \"he\" : \"en-US\";\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 if (!this.instance || !this.instance.iframe) return;\r\n\r\n const iframeDocument = this.instance.iframe.nativeElement.contentDocument;\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
{{ 'msgLoadingPDF' | RC }}
\\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 } 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\r\n private _onClickObserved: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceComponent', BaseState);\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
{{Title}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\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, CredentialAdditionalInfoMetadata, 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: CredentialAdditionalInfoMetadata;\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 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 \\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, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialAdditionalInfoMetadata, 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 { 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 } 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 { GeneralEndpoint } from '@core/endpoints/general.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 { 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 { 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 { 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 { NotificationConfigurationBaseService } from '@core/framework/notification-configuration-base.service';\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 { 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 { RemoteRequestEndpoint } from '@core/endpoints/remote-request.endpoint';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { RemoteRequestHistoryListComponent } from '@ui/components/general/remote-request-history/remote-request-history-list.component';\r\nimport { RemoteRequestHistoryComponent } from '@ui/components/general/remote-request-history/remote-request-history.component';\r\nimport { RemoteRequestHistoryGridComponent }\r\n from '@ui/components/general/remote-request-history/grid/remote-request-history-grid.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\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\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 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\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 ];\r\n//System components - no need to re-export\r\nexport const SystemComponents: any =\r\n [\r\n LoginBaseComponent,\r\n LoginComponent,\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 CredentialsActivityStatusComponent,\r\n CredentialActivityStatusGridComponent,\r\n NotificationsHistoryComponent,\r\n NotificationViewComponent,\r\n NotificationGridComponent,\r\n EmailHistoryGridComponent,\r\n SmsHistoryGridComponent,\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 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 RemoteRequestHistoryComponent,\r\n RemoteRequestHistoryListComponent,\r\n RemoteRequestHistoryGridComponent,\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 ];\r\n\r\nconst SystemEndpoints: any =\r\n [\r\n LoginEndpoint,\r\n GeneralEndpoint,\r\n GenericListEndpoint,\r\n SystemEndpoint,\r\n NotificationEndpoint,\r\n NotificationServerEndpoint,\r\n NotificationTemplateEndpoint,\r\n PushMessageEndpoint,\r\n CredentialActivityEndpoint,\r\n WebAPICredentialEndpoint,\r\n WebAPIRequestEndpoint,\r\n HistoryEndpoint,\r\n DataEditorEndpoint,\r\n SystemCredentialsEndpoint,\r\n RemoteRequestEndpoint,\r\n SystemOptionsEndpoint\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 RouteHistoryService,\r\n EntityService,\r\n TransferState,\r\n ContextMenuService,\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.deploymentApplicationFolder },\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 \\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 {{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
\";","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\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
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\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\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 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 // 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","var map = {\n\t\"./dino/_app.config\": 41985\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.60d83c4692f832148738.js"}